MENU

Nmapの基礎

目次

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)ECEECN related(輻輳制御)
7 (0x80)CWRECN related(輻輳制御)

視覚的ビット列図(よく見る組み合わせ)

フラグビット
FIN0000 00010x01
SYN0000 00100x02
RST0000 01000x04
PSH0000 10000x08
ACK0001 00000x10
URG0010 00000x20
ECE0100 00000x40
CWR1000 00000x80
SYN+ACK0001 00100x12
FIN+ACK0001 00010x11
SYN only0000 00100x02
RST only 0000 01000x04
Xmas scan (FIN+PSH+URG)0000 1001 + 0000 0001
+ 0010 0000 = 0010 1001
0x29
NULL scan0000 00000x00

代表的なオプション

オプション何をするか(短く)使い方の例備考
-sSSYNスキャンsudo nmap -sS -p1-1000 10.0.0.5速くて一般的。root権限推奨。
-sTTCPスキャンnmap -sT -p22,80 10.0.0.5root不要だがログに残りやすい。
-sUUDPスキャン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.5Pingがブロックされた環境で必須。
-snホスト発見のみ(ポートスキャンしない)sudo nmap -sn 10.0.0.0/24ping sweep 用。
-sVサービス/バージョン検出sudo nmap -sS -sV -p80,22 10.0.0.5サービス名・バージョン推定。
-OOS 推定sudo nmap -O 10.0.0.5root権限が必要な場合あり。誤判定もある。
-A総合検出(sV + O + script 等)sudo nmap -A 10.0.0.5強力だが騒がしい(検出されやすい)。
--scriptNSE スクリプト実行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.5no-response / syn-ack 等を表示。
-T0-T5タイミングテンプレート(速度)-T4(速め)高速ほどノイズ大・検出されやすい。
--stats-every定期的な進捗表示--stats-every 10s長時間スキャン時に便利。
-Ffast(/etc/services に基づく上位ポート)sudo nmap -F 10.0.0.5手早くスキャンしたいとき。
--top-ports使用頻度上位 N ポートのみsudo nmap --top-ports 100 10.0.0.5UDPスキャン時に特に有用。
--openopen のポートだけ表示sudo nmap -sS -p1-1000 --open 10.0.0.5出力ノイズを減らす。
-sN / -sF / -sXNULL / FIN / Xmas スキャンsudo nmap -sN -p1-1000 10.0.0.5OS依存(Windowsでは効果薄)。
-6IPv6 スキャンsudo nmap -6 -sS -p80 fd00::1IPv6 ネットワーク用。
-oG -grep しやすい stdout 出力sudo nmap -oG - -p1-1000 10.0.0.5パイプで grep に加工しやすい。

最後に

色々まとめたけど リファレンスガイド を見るのが正確で早い。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

勉強中のセキュリティエンジニアです。
初心者の目線で学んだことをまとめています。

コメント

コメントする

CAPTCHA


目次