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

Metasploitable 2 のIPが分からない場合

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

スキャン技法の比較

フラグスキャン種類特徴
-sSSYN スキャン(ステルス)最速・最一般的。TCPハンドシェイクを完了しない。要root
-sTTCP Connect スキャン完全な接続を確立。ログに残りやすい
-sUUDP スキャンUDPサービス検出。低速
-sAACK スキャンファイアウォールルールのマッピング

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スクリプト実践

以下のスクリプトを実行し、結果を確認する:

  1. nmap --script=ftp-anon 192.168.56.101 -p 21 → 匿名FTPログインは可能か?
  2. nmap --script=mysql-empty-password 192.168.56.101 -p 3306 → MySQLのrootパスワードは空か?
  3. 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` フラグが「ステルス」スキャンと呼ばれる理由はどれですか?