2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【セキュリティ】Nmap — 高度ポートスキャン入門

Last updated at Posted at 2025-10-21

はじめに

Nmapの基本(ホスト発見・SYN/Connectなど)を踏まえ、フラグを変えた「高度」なTCPスキャンの種類とその解釈・活用法、さらに識別回避(デコイ/断片化/ゾンビ/偽装)のテクニックを整理する。ペネトレーション/防御検証どちらの視点でも役立つ実践ノート。

注意(重要):スキャンは対象ネットワークの所有者または明示的許可がある場面でのみ実行すること。無許可でやると法律違反・サービス妨害になるよ(=逮捕の可能性もあるのでヤメよう)。


基本の考え方

  • TCPはフラグ(SYN, ACK, FIN, RST, PSH, URG)を使う。Nmapは送るフラグを変えて相手の応答を観察することで「開いている/閉じている/フィルタされている」を推測する。
  • 大原則:Closed(閉じている)ポートは通常RSTで即答する。Open(開いている)ポートは送られたフラグにより挙動が異なる(SYNに対してSYN-ACKなど)。この差を利用する。

フラグ系スキャン(応答の読み方と用途)

Null Scan -sN

  • 送るフラグ:無し(全ビット0)
  • 期待される応答:閉じていればRSTを返す。返信が無ければ open|filtered(開いている or フィルタ)
  • 使いどころ:ステートレスなファイアウォール越しに試すと有効な場合あり。
  • コマンド例:
sudo nmap -sN <ターゲットIP>

...
Nmap scan report for x.x.x.x
Host is up (0.00066s latency).
Not shown: 994 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
25/tcp  open|filtered smtp
80/tcp  open|filtered http
110/tcp open|filtered pop3
111/tcp open|filtered rpcbind
143/tcp open|filtered imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

FIN Scan -sF

  • 送るフラグ:FIN
  • 動作:Nullと同様、閉じていればRST。返信無しは open|filtered
  • 使いどころ:古い/ステートレスなフィルタ回避に有効。ただしモダンな機器では無効なことが多い。
  • コマンド例:
sudo nmap -sF <ターゲットIP>
...

Nmap scan report for x.x.x.x
Host is up (0.0018s latency).
Not shown: 994 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
25/tcp  open|filtered smtp
80/tcp  open|filtered http
110/tcp open|filtered pop3
111/tcp open|filtered rpcbind
143/tcp open|filtered imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Xmas Scan -sX

  • 送るフラグ:FIN, PSH, URG(クリスマスツリー点灯)
  • 挙動:閉じていればRST、応答無しは open|filtered
  • 使いどころ:同上(ステートレスFWで効果あり)。
  • コマンド例:
sudo nmap -sX <ターゲットIP>

...
Nmap scan report for x.x.x.x
Host is up (0.00087s latency).
Not shown: 994 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
25/tcp  open|filtered smtp
80/tcp  open|filtered http
110/tcp open|filtered pop3
111/tcp open|filtered rpcbind
143/tcp open|filtered imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Maimon Scan -sM

  • 送るフラグ:FIN + ACK(古典的)
  • 挙動:BSD派生OSでのみ特殊挙動を示すことがあったが、現代ではほとんど効果無し。
  • コマンド例:
sudo nmap -sM <ターゲットIP>

Nmap scan report for ip-x-x-x-x.eu-west-1.compute.internal (x.x.x.x)
Host is up (0.00095s latency).
All 1000 scanned ports on ip-x-x-x-x.eu-west-1.compute.internal (x.x.x.x) are closed
MAC Address: 02:45:BF:8A:2D:6B (Unknown)


ACK系 / ウィンドウ / カスタム(ファイアウォール調査向け)

ACK Scan -sA

  • 送るフラグ:ACK
  • 結果:RSTが返るため「ポートの開閉」は分からないが、フィルタ(ブロック)されているか否かが分かる(unfiltered や filtered)。
  • 使いどころ:ファイアウォールのルール(どのポートを通すか)をマッピングする時に有用。
  • 例:
sudo nmap -sA <ターゲットIP>

...
Nmap scan report for x.x.x.x
Host is up (0.0013s latency).
All 1000 scanned ports on x.x.x.x are unfiltered
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

...setting up the target VM `x.x.x.x `with a firewall
Nmap scan report for x.x.x.x
Host is up (0.00046s latency).
Not shown: 997 filtered ports
PORT    STATE      SERVICE
22/tcp  unfiltered ssh
25/tcp  unfiltered smtp
80/tcp  unfiltered http
MAC Address: 02:78:C0:D0:4E:E9 (Unknown)


Window Scan -sW

  • 送るフラグ:ACK(Windowフィールドを観察)
  • 動作:RSTは返るが、RSTのWindow値でOpen/Closedを判定できる場面がある(特定のOS依存)。
  • 使いどころ:ACKで得られなかった微妙な差を突く時。
  • 例:
sudo nmap -sW <ターゲットIP>

...
Nmap scan report for x.x.x.x
Host is up (0.0011s latency).
All 1000 scanned ports on ip-x-x-x-x.eu-west-1.compute.internal (x.x.x.x) are closed
MAC Address: 02:45:BF:8A:2D:6B (Unknown)
...


...setting up the target VM `x.x.x.x `with a firewall
...This is in contrast with the ACK scan that labelled the same three ports as unfiltered.

Nmap scan report for x.x.x.x
Host is up (0.00040s latency).
Not shown: 997 filtered ports
PORT    STATE  SERVICE
22/tcp  closed ssh
25/tcp  closed smtp
80/tcp  closed http
MAC Address: 02:78:C0:D0:4E:E9 (Unknown)

Custom Scan --scanflags

  • 任意のフラグ組合せを送れる。実験用・特殊検査に。
  • 例(SYN+RST+FINを同時に送る):
sudo nmap --scanflags RSTSYNFIN <ターゲットIP>
  • 注意:解釈が難しいので、送る前に期待挙動(Closed/Open時の応答)を整理しておくこと。

偽装・デコイ・断片化(検出回避テクニック)

IPソース偽装 -S SPOOFED_IP

  • 概要:送信元IPを偽る。だが、応答は偽ったIPに帰るため、その応答を拾える位置(ブリッジ、同サブネットでパケットをモニタ可能)でないと無意味。
  • 実行例:
sudo nmap -e eth0 -Pn -S 10.0.0.123 <ターゲットIP>
  • 注意:多くのネットワークで非対称ルーティングや反射などで失敗する。

MAC偽装 --spoof-mac

  • ローカルセグメント上でのみ有効(同イーサネット/同SSID)。
  • 例:
sudo nmap --spoof-mac 00:11:22:33:44:55 <ターゲットIP>

デコイ -D

  • 複数の送信元に見せかけてログをかき混ぜる。自分のIPは ME で指定可。RND でランダム。
  • 例(2つの固定デコイ+自分):
nmap -D 10.10.0.1,10.10.0.2,ME <ターゲットIP>
  • 注意:ログにノイズを増やすだけで成功を保証しないし、ネットワーク上の他ホストにも疑いを向ける可能性がある(倫理的・法的に注意)

断片化 -f / -ff

  • IPペイロードを小片にして送ることで、単純なIDS/ファイアウォールのシグネチャを回避することができる(機種依存)
  • 例:
sudo nmap -sS -p80 -f <ターゲットIP>      # 8-byte fragments
sudo nmap -sS -p80 -ff <ターゲットIP>     # 16-byte fragments
  • 補足:--mtu で細かく指定可能。--data-length でパケットにダミーデータ追加も可能。

Idle / Zombie Scan -sI(究極の偽装スキャン)

  • 概念:他の「アイドルなホスト(ゾンビ)」を踏み台にしてスキャンする。攻撃者はその「ゾンビ」のIP IDの増え具合を見てターゲットの応答(SYN-ACK→RSTの有無)を判断する。
  • 要件:
    1. ゾンビはTCP接続をほとんどしておらずIP IDが単調増加していること(idle)
    2. ゾンビに直接クエリを送り、IP IDを観測できること
    3. ターゲットとゾンビがターゲットからの応答をゾンビが受け取れるネットワーク位置関係であること
  • 実行例:
sudo nmap -sI <ZOMBIE_IP> <TARGET_IP>
  • 長所:よりステルス(本当の送信元はゾンビ)。短所:ゾンビが忙しいと誤差が出る・環境依存度が高い。

出力の詳細化(解析を助けるオプション)

  • --reason : Nmapが「なぜ」そう判断したかを表示(syn-ack, reset, arp-response 等)
  • -v / -vv : 段階的な冗長出力(発見プロセスを逐次表示)
  • -d / -dd : デバッグ(パケットのやり取りを詳細に見る)
  • 使い方例:
sudo nmap -sS --reason -vv <TARGET_IP>

速習チートシート(コマンド早見表)

目的 コマンド
Null Scan sudo nmap -sN IP
FIN Scan sudo nmap -sF IP
Xmas Scan sudo nmap -sX IP
Maimon Scan sudo nmap -sM IP
ACK Scan(FW検査) sudo nmap -sA IP
Window Scan sudo nmap -sW IP
Custom Flags sudo nmap --scanflags RSTSYNFIN IP
Spoof Source IP sudo nmap -e eth0 -Pn -S SPOOF_IP IP
Spoof MAC nmap --spoof-mac 00:11:22:33:44:55 IP
Decoy nmap -D decoy1,decoy2,ME IP
Fragmented sudo nmap -sS -p80 -f IP
Idle Scan sudo nmap -sI ZOMBIE_IP IP
Reason + verbose sudo nmap -sS --reason -vv IP

実務上のヒント/落とし穴(現場の観点)

  • ステートフルFW vs ステートレスFW:Null/FIN/XmasはステートレスFWを騙せる場面があるが、現代のステートフルな環境では効果が薄い。まずは環境(FW/IPSの種類)を想定してスキャン方法を選ぶ。
  • 誤検知(False Positive)に注意open|filtered の判断は「応答がなかった」ことに基づく。つまり「フィルタで破棄された」可能性と「開いている」可能性が混ざる。後続のプローブ(サービス検出、バナー取得)で確証を得よう。
  • ログのノイズ:デコイや断片化はログにノイズを残すだけで、管理者の調査を誘発する。目的とリスクを天秤にかけること。
  • ゾンビの選定が命:Idle Scanはゾンビが本当に「idle」であることが鍵。候補ホストを事前に十分観察すること。
  • 合法面の配慮:テストや社内検査なら事前承認を必ず。外部ターゲットは絶対ダメ。

まとめ

  • Null/FIN/Xmas系は「返信が無い=open|filtered」を利用
  • ACK/Window系は「RST」の微差を取り、ファイアウォール挙動を露呈
  • カスタムフラグ、断片化、偽装、デコイ、Idle(ゾンビ)などは特殊環境で役に立つが条件依存が強い
  • まずは--reason -vvでNmapの推論過程を見て、仮説を立て、段階的に検証すること

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?