企業のネットワークセキュリティを維持するためには、定期的な脆弱性診断が欠かせません。
特に、既知の脆弱性情報であるCVE(Common Vulnerabilities and Exposures)に基づいた迅速なチェックは、サイバー攻撃を未然に防ぐための重要なステップとなります。
本記事では、ネットワーク管理の定番ツールであるNmapと、その拡張機能であるNSEスクリプトを用いた簡易的な脆弱性スキャンの実践手順について詳しく見ていきます。
高度な商用スキャナーを導入する前段階として、あるいは日常的なセルフチェックの手法として、Nmapの活用方法を身につけましょう。
NmapとNSEスクリプトの基礎知識
Nmapは、ポートスキャンやネットワーク調査において世界的に利用されているオープンソースのツールです。
その強力な機能の核となっているのが、Nmap Scripting Engine(NSE)と呼ばれるスクリプト拡張機能です。
NSEを利用することで、単なるポートの開閉確認にとどまらず、サービスの詳細なバージョン情報の取得や脆弱性の検知が可能になります。
NSEスクリプトはLua言語で記述されており、世界中のセキュリティエンジニアによって新しい脆弱性に対応したスクリプトが日々提供されています。
Nmap本体に標準で組み込まれているスクリプトだけでも数百種類に及び、それらは「discovery」「auth」「vuln」などのカテゴリに分類されています。
脆弱性スキャンにおいて中心的な役割を果たすのが、「vuln」カテゴリに属するスクリプト群です。
これらを使用することで、ターゲットとなるシステムに特定の脆弱性が存在するかどうかを、簡易的かつ迅速に判定できます。
主要な脆弱性スキャン用スクリプトの選定
NmapでCVEベースのスキャンを行う場合、どのスクリプトを使用するかが重要になります。
デフォルトの「vuln」カテゴリ
Nmapをインストールした時点で、多くの脆弱性検知用スクリプトが標準搭載されています。
これらは主に、過去に大きな影響を与えた深刻な脆弱性をチェックするためのものです。
例えば、SMBプロトコルの脆弱性であるMS17-010(EternalBlue)などを検知するスクリプトが含まれています。
外部スクリプトの活用(nmap-vulnersとvulscan)
より広範囲なCVE情報を網羅したい場合には、サードパーティ製のスクリプトを導入するのが効果的です。
代表的なものに、「nmap-vulners」と「vulscan」があります。
これらは、Nmapが取得したサービス名とバージョン情報を基に、外部の脆弱性データベースを照合する仕組みを持っています。
nmap-vulnersは、Vulners.comが提供するAPIを利用して、検出されたバージョンに関連するCVEリストを素早く表示します。
一方、vulscanはローカルに保存された脆弱性データベースを参照するため、オフライン環境でも利用できるという利点があります。
簡易スキャン実施に向けた環境構築
スキャンを開始する前に、ツールの準備とスクリプトの最新化を行いましょう。
スクリプトデータベースの更新
Nmapが最新のスクリプトを認識できるように、以下のコマンドを実行してデータベースを更新します。
# スクリプトデータベースの更新
sudo nmap --script-updatedb
これにより、新しく追加したスクリプトや標準スクリプトのメタデータが最新の状態になります。
外部リポジトリのクローンと配置
ここでは、非常に有用な「nmap-vulners」の導入手順を例に挙げます。
Nmapのスクリプトディレクトリ(通常は /usr/share/nmap/scripts/)に移動し、GitHubからリポジトリをクローンします。
# Nmapのスクリプトディレクトリへ移動(パスは環境により異なります)
cd /usr/share/nmap/scripts/
# nmap-vulnersをダウンロード
sudo git clone https://github.com/vulnersCom/nmap-vulners.git
インストール後は、再度 nmap --script-updatedb を実行することを忘れないでください。
実践!NmapによるCVE簡易スキャンの手順
準備が整ったら、実際にターゲットに対してスキャンを実行してみましょう。
基本的な脆弱性スキャンの実行
まずは、標準の「vuln」カテゴリを使用して、既知の脆弱性を一括でチェックする方法です。
# 標準のvulnカテゴリを使用したスキャン
# -sV はサービスバージョン検出を有効にするオプションです
nmap -sV --script=vuln [ターゲットIPアドレス]
このコマンドは、ターゲットの開いているポートを特定し、それぞれのサービスに対して該当する脆弱性チェックを試行します。
nmap-vulnersを使用した効率的な検知
次に、外部データベースを活用して、より多くのCVE情報を取得する手法です。
# nmap-vulnersを使用した詳細なCVE検知
nmap -sV --script=nmap-vulners [ターゲットIPアドレス]
このスキャンを実行すると、以下のような形式で結果が出力されます。
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.41
|_http-server-header: Apache/2.4.41 (Ubuntu)
| nmap-vulners:
| cpe:/a:apache:http_server:2.4.41:
| CVE-2021-40438 9.0 https://vulners.com/cve/CVE-2021-40438
| CVE-2020-13950 7.5 https://vulners.com/cve/CVE-2020-13950
|_ CVE-2019-17567 5.0 https://vulners.com/cve/CVE-2019-17567
出力結果には、CVE番号、CVSSスコア、詳細情報へのリンクが含まれており、対策の優先順位付けに役立ちます。
実行オプションの組み合わせによる最適化
スキャンの精度を高め、かつ時間を短縮するためには、オプションの使い分けが重要です。
| オプション | 説明 |
|---|---|
| -sV | サービスとバージョンの詳細を検出します。脆弱性スキャンには必須です。 |
| -p- | 全ポート(1-65535)をスキャン対象にします。見落としを防げますが時間はかかります。 |
| -T4 | スキャンのタイミング(速度)を指定します。4は高速設定です。 |
| –script-args | スクリプトに引数を渡します。例えば、最小CVSSスコアでフィルタリング可能です。 |
スキャン速度と精度のバランス
広大なネットワーク範囲をスキャンする場合、全ポート(-p-)のチェックは現実的ではない場合があります。
まずは、ウェルノウンポート(主要な1000ポート)に絞ってスキャンを行い、怪しいサービスが見つかった場合にのみ詳細スキャンを行うのが定石です。
スキャン結果の読み解き方とレポート活用
スキャンの実行結果が得られたら、次はその内容を正しく解釈する必要があります。
Nmapが出力するCVEリストの中で、特に注目すべきはCVSS(共通脆弱性評価システム)のスコアです。
一般的に、スコアが7.0以上のものは「重要(High)」、9.0以上のものは「緊急(Critical)」と分類されます。
インターネットに公開されているサーバーでこれらの高スコアな脆弱性が検出された場合、直ちにパッチの適用や設定変更を検討してください。
また、Nmapの結果をXML形式で出力しておくことで、他のツールとの連携や長期的な管理が容易になります。
# 結果をXML形式で保存する
nmap -sV --script=nmap-vulners -oX scan_report.xml [ターゲットIPアドレス]
運用上の重要な注意点と倫理
脆弱性スキャンは非常に強力な手法ですが、正しく運用しなければトラブルの原因となります。
スキャン対象の許可と法的リスク
最も重要なルールは、「許可を得ていない対象に対してスキャンを行わない」ことです。
自分自身の管理下にあるサーバーや、明示的に許可を得たネットワーク以外へのスキャンは、不正アクセス禁止法に触れる恐れがあります。
企業内で実施する場合も、システム部門やセキュリティ担当部署への事前連絡と承認を必ず得てください。
サービスへの負荷と偽陽性への対策
NSEスクリプトの中には、実際にリクエストを送信して脆弱性を確かめるものがあります。
そのため、ターゲットとなるサーバーに負荷がかかったり、サービスが一時的に停止したりするリスクがゼロではありません。
本番稼働中のクリティカルなシステムに対しては、業務時間外に実施するなどの配慮が必要です。
また、Nmapの判定はあくまでバージョン情報に基づいた「簡易的な推測」であることが多く、「偽陽性(実際には脆弱性がないのに検出されること)」が含まれる可能性を常に考慮してください。
OSベンダーがバックポート(修正内容だけを古いバージョンに適用すること)を行っている場合、バージョン番号が古いままでも脆弱性が修正されていることがあります。
まとめ
NmapとNSEスクリプトを組み合わせることで、専門的な脆弱性診断ツールを導入せずとも、高精度なチェックが可能になります。
特に、nmap-vulnersのような外部データベース連携スクリプトは、最新の脅威に迅速に対応するための強力な武器となります。
しかし、Nmapによるスキャンはあくまで「現状の把握」を目的とした簡易的なものです。
検出されたCVEについては、必ず公式サイトやJVN(Japan Vulnerability Notes)などの信頼できる情報源で詳細を確認してください。
本記事で紹介した手順を参考に、安全なネットワーク運用の一環として、定期的な簡易スキャンを取り入れてみてはいかがでしょうか。
セキュリティ対策の第一歩は、自らの管理下にあるシステムの現状を正確に知ることから始まります。
