はじめに
「NSE を使用した脆弱性スキャン」の実験へようこそ。
Nmap (Network Mapper) は、ネットワーク探索やセキュリティ監査に使用される強力なオープンソースツールです。その最も柔軟かつ強力な機能の一つが Nmap Scripting Engine (NSE) です。NSE を使用すると、ユーザーは独自のスクリプトを作成・共有し、多種多様なネットワークタスクを自動化できます。
NSE を脆弱性スキャンに使用することは非常に強力ですが、同時にスキャンの意味合いも変化します。単に露出状況を観察するだけでなく、既知の脆弱性を能動的に調査することになるため、スキャン範囲の制御と結果の慎重な解釈がより重要になります。
この実験では、Nmap を単なるポートスキャナーからアクティブな脆弱性スキャナーへと進化させる方法を学びます。vuln といった特定のスクリプトカテゴリを利用して、ターゲットサービスを能動的に調査します。このプロセスを通じて、既知の脆弱性(CVE)や危険なサーバー設定ミスを特定します。実験の終わりには、スクリプトデータベースの更新、カテゴリベースのスキャン実行、HTTP や SMB といった特定サービスの監査、そしてスキャン結果の分析ができるようになります。
NSE スクリプトデータベースの更新
このステップでは、Nmap Scripting Engine (NSE) のデータベースを更新する方法を学びます。
Nmap には、/usr/share/nmap/scripts/ ディレクトリに数百ものスクリプトが同梱されています。これらのスクリプトは、default、discovery、safe、intrusive、vuln、exploit といった目的別に分類されています。
脆弱性スキャンを実行する前に、Nmap の内部スクリプトデータベースを最新の状態に保つことがベストプラクティスです。このデータベースはインデックスとして機能し、Nmap がスクリプトを迅速に検索・分類できるようにします。システムに新しいスクリプトが追加されたり、既存のスクリプトが変更されたりした場合は、Nmap がそれらを正しく利用できるようにデータベースを更新する必要があります。
これは、「検出や評価のためのコンテンツはすぐに陳腐化する」という広範なセキュリティ原則を反映しています。ツールは、それが依存するルール、シグネチャ、テンプレートが最新であって初めてその価値を発揮します。
NSE スクリプトデータベースを更新するには、--script-updatedb 引数を使用します。このコマンドは Nmap インストールディレクトリ内のシステムファイルを変更するため、管理者権限が必要です。
ターミナルで以下のコマンドを実行してください。
sudo nmap --script-updatedb
データベースが正常に更新されたことを示す、以下のような出力が表示されるはずです。
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:25 CST
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 1.09 seconds
これで、Nmap が利用可能なスクリプトとカテゴリのインデックスを正常に更新したことが確認できました。スキャンを開始する準備が整いました。
脆弱性スキャンの実行(vuln カテゴリ)
このステップでは、NSE スクリプトの vuln カテゴリを使用して、ローカルマシン上の既知の脆弱性をスキャンします。
vuln カテゴリには、既知の脆弱性をチェックして報告するために特別に設計されたスクリプトが含まれています。単一のスクリプト名ではなくカテゴリを指定すると、Nmap は発見されたオープンポートに対して、そのカテゴリに属するすべてのスクリプトを自動的に実行します。
これらのスクリプトによる発見事項は「手がかり」であり、侵害の最終的な証拠ではありません。肯定的な結果は、多くの場合「このサービスは既知の問題と一致している可能性がある」ことを意味しており、アナリストによる確認が必要です。
最も正確な結果を得るために、NSE スクリプトとバージョン検出を組み合わせることを強く推奨します。バージョン検出 (-sV) は、オープンポートで実行されているソフトウェアとそのバージョンを正確に特定しようとします。多くの脆弱性スクリプトは、侵入的なプローブを送信する前に、ターゲットが脆弱である可能性があるかどうかを判断するためにこのバージョン情報に依存しています。
バージョン検出と vuln スクリプトカテゴリを使用して、ローカルマシン (localhost) をスキャンします。
以下のコマンドを実行してください。
nmap -sV --script vuln -p 80,139,445 localhost
脆弱性スクリプトは複雑なチェックを行うため、スキャンが完了するまでに 1〜2 分かかる場合があります。出力は以下のようになります。
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:25 CST
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0014s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-enum:
|_ /server-status/: Potentially interesting folder
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| vulners:
| cpe:/a:apache:http_server:2.4.52:
| PACKETSTORM:176334 9.8 https://vulners.com/packetstorm/PACKETSTORM:176334 *EXPLOIT*
| HTTPD:C072933AA965A86DA3E2C9172FFC1569 9.8 https://vulners.com/httpd/HTTPD:C072933AA965A86DA3E2C9172FFC1569
| ... (truncated for brevity)
139/tcp open netbios-ssn Samba smbd 4.6.2
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| vulners:
| cpe:/a:samba:samba:4.6.2:
| SSV:93139 10.0 https://vulners.com/seebug/SSV:93139 *EXPLOIT*
| SAMBA_IS_KNOWN_PIPENAME 10.0 https://vulners.com/canvas/SAMBA_IS_KNOWN_PIPENAME *EXPLOIT*
| ... (truncated for brevity)
445/tcp open netbios-ssn Samba smbd 4.6.2
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| vulners:
| cpe:/a:samba:samba:4.6.2:
| SSV:93139 10.0 https://vulners.com/seebug/SSV:93139 *EXPLOIT*
| ... (truncated for brevity)
Host script results:
|_samba-vuln-cve-2012-1182: Could not negotiate a connection:SMB: ERROR: Server returned less data than it was supposed to (one or more fields are missing); aborting [9]
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: Could not negotiate a connection:SMB: ERROR: Server returned less data than it was supposed to (one or more fields are missing); aborting [9]
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 66.86 seconds
この出力では、Nmap がポート 80 で Apache Web サーバーを、ポート 139 および 445 で Samba サービスを発見しました。vuln カテゴリのスクリプトがこれらのサービスに対して自動的に実行され、興味深い HTTP ディレクトリや既知の SMB 脆弱性などの一般的な問題をチェックしました。
特定サービスの監査(SMB/HTTP など)
このステップでは、カテゴリ全体を実行するのではなく、個別の NSE スクリプトを使用して特定のサービスをターゲットにする方法を学びます。
vuln のようなカテゴリ全体を実行すると、ノイズが多くなり、時間もかかります。セキュリティ評価の過程では、特定のサービス(Web サーバーやファイル共有など)を特定し、それに対してターゲットを絞ったスクリプトを実行したい場合がよくあります。
例えば、http-enum スクリプトは、一般的な Web アプリケーションやサーバーで使用されるディレクトリを列挙します。これは、隠された管理パネルやバックアップフォルダを見つけるのに非常に有効です。スキャンを高速化するために、-p フラグを使用して、サービスが実行されている特定のポート(HTTP ならポート 80 など)のみをスキャンするように Nmap に指示できます。
以下のコマンドを実行して、ローカルの Apache Web サーバーを監査します。
nmap -p 80 --script http-enum localhost
ポート 80 のみに焦点を当てた出力が表示されます。
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000096s latency).
PORT STATE SERVICE
80/tcp open http
| http-enum:
|_ /server-status/: Potentially interesting folder
Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
同様に、Samba (SMB) サービスをターゲットにすることもできます。SMB はネットワークファイル共有プロトコルであり、歴史的にエクスプロイトの標的になりやすいサービスです。smb-os-discovery スクリプトを使用すると、オペレーティングシステムや SMB 設定に関する詳細情報を収集できます。SMB は通常、ポート 139 および 445 で実行されます。
以下のコマンドを実行して、ローカルの SMB サービスを監査します。
nmap -p 139,445 --script smb-os-discovery localhost
出力には、SMB サービスに関する詳細情報が表示されます。
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds
特定のポートとスクリプトをターゲットにすることで、スキャン時間を大幅に短縮し、非常に焦点を絞った実用的な結果を得ることができます。
NSE 出力の分析
最後のステップでは、Nmap のスキャン結果をファイルに保存し、特定のキーワードで出力を分析する方法を学びます。
脆弱性スキャンを行う際、出力は膨大になる可能性があります。後で確認したり、チームと共有したり、他のコマンドラインツールで解析したりするために、結果をファイルに保存することが重要です。Nmap はいくつかの出力形式を提供しています。-oN フラグは、人間が読みやすい通常のテキスト形式で出力を保存します。
ローカルマシンに対して脆弱性スキャンを実行し、結果をプロジェクトディレクトリ内の vuln_scan.txt というファイルに保存します。
以下のコマンドを実行してください。
nmap -sV --script vuln -p 80,139,445 localhost -oN ~/project/vuln_scan.txt
スキャンが完了するまで待ちます。完了すると、結果は ~/project/vuln_scan.txt に安全に保存されます。
次に、このファイルを分析します。実際のシナリオでは、特定の侵害の兆候や重大な脆弱性を探すことになります。grep コマンドを使用してテキストファイルを検索できます。例えば、「VULNERABLE」という単語を(-i フラグを使用して大文字小文字を区別せずに)検索することで、確認された問題を素早く見つけることができます。
以下のコマンドを実行して、出力ファイルを検索します。
grep -i "VULNERABLE" ~/project/vuln_scan.txt
|_ Hosts are all up (not vulnerable).
ファイルが作成され、スキャンデータが含まれていることを確認するために、head コマンドを使用してファイルの最初の数行を表示できます。
head -n 10 ~/project/vuln_scan.txt
標準的な Nmap ヘッダーとスキャンレポートの冒頭が表示されるはずです。
## Nmap 7.80 scan initiated Mon Mar 9 15:27:21 2026 as: nmap -sV --script vuln -p 80,139,445 -oN /home/labex/project/vuln_scan.txt localhost
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000085s latency).
出力を保存して解析することは、セキュリティ専門家にとって不可欠なスキルであり、大量のデータを効率的に管理できるようになります。
まとめ
おめでとうございます!「NSE を使用した脆弱性スキャン」の実験を無事に完了しました。
この実験では、Nmap を標準的なポートスキャナーからアクティブな脆弱性評価ツールへと引き上げる方法を学びました。まず、Nmap Scripting Engine データベースを更新して、最新のスクリプトが利用可能であることを確認しました。次に、vuln カテゴリを使用して、発見されたサービスに対して既知の脆弱性を自動的に調査しました。さらに、HTTP や SMB といった特定のサービスに対して個別のスクリプトでターゲットを絞った監査を行う練習をしました。最後に、スキャン結果をファイルに保存し、コマンドラインツールを使用して効率的に分析する方法を学びました。
これらのスキルは、ネットワークセキュリティ監査および脆弱性管理の強力な基盤となります。



