TSUBOCK★LABO-ツボックラボ-

とあるセキュリティエンジニアの技術メモブログ

MENU

OSSネットワークスキャンツールの定番「Nmap」を簡単に触ってみる

OSSネットワークスキャンツールで有名なNmapについて調べたので覚書。

はじめに

Nmapによるスキャンによって帯域に負荷をかけてしまいます。くれぐれも実際のサービスや自分の管理外のサーバに対してスキャンを行わないでください。Nmapを使用する際には自分の管理するネットワークに対して自己責任で使用することとし、他のネットワークをスキャンしないようにしましょう!

Nmapとは

Nmapはネットワークスキャン(ポートスキャン)を行うことができるツールで、セキュリティ調査のツールとして使われる一方、ハッキングのためのツールとしても使われています。機能が豊富な高性能なスキャナとして

どんなことができる?

Nmapはポートスキャン機能が高機能でOSやバージョン情報を取得することができます。また、TCP/UDP/ICMP/SCTPなど色々なプロトコルでスキャンを実行することができます。ということで実際に試してみましょう。

インストール

NmapはUbuntu環境の場合、aptパッケージでインストールすることができます。

$ sudo apt install nmap

install確認としてバージョンを確認してみましょう。

$ nmap -v

Starting Nmap 7.60 ( https://nmap.org ) at 2020-08-02 10:20 JST
Read data files from: /usr/bin/../share/nmap
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.06 seconds

執筆時点(2020/8/2)でのnmapのバージョンは7.60でした。

実際に試してみる

基本的な使い方としてはnmapコマンドの引数にスキャン対象のIPを指定して実行します。

$ nmap 対象ホスト(ホスト名orIPアドレス)

自身にたいしてnmapを使用してみたいと思います。

$ nmap 127.0.0.1

Starting Nmap 7.60 ( https://nmap.org ) at 2020-08-02 12:48 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000091s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3389/tcp open  ms-wbt-server
5432/tcp open  postgresql

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

このようにスキャンかけたサーバのPORTと状態(STATE)とそのPORTで使用されているサービスについて確認することができます。

今回の場合は

  • 22/tcp open ssh
  • 80/tcp open http
  • 3389/tcp open ms-wbt-server
  • 5432/tcp open postgresql

この4つのサービスが空いていることがわかります。nmapではオプションを使用することで色々なことができます。

OSの情報を取得する

ポート情報だけでなく、OSの情報を取得したい場合は-Oオプションを使用するとOSの種類のみ取得することができます。

$ nmap -O 対象ホスト(ホスト名orIPアドレス)

実際に自身対して実行してみます。

$ nmap -O 127.0.0.1

Starting Nmap 7.60 ( https://nmap.org ) at 2020-08-02 12:55 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000070s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3389/tcp open  ms-wbt-server
5432/tcp open  postgresql
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 3.96 seconds

上記L12~L18に、OSの情報が表示されました。

Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .

このようにカーネルの情報を取得することができます。

各ポートサービスの詳細情報を収集する

ポートスキャン結果をさらに詳細化したい場合は-Aオプションを使用します。-Aオプションを使用することでポートスキャンで確認できたサービスのバージョン情報なども取得することができます。

$ nmap -A 対象ホスト(ホスト名orIPアドレス)

実際に自身対して実行してみます。

$ nmap -A 127.0.0.1

Starting Nmap 7.60 ( https://nmap.org ) at 2020-08-02 12:59 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000094s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE       VERSION
22/tcp   open  ssh           OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http          nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: Welcome to nginx!
3389/tcp open  ms-wbt-server xrdp
5432/tcp open  postgresql    PostgreSQL DB 9.6.0 or later
| fingerprint-strings:
|   SMBProgNeg:
|     SFATAL
|     VFATAL
|     C0A000
|     Munsupported frontend protocol 65363.19778: server supports 2.0 to 3.0
|     Fpostmaster.c
|     L2071
|_    RProcessStartupPacket
| ssl-cert: Subject: commonName=20014616-0.localdomain
| Subject Alternative Name: DNS:20014616-0.localdomain
| Not valid before: 2020-06-20T11:32:39
|_Not valid after:  2030-06-18T11:32:39
|_ssl-date: TLS randomness does not represent time
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port5432-TCP:V=7.60%I=7%D=8/2%Time=5F263A1C%P=x86_64-pc-linux-gnu%r(SMB
SF:ProgNeg,8C,"E\0\0\0\x8bSFATAL\0VFATAL\0C0A000\0Munsupported\x20frontend
SF:\x20protocol\x2065363\.19778:\x20server\x20supports\x202\.0\x20to\x203\
SF:.0\0Fpostmaster\.c\0L2071\0RProcessStartupPacket\0\0");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 66.90 seconds

先ほどまで取得できていた情報より段違いで詳細な情報を取得することができています。SSHはOpenSSHの7.6p1を使用していることがわかりますし、httpはnginx 1.14.0を使用しているということがわかります。

このようにポートの状態だけでなく、どんなサービスが立ち上がっているか、バージョンはいくつかということがわかるので、脆弱性のあるバージョンを使っているかが攻撃者にもわかってしまうため、利用者は脆弱性が対策されたバージョンにバージョンアップしないといけないということがわかります。

今回はnmapでの簡単なスキャン方法を紹介しました。nmapは高機能なので、もっと色々なことができるので、別の記事で紹介させていただきたいと思います。くれぐれも、自分の管理外のネットワーク/サーバに対してポートスキャンをかけないように気を付けて試してみてください。

参考:

Nmap リファレンスガイド (Man Page)