ネットワークスキャンのための Nmap の基本を学ぶ

CybersecurityCybersecurityBeginner
今すぐ練習

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

はじめに

この実験では、非常に人気があり汎用性の高いネットワークセキュリティツールである Nmap を使用したネットワークスキャンの基本を学びます。Nmap は Network Mapper の略で、ネットワーク探索とセキュリティ監査のためのオープンソースユーティリティです。これは、コンピュータネットワーク上のホストとサービスを特定するのに役立ち、サイバーセキュリティの専門家が潜在的な脆弱性を見つけ、システムのセキュリティを保護するために不可欠です。

この実験を通じて、基本的なホスト探索、オープンポートの特定、および実行中のサービスの検出を行う方法を学びます。これらのスキルは、ネットワーク管理者やセキュリティ専門家がネットワークインフラストラクチャを監視し、潜在的なセキュリティ問題を見つけ、適切なシステム保護を確保するために重要です。最後には、Nmap を使用したネットワークスキャンとホスト探索の堅固な基礎を身につけることができます。

Nmap の理解と環境のセットアップ

Nmap とは何か?

Nmap は Network Mapper の略で、無料のオープンソースツールです。主にネットワーク探索とセキュリティ監査に使用されます。多くのシステムおよびネットワーク管理者にとって、Nmap は非常に便利なユーティリティです。以下は、Nmap が役立つ一般的なタスクです。

  • ネットワークインベントリとサービスアップグレードスケジュールの管理:Nmap を使用すると、ネットワーク上にあるデバイスとそれらが実行しているサービスを把握することができます。この情報は、これらのサービスをいつアップグレードするかを計画するために重要です。
  • ホストまたはサービスの稼働時間の監視:特定のホストまたはサービスが稼働しているかどうかを確認するために Nmap を使用できます。これは、ネットワークの信頼性を確保するために重要です。
  • ターゲットシステム上のオープンポートの発見:オープンポートは攻撃者の潜在的な侵入経路となり得ます。Nmap を使用することで、ターゲットシステム上でどのポートが開いているかを調べることができ、必要に応じてそれらを保護することができます。
  • セキュリティ監査と脆弱性の特定:Nmap は、ネットワーク内のセキュリティ脆弱性を特定するのにも役立ちます。攻撃者が利用する可能性のある弱点があるかどうかを検出することができます。

テスト環境のセットアップ

Nmap を使用してスキャンを開始する前に、スキャン対象のターゲットが必要です。この場合、Python の組み込み機能を使用して簡単な HTTP サーバーをセットアップします。

まず、プロジェクトディレクトリに移動する必要があります。ここには、この実験に関連するすべてのファイルが保存されます。これを行うには、ターミナルで cd コマンドを使用します。cd コマンドは "change directory" の略です。以下がそのコマンドです。

cd /home/labex/project

正しいディレクトリに移動したら、簡単な HTML ファイルを作成します。このファイルは、ウェブサーバーによって提供されます。echo コマンドを使用して HTML コンテンツを作成し、> 演算子を使用してそのコンテンツを index.html という名前のファイルにリダイレクトします。index.html ファイルは、ウェブサイトのメインページの一般的な名前です。以下がそのコマンドです。

echo "<html><body><h1>Test Web Server for Nmap Scanning</h1></body></html>" > index.html

ファイルが正しく作成されたことを確認するために、cat コマンドを使用してその内容を表示できます。cat コマンドは "concatenate" の略で、ファイルの内容を表示するためによく使用されます。以下がそのコマンドです。

cat index.html

すべてが正常に行われた場合、以下の HTML コンテンツが表示されるはずです。

<html><body><h1>Test Web Server for Nmap Scanning</h1></body></html>

これで、簡単な HTTP サーバーを起動する準備ができました。Python の組み込み http.server モジュールを使用して、ポート 8000 でサーバーを起動します。コマンドの最後の & は重要です。これにより、サーバーがバックグラウンドで実行されるため、サーバーが実行中でもターミナルを他のコマンドに使用できます。以下がそのコマンドです。

python3 -m http.server 8000 &

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

[1] 1234
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

これで、ポート 8000 でウェブサーバーが実行されています。このサーバーは、IP アドレス 127.0.0.1 のローカルマシン上で実行されています。このローカルサーバーが、Nmap スキャンのターゲットになります。

Nmap を使用した基本的なホスト探索

ホスト探索技術

ホスト探索(ping スキャンとも呼ばれます)は、ネットワークセキュリティにおける基本的なプロセスです。これは、ネットワーク上で現在稼働しているホストを特定するのに役立ちます。ネットワークにアクティブに接続されているデバイスがあるかどうかを確認する方法と考えてください。強力なネットワーク探索およびセキュリティ監査ツールである Nmap は、ホスト探索のためのいくつかの方法を提供しています。

  • ICMP Echo Requests (ping):これは、ホストに単純な「こんにちは」メッセージを送信し、応答を待つようなものです。ホストが稼働している場合、応答を返し、アクティブであることを知らせます。
  • 特定のポートへの TCP SYN スキャン:この方法は、ホストの特定のポートに SYN パケットを送信します。ホストが応答する場合、そのポートが開いており、ホストがアクティブである可能性が高いことを示します。
  • TCP ACK スキャン:TCP SYN スキャンに似ていますが、ACK パケットを使用します。特定のネットワーク環境で役立つことがあります。
  • UDP スキャン:UDP は別のタイプのネットワークプロトコルです。UDP スキャンは、ホストの UDP ポートが開いているかどうかを確認し、これもホストがアクティブであるかどうかを判断するのに役立ちます。

このステップでは、基本的な ping スキャンから始めて、ローカルホストがアクティブであるかどうかを確認します。ローカルホストは、現在作業しているデバイスであり、その IP アドレスは 127.0.0.1 です。

ping スキャンの実行

Nmap を使用して基本的な ping スキャンを実行しましょう。-sn フラグを使用します。これは Nmap の重要なオプションです。このフラグは、Nmap にホスト探索のみを行い、ポートスキャンプロセスをスキップするよう指示します。ポートスキャンは、特に大規模なネットワークでは時間がかかる場合があるため、このフラグを使用すると、ホストが稼働しているかどうかをすばやく確認できます。

nmap -sn 127.0.0.1

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-15 12:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

この出力は、ローカルホスト (127.0.0.1) が稼働していることを示しています。レイテンシ値 (0.000097s) は、ホストが ping 要求に応答するのにかかった時間を示しています。レイテンシが低いほど、ホストの応答が速いことを意味します。

ここで、スキャン結果を将来的な参照のために保存するのは良い習慣です。これは、Nmap コマンドの出力をファイルにリダイレクトすることで行えます。

nmap -sn 127.0.0.1 > /home/labex/project/host_scan.txt

> 記号は、左側のコマンドの出力を右側のファイルにリダイレクトするために使用されます。この場合、ping スキャンの結果は host_scan.txt ファイルに保存されます。

スキャン結果が正しく保存されたことを確認するために、ファイルの内容を表示しましょう。

cat /home/labex/project/host_scan.txt

cat コマンドは、ファイルの内容を表示するために使用されます。このコマンドを実行すると、先ほどターミナルに表示されたのと同様の出力が表示されるはずです。

このタイプのスキャンは非常に有用です。詳細なポートスキャンに時間を費やすことなく、ネットワーク上のアクティブなホストをすばやく特定することができます。これは、すべてのホストをポートスキャンするのに長時間かかる大規模なネットワークを扱う場合に特に役立ちます。

ポートスキャンとサービス検出

ポートスキャンの理解

ポートスキャンは、ネットワークセキュリティにおける基本的な技術です。ネットワークにおいて、ポートは異なるサービスが通信するための「ドア」のようなものです。ウェブサーバー、メールサーバー、ファイル転送サービスなど、各サービスは特定のポートを使用してデータを送受信します。ポートスキャンは、ネットワーク上のどのポートが開いており、潜在的にサービスが稼働しているかを判断する方法です。この情報は、いくつかの理由から重要です。

  • システム上で稼働しているサービスの特定:どのポートが開いているかを知ることで、特定のシステム上で利用可能なサービスを把握することができます。たとえば、ポート 80 が開いている場合、通常はウェブサーバーが稼働していることを意味します。
  • 潜在的なセキュリティ脆弱性の発見:適切に設定されていない場合、開いているポートはセキュリティ上のリスクとなり得ます。一部のサービスには既知の脆弱性がある場合があり、ポートをスキャンすることで、これらの潜在的な弱点を特定することができます。
  • ファイアウォール設定の検証:ファイアウォールは、ネットワークトラフィックを制御するために使用されます。ポートスキャンを使用すると、ファイアウォールが特定のポートをブロックまたは許可するように正しく設定されているかどうかを確認することができます。
  • ネットワークのトラブルシューティング:ネットワーク上で問題が発生している場合、ポートスキャンを使用すると、特定のサービスがアクセスできないのが、対応するポートが閉じているためかどうかを特定することができます。

基本的なポートスキャン

ローカルホストに対して基本的なポートスキャンを実行しましょう。ローカルホストはあなた自身のコンピューターであり、IP アドレス 127.0.0.1 で表されます。特に、HTTP サーバーが稼働しているポート 8000 を対象とします。これを行うために、ネットワーク探索とセキュリティ監査に強力なツールである nmap コマンドを使用します。

nmap -p 8000 127.0.0.1

このコマンドでは、-p オプションを使用してスキャンするポートを指定しています。つまり、nmap に対して、ローカルホストのポート 8000 をスキャンするよう指示しています。

以下のような出力が表示されるはずです。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-15 12:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

この出力は、ポート 8000 が開いており、Nmap が "http-alt"(代替 HTTP ポート)と識別するサービスが稼働していることを示しています。これは、ポート 8000 で HTTP サービスに似たサービスが稼働していることを意味します。

結果をファイルに保存しましょう。結果を保存することは、後で参照したり、他の人と共有したりすることができるため便利です。結果を保存するには、コマンドの出力をファイルにリダイレクトする > 演算子を使用します。

nmap -p 8000 127.0.0.1 > /home/labex/project/service_scan.txt

では、ファイルの内容を表示しましょう。ファイルの内容を表示するために使用される cat コマンドを使用することができます。

cat /home/labex/project/service_scan.txt

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

次に、Nmap のサービスバージョン検出機能を使用して、ポート 8000 で稼働しているサービスに関する詳細情報を取得しましょう。サービスのバージョンを知ることは重要です。なぜなら、異なるバージョンには異なるセキュリティ脆弱性が存在する可能性があるからです。

nmap -p 8000 -sV 127.0.0.1

-sV フラグは、Nmap に対して、開いているポートを調査してサービスとバージョン情報を特定するよう指示します。このコマンドを実行すると、Nmap は開いているポートに特殊なパケットを送信し、どのサービスが稼働しているか、そのバージョンは何かを判断しようとします。

以下のような出力が表示されるかもしれません。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-15 12:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

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

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

この出力は、より詳細な情報を提供しており、ポート 8000 のサービスが Python 3.10.6 上で稼働する Python HTTP サーバーであることを示しています。このような情報は、セキュリティ評価において貴重です。なぜなら、異なるバージョンには既知の脆弱性が存在する可能性があるからです。たとえば、Python 3.10.6 にセキュリティ脆弱性がある場合、それを修正するための措置を講じたり、より安全なバージョンにアップグレードしたりすることができます。

高度な Nmap スキャン技術

高度なスキャンオプションの理解

Nmap は、多くの高度なスキャンオプションを提供する強力なツールです。これらのオプションを使用すると、ターゲットシステムについてより深い洞察を得ることができます。このステップでは、高度なスキャンの 3 つの重要な側面を探索します。

  1. OS 検出:これは、ターゲットで稼働しているオペレーティングシステムを特定するプロセスです。オペレーティングシステムを知ることで、ターゲットマシンの潜在的な脆弱性とセキュリティ機能を理解することができます。
  2. 包括的なスキャン:これは、複数のスキャン技術を組み合わせて、ターゲットについてより詳細で完全な情報を得ることを意味します。異なるスキャン方法を組み合わせることで、ターゲットの開いているポート、サービス、およびオペレーティングシステムに関するより多くの情報を明らかにすることができます。
  3. 出力形式の設定:スキャン結果を異なる形式で保存することは、分析において重要です。異なる形式は、異なる分析ツールや目的に適しています。たとえば、XML 形式は、プログラミング言語でのさらなる処理に適しており、grep で読み取り可能な形式は、テキストベースの迅速な分析に便利です。

OS 検出

Nmap は、ターゲットマシンで稼働しているオペレーティングシステムを特定しようとする機能を持っています。これを行うには、-O フラグを使用します。ただし、この操作には管理者権限が必要です。なぜなら、ターゲットシステムのより詳細な調査を伴うからです。

sudo nmap -O 127.0.0.1

このコマンドを実行すると、以下のような出力が表示されるかもしれません。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-15 12:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8000/tcp open  http-alt
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 0 hops

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

この出力は、オペレーティングシステムに関する貴重な情報を提供しています。この場合、システムで稼働している Linux のバージョンはおそらく 4.15 から 5.6 の間であることを示しています。

包括的なスキャン

次に、いくつかの Nmap 機能を組み合わせた、より包括的なスキャンを実行しましょう。これにより、ターゲットシステムについてより詳細な情報を得ることができます。

sudo nmap -sS -sV -O -p 1-1000 127.0.0.1

このコマンドにはいくつかの重要なオプションが含まれています。

  • -sS:これは TCP SYN スキャンで、ステルススキャンとも呼ばれます。完全な TCP 接続を完了しないため、侵入検知システムに検知されにくいという特徴があります。
  • -sV:このオプションは、サービスバージョンの検出を有効にします。開いているポートで稼働しているサービスのバージョンを特定しようとします。これは、潜在的な脆弱性を特定するのに役立ちます。
  • -O:前に見たように、これは OS 検出用です。
  • -p 1-1000:これは、ポート 1 から 1000 までをスキャンすることを指定しています。

この包括的なスキャンを実行した後、後で分析するために結果を保存するのが良い考えです。

sudo nmap -sS -sV -O -p 1-1000 127.0.0.1 > /home/labex/project/comprehensive_scan.txt

保存したファイルの内容を表示するには、以下のコマンドを使用できます。

cat /home/labex/project/comprehensive_scan.txt

出力形式の設定

Nmap を使用すると、スキャン結果を異なる形式で出力することができ、データの分析が容易になります。まず、スキャン結果を XML 形式で保存してみましょう。

sudo nmap -sS -sV -p 8000 127.0.0.1 -oX /home/labex/project/scan_results.xml

-oX フラグは、Nmap に結果を XML 形式で保存するよう指示するために使用されます。XML は構造化された形式であり、プログラミング言語や他のツールで容易に解析して、さらなる分析を行うことができます。

また、grep や他のテキスト処理ツールで読み取りやすい形式で結果を保存することもできます。

sudo nmap -sS -sV -p 8000 127.0.0.1 -oG /home/labex/project/scan_results.grep

grep で読み取り可能な出力の内容を表示するには、以下のコマンドを使用できます。

cat /home/labex/project/scan_results.grep

この形式は、スクリプトやコマンドラインツールで結果を解析するのに非常に便利です。特定の情報をすばやく検索することができます。

スキャン結果の分析と解釈

Nmap 出力の理解

Nmap を使ってネットワークをスキャンすると、その出力には多くの詳細情報が含まれます。しかし、ネットワーク監視とセキュリティ評価を最大限に活用するには、これらの結果が実際に何を意味するのかを理解する必要があります。では、Nmap の出力の主要部分を分解してみましょう。

ポートの状態

ポートはネットワークにおける「ドア」のようなものです。異なる種類のネットワークトラフィックがデバイスに出入りするための通路となります。Nmap は、ポートについていくつかの可能な状態を報告します。

  • open:これは、ターゲットデバイス上のアプリケーションがこのポートで接続を受け入れるためにアクティブに待機していることを意味します。たとえば、ウェブサーバーはポート 80 または 443 で待機していることがあります。
  • closed:ポートは到達可能ですが、現在そのポートで待機しているアプリケーションはありません。ドアが開いているが、中に誰もいない状態のようなものです。
  • filtered:ファイアウォールまたは他のネットワーク障害物がポートをブロックしています。ドアに警備員が立っていて、アクセスを阻止しているような状況です。
  • unfiltered:ポートはアクセス可能ですが、Nmap はそのポートが開いているか閉じているかを判断できません。曇った窓越しに見て、中に誰かがいるかどうかがわからない状態のようなものです。
  • open|filtered:Nmap はポートが開いているかフィルタリングされているかを判断できません。少し不確定な状態です。
  • closed|filtered:同様に、Nmap はポートが閉じているかフィルタリングされているかを判断できません。

サービス情報

Nmap でサービス検出オプション (-sV) を使用すると、各開いているポートで稼働しているサービスを特定しようとします。これには、ソフトウェア名やそのバージョンなどの詳細が含まれます。サービスとそのバージョンを知ることは重要です。なぜなら、潜在的なセキュリティ脆弱性を特定するのに役立つからです。

OS 検出

OS 検出オプション (-O) を使用すると、Nmap はターゲットデバイスで稼働しているオペレーティングシステムをできる限り正確に推測します。この情報は、ターゲットの全体的なセキュリティ態勢を理解するのに役立ちます。なぜなら、異なるオペレーティングシステムには異なるセキュリティ機能と脆弱性があるからです。

要約レポートの作成

ここで、Nmap の出力を理解したので、調査結果の要約レポートを作成しましょう。まず、ローカルネットワークインターフェイスをスキャンして、より興味深い結果を得る必要があります。

ip addr show | grep "inet " | grep -v "127.0.0.1"

このコマンドは、すべてのネットワークインターフェイスとそれらの IP アドレスを表示します。メインのインターフェイスを見つける必要があります。通常、これは 192.168.x.x または 10.x.x.x で始まります。これは、スキャンの対象となる正しいネットワークを特定するために重要です。

必要な情報が揃ったら、簡単な要約レポートを作成することができます。以下のコマンドは、スキャンの要約を含む Markdown ファイルを作成します。

echo "## Network Scan Summary Report" > /home/labex/project/scan_summary.md
echo "### Date: $(date)" >> /home/labex/project/scan_summary.md
echo "### Target: 127.0.0.1" >> /home/labex/project/scan_summary.md
echo -e "\n#### Open Ports and Services" >> /home/labex/project/scan_summary.md
echo "Port 8000: HTTP service (Python HTTP Server)" >> /home/labex/project/scan_summary.md
echo -e "\n#### Security Recommendations" >> /home/labex/project/scan_summary.md
echo "1. Ensure all services are necessary and up-to-date" >> /home/labex/project/scan_summary.md
echo "2. Consider implementing firewall rules to restrict access to sensitive services" >> /home/labex/project/scan_summary.md
echo "3. Regularly scan for new open ports that might indicate unauthorized services" >> /home/labex/project/scan_summary.md

レポートを作成した後、記録した内容を確認するために表示しましょう。

cat /home/labex/project/scan_summary.md

ネットワークスキャンのベストプラクティス

ネットワークスキャンを行う際には、安全かつ責任を持って行うためにいくつかのベストプラクティスに従うことが重要です。

許可を取得する

自分が所有していないネットワークをスキャンする前に、常に許可を取得してください。許可なくスキャンすることは、侵入行為と見なされる可能性があり、違法で非倫理的な行為です。

スキャンの頻度と強度を制限する

スキャンを過度に頻繁に行ったり、高強度で行ったりすると、ネットワークサービスが中断する可能性があります。スキャン対象のネットワークに問題を引き起こさないように、スキャンの頻度と強度に注意してください。

スキャン結果を機密に保つ

スキャン結果には、開いているポート、稼働しているサービス、オペレーティングシステムなど、ネットワークのインフラストラクチャに関する機密情報が含まれる場合があります。これらの結果を非公開に保ち、この情報への不正アクセスを防いでください。

調査結果に対応する

スキャンで脆弱性を特定したら、それに対処するための行動を起こしてください。これには、ソフトウェアのパッチ適用、設定の変更、またはセキュリティ対策の実施が含まれる場合があります。

スキャンを記録する

スキャンをいつ行ったか、なぜ行ったか、何をスキャンしたかなど、スキャンの記録を残すことが重要です。このドキュメントは、セキュリティ監査とコンプライアンスの目的に役立ちます。

スキャン活動をログファイルに記録しましょう。

echo "Scan Log - $(date)" > /home/labex/project/scan_log.txt
echo "Purpose: Learning Nmap host discovery techniques" >> /home/labex/project/scan_log.txt
echo "Target: 127.0.0.1" >> /home/labex/project/scan_log.txt
echo "Scans performed:" >> /home/labex/project/scan_log.txt
echo "1. Basic ping scan: nmap -sn 127.0.0.1" >> /home/labex/project/scan_log.txt
echo "2. Port scan on port 8000: nmap -p 8000 127.0.0.1" >> /home/labex/project/scan_log.txt
echo "3. Service version detection: nmap -p 8000 -sV 127.0.0.1" >> /home/labex/project/scan_log.txt
echo "4. Comprehensive scan: nmap -sS -sV -O -p 1-1000 127.0.0.1" >> /home/labex/project/scan_log.txt

記録した内容を確認するために、スキャンログを見てみましょう。

cat /home/labex/project/scan_log.txt

このログは、スキャン活動の記録を維持するのに役立ち、セキュリティドキュメントと監査に不可欠です。

まとめ

この実験では、サイバーセキュリティ専門家のツールキットに欠かせない強力なツールである Nmap を使用して、ネットワークスキャンとホスト発見の基本を学びました。まず、Nmap を理解し、簡単な HTTP サーバーを使ってテスト環境をセットアップしました。その後、基本的なホスト発見から高度なポートスキャンやサービス検出まで、様々なスキャン技術を探索しました。

具体的には、テスト環境のセットアップ、基本的なホスト発見の実行、開いているポートとサービスの特定、高度なスキャン技術の使用、スキャン結果の保存、要約レポートの作成、および責任あるスキャンのベストプラクティスの遵守を学びました。これらのスキルは、ネットワークセキュリティ評価と監視の堅固な基礎となります。サイバーセキュリティの旅を進めるにつれて、これらの基本を基にして、より洗練された戦略を開発することができます。ネットワークスキャンは常に、適切な許可を得て、規制に準拠した上で、責任と倫理を持って行う必要があることを忘れないでください。