サービスとバージョンの検出

NmapBeginner
オンラインで実践に進む

はじめに

ネットワークセキュリティやシステム管理において、ポートが開いていることを知るだけでは不十分です。デフォルトでは、ポートスキャナーは標準的なポート番号に基づいて実行中のサービスを推測します(例えば、ポート 80 は常に HTTP Web サーバーであると仮定するなど)。しかし、管理者は任意のポートで任意のサービスを実行できます。

これが、バナー検出やバージョン検出が重要である理由です。ポート番号はヒントに過ぎず、証拠ではありません。実際の環境では、カスタムポート、リバースプロキシ、コンテナフロントエンド、あるいは誤解を招くようなサービス名が頻繁に使用されます。

ターゲットシステムで実際に何が実行されているかを正確に特定するには、開いているポートを調査する必要があります。この実験では、Nmap のバージョン検出機能を探索します。サービスバナーを取得し、正確なソフトウェア名とバージョン番号を特定する方法を学びます。これは脆弱性評価における重要なステップです。

バージョン検出の有効化

このステップでは、Nmap のバージョン検出の基本を学びます。デフォルトでは、Nmap はポートが開いているかどうか、および静的なルックアップテーブルに基づいてそのポートで通常実行されるサービスのみを通知します。実際にどのソフトウェアがリッスンしているかを知るには、サービスを能動的に調査する必要があります。

Nmap コマンドに -sV フラグを追加することで、バージョン検出を有効にできます。これにより、Nmap は開いているポートに対して一連の特定のプローブを送信し、その応答を分析してサービスとそのバージョンを特定します。

言い換えれば、Nmap はポート番号から推測するのをやめ、アプリケーションの動作を直接調査し始めます。

ターミナルで以下のコマンドを実行し、ローカルマシンをスキャンして実行中のサービスのバージョンを検出してください。

nmap -sV -p 80,8080 localhost

以下のような出力が表示されます。

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000010s latency).
PORT     STATE SERVICE VERSION
80/tcp   open  http    nginx 1.18.0 (Ubuntu)
8080/tcp open  http    SimpleHTTPServer 0.6 (Python 3.10.12)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.51 seconds

出力の VERSION 列に注目してください。Nmap はポート 80 が HTTP であると推測するだけでなく、ポートと能動的に通信し、Nginx バージョン 1.18.0 が実行されていることを発見しました。また、ポート 8080 で実行されている Python HTTP サーバーも正常に特定しました。

バージョン検出強度の調整

このステップでは、Nmap のバージョン検出の積極性を制御する方法を学びます。Nmap は 0 から 9 のスケールを使用して、ターゲットサービスに送信するプローブの数を決定します。

デフォルトの強度は 7 です。強度が高いほど、Nmap はより多くのプローブを試行するため、サービスを正確に特定できる可能性が高まりますが、時間がかかります。強度が低いと高速ですが、不明瞭なサービスを特定できない場合があります。これは --version-intensity フラグの後に 0 から 9 の数値を指定することで調整できます。

これは速度と確実性のトレードオフです。ターゲットが不確実または異常に見えるほど、より深い調査が価値を持ちます。

強度を 9 に設定して、非常に積極的なスキャンを試してみましょう。これにより、Nmap はデータベース内のすべてのプローブを開いているポートに対して試行します。以下のコマンドを実行してください。

nmap -sV -p 80,8080 --version-intensity 9 localhost

出力は前のステップと似ていますが、バックグラウンドでは Nmap がより徹底的に調査を行っています。

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000012s latency).
PORT     STATE SERVICE VERSION
80/tcp   open  http    nginx 1.18.0 (Ubuntu)
8080/tcp open  http    SimpleHTTPServer 0.6 (Python 3.10.12)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

また、強度 2 のショートカットとして --version-light フラグを、強度 9 のショートカットとして --version-all フラグを使用することもできます。これらのショートカットを使用すると、正確な数値を覚えなくてもスキャン動作を簡単に調整できます。

ソフトウェアの正確なバージョンの特定

このステップでは、特定のサービスの正確なソフトウェアバージョンを特定し、ドキュメント用に結果を保存することに焦点を当てます。セキュリティ評価を行う際、正確なソフトウェアバージョンの記録を保持することは、既知の脆弱性を見つけるために不可欠です。

すべてのポートをスキャンする代わりに、-p フラグを使用して特定のポートをターゲットにし、-oN フラグを使用して出力をファイルに保存できます。これは、特定のサービスを分離して調査結果をチームと共有したい場合に非常に便利です。

以下のコマンドを実行してポート 80 のみをスキャンし、そのバージョンを検出して、現在のディレクトリの version_scan.txt という名前のファイルに出力を保存してください。

nmap -sV -p 80 localhost -oN version_scan.txt

スキャンが完了したら、cat コマンドを使用して保存されたファイルの内容を確認できます。

cat version_scan.txt

出力には、ポート 80 で実行されている Nginx サーバーの正確なバージョンが表示されます。

## Nmap 7.80 scan initiated ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000015s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

## Nmap done at ...

nginx 1.18.0 のような正確なバージョンを記録することで、脆弱性データベースを検索し、この特定のバージョンに既知のセキュリティ上の欠陥があるかどうかを確認できるようになります。

まとめ

この実験では、Nmap の強力なバージョン検出機能を探索しました。-sV フラグを使用して単純なポートスキャンを超え、サービスを能動的に調査して正確なソフトウェア名とバージョンを発見する方法を学びました。また、--version-intensity を使用してスキャンの強度を調整し、速度と精度のバランスを取る方法や、特定のポートをターゲットにして結果を保存し、脆弱性分析に役立てる方法も学びました。これらのスキルは、正確なネットワークマッピングとセキュリティ監査に不可欠です。