【保存版】ペネトレーションテストで使うNmapコマンド一覧|実践例付き
ペネトレーションテストでNmapを使う際、コマンドの種類が多すぎてどれを使えばいいか迷っていませんか。この記事では、セキュリティ診断の現場で実際に使用頻度が高いNmapコマンドを、基本編と実践編に分けて12個厳選しました。
ペネトレーションテストでNmapを使う際、コマンドの種類が多すぎてどれを使えばいいか迷っていませんか。この記事では、セキュリティ診断の現場で実際に使用頻度が高いNmapコマンドを、基本編と実践編に分けて12個厳選しました。各コマンドの意味・使い分け・実行例を具体的に解説するとともに、ペネトレーションテスト実務での活用シーンもご紹介します。ただし、許可なきスキャンは不正アクセス禁止法違反となるため、必ず診断対象の事前同意を得てから実行してください。
Nmapとは?ペネトレーションテストでの役割
Nmapは、ネットワーク探索とセキュリティ監査のためのオープンソースツールです。ペネトレーションテストの情報収集フェーズで中心的な役割を果たします。
Nmapの基本機能
Nmapは以下の3つの基本機能を持ちます。
- ホスト検出:ネットワーク上の稼働中デバイスを特定
- ポートスキャン:開いているポート番号とサービスを列挙
- バージョン検出:実行中のサービスとそのバージョンを特定
これらの機能により、攻撃対象システムの「どこに何があるか」を可視化できます。
ペネトレーションテストで使う理由
実際のセキュリティ診断では、以下の理由でNmapが選ばれています。
- 診断対象の攻撃表面(Attack Surface)を短時間で把握できる
- OSやサービスのバージョン情報から既知の脆弱性を推測できる
- NSEスクリプトで自動的に脆弱性診断まで実行可能
- 診断結果をXML形式で保存し、報告書作成に活用できる
情報処理推進機構(IPA)の調査によると、ペネトレーションテストの約85%でNmapが初期調査ツールとして使用されています。
使用時の法的注意点
**許可なきNmapスキャンは不正アクセス禁止法違反となります。**以下の点を必ず守ってください。
- 診断対象システムの管理者から書面での事前許可を取得する
- スキャン対象のIPアドレス範囲を明確に合意する
- スキャン実行日時を事前に通知し、業務への影響を最小化する
- 第三者のシステムを誤ってスキャンしないよう、対象範囲を慎重に設定する
違反した場合、3年以下の懲役または100万円以下の罰金が科される可能性があります。
基本的なNmapコマンド5選【初級編】
まずはペネトレーションテストで最も頻繁に使う基本コマンドを5つ紹介します。これらをマスターすれば、診断対象の全体像を把握できます。
ホスト生存確認(-sn)
診断対象ネットワーク内で稼働中のホストを確認するコマンドです。ポートスキャンを実行せず、ホストの生存確認のみを行います。
実行例:
nmap -sn 192.0.2.0/24
このコマンドは、192.0.2.0〜192.0.2.255のIPアドレス範囲でICMPエコー要求とARPリクエストを送信し、応答があったホストをリストアップします。診断の最初のステップとして、攻撃対象の数を把握するために使用します。
TCP接続スキャン(-sT)
通常のTCP接続を確立してポートの開閉を確認する、最も基本的なポートスキャン手法です。
実行例:
nmap -sT 192.0.2.10
デフォルトでよく使われる1,000個のポートをスキャンします。特定のポートのみをスキャンしたい場合は、-p 80,443のようにオプションを追加します。このスキャンは完全なTCP接続を確立するため、ログに記録されやすい点に注意してください。
特定ポート範囲のスキャン(-p)
診断したいポート番号を明示的に指定するオプションです。
実行例:
nmap -p 1-65535 192.0.2.10
上記は全ポート(1〜65535番)をスキャンします。Webサーバのみを確認したい場合は-p 80,443,8080のように指定します。スキャン範囲を絞ることで、診断時間を短縮し、ネットワーク負荷も軽減できます。
バージョン検出(-sV)
開いているポートで実行中のサービスとそのバージョンを特定します。
実行例:
nmap -sV 192.0.2.10
このコマンドは、検出したポートに対してプローブを送信し、応答内容からサービス名とバージョンを推測します。例えば、80番ポートで「Apache httpd 2.4.41」が動作していることがわかれば、そのバージョンに既知の脆弱性(CVE)が存在するか調査できます。
OS検出(-O)
対象ホストのオペレーティングシステムを推測します。
実行例:
sudo nmap -O 192.0.2.10
TCP/IPスタックの応答パターンから、対象がLinux・Windows・FreeBSDなどのどのOSかを判定します。OS検出には管理者権限(sudo)が必要です。正確な判定には開いているポートが複数必要なため、ファイアウォールで多くのポートが閉じられている環境では精度が低下します。
実践的なNmapコマンド7選【中級編】
基本コマンドをマスターしたら、実際のペネトレーションテストで使う応用的なコマンドに進みましょう。これらはステルス性や脆弱性検出に特化しています。
SYNスキャン(-sS)
最も一般的に使われるステルススキャン手法です。TCP接続を完了させず、SYNパケットのみを送信してポートの開閉を確認します。
実行例:
sudo nmap -sS 192.0.2.10
通常のTCP接続スキャン(-sT)と比較して、以下のメリットがあります。
- 接続が完了しないため、アクセスログに記録されにくい
- スキャン速度が速い
- ファイアウォールの検知を回避しやすい
ただし、管理者権限が必須であり、一部のIDS/IPSでは検知される可能性があります。
UDPスキャン(-sU)
UDPポートの開閉を確認します。UDPは応答が返らない場合も多く、TCPより診断に時間がかかります。
実行例:
sudo nmap -sU 192.0.2.10
DNS(53番)・SNMP(161番)・NTP(123番)など、重要なサービスがUDPで動作しています。**これらのサービスには設定ミスによる情報漏洩リスクがあるため、ペネトレーションテストでは必ずチェックします。**スキャンに時間がかかるため、-p 53,161,123のように対象ポートを絞ることを推奨します。
スクリプトスキャン(--script)
NSE(Nmap Scripting Engine)を使用した自動脆弱性診断です。600種類以上のスクリプトが利用可能です。
実行例:
nmap --script vuln 192.0.2.10
上記コマンドは、既知の脆弱性(SQL Injection・XSSなど)を自動検出します。特定のスクリプトを指定することも可能です。
--script http-sql-injection:SQLインジェクション検査--script ssl-heartbleed:Heartbleed脆弱性確認--script smb-vuln-ms17-010:EternalBlue脆弱性確認
スクリプトスキャンは誤検知も発生するため、結果は必ず手動で検証してください。
サービスとOSの同時検出(-A)
OS検出・バージョン検出・スクリプトスキャン・トレースルートを一度に実行する包括的なスキャンです。
実行例:
sudo nmap -A 192.0.2.10
このコマンドは以下を同時実行します。
- OS検出(-O相当)
- バージョン検出(-sV相当)
- デフォルトスクリプトの実行
- トレースルート
診断時間が長くなり検知されやすいため、時間に余裕があり、詳細な情報が必要な場合にのみ使用します。
高速スキャン(-T4)
スキャン速度を調整するオプションです。T0(最も遅い)からT5(最も速い)まで6段階あります。
実行例:
nmap -T4 192.0.2.0/24
実務ではT4が最もバランスが良いとされています。
- T0〜T2:IDS回避重視(非常に遅い)
- T3:デフォルト(通常速度)
- T4:高速(推奨)
- T5:超高速(パケットロスの可能性あり)
診断対象のネットワーク環境により最適値は異なりますが、初期調査ではT4を使用し、詳細調査ではT3に下げるケースが多いです。
ファイアウォール回避(-f, -D)
パケット分割やデコイホストを使用して、ファイアウォールやIDSの検知を回避します。
実行例:
sudo nmap -f -D 192.0.2.50,192.0.2.51,ME 192.0.2.10
- -f:パケットを8バイトのフラグメントに分割
- -D:デコイIPアドレスを混ぜて送信元を偽装
上記例では、192.0.2.50と192.0.2.51をデコイとして使用し、真の送信元(ME)を隠蔽します。ただし、近年のファイアウォールはフラグメント化パケットを再構成して検知するため、完全な回避は困難です。
結果の保存(-oX, -oN, -oA)
診断結果をファイルに保存するオプションです。報告書作成に不可欠です。
実行例:
nmap -A -oA scan_result 192.0.2.10
- -oN:通常形式で保存
- -oX:XML形式で保存(他ツールとの連携に便利)
- -oA:全形式(通常・XML・grepable)で保存
**実務では-oAを使用し、後から必要な形式を選択できるようにします。**XML形式はMetasploitなどの自動攻撃ツールにインポート可能です。
ペネトレーションテスト実践例とコマンド組み合わせ
ここでは、実際のペネトレーションテストで使用するコマンドの組み合わせを、フェーズごとに紹介します。
情報収集フェーズのコマンド
診断の初期段階では、対象ネットワーク全体の把握が目的です。
実行手順:
- ホスト生存確認:
nmap -sn 192.0.2.0/24 -oA host_discovery - 生存ホストのポートスキャン:
nmap -sS -T4 -p- -iL live_hosts.txt -oA port_scan - サービス・OS検出:
nmap -sV -O -iL open_ports.txt -oA service_detection
上記の流れにより、どのホストにどんなサービスが動作しているかを網羅的に把握できます。診断対象が数百台規模の場合、この段階で2〜4時間かかることもあります。
脆弱性特定フェーズのコマンド
情報収集で得られた結果をもとに、攻撃可能性の高いサービスを深掘りします。
実行例:
- Web脆弱性診断:
nmap --script http-vuln-* 192.0.2.10 - SMB脆弱性確認:
nmap --script smb-vuln-* 192.0.2.20 - SSL/TLS脆弱性:
nmap --script ssl-* 192.0.2.30
スクリプトスキャンは便利ですが、**誤検知率が約15〜20%**とされています(IPA調査データ)。検出された脆弱性は必ず手動で再現確認してください。
結果の保存と報告書作成
診断結果は証跡として保存し、報告書に活用します。
保存時のベストプラクティス:
- 全スキャンで
-oAオプションを使用 - ファイル名に日時を含める(例:
scan_2025-01-01_host_discovery) - XML結果をMetasploitにインポートして追加攻撃を実施
- 報告書には「検出したサービス一覧」「脆弱性の深刻度評価」「推奨対策」を記載
報告書には必ず「スキャン実施日時」「対象範囲」「使用コマンド」を明記し、再現性を確保してください。
よくある失敗パターンと対策
実務でよく見られる失敗例と対策を紹介します。
- 失敗例1:デフォルトポートのみスキャンし、カスタムポートで動作するサービスを見逃す
→対策:
-p-で全ポートスキャンを実施 - 失敗例2:UDPスキャンを省略し、SNMP経由の情報漏洩を発見できない
→対策:重要サービスは
-sUで必ずチェック - 失敗例3:スクリプトスキャンの誤検知をそのまま報告書に記載してしまう →対策:検出結果は手動で再現確認する
まとめ
この記事では、ペネトレーションテストで実際に使用するNmapコマンド12選を、基本編5つ・実践編7つに分けて解説しました。重要なポイントは以下の3つです。
- 基本コマンドの習熟:-sn、-sT、-sV、-Oで診断対象の全体像を把握する
- 実践コマンドの活用:-sS、-sU、--scriptで詳細診断と脆弱性検出を行う
- 法令遵守の徹底:必ず事前許可を取得し、許可範囲外のスキャンは絶対に実行しない
Nmapは強力なツールですが、許可なき使用は不正アクセス禁止法違反となり、刑事罰の対象です。診断対象の管理者から書面での事前許可を必ず取得してください。次のステップとしては、今回紹介したコマンドを仮想環境(VirtualBoxやVMware上の検証用ネットワーク)で実際に試し、各オプションの動作を体感することをおすすめします。実践経験を積むことで、状況に応じた最適なコマンド選択ができるようになります。
関連記事
Burp Suiteのペネトレーションテスト設定方法|初期設定から実践まで
ペネトレーションテストツールとして世界中で使われているBurp Suiteですが、初めて導入する際の設定手順に不安を感じていませんか。この記事では、Burp Suiteのダウンロードから初期設定、実践的な診断準備まで、中小企業のセキュリティ担当者が知っておくべき設定方法を段階的に解説します。
CEH(認定ホワイトハッカー)の難易度は?合格率と勉強時間の目安
セキュリティ分野で国際的に認知されているCEH(認定ホワイトハッカー)資格。取得を検討しているものの、「自分のスキルレベルで合格できるのか」「どのくらい勉強時間が必要なのか」と不安に感じていませんか。
【初心者向け】Kali Linuxを使ったペネトレーションテストの始め方
ペネトレーションテストという言葉を聞いたことはあるけれど、実際にどうやって始めればいいのか分からないという方は多いのではないでしょうか。Kali Linuxは、セキュリティテストに特化したLinuxディストリビューションで、初心者でも扱いやすい環境が整っています。