Nmap とスクリプトエンジンでネットワークサービスを検出する

NmapNmapBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Nmap ネットワークスキャンツールの強力な機能である Nmap スクリプトエンジン (NSE) について学びます。NSE は Nmap の機能を拡張し、高度なネットワーク探索、脆弱性検出、およびサービス列挙を実行できるようにします。

このエンジンは、現代のネットワーク管理者、セキュリティ専門家、およびエシカルハッカーにとって重要です。彼らはネットワークトポロジーを理解し、潜在的なセキュリティ問題を特定し、ネットワークサービスに関する詳細な情報を収集する必要があります。この実験では、ローカルネットワークサービスを設定し、Nmap を使用してそれを探索および分析します。最後まで学習することで、Nmap とそのスクリプトエンジンを使用してネットワークサービスを探索し、データを収集する基本的な方法を理解するようになります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/installation -.-> lab-415931{{"Nmap とスクリプトエンジンでネットワークサービスを検出する"}} nmap/save_output -.-> lab-415931{{"Nmap とスクリプトエンジンでネットワークサービスを検出する"}} nmap/port_scanning -.-> lab-415931{{"Nmap とスクリプトエンジンでネットワークサービスを検出する"}} nmap/target_specification -.-> lab-415931{{"Nmap とスクリプトエンジンでネットワークサービスを検出する"}} nmap/service_detection -.-> lab-415931{{"Nmap とスクリプトエンジンでネットワークサービスを検出する"}} end

スキャン用のローカルネットワークサービスのセットアップ

このステップでは、簡単なネットワークサービスを作成します。なぜこれをするのでしょうか?サイバーセキュリティの現実世界では、ネットワーク上で動作しているサービスを見つけて分析する必要があることがよくあります。この簡単なサービスを作成することで、後で Nmap を使ってスキャンする練習をすることができます。これは、実際の状況で行うのと同じです。

まず、ターミナルを開く必要があります。ターミナルは、コマンドを入力してコンピュータと対話するためのテキストベースのインターフェースです。ターミナルを開いたら、プロジェクトディレクトリにいることを確認します。プロジェクトディレクトリは、このプロジェクトに関連するすべてのファイルが保存されているフォルダのようなものです。プロジェクトディレクトリに移動するには、ターミナルに以下のコマンドを入力します。

cd /home/labex/project

次に、簡単な HTML ファイルを作成します。HTML は HyperText Markup Language の略で、ウェブページを作成するために使用されます。このファイルは、サーバーによってホストされます。これは、インターネット上で見るウェブページと同じです。このファイルの内容は、実際のウェブサーバーがユーザーに提供するものです。ファイルを作成するには、以下のコマンドを使用します。

echo "<h1>Welcome to the hidden treasure chamber</h1>" > treasure.html

このコマンドは 2 つのことを行います。まず、HTML 見出しを含む文字列を作成します。次に、その文字列を treasure.html という名前のファイルにリダイレクトします。ファイルが正しく作成されたかどうかを確認するには、cat コマンドを使用できます。cat コマンドは、ファイルの内容を表示するために使用されます。ターミナルに以下のコマンドを入力します。

cat treasure.html

すべて正常に進んだ場合、先ほど追加した HTML 内容が表示されるはずです。

<h1>Welcome to the hidden treasure chamber</h1>

次に、簡単な HTTP サーバーを起動します。HTTP は HyperText Transfer Protocol の略で、インターネット上でウェブページを転送するために使用されるプロトコルです。Python の組み込みモジュールを使用してこのサーバーを起動します。このサーバーはポート 8000 で待機します。ポートは、ネットワークトラフィックがコンピュータに入ったり出たりする「ドア」のようなものです。サーバーは、現在のディレクトリ(つまり、先ほど移動したプロジェクトディレクトリ)からファイルを提供します。サーバーを起動するには、ターミナルに以下のコマンドを入力します。

python3 -m http.server 8000

このコマンドを実行した後、以下のような出力が表示されるはずです。

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

この出力は、HTTP サーバーが現在実行中で、ポート 8000 で接続を待機していることを示しています。このターミナルウィンドウを開いたままにしておくようにしてください。閉じると、サーバーが停止し、後で Nmap でスキャンすることができなくなります。

Nmap を使用したネットワークサービスの探索

ネットワークサービスのセットアップが成功したので、次は Nmap を使ってこのサービスを探索し、分析しましょう。Nmap は Network Mapper の略で、有名で強力なオープンソースツールです。このツールは、ネットワーク上に存在するデバイスやサービスを見つけるネットワーク探索や、潜在的なセキュリティリスクを特定するセキュリティ監査など、幅広い用途で使用されています。

まず、新しいターミナルウィンドウを開きます。HTTP サーバーが動作している前のターミナルウィンドウは開いたままにしておいてください。新しいターミナルを開いたら、プロジェクトディレクトリに移動する必要があります。このディレクトリからこのプロジェクトに関連するすべてのコマンドを実行するため、この手順は重要です。以下のコマンドを使用してディレクトリを変更します。

cd /home/labex/project

まずは基本的なポートスキャンから始めましょう。ポートスキャンは、デバイス上のどのポートが開いてサービスを実行しているかを確認する手法です。ポートは、ネットワークトラフィックがデバイスに出入りする「ドア」のようなものです。今回は、現在作業しているマシンを指すローカルホスト (localhost) のポート 8000 をスキャンします。以下のコマンドを実行します。

nmap -p 8000 localhost

このコマンドは、Nmap に対してローカルマシンのポート 8000 を特定的にスキャンするよう指示します。コマンドを実行すると、以下のような出力が表示されるはずです。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

この出力から、ポート 8000 が開いていることがわかります。つまり、そのポートでサービスが実行されています。「http - alt」は、Nmap が代替 HTTP サービスを識別するデフォルトの方法です。

次に、このサービスに関するより詳細な情報を収集します。Nmap で -sV フラグを使用します。このフラグは、Nmap に対して実行中のサービスのバージョンを特定しようとするよう指示します。サービスのバージョンを知ることは、特定のバージョンに関連する既知の脆弱性を特定するのに役立つため、セキュリティ上重要です。以下のコマンドを実行します。

sudo nmap -sV -p 8000 localhost > /home/labex/project/nmap_output_service_version.txt

このコマンドは、ポート 8000 でバージョン検出スキャンを実行します。sudo は、一部の Nmap 操作に必要な場合がある管理者権限でコマンドを実行するために使用されます。> 記号は、コマンドの出力を nmap_output_service_version.txt という名前のファイルにリダイレクトします。これにより、後で分析するために結果を保存することができます。

結果を表示するには、以下のコマンドを使用します。

cat /home/labex/project/nmap_output_service_version.txt

HTTP サービスに関するより詳細な情報、可能であればソフトウェアのバージョンが表示されるはずです。出力は次のようになるかもしれません。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).

PORT     STATE SERVICE VERSION
8000/tcp open  http    Python http.server 3.10.X (Python 3.10.X)

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

この出力から、サービスが Python で動作する HTTP サーバーであることが確認できます。これは、前のステップで設定した内容と一致しています。

Nmap スクリプトエンジン (NSE) の使用

Nmap スクリプトエンジン (NSE) は、Lua スクリプトを使用して Nmap の機能を拡張することができる強力なツールです。Lua は軽量なプログラミング言語で、これらのスクリプトは様々なタスクを実行することができます。たとえば、高度なサービス検出に役立ち、ネットワークデバイス上で動作しているサービスをより正確に特定することができます。また、システムのセキュリティ上の弱点を見つけるために重要な脆弱性スキャンにも使用できます。

では、NSE を使って HTTP サーバーに関するより詳細な情報を収集しましょう。NSE スクリプトは様々なカテゴリに分類されています。これらのカテゴリには、一般的に使用される安全なスクリプトが含まれる「default」、ネットワークサービスを見つけるための「discovery」、ターゲットシステムに何らかの損害を与えない「safe」、脆弱性スキャンに使用される「vuln」などがあります。

まず、HTTP に関連するスクリプトがどれだけあるかを確認しましょう。これを行うには、以下のコマンドを使用します。

ls /usr/share/nmap/scripts/http*

このコマンドは、/usr/share/nmap/scripts/ ディレクトリ内の http で始まるすべての NSE スクリプトをリスト表示します。このコマンドを実行すると、HTTP サービスとやり取りするように設計されたスクリプトのリストが表示されます。これらのスクリプトは、ウェブページのタイトルを取得するなどの単純な情報収集から、HTTP サービスの脆弱性スキャンなどのより複雑なタスクまで、様々な機能を実行することができます。

では、http-title スクリプトを使用してウェブページのタイトルを抽出しましょう。http-title スクリプトは、HTTP サービスを調べて、それが提供するウェブページのタイトルを見つけるように設計されています。このスクリプトを実行するコマンドは次のとおりです。

sudo nmap --script=http-title -p 8000 localhost > /home/labex/project/nmap_script_output.txt

このコマンドでは、一部の Nmap 操作に必要な場合があるため、sudo を使用して管理者権限でコマンドを実行します。nmap はメインコマンドで、--script=http-title は Nmap に http-title スクリプトを使用するよう指示します。-p 8000 は、HTTP サーバーが動作しているポート 8000 をターゲットにすることを指定します。localhost はターゲットで、つまり自分自身のマシンでスキャンを実行しています。> 記号は、コマンドの出力を /home/labex/project/nmap_script_output.txt ファイルにリダイレクトします。

コマンドの出力を確認しましょう。これは以下のコマンドを使用して行うことができます。

cat /home/labex/project/nmap_script_output.txt

cat コマンドは、ファイルの内容を表示するために使用されます。このコマンドを実行すると、ウェブページのタイトルに関する情報を含む出力が表示されるはずです。出力は次のようになるかもしれません。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000040s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt
|_http-title: Directory listing for /

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

では、複数のスクリプトを使用してより包括的なスキャンを試してみましょう。「default」カテゴリには、ターゲットに関する有用な情報を提供する安全なスクリプトが含まれています。ポート 8000 の HTTP サーバーに対して「default」カテゴリのすべてのスクリプトを実行するには、以下のコマンドを使用します。

sudo nmap --script=default -p 8000 localhost > /home/labex/project/nmap_default_scripts.txt

このコマンドは前のコマンドと似ていますが、単一のスクリプトを指定する代わりに、Nmap に「default」カテゴリのすべてのスクリプトを実行するよう指示しています。

このスキャンの結果を調べましょう。これは再び cat コマンドを使用して行うことができます。

cat /home/labex/project/nmap_default_scripts.txt

出力には、デフォルトで実行される様々な NSE スクリプトによって収集された、HTTP サーバーに関するより詳細な情報が含まれています。

最後に、特定のスクリプトについて詳しく学ぶために、スクリプトのヘルプ機能を探索しましょう。http-title スクリプトについてもっと知りたい場合は、以下のコマンドを使用できます。

nmap --script-help=http-title

このコマンドは、http-title スクリプトのドキュメントを表示します。ドキュメントには、スクリプトの目的、使用方法、および出力の形式が含まれています。特定のタスクで NSE を使用する際に、スクリプトのドキュメントを理解することは、スクリプトが何をするのか、そして正しく使用する方法を知るために不可欠です。

まとめ

この実験では、ネットワークサービスの探索と分析に Nmap スクリプトエンジン (NSE) を使用する方法を学びました。まず、ローカルの HTTP サーバーをセットアップし、次に様々な Nmap コマンドを使用してこのサービスをスキャンし、情報を収集しました。

テスト用の基本的なネットワークサービスをセットアップする、Nmap を使って開いているポートと実行中のサービスを見つける、-sV フラグを使ってバージョン検出を行う、NSE スクリプトを活用して詳細なサービス情報を取得する、Nmap のスキャン結果を解釈してサービスの特性を理解するなどのスキルを習得しました。これらのスキルは、ネットワーク管理者、セキュリティ専門家、エシカルハッカーにとって不可欠です。サイバーセキュリティの分野でさらに進むにつれて、Nmap とそのスクリプトエンジンはネットワーク探索とセキュリティ評価に役立つでしょう。