nmap(Network Mapper)は、ネットワーク探索とセキュリティ監査のための強力なオープンソースツール。
nmap_Github
(issueにgood first issueラベルのものもあるので、気になる人は見てみても面白いかもしれない。)
以下は、CTFでもよく使用されるnmapの簡易説明と
nmapの基本的な使い方や利便性についてのまとめ。
nmap
対象のサーバーの開いているポートを見つけることができるツール。
開いているポートとは何かしらのサービスで使用しているポートということ。
また、実行中のサービスとバージョン情報などもわかるため、そこから脆弱性を見つけることもできる。
ペネトレーションテストでは開いているポートはかなり重要になる。
スキャンの種類
nmapにはさまざまなスキャンオプションが存在する。
以下はその一部で、オプションも記載。
(より多くのオプションは後述し、さらに詳しくはリファレンスへGO)
TCP Connect スキャン (-sT) フルコネクションを行い、オープンポートを識別。
SYNスキャン (-sS) "半開き"スキャンとしても知られ、隠密性が高く、効率的。
UDPスキャン (-sU) UDPポートの検査に使用。
バージョン検出
-sVオプションを使用すると、各オープンポートで実行されているサービスのバージョン情報を検出でき、
これにより、潜在的な脆弱性を把握しやすくなる。
→versionの確認により、対象が有するCVEなどを把握することができるため。
OS検出
-Oオプションを使うことで、ターゲットシステムのOSを推測でき、こちらも上記の-sVオプションと同様に、CVEなどと照らすことができる。
ネットワーク環境におけるデバイスの特定などにも使えるオプション。
基本的なコマンド
$nmap -オプション IP
代表的なスキャンオプション
(以下ChatGptを使用したオプションの簡易まとめ)
-sS(TCP SYN スキャン)
最も一般的なスキャンタイプで「ステルススキャン」とも呼ばれるスキャン。
TCP接続の三方ハンドシェイクの最初のSYNパケットだけを送信し、相手からの応答(SYN/ACKまたはRST)を確認してポートの状態を判断する。フル接続を行わないため、ログに残りにくい特徴がある。
-sT(TCP Connect スキャン)
フルTCP接続を行うスキャン方法。ターゲットに対してフル三方ハンドシェイクを行い、オープンポートを確認します。ルート権限が不要ですが、検出されやすくログにも残りやすいです。
-sU(UDP スキャン)
UDPポートをスキャンする。
UDPは接続レスなプロトコルのため、応答がない場合はフィルタード、ICMPポート到達不可メッセージを受信した場合はクローズドと判断される。
スキャン速度が遅く、より多くの時間を要することが多い。
-sA(ACK スキャン)
ファイアウォールのルールを確認するために使用されるスキャン。
ACKパケットを送信し、フィルタードかどうかを確認することができる。
オープン/クローズ状態は判断をするわけではなく、ファイアウォールがパケットを通過させるかブロックするかを確認することができる。
-sP(Ping スキャン)
対象ホストがネットワーク上に存在するかを確認するスキャン。
ICMPエコーリクエストを送信し、応答を待つ。
ネットワーク内のアクティブなホストを迅速に見つけるのに役立ちます。
高度なスキャンオプション
-sV(サービスバージョンスキャン)
CTFでかなり重宝するオプション
オープンポートで実行されているサービスのバージョンを検出します。各ポートに対してさまざまなプロトコルを用いたテストを実施し、サービスの詳細を取得することができる。
-O(OS検出)
ターゲットホストのオペレーティングシステムを推測します。ポートの応答とタイミング情報に基づいてOSのシグネチャと照合し、OSの種類とバージョンを特定する。
-A(アグレッシブスキャン)
OS検出(-O)、バージョン検出(-sV)、トレースルート、およびスクリプトスキャンを組み合わせたオプション。詳細な情報収集が行える反面、スキャンが長時間かかる可能性がある。
(というか結構かかる)
-Pn(Ping無効スキャン)
ターゲットに対してPingを行わずにスキャンをおこなう。
ICMPフィルタリングやファイアウォールが存在する環境で、ホストが非アクティブと誤認識されるのを防ぐために使用するなどに使う。
出力オプション
-oN(ノーマル出力)
最も一般的な出力方法
スキャン結果を標準のテキスト形式でファイルに出力します。
-oX(XML出力)
スキャン結果をXML形式でファイルに出力します。スクリプトやツールでの自動解析に適しています。
-oG(グレップ可能出力):
スキャン結果を簡単に解析・フィルタリングできるようにグレップ形式で出力します。
-v(冗長出力):
詳細な情報をリアルタイムで表示します。進行状況の確認やデバッグに役立ちます。
-T<0-5>(タイミングオプション):
スキャンのタイミングを調整することができる。T0(スニークモード)からT5(インセーングリークモード)まであり、速さとステルス性をバランスさせます。T4が一般的に使用されるよう。
(使用感は不明→使ったことないです)
オプションについてのまとめ
nmapのオプション把握は、CTFを行っていく上で理解度は多いに越したことはないというのが所感だが、
Linuxの日常的なコマンドと同様に丸暗記をする必要はないと考えている。
nmapにどういったスキャンオプションがあったかが思い出せればリファレンスでコマンドは都度調べたらいいと思う。
nmap自体非常に情報量の多いツールとなっているため、オプションの紹介は上記の記載にとどめたい。
より細かく詳細を確認する場合は公式のリファレンスを下記に貼っておくので確認してくださいmm
実行結果の例
nmap -sV IPアドレス
対象のサーバーのport,state,service, versionが確認できる。
(IP隠してますが、対象はTryHuckMeのRoomのものです)
まとめ
nmapは、ネットワーク管理者やセキュリティ分野に携わる人にとって不可欠なツールと言えそう。
基本的なポートスキャンから高度なOS検出、サービスバージョン検出まで幅広い機能が存在するため、
ペネトレーションテストでは欠かせないツールであるとともに、CTFなどの分野でも調査のファーストチョイスとして、サーバーの状態を確認してもいいかもしれない。