主なポイント
- Nmapでは、ポートスキャン、ホストの検出、脆弱性の検出など、さまざまなスキャンを実行できます。ネットワーク全体の潜在的なセキュリティ問題を特定するのに役立つため、セキュリティ専門家と悪意のあるハッカーの双方にとって強力なツールです。(セクションへ移動)
- Nmapには、特定の脆弱性を検出するための豊富なスクリプトライブラリが用意されています。ユーザーはカスタムスクリプトを作成して機能を拡張することもでき、固有の環境に合わせたスキャンが可能です。(セクションへ移動)
- Nmapは、検出した脆弱性について詳細なレポートを作成でき、複数の形式にエクスポートできます。この機能により、組織は調査結果を記録し、リスクを軽減するための適切な対策を講じられます。(セクションへ移動)
強力なオープンソースツールであるNmapは、ネットワーク機器のポートをスキャンし、既知の脆弱性がないかWebサイトのドメインを調査します。Nmapは社内のセキュリティチームだけでなく悪意のあるハッカーも利用できるため、社内のセキュリティチームは必ず先にスキャンを実行しておくべきです。
基本的な脆弱性を検出するツールとしてNmapに慣れるため、本記事では次の内容を取り上げます。
- Nmapを始める
- Nmapによる脆弱性スキャン
- Vuln、Vulners、Vulscanの違い
- 攻撃者はNmapをどう使うのか
- Nmapを使うメリットとデメリット
- Nmap脆弱性スキャナーの代替ツール
- まとめ:安価で効果的な脆弱性スキャンにNmapを使う
使いやすく、技術サポートも充実した脆弱性スキャナーを探しているなら、本記事のスポンサーであるIntruderがその一つです。エンタープライズレベルの保護を提供し、内部スキャンから境界、Webアプリケーション、クラウドまで、10,000件を超えるセキュリティチェックをカバーします。
Intruderを14日間無料でお試しください!
Nmapを始める
Nmap(ネットワークマップ)は、ポートスキャン、ホストの検出、ネットワーク上のデバイス識別など、ITインフラを監査するためのオープンソースかつ無料の機能を提供します。ペネトレーションテスターも脅威アクターも、標的に関する情報収集にNmapを利用しており、NmapはCISAに認定されている、重要な無料のネットワークセキュリティツールです。
Nmapのインストール
NmapはLinux用ユーティリティとして始まりましたが、現在ではWindowsやmacOSを含む主要なOSすべてで利用できます。Nmapは、次を含む複数のLinuxバージョンにあらかじめインストールされています:Kali Linux。その他のLinuxシステムでは、「apt-get install Nmap」コマンドを使ってインストールできます。
すべてのOSのユーザーは、ダウンロードしてNmapを入手できるほか、Nmap用のグラフィカルユーザーインターフェース(GUI)フロントエンドであるZeNmapも利用できます。GitHubを使いたい場合は、次のコマンドで公式Gitリポジトリをクローンできます。
git clone https://github.com/Nmap/Nmap.gitNmapをインストールしたら、コマンドラインまたはZeNmapを使って、ローカルドメインのマッピング、ホストのポートスキャン、ホストで稼働しているOSのバージョン検出を行う基本的なコマンドを実行できます。
多くのオープンソースソフトウェアパッケージがマルウェアに感染しています。Nmapのダウンロードファイルが意図した内容と一致することを確認するには、組織はダウンロードファイルを、Nmapが管理する署名記録と照合できます。
Nmap組み込みスクリプト
基本機能を手作業で実行するのは面倒です。ユーザーは、Nmapの組み込みスクリプトを実行することでNmapの機能を拡張できます。これらのスクリプトは、次のコマンドを実行して定期的に更新する必要があります。
sudo Nmap --script-updatedb基本的なコマンドとスクリプトの例については、Nmap:ペネトレーションテスト製品の概要と分析をご覧ください。
カスタムNmapスクリプトの利用
上級ユーザーは、Python言語とPython-Nmapパッケージを使って、複数行の命令やより複雑なコマンドを組み合わせることもできます。上級ユーザーはNmapスクリプティングエンジン(NSE)を使ってネットワーク探索や脆弱性検出(バックドアなど)を有効にしたり、Luaプログラミング言語を使って特定のエクスプロイトを実行したりすることも可能です。これらのスクリプトは.nseファイルで、通常はエンドユーザー向けのコメントと、マシン向けのコード命令が含まれています。
Nmapによる脆弱性スキャン
Nmapの脆弱性スキャン機能は、「vuln」に分類された脆弱性検出スクリプト、またはカスタムスクリプトに依存しています。ユーザーは「vuln」コマンドを使って、組み込みスクリプトを個別または一括で実行できます。さらに、VulscanやVulnersなどのカスタムスクリプトをダウンロードすることもできます。
他のペネトレーションテストや脆弱性スキャンと同様、こうした侵入的なスキャンは許可を得たうえでのみ実行すべきです。許可なくシステムをスキャンするだけでも、管轄によっては罰金や懲役を科される可能性があります。詳しくは、米国(Computer Fraud and Abuse Act)、英国(Computer Misuse Act 1990)、インド(Information Technology Act第43条および第66条)、日本(不正アクセス行為の禁止等に関する法律)など、各国の規制を確認してください。
Nmapによる特定の脆弱性スキャン
Nmapのスクリプトには、ドメインや特定のホストIPアドレスに対して実行できる、脆弱性に関する100種類を大きく超える特定スキャンが含まれています。スキャン対象となる脆弱性の包括的な一覧は、NmapのWebサイトで確認できます。
アプリケーションスキャン:標的ドメイン(例:esecurityplanet.com)に対してNmapを実行し、次のようなWebサイトの脆弱性を確認します。
- http-csrf:次のコマンドを入力して、クロスサイトリクエストフォージェリ(CSRF)の脆弱性を検出します:Nmap -sV –script http-csrf <target domain>
- http-sherlock:次のコマンドを入力して、Webアプリケーションで「shellshock」脆弱性を悪用できるか確認します:Nmap -sV –script http-sherlock <target domain>
ITホストスキャン:標的IPアドレス(例:166.96.06.4)に対してNmapを実行し、次のようなホストの脆弱性を確認します:
- dns-update:次のコマンドを入力して、認証なしで動的ドメインネームサービス(DNS)の更新を試みます:Nmap -sU -p 53 –script=dns-update –script-args=dns-update.hostname=foo.example.com,dns-update.ip=192.0.2.1 <target IP address>
- smb-vuln-cve-2017-7494:次のようなスクリプトを使って、標的IPアドレスが任意の共有ライブラリ読み込みの脆弱性に対して脆弱か確認します:Nmap –script smb-vuln-cve-2017-7494 -p 445 <target IP address>
政府が推奨するNmapスクリプトは、組織が特定の脆弱性に対処できるよう、公式Webサイトで公開または紹介されることがあります。例えば英国政府は、National Cyber Security Centre(NCSC)とそのi100業界パートナーシップによるオープンソースのGitHubリポジトリを運営し、Scanning Made Easyプロジェクトの一環として、Exim MTAの脆弱性について組織がネットワークをスキャンできるようにしています。
このリポジトリでは、システム管理者などのユーザーがシステムの脆弱性を検出できるよう、公式に推奨されたNmapスクリプトを集めています。英国向けの最初のスクリプトは、Eximメッセージ転送エージェント(MTA)のリモートコード実行脆弱性であるCVE-2020-28017からCVE-2020-28026(21Nailsとも呼ばれます)に焦点を当てています。
このスクリプトには次の情報が含まれています:
- 脆弱性の存在を確認する方法
- チェックが侵入的でない理由
- 誤検知と見逃しが発生する可能性がある理由
Vulnの使い方
Nmapでは、適切な名前のVulnコマンドを使って、デフォルトの「vuln」カテゴリのスクリプトライブラリに含まれるすべての脆弱性を、標的ドメインまたはIPアドレスに対してスキャンできます。
sudo Nmap --script vuln <target domain or IP Address> -vLinuxでこのコマンドをスーパーユーザー、またはLinuxにおける管理者相当の権限で実行するには、「sudo」が必要になる場合があります。ほとんどの場合、Nmapでより侵入的かつ詳細なコマンドを実行するには、昇格された権限が必要です。-v(詳細表示)フラグを付けると、実行したテストとその結果に関する詳細な情報が表示されます。
こうしたコマンドの実行は、特定の脆弱性スキャンが持つ侵入的・破壊的な性質のため危険な場合があります。単に情報を取得するのではなく、脆弱性の悪用を試みて、脆弱性の存在を確認するスキャンもあります。場合によっては、悪用に成功するとサービスの設定が変更されたり、サービス、Webサイト、OSがクラッシュしたりすることがあります。
脆弱性スキャンの一部では、ワイルドカードまたはアスタリスク(*)を使って、似た名前の複数のスクリプトを同時に実行できます。例えば、httpコマンドの後にワイルドカード(http*)を付けると、標的ドメインに対して「http」で始まるすべての脆弱性スキャンが実行されます。
一括スキャンを使うと結果が膨大になる可能性があり、CVSSスコアの低い脆弱性を除外したいユーザーもいるでしょう。一定範囲の脆弱性だけを表示するには、「x.x」がCVSSスコア(例:6.5)を表す次のフラグをコマンドに追加します。
--script-args=mincvss=x.x6.5未満の脆弱性を除外する完全なコマンドは次のとおりです:
Nmap --script vuln --script-args mincvss=6.5 <target>コマンドにファイル名を続けてフラグを追加すると、スキャン結果をさまざまなファイル形式でエクスポートできます。このエクスポートにより、情報を共有したり、他のソフトウェアで脆弱性を利用できるようにしたりすることが容易になります。
完全なコマンドの一般的な例を2つ紹介します:
- XMLファイル:Nmap –script vuln -oX file.xml <target>
- ブラウザー対応XMLファイル:Nmap –script vuln –webxml -oX file.xml <target>
もちろん、基本的な脆弱性スキャンのセットでは、重要ではあるものの限られた範囲の脆弱性しか調査しないため、一部のユーザーには不十分かもしれません。上級ユーザーはVulscanやVulnersなどのカスタムスクリプトをダウンロードして、より大規模な脆弱性データベースにアクセスできます。
Vulscanの使い方
NSEスクリプトのVulscanを使うには、まずgitコマンドを使ってGitHubリポジトリからソフトウェアをクローンします:
sudo git clone https://github.com/scipag/vulscan次のコマンドを実行して、NSEスクリプトディレクトリへのシンボリックリンクを作成する必要がある場合があります:
sudo ln -s pwd /scipag_vulscan /usr/share/Nmap/scripts/vulscanこの場合、ユーザーのマシン上にあるNmapスクリプトのディレクトリとして/usr/share/Nmap/scripts/vulscanを想定していますが、必要に応じてこのディレクトリは変更できます。Nmapがディレクトリを認識すると、次の構文で–scriptフラグを使ってVulscanを呼び出し、追加の脆弱性チェックを実行できるようになります:
sudo Nmap -sV --script=vulscan/vulscan.nse <target IP address or host name>Vulscanを実行すると、ネットワーク上のIPアドレスに対するIT脆弱性や、ホスト名(例:esecurityplanet.com)に対するソフトウェア脆弱性を検出できます。Vulscanは、対象に該当するすべての脆弱性について非侵入的なテストを実行します。結果にはポートと、検出された特定のCVEに関する限定的な情報が表示されます。
Vulnersの使い方
Vulnersは通常、標準のNmap NSEスクリプトに含まれていますが、gitコマンドを使ってGitHubリポジトリからVulnersのNSEスクリプトをクローンすることもできます:
sudo git clone https://github.com/vulnersCom/Nmap-vulners.git /usr/share/Nmap/scripts/vulnersファイルディレクトリ/usr/share/Nmap/scripts/vulscanは、ユーザーのマシン上にあるNmapスクリプトのディレクトリとして想定されていますが、必要に応じてこのディレクトリは変更できます。クローンすると、次の構文で–scriptフラグを使ってVulnersを呼び出せるようになります:
sudo Nmap -sV --script Nmap-vulners/vulners.nse <target host or IP address>コマンドラインの末尾に-p<#>(例:ポート80を対象にする場合は-p80)を追加すると、IPアドレス上の特定のポートを対象にできます。結果には検出されたCVEが表示され、詳細情報を確認できるVulnersのWebサイトへのリンクも示されます。
Vuln、Vulners、Vulscanの違い
| Vuln | Vulners | Vulscan | |
|---|---|---|---|
| Nmapスクリプトに含まれるか | はい | はい | いいえ |
| 組織外にCPEデータを送信するか | いいえ | はい* | いいえ |
| 脆弱性データベースのダウンロードが必要か | いいえ。ただしCVEは限定的 | いいえ* | はい |
| 信頼度 | 高い | 場合による | 場合による |
| 破壊的な可能性 | はい | いいえ | いいえ |
| 使用する場面 | 主要な脆弱性を網羅的かつ正確にスキャンしたい場合 | CPEデータの送信を気にせず、詳細なスキャンを行いたい場合 | より詳細なスキャンを行い、CPEデータを外部に公開したくない場合 |
VulnとVulnersは含まれており、Nmapのすべてのスクリプトを更新するときに更新される基本NSEスクリプトデータベースに含まれています。Vulscanは基本スクリプトセットに含まれておらず、個別にダウンロードして更新する必要があります。
Vulnersは、共通プラットフォーム一覧(CPE)情報をポートスキャンから取得し、サイトのAPIを使ってvulners.comに送信します。これにより、サイトのデータベースから最新の共通脆弱性識別子(CVE)情報を能動的にダウンロードします。Vulnersでは、外部の脆弱性データベースにアクセスするためのインターネット接続も必要です。
このような脆弱性情報の共有は、環境の機密性を強く重視する組織には適さない可能性があります。Vulscanではローカルデータベースを使うこともできますが、通常はその場合、完全に更新されたVulscanのデータベースを使うメリットが失われます。
VulnとVulscanはCPE情報をスキャン対象の組織外に送信せず、ローカルに保存された脆弱性データベースを使用します。
CPE情報を送信する利点は、VulnersがCVEの完全に更新されたセットをホストしていることです。Vulnはシステムについて上位150件の脆弱性のみを検出し、Vulscanは脆弱性データベースのオフラインコピーを使用します。
Vulnはサービスを停止させるリスクがあります。これは、Vulnが一部の脆弱性の存在を確認するため、そのサービスの悪用や停止、破損を検証しようとするからです。ただし、能動的なプロービングによって信頼度が高まり、誤検知の可能性は低くなります。
VulnersとVulscanはサービスを停止させるリスクを回避します。どちらも脆弱性の検証や悪用を試みないためです。これら2つのツールの信頼度は、使用するNmapの特定バージョンにおける検出機能の正確性と精度に左右されます。また、どちらのツールも、特定のサービスにおける標準外のビルド、カスタムビルド、パッチ適用済みのビルドによって判断を誤る可能性があり、誤検知が増えることがあります。
3つのツールのうち、Vulnカテゴリのスクリプトは、重要な脆弱性を限定的ながら非常に正確にスキャンできます。ただし、脆弱性を詳細にプロービングするため、VulnersやVulscanより3~4倍長くかかることがあります。
手動でダウンロードする2つの脆弱性スキャナーは、検出できるCVEの選択肢がはるかに広く堅牢ですが、通常、最も更新されたスキャンになるのはVulnersです。これは、ITチームがVulscanのデータベースを手動で更新するのを忘れる可能性があるためです。ただし、CPE情報の公開を避ける必要がある、より機密性を重視する組織にとっては、Vulscanがローカルデータベースを使用することが、Nmapの選択肢の中で最適な可能性があります。
攻撃者はNmapをどう使うのか
攻撃者は、未加工のIPパケットを使ってネットワーク上で利用可能なホストとサービスを特定し、その脆弱性を判断することで、大規模なネットワークを迅速にスキャンするためにNmapを使います。ハッカーやペネトレーションテスターは通常、痕跡を隠すために特定のオプションを追加します。
デコイ(おとり)スキャンでは-Dオプションフラグ(Nmap -p 123 -D decoyIP targetIP)を追加し、攻撃元のIPアドレスを隠します。また、スキャンを実行するマシンのパケットに加えて、送信元を偽装したパケットを対象に送信します。追加のパケットによって、ポートスキャンの検出が防御側にとって難しくなります。
攻撃者は、アイドルスキャンとも呼ばれるゾンビスキャンを実行することもできます。このサイドチャネル攻撃では、ネットワーク上の「ゾンビ」エンドポイントのIPアドレスを使って、偽造したSYNパケットを対象に送信しようとします。この手法は、侵入検知システム(IDS)に、無害なゾンビコンピューターを攻撃者と誤認させようとするものです。Nmapによる攻撃についてさらに詳しくは、Nmap Ultimate Guide:ペンテスト製品のレビューと分析をご覧ください。
ホストシステムはNmapスキャンを検出するか
SIEMツール、ファイアウォールなどの防御ツールはシステムからアラートを受信できます。また、スキャン対象のシステムには、Nmapによる多数のポートスキャンで成功したTCPリクエストが記録されます。より高度なIDS/IDPツールは、TCP接続を完了させないNmapのステルスリクエストなど、形式が不正なTCPリクエストも検出する可能性があります。システムやサービスの障害を引き起こす破壊的なスキャンは、システムだけでなく影響を受けたユーザーにも確実に検出されます。
Nmapを使うメリットとデメリット
Nmapは強力な脆弱性検出機能を備えており、ほとんどの組織での導入を検討すべきツールです。ただし、Nmapが広く使われているわけではない理由も数多くあります。
メリット:Nmapを使う理由
- オープンソースで無料なので、ハッカー、学生、あらゆる組織に適している
- 高速スキャンによって、潜在的な脆弱性を迅速に確認できる
- 軽量なTCPスキャンは、大量のネットワーク帯域幅を消費せず、一部のネットワークセキュリティツールを回避できる
- ハッカー向けのプレビューとして、組織が内部システムを確認できる
- スクリプト化可能なスキャンによって、技術者でないユーザーでも繰り返し実行できる脆弱性スキャンを組織が作成でき、ハッカーはNmapのコマンドやスキャンをマルウェアに組み込める
デメリット:Nmapを使わない理由
- ユーザーフレンドリーさに欠ける高度なGUIを備えた商用ツールよりも
- コマンドラインの入力でミスをしやすい
- プログラマーが不足しているため、組織のITスタッフがカスタムスクリプトを作成したり、Nmapスクリプトを理解したりできない
- 正式なサポートが少ない商用ツールよりも
- 脆弱性スキャンが限定的基本のvulnコマンドでは
Nmap脆弱性スキャナーの代替ツール
Nmapは多くのユーザーに人気のツールですが、利用可能な脆弱性スキャナーは決してこれだけではありません。オープンソースの脆弱性スキャナーとして、アプリケーション向けにはOSV-ScannerやOWASP Zed Attack Proxy(ZAP)、インフラ向けにはCloudSploitやOpenVASなどがあります。
商用の脆弱性スキャナーも数多く提供されています。最適な脆弱性スキャナーとしては、アプリケーションまたはインフラ向けのInvicti、Tenable.io、ManageEngine’s Vulnerability Manager Plusなどがあり、以下に挙げるものも含まれます:
まとめ:安価で効果的な脆弱性スキャンにNmapを使う
Nmapは、脆弱性を検出したり、商用脆弱性スキャナーの結果を再確認したり、組織のインフラにおける攻撃者から見た侵入機会を効果的に先取りして確認したりできる無料の選択肢です。商用の脆弱性スキャナーを使う組織であっても、誰もがNmapを脆弱性スキャンツールの選択肢として検討すべきです。
次に読む:
この記事は、Julien Mauryが2022年2月8日に執筆し、Chad Kimeが2023年7月14日に改訂しました。





