Nmapとは
Nmap(Network Mapper)は、ネットワーク上の機器やサービスを調べるための最もポピュラーなツール。IPアドレスの“生死確認(ホストが生きているか)”から、どのポートでどんなサービスが動いているか、さらに一部の脆弱性の有無まで発見できる。
スキャンの種類
実際にスキャンを実行した記事はこちら。

TCPスキャン
何をするか:TCP接続(SYN→SYN/ACK→ACK)を完了させる。
返ってくるもの:SYN/ACK(open)/RST(closed)/無応答(filtered)。
長所:確実で簡単(OS 標準の接続なので結果は信頼できる)。
短所:ログに残りやすく検出されやすい。
オプション:-sT
SYNスキャン
何をするか:SYNを送り、SYN/ACKを受けたら自分はRSTで接続を切る(3ウェイを完了させない)。
返ってくるもの:SYN/ACK(open)、RST(closed)、無応答(filtered)。
長所:早くてステルス寄り(ログに残りにくい)。多くの場合デフォルトで使われる。
短所:root権限が必要。IDSに検出される可能性はある。
オプション:-sS
UDPスキャン
何をするか:UDPパケットを送って応答(ICMP unreachable や UDP 応答)を待つ。
返ってくるもの:UDP応答(open|filtered判定)、ICMP Port Unreachable(closed)、無応答(open|filtered)。
長所:TCP以外のサービス(DNS, SNMP 等)を見つけられる。
短所:遅い(再送や ICMP 制限のため)、ファイアウォールやICMPレート制限で誤判定しやすい。
オプション:-sU
NULLスキャン
何をするか:TCPフラグをすべて 0 にしたパケットを送る(SYN/ACK/FIN/… いずれも 0)。
返ってくるもの(一般):
Linux/UNIX系:何も返さない(open)かRSTで返す(closed)など実装差がある。
Windows系:通常すべてのポートで RST を返す(これだと区別つかない)。
長所:一部のOSでステルスに振る舞う。
短所:実装依存で結果が解釈しづらい。ファイアウォールで無効化されることが多い。
オプション:-sN
FINスキャン
何をするか:TCPの FIN フラグのみを立てたパケットを送る。
返ってくるもの:TCP 実装により、閉じているポートは RST を返し、開いているポートは無応答(特定OSでは)→ これで判別する。
長所:一部の環境で検出されにくい。
短所:Windows系は常に RST を返すため無意味。ファイアウォールでドロップされると判別不能。
オプション:-sF
Xmasスキャン
何をするか:TCPの FIN, PSH, URG フラグを同時に立てた「派手な」パケットを送る(ツリーが光るから Xmas)。
返ってくるもの:FIN と同様、ある実装では無応答=open、RST=closed。
長所:NULL/FIN と同じく、一部OSでステルスに有効。
短所:同じく実装依存で不確実。Windowsでは通用しないことが多い。
オプション:-sX
ICMPスキャン
何をするか:ICMP Echo Request(ping)や他のICMP型を使ってホストがオンラインかを調べる。
返ってくるもの:Echo Reply(Up)/無応答(Down or filtered)/ICMP unreachable(到達不可)など。
長所:ホストの存在確認が速く簡単。
短所:多くのホストやファイアウォールがICMPをブロックするため誤判定が起きやすい。ARP ping はローカルで有効。
オプション:-sn -PE(ICMP echo)、–disable-arp-ping 等で挙動調整
TCPフラグ
フラグ、ビット、フラグの意味を記載。
ビット(値)は tshark のフィルターとかで結構使う。
| ビット(値) | フラグ | 意味 |
|---|---|---|
| 0 (0x01) | FIN | コネクション終了 |
| 1 (0x02) | SYN | コネクション開始要求 |
| 2 (0x04) | RST | リセット(接続拒否/異常終了) |
| 3 (0x08) | PSH | 受信側にデータを即座に渡す(push) |
| 4 (0x10) | ACK | 応答番号を有効にする(確認応答) |
| 5 (0x20) | URG | 緊急ポインタ有効(ほぼ使われない) |
| 6 (0x40) | ECE | ECN related(輻輳制御) |
| 7 (0x80) | CWR | ECN related(輻輳制御) |
視覚的ビット列図(よく見る組み合わせ)
| フラグ | ビット | 値 |
|---|---|---|
| FIN | 0000 0001 | 0x01 |
| SYN | 0000 0010 | 0x02 |
| RST | 0000 0100 | 0x04 |
| PSH | 0000 1000 | 0x08 |
| ACK | 0001 0000 | 0x10 |
| URG | 0010 0000 | 0x20 |
| ECE | 0100 0000 | 0x40 |
| CWR | 1000 0000 | 0x80 |
| SYN+ACK | 0001 0010 | 0x12 |
| FIN+ACK | 0001 0001 | 0x11 |
| SYN only | 0000 0010 | 0x02 |
| RST only | 0000 0100 | 0x04 |
| Xmas scan (FIN+PSH+URG) | 0000 1001 + 0000 0001 + 0010 0000 = 0010 1001 | 0x29 |
| NULL scan | 0000 0000 | 0x00 |
代表的なオプション
| オプション | 何をするか(短く) | 使い方の例 | 備考 |
|---|---|---|---|
-sS | SYNスキャン | sudo nmap -sS -p1-1000 10.0.0.5 | 速くて一般的。root権限推奨。 |
-sT | TCPスキャン | nmap -sT -p22,80 10.0.0.5 | root不要だがログに残りやすい。 |
-sU | UDPスキャン | sudo nmap -sU --top-ports 20 10.0.0.5 | 非常に遅い。--top-ports 推奨。 |
-p | ポート指定(単一/範囲/複数) | -p80,443 -p1-65535 | 明示的にポートを限定。 |
-Pn | ホスト発見をスキップ(ping無視) | sudo nmap -sS -p1-1000 -Pn 10.0.0.5 | Pingがブロックされた環境で必須。 |
-sn | ホスト発見のみ(ポートスキャンしない) | sudo nmap -sn 10.0.0.0/24 | ping sweep 用。 |
-sV | サービス/バージョン検出 | sudo nmap -sS -sV -p80,22 10.0.0.5 | サービス名・バージョン推定。 |
-O | OS 推定 | sudo nmap -O 10.0.0.5 | root権限が必要な場合あり。誤判定もある。 |
-A | 総合検出(sV + O + script 等) | sudo nmap -A 10.0.0.5 | 強力だが騒がしい(検出されやすい)。 |
--script | NSE スクリプト実行 | sudo nmap --script=vuln -p445 10.0.0.5 | カテゴリ指定や複数指定が可能。 |
--script-args | スクリプトへ引数を渡す | --script http-put --script-args http-put.url='/dav',http-put.file=./f | スクリプト固有の引数。 |
-oN / -oG / -oX / -oA | 出力保存(通常/Grep/XML/全形式) | -oA scan1 | -oA で N,G,X を一括出力。 |
-v / -vv | 冗長(詳細)出力 | sudo nmap -sS -p1-1000 -Pn -vv 10.0.0.5 | 進捗や reason が見やすくなる。 |
--reason | 各判定の理由を表示 | sudo nmap --reason -p80 10.0.0.5 | no-response / syn-ack 等を表示。 |
-T0 … -T5 | タイミングテンプレート(速度) | -T4(速め) | 高速ほどノイズ大・検出されやすい。 |
--stats-every | 定期的な進捗表示 | --stats-every 10s | 長時間スキャン時に便利。 |
-F | fast(/etc/services に基づく上位ポート) | sudo nmap -F 10.0.0.5 | 手早くスキャンしたいとき。 |
--top-ports | 使用頻度上位 N ポートのみ | sudo nmap --top-ports 100 10.0.0.5 | UDPスキャン時に特に有用。 |
--open | open のポートだけ表示 | sudo nmap -sS -p1-1000 --open 10.0.0.5 | 出力ノイズを減らす。 |
-sN / -sF / -sX | NULL / FIN / Xmas スキャン | sudo nmap -sN -p1-1000 10.0.0.5 | OS依存(Windowsでは効果薄)。 |
-6 | IPv6 スキャン | sudo nmap -6 -sS -p80 fd00::1 | IPv6 ネットワーク用。 |
-oG - | grep しやすい stdout 出力 | sudo nmap -oG - -p1-1000 10.0.0.5 | パイプで grep に加工しやすい。 |
最後に
色々まとめたけど リファレンスガイド を見るのが正確で早い。
コメント