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は高機能なので、もっと色々なことができるので、別の記事で紹介させていただきたいと思います。くれぐれも、自分の管理外のネットワーク/サーバに対してポートスキャンをかけないように気を付けて試してみてください。
参考: