Nmap とは
Nmap(Network Mapper) は、ネットワーク探索とセキュリティ監査のためのオープンソースツールです。1997年の登場以来、ネットワーク管理者・セキュリティ専門家の標準ツールとして使用されています。
主な用途:
- ネットワーク上のホスト探索
- オープンポートの確認とフィルタリング状況の把握
- 動作しているサービスのバージョン特定
- OS情報の推測
- NSEスクリプトによる脆弱性の事前調査
このレッスンで紹介するコマンドは、前のレッスンで構築した隔離された演習環境(Metasploitable 2)のみで実行してください。許可なく他のシステムをスキャンすることは不正アクセス禁止法に違反します。スキャン先は必ず 192.168.56.101(Metasploitable 2)であることを確認してください。
フェーズ1: ホスト探索
まず、ネットワーク上に存在するホストを確認します。
Ping スキャン(-sn)
単一ホストの生存確認
nmap -sn 192.168.56.101
出力例:
Starting Nmap 7.94 ( https://nmap.org ) at 2026-03-19 10:00 JST
Nmap scan report for 192.168.56.101
Host is up (0.00042s latency).
MAC Address: 08:00:27:A1:B2:C3 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
サブネット全体のホスト探索(全256アドレスを確認)
nmap -sn 192.168.56.0/24
出力例:
Nmap scan report for 192.168.56.1
Host is up (0.00012s latency).
Nmap scan report for 192.168.56.101
Host is up (0.00035s latency).
Nmap scan report for 192.168.56.102
Host is up (0.00021s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.41 seconds
nmap -sn 192.168.56.0/24 の結果でMACアドレスに「VirtualBox」と表示されているホストが Metasploitable 2 です。以降の例では 192.168.56.101 を使用します。
フェーズ2: ポートスキャン
デフォルトスキャン(上位1000ポート)
デフォルトスキャン(最もよく開いているポート1000個)
nmap 192.168.56.101
出力例:
Starting Nmap 7.94 at 2026-03-19 10:05 JST
Nmap scan report for 192.168.56.101
Host is up (0.00038s latency).
Not shown: 977 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 1.23 seconds
全ポートスキャン(65535ポート)
全65535ポートをスキャン(時間がかかる)
nmap -p- 192.168.56.101
または —min-rate で高速化
nmap -p- —min-rate 5000 192.168.56.101
特定のポートのみ指定
nmap -p 21,22,80,3306,5432 192.168.56.101
スキャン技法の比較
| フラグ | スキャン種類 | 特徴 |
|---|---|---|
-sS | SYN スキャン(ステルス) | 最速・最一般的。TCPハンドシェイクを完了しない。要root |
-sT | TCP Connect スキャン | 完全な接続を確立。ログに残りやすい |
-sU | UDP スキャン | UDPサービス検出。低速 |
-sA | ACK スキャン | ファイアウォールルールのマッピング |
SYNスキャン(要root権限)
sudo nmap -sS 192.168.56.101
出力例(デフォルトスキャンとほぼ同じだが速い):
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
…(省略)
フェーズ3: サービス・バージョン・OS 検出
サービスバージョン検出(-sV)
サービスバージョン検出
nmap -sV 192.168.56.101
出力例(重要部分):
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
53/tcp open domain ISC BIND 9.4.2
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
3306/tcp open mysql MySQL 5.0.51a-3ubuntu5
5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
バージョンが分かれば NVD(National Vulnerability Database)で既知CVEを検索できます。例えば「vsftpd 2.3.4」で検索すると CVE-2011-2523(バックドア)がヒットします。「Apache 2.2.8」なら多数の既知脆弱性があります。
OS検出(-O)
OS検出(要root権限)
sudo nmap -O 192.168.56.101
出力例(OS推測部分):
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
Network Distance: 1 hop
サービス + OS + デフォルトスクリプト(総合的なスキャン)
sudo nmap -sV -O -sC 192.168.56.101
このコマンドで得られる情報:
-sV : サービスバージョン
-O : OS推測
-sC : デフォルトNSEスクリプト(安全なもの)
フェーズ4: NSE(Nmap Scripting Engine)実践
NSEを使うと、特定のサービスの詳細情報や既知の脆弱性を自動で調査できます。
基本的なNSEスクリプト
HTTPのタイトルとheader情報を取得
nmap —script=http-title,http-headers 192.168.56.101 -p 80
出力例:
PORT STATE SERVICE
80/tcp open http
| http-title: Metasploitable2 - Linux
|_Requested resource was http://192.168.56.101/twiki/
| http-headers:
| Date: Thu, 19 Mar 2026 01:00:00 GMT
| Server: Apache/2.2.8 (Ubuntu) DAV/2
|_ Content-Type: text/html; charset=UTF-8
FTP匿名ログインの確認
nmap —script=ftp-anon 192.168.56.101 -p 21
出力例(匿名ログイン可能な場合):
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxr-xr-x 2 0 0 4096 Mar 19 2026 pub
SSHのホストキーとアルゴリズム確認
nmap —script=ssh-hostkey —script-args ssh_hostkey=full 192.168.56.101 -p 22
SMB・Samba の脆弱性スキャン
SMB関連の情報収集
nmap —script=smb-os-discovery 192.168.56.101 -p 445
出力例:
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
| Computer name: metasploitable
| NetBIOS computer name: METASPLOITABLE
| Workgroup: WORKGROUP
|_ System time: 2026-03-19T01:00:00+00:00
Samba のユーザー列挙(MS-RPC経由)
nmap —script=smb-enum-users 192.168.56.101 -p 445
出力例:
| smb-enum-users:
| METASPLOITABLE\backup (RID: 1068)
| METASPLOITABLE\games (RID: 1060)
| METASPLOITABLE\msfadmin (RID: 3000)
| METASPLOITABLE\postgres (RID: 3001)
| METASPLOITABLE\root (RID: 1000)
EternalBlue(MS17-010)脆弱性チェック
※ Metasploitable 2 はLinuxなので該当しないが、Windows環境での確認手順として
nmap —script=smb-vuln-ms17-010 192.168.56.101 -p 445
Windowsが対象の場合の出力例:
| smb-vuln-ms17-010:
| VULNERABLE:
| Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
| State: VULNERABLE
| Risk factor: HIGH
| CVE: CVE-2017-0143
smb-vuln-* などの脆弱性検出スクリプトは、対象サービスに負荷をかけたりクラッシュさせる可能性があります。本番環境では絶対に使用せず、必ず許可を得た演習環境でのみ実行してください。
HTTP の脆弱性スキャン
HTTPサーバーのディレクトリリスティング確認
nmap —script=http-ls 192.168.56.101 -p 80
許可されているHTTPメソッドの確認
nmap —script=http-methods 192.168.56.101 -p 80
出力例:
| http-methods:
| Supported Methods: GET HEAD POST OPTIONS
|_ Potentially risky methods: none
Webサーバー上のデフォルトファイル・管理ページの確認
nmap —script=http-default-accounts 192.168.56.101 -p 80
Tomcat のデフォルト認証情報確認
nmap —script=http-default-accounts 192.168.56.101 -p 8180
出力例(Tomcatにデフォルト認証情報がある場合):
| http-default-accounts:
| [Apache Tomcat] credentials found:
|_ tomcat:tomcat - /manager/html
MySQL・PostgreSQL の調査
MySQLの情報収集(認証なし接続の確認)
nmap —script=mysql-info 192.168.56.101 -p 3306
出力例:
| mysql-info:
| Protocol: 10
| Version: 5.0.51a-3ubuntu5
| Thread ID: 10
| Capabilities flags: 43564
| Server Status: Autocommit
|_ Salt: xxxxxxxxxxxxxxxxxxxxxxxx
MySQL の空パスワードrootチェック
nmap —script=mysql-empty-password 192.168.56.101 -p 3306
出力例(root の空パスワードが許可されている場合):
| mysql-empty-password:
|_ root account has empty password
PostgreSQLの情報収集
nmap —script=pgsql-brute —script-args userdb=/usr/share/nmap/nselib/data/usernames.lst
192.168.56.101 -p 5432
フェーズ5: スキャン結果の保存と整理
通常テキスト出力(人間が読みやすい)
nmap -sV -O -sC 192.168.56.101 -oN metasploitable_scan.txt
XML形式(ツールで解析・インポート可能)
nmap -sV 192.168.56.101 -oX metasploitable_scan.xml
すべての形式で同時保存(.nmap .xml .gnmap の3ファイルを生成)
sudo nmap -sV -O -sC -p- 192.168.56.101 -oA metasploitable_full
Grepで特定情報を抽出
grep “open” metasploitable_scan.txt grep “VERSION” metasploitable_scan.txt
スキャンの検知と防御
スキャンは防御側からの視点でも重要です。
スキャンの検知方法:
- Snort/Suricata のIDSシグネチャ(大量SYNパケットのパターン検知)
- ファイアウォールのログ分析(短時間での多ポートへのアクセス)
- ハニーポットの活用(不審なアクセスがあれば即アラート)
- SIEM でのベースライン逸脱検知
Nmapの回避技術(教育目的):
-T0/-T1: スキャン速度を大幅に落とし、閾値ベースの検知を回避-f: パケットを断片化してIDS回避を試みる--scan-delay 1000ms: パケット間に遅延を挿入
演習チャレンジ: Metasploitable 2 完全偵察
以下の手順で Metasploitable 2 に対する偵察フェーズを完全に実施してください。
ミッション1: ホスト確認
Kali Linux から nmap -sn 192.168.56.0/24 を実行し、Metasploitable 2 のIPアドレスを特定する。
ミッション2: 全ポートスキャン
sudo nmap -sS -p- 192.168.56.101 を実行し、開いているポートをすべて書き出す。いくつのポートが開いていましたか?
ミッション3: バージョン情報の取得
nmap -sV 192.168.56.101 を実行し、以下のサービスのバージョンを記録する:
- FTP(21番)のバージョン
- SSH(22番)のバージョン
- HTTP(80番)のバージョン
- MySQL(3306番)のバージョン
ミッション4: 脆弱性調査
取得したバージョン情報をもとに、NVD(https://nvd.nist.gov/) で各サービスのCVEを検索し、最も深刻な脆弱性を1つ見つける。
ミッション5: NSEスクリプト実践
以下のスクリプトを実行し、結果を確認する:
nmap --script=ftp-anon 192.168.56.101 -p 21→ 匿名FTPログインは可能か?nmap --script=mysql-empty-password 192.168.56.101 -p 3306→ MySQLのrootパスワードは空か?nmap --script=http-title 192.168.56.101 -p 80,8180→ Webページのタイトルは何か?
ミッション4で vsftpd 2.3.4 のCVEを調べると、悪名高いバックドア(CVE-2011-2523)が見つかります。この脆弱性はソースコードに意図的に埋め込まれたバックドアで、ニコニコマーク(:))をユーザー名に含めると6200番ポートでシェルが開きます。これがなぜ「サプライチェーン攻撃」と呼ばれるかを考えてみてください。
トラブルシューティング
nmap が「root privileges required」と表示される
SYNスキャン(-sS)やOS検出(-O)にはroot権限が必要です。コマンドの先頭に sudo を付けてください。
スキャンが極端に遅い(-p- で1時間以上かかる)
--min-rate 1000 オプションで最低送信レートを指定すると高速化できます。ただしノイジーになるため、実際の侵入テストでは注意が必要です。
sudo nmap -sS -p- —min-rate 5000 -T4 192.168.56.101
-T4: 積極的なタイミング(T0=最遅〜T5=最速)
「Host seems down」と表示される
Metasploitable 2 がping応答しない設定の場合があります。-Pn オプションでping確認をスキップしてスキャンします。
nmap -Pn 192.168.56.101
Nmap の `-sS` フラグが「ステルス」スキャンと呼ばれる理由はどれですか?