はじめに
セキュリティ学習プラットフォーム「TryHackMe」の ルーム「Nmap: The Basics」を攻略しました。
※許可なく他人のサーバーやマシンに攻撃を仕掛けるることは犯罪です。
攻撃を試す場合は必ず自分のマシンか許可された環境で実施してください。
なぜNmapが必要か
ネットワーク上のホストやサービスを手動(PingやTelnet)で一つずつ調べるのは非効率であり、ファイアウォールに阻まれることもあります。
今回、1997年の登場以来、業界標準として君臨する「Nmap」を使用し、「ホスト発見」「ポートスキャン」「バージョン特定」「OS推定」までを一気通貫で行う手法をこのルームで学ぶことができます。
本記事は、学習した重要ポイントと、実戦的なオプションの使い分けをまとめた備忘録です。
1. ホストの発見 (Host Discovery)
ポートスキャンを行う前に、まずは「ターゲットの指定」と「生存確認」を行います。
ターゲットの指定方法
IPアドレス単体だけでなく、以下のような指定が可能です。
リストスキャン (-sL):実際にパケットを送らず、スキャン対象となるIPリストを表示確認します。
Pingスキャン (-sn):ポートスキャンを行わず、ホストが稼働しているかだけを調べます。
ネットワーク環境によって挙動が異なります。
ローカルネットワーク (同一セグメント):ARPリクエスト が使われます。
特徴:非常に高速で確実。MACアドレスが取得できるため、ベンダー情報(Dell, Appleなど)も特定可能です。
リモートネットワーク:ARPはルーターを越えられないため、ICMP EchoやTCP SYNなどを組み合わせて使用します。
※MACアドレスは取得できません。
2. ポートスキャンの手法 (Port Scanning)
稼働しているホストに対し、どのポートが開いているか(Web, SSH, DNSなど)を調査します。
3つの主要スキャン手法
TCP Connect (-sT)
3ウェイハンドシェイクを完了させる。
一般ユーザー権限で実行可能。
接続が確立するためログに残りやすい。
TCP SYN (-sS)
ハンドシェイクを完了させない(SYN→SYN/ACK→RST)。
ステルス性が高い。
パケット生成のため root権限 (sudo) が必須。
UDP Scan (-sU)
DNS(53)などUDPサービスを調査。
応答がないことが多く(Open/Filtered)、時間がかかる。
メモ
root (sudo) 権限がある場合、Nmapはデフォルトで SYNスキャン (-sS) を使用します。
権限がない場合は Connectスキャン (-sT) に切り替わります。
ポート範囲の指定
デフォルトでは「よく使われる上位1000ポート」をスキャンしますが、以下で変更可能です。
-F (Fast): 上位100ポートのみスキャン。
-p-: 全ポート(1-65535) をスキャン。時間はかかるが取りこぼしがない。
-p22-80: 指定した範囲のみスキャン。
上記の場合は22番から80番の範囲のポートをスキャンするという意味
3. 詳細情報の列挙 (Enumeration)
単にポートが開いているだけでなく、その中身を深掘りします。
重要なオプション
OS検知 (-O)
TCP/IPスタックの挙動(フィンガープリント)からOSの種類を推測します。
完璧ではありませんが、LinuxかWindowsかの判断などに役立ちます。
サービスバージョン検知 (-sV)
「Port 80 Open」だけでなく「Apache 2.4.41」といった具体的なバージョンを特定します。
CVE(脆弱性)調査の最重要情報です。
アグレッシブスキャン (-A)
OS検知、バージョン検知、スクリプトスキャン、Tracerouteを全部入りで実行します。
Ping無効化 (-Pn)
ターゲットがPingに応答しない(Firewallでブロック)場合、「ホストはダウンしている」と判断されてスキャンが止まるのを防ぎます。
強制的にポートスキャンを実行します。
4. タイミングとパフォーマンス
スキャン速度を調整し、検知回避方法
タイミングテンプレート (-T)
-T0 (Paranoid):5分に1パケット。IDS回避用。
-T3 (Normal):デフォルト。
-T4 (Aggressive):高速。CTFや学習環境では推奨。
-T5 (Insane):最速だが精度が落ちる可能性あり。
詳細な制御
テンプレート以外にも細かい調整が可能です。
--min-rate :1秒あたりのパケット送信数を強制的に上げ、スキャンを高速化します。
--host-timeout :反応が遅いホストをスキップして、スキャン全体の停滞を防ぎます。
5. 出力と詳細表示 (Output)
スキャン中の状況把握と、結果の保存方法
詳細表示 (Verbosity)
-v / -vv:スキャンの進捗や発見した情報をリアルタイムで表示します。
-d:デバッグ情報を表示します。何か上手くいかない時に使用します。
結果の保存
スキャン結果は必ず保存します。
推奨は -oA(Output All) です。
nmap -oA result target を実行すると、以下の3ファイルを生成します。
result.nmap:人間が読みやすい形式
result.xml:他のツール連携用
result.gnmap:grep コマンドなどで検索しやすい形式
まとめ
Nmapは単なるポートスキャナではなく、オプション次第でステルス性を高めたり、アグレッシブに情報を抜き出したりできる柔軟なツールです。
初心者が覚えるべき基本セット
sudo権限 + SYNスキャン + バージョン検知 + 高速化 + 全形式保存
sudo nmap -sS -sV -T4 -oA nmap.txt 10.10.10.10
※10.10.10.10はターゲットのIP、状況に応じて変更が必要