Nmap ネットワークポートスキャンを学ぶ

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、サイバーセキュリティの専門家に愛用されている強力なオープンソースのネットワークスキャンツールである Nmap を使用して、ネットワークポートスキャンの基本を学びます。ポートスキャンは、ネットワーク管理者やセキュリティアナリストがターゲットシステム上の開放されたポートとサービスを発見するための重要な手法です。

一般的で信頼性の高いスキャン方法である基本的な TCP Connect スキャンの実行方法を学びます。このアプローチでは、ターゲットポートと完全な TCP 接続を確立してその状態を確認します。この実験の終了時には、ネットワーク上の開放されたサービスを特定できるようになります。これは、ネットワークセキュリティ評価とシステム強化の重要な最初のステップです。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/basic_syntax("Basic Command Syntax") nmap/NmapGroup -.-> nmap/tcp_connect_scan("Basic TCP Connect Scan") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") subgraph Lab Skills nmap/installation -.-> lab-415936{{"Nmap ネットワークポートスキャンを学ぶ"}} nmap/basic_syntax -.-> lab-415936{{"Nmap ネットワークポートスキャンを学ぶ"}} nmap/tcp_connect_scan -.-> lab-415936{{"Nmap ネットワークポートスキャンを学ぶ"}} nmap/save_output -.-> lab-415936{{"Nmap ネットワークポートスキャンを学ぶ"}} nmap/target_specification -.-> lab-415936{{"Nmap ネットワークポートスキャンを学ぶ"}} end

ネットワークポートとサービスの理解

スキャンについて学び始める前に、ネットワークポートが何であり、なぜサイバーセキュリティの分野で重要なのかを理解することが重要です。ネットワークポートは、異なるサービスがネットワークを介して通信するために重要な役割を果たします。それらは、データがコンピュータに出入りできる「ドア」のようなものです。

ネットワークポートとは何か?

ネットワークポートは、コンピュータネットワーク上の通信の仮想的なエンドポイントです。コンピュータ内の特定のアドレスと考えてください。異なるサービスはここでデータを受信したり送信したりできます。各ポートは 0 から 65535 の番号で識別されます。異なるサービスは通常、特定のポートを使用します。たとえば、ウェブサーバは HTTP(Hypertext Transfer Protocol)ではポート 80 を、HTTP のより安全なバージョンである HTTPS(HTTP Secure)ではポート 443 を使用することが多いです。コンピュータへの安全なリモートアクセスに使用される SSH(Secure Shell)サービスは、ポート 22 を使用します。

サービスがコンピュータ上で実行されると、それは 1 つまたは複数のポートで着信接続を「待ち受け」ます。つまり、特定のポートにデータが到着するのを待ち、それを処理します。ポートスキャンは、コンピュータ上のどのポートが「開いている」(サービスが待ち受けている)か、または「閉じている」(接続を受け付けていない)かを確認するプロセスです。ポートをスキャンすることで、コンピュータ上で実行されているサービスを特定し、潜在的なセキュリティ脆弱性を見つけることができます。

スキャンするサービスのセットアップ

では、スキャンできる簡単なサービスをローカルマシンにセットアップしましょう。Python の組み込み HTTP サーバを使用します。これは、基本的なウェブサーバを作成する便利な方法です。このサーバはポート 8080 で待ち受けます。

まず、プロジェクトディレクトリにいることを確認してください。プロジェクトディレクトリは、この実験に関連するすべてのファイルが保存される場所です。次のコマンドを使用してそこに移動できます。

cd /home/labex/project

次に、サーバがホストする簡単な HTML ファイルを作成しましょう。HTML(Hypertext Markup Language)は、ウェブページを作成するための標準言語です。次のコマンドは、簡単な歓迎メッセージを含む index.html ファイルを作成します。

echo "<html><body><h1>Welcome to Port Scanning Lab</h1></body></html>" > index.html

次に、ポート 8080 で Python HTTP サーバを起動します。サーバが実行中でも実験を続けられるように、バックグラウンドで実行します。コマンドの最後の & 記号は、システムにコマンドをバックグラウンドで実行するよう指示します。

python3 -m http.server 8080 &

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

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

これは、ウェブサーバがマシン上で実行され、ポート 8080 で待ち受けていることを意味します。サーバが正しく動作していることを確認するには、新しいターミナルを開き、curl コマンドを使用できます。curl は、サーバとの間でデータを転送するためのツールです。次のコマンドは、ローカルマシン上でポート 8080 で実行されているサーバにリクエストを送信します。

curl http://localhost:8080

先ほど作成した HTML コンテンツが表示されるはずです。これにより、サービスが実行され、スキャンの準備ができていることが確認されます。

Nmap と TCP Connect スキャンの紹介

サービスが起動して実行されているので、これから Nmap を探索し、ポートスキャンにどのように使用するかを理解しましょう。ポートスキャンはネットワークセキュリティにおける重要な手法です。これにより、ターゲットシステム上の開放されたポートを特定することができます。開放されたポートは攻撃者の潜在的な侵入ポイントとなり得るため、どのポートが開放されていて、それらのポートでどのようなサービスが実行されているかを知ることは、ネットワークをセキュアに保つために不可欠です。

Nmap とは何か?

Nmap は Network Mapper の略称で、ネットワーク探索とセキュリティ監査の分野で最も有名で強力なツールの 1 つです。ネットワーク管理者やセキュリティ専門家にとって非常に有用な幅広い機能を提供します。

  • ネットワーク上のホストとサービスを発見する:Nmap を使うと、ネットワークに接続されているデバイスとそれらが提供しているサービスを見つけることができます。たとえば、ローカルネットワーク上にウェブサーバ、ファイルサーバ、またはメールサーバがあるかどうかを検出できます。
  • ターゲットシステム上の開放されたポートを特定する:ターゲットシステムの異なるポートにパケットを送信することで、Nmap はどのポートが開放されて接続を受け付ける準備ができているかを判断できます。
  • それらのポートで実行されているサービスを特定する:開放されたポートが特定されると、Nmap はそのポートで実行されているサービスを特定しようとします。たとえば、ポート 80 が開放されている場合、ウェブサーバが実行されている可能性が高いです。
  • オペレーティングシステムとサービスのバージョンを検出する:Nmap はターゲットシステムからの応答を分析して、それが実行しているオペレーティングシステムとサービスのバージョンを推測できます。この情報は、潜在的な脆弱性を特定するために使用できます。
  • さまざまなシナリオに対応するさまざまな種類のスキャンを実行する:必要に応じて、Nmap は TCP Connect スキャン、SYN スキャン、UDP スキャンなど、さまざまな種類のスキャンを実行できます。

TCP Connect スキャンの理解

TCP Connect スキャンは、TCP スキャンの最も基本的な形式です。その仕組みを理解するには、まず TCP の 3 ウェイハンドシェイクについて知る必要があります。TCP の 3 ウェイハンドシェイクは、2 つのデバイスが信頼性の高い接続を確立するために使用するプロセスです。これには 3 つのステップが含まれます。クライアントが SYN(同期)パケットをサーバに送信し、サーバが SYN - ACK(同期 - 確認)パケットで応答し、その後クライアントが ACK(確認)パケットを送信して接続を完了します。

TCP Connect スキャンは次のように動作します。

  1. Nmap は、ターゲットポートと完全な 3 ウェイ TCP ハンドシェイクを確立しようとします。これは、ターゲットシステム上のサービスに接続しようとする通常のクライアントのように動作します。
  2. 接続が成功した場合、つまりハンドシェイクの 3 つのステップすべてが完了した場合、そのポートは「open」とマークされます。これは、そのポートでサービスが待ち受けており、接続を受け付ける準備ができていることを示します。
  3. 接続が拒否された場合、たとえばターゲットシステムが RST(リセット)パケットを送信した場合、そのポートは「closed」とマークされます。これは、そのポートでサービスが待ち受けていないことを意味します。
  4. ターゲットシステムから応答がない場合、そのポートは「filtered」とマークされます。これは通常、そのポートがファイアウォールまたは他のセキュリティメカニズムによってブロックされていることを意味します。

TCP Connect スキャンは接続を完全に確立するため信頼性が高いことに注意することが重要です。ただし、あまり目立たない方法ではありません。実際の接続を作成するため、ターゲットシステムに接続ログが残り、システム管理者に警告を与える可能性があります。

最初の Nmap TCP Connect スキャンの実行

前のステップでセットアップしたサービスをスキャンしましょう。これを行うには、新しいターミナルを開きます。ターミナルは、オペレーティングシステムと対話するためのコマンドを入力できるコマンドラインインターフェイスです。

ターミナルを開いたら、次のコマンドを実行します。

nmap -sT localhost -p 8080

このコマンドを分解して、各部分が何をするかを理解しましょう。

  • nmap:これは使用しているツールの名前です。システムに Nmap プログラムを実行することを指示します。
  • -sT:これは TCP Connect スキャンを指定するフラグです。Nmap がこのフラグを見ると、ターゲットに対して TCP Connect スキャンを実行します。
  • localhost:これはスキャンするターゲットです。この場合、localhost は自分自身のマシンを指します。ローカルシステムでスキャンプロセスをテストする方法です。
  • -p 8080:このオプションはスキャンするポートを指定します。ここでは、ポート 8080 をスキャンしています。

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

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

PORT     STATE SERVICE
8080/tcp open  http-proxy

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

この出力はスキャンの詳細を示しています。Nmap が開始されたこと、スキャンしたターゲット、ホストが起動しているかどうか、およびスキャンしたポートの状態が表示されます。この場合、ポート 8080 は「open」とマークされ、そこで実行されているサービスは「http - proxy」と特定されています。

では、後で参照するためにこの出力をファイルに保存しましょう。出力を保存すると、後で見直したり、他の人と共有したりすることができるので便利です。これを行うには、次のコマンドを実行します。

nmap -sT localhost -p 8080 > /home/labex/project/nmap_scan_output.txt

このコマンドは、前と同じ TCP Connect スキャンを実行します。> 記号は、コマンドの出力をリダイレクトするために使用されます。出力をターミナル画面に表示する代わりに、/home/labex/project ディレクトリにある nmap_scan_output.txt という名前のファイルに書き込まれます。

出力が正しく保存されたことを確認するために、ファイルの内容を表示しましょう。次のコマンドを実行します。

cat /home/labex/project/nmap_scan_output.txt

cat コマンドは、ファイルの内容を表示するために使用されます。このコマンドを実行した後、以前と同じ Nmap 出力がファイルに保存されているのが表示されるはずです。

スキャン結果の分析とポート状態の理解

最初のスキャンを成功させたので、これから結果を詳しく調べ、各情報が何を意味するかを理解しましょう。このステップは、収集したデータを理解し、ターゲットシステムに関する有意義な結論を導き出すのに役立つため、非常に重要です。

Nmap のポート状態の理解

強力なネットワークスキャンツールである Nmap は、ポートを 6 つの異なる状態に分類します。各状態は、ターゲットシステム上のポートの状況に関する貴重な情報を提供します。

  1. open - ポートが「open」と報告された場合、そのポートでアプリケーションが着信接続を積極的に待ち受けていることを意味します。これは、サービスが実行されており、リクエストを受け付ける準備ができていることを示しています。
  2. closed - 「closed」のポートは、現在そのポートでアプリケーションが待ち受けていないことを意味します。ただし、そのポートはまだアクセス可能であり、将来的にサービスによって使用される可能性があります。
  3. filtered - Nmap がポートを「filtered」と報告した場合、そのポートが開放されているかどうかを判断できないことを意味します。これは通常、ファイアウォールまたは他のセキュリティ対策がそのポートへのアクセスをブロックしているためです。
  4. unfiltered - 「unfiltered」のポートは、Nmap がそのポートにアクセスできるが、それが開放されているか閉じているかを判断できないことを意味します。これは、ターゲットシステムの設定やネットワーク状況など、さまざまな要因による可能性があります。
  5. open|filtered - Nmap がポートを「open|filtered」と報告した場合、そのポートが開放されているかフィルタリングされているかを判断できないことを意味します。これは、ファイアウォールや他のセキュリティデバイスを介してスキャンする際によく見られる結果です。
  6. closed|filtered - 「closed|filtered」のポートは、Nmap がそのポートが閉じているかフィルタリングされているかを判断できないことを意味します。「open|filtered」状態と同様に、これはしばしばセキュリティ対策がそのポートへのアクセスをブロックしているためです。

私たちのスキャン結果では、ポート 8080 が「open」と報告されました。これは、Python HTTP サーバがそのポートで正常に待ち受けており、着信接続を受け付ける準備ができていることを示しています。

サービス検出の理解

Nmap がポート 8080 のサービスを「http - proxy」と特定したことに気づいたかもしれません。Nmap は、一般的なポート割り当てのデータベースを使用して、ポートで実行されている可能性のあるサービスを推測します。ポート 8080 は通常、HTTP プロキシサービスに使用されるため、Nmap はそのデータベースに基づいてその推測を行いました。

ただし、この推測が常に正確であるとは限りません。ポートで実行されているサービスに関するより正確な情報を得るには、サービス検出フラグ (-sV) を使用できます。このフラグは、Nmap に追加のチェックを実行して、正確なサービスとそのバージョンを判断するよう指示します。

サービス検出フラグを使ってみましょう。

nmap -sT -sV localhost -p 8080 > /home/labex/project/nmap_service_output.txt

このコマンドでは、-sT が TCP コネクトスキャンを指定し、-sV がサービス検出を有効にし、localhost がスキャンするターゲットで、-p 8080 がポート 8080 のみをスキャンすることを指定し、> /home/labex/project/nmap_service_output.txt が出力をファイルにリダイレクトします。

では、出力を表示しましょう。

cat /home/labex/project/nmap_service_output.txt

このコマンドを実行した後、ポート 8080 で実行されているサービスに関する追加情報が表示されるはずです。サービスが「Python http.server」またはそれに類似したものとして特定され、そのポートで何が実行されているかをより正確に理解できるようになります。

詳細モードでさらなる情報を探索する

スキャン中に Nmap が何をしているかをより詳細に理解したい場合は、-v フラグを使用して詳細モードを有効にできます。詳細モードは、送信および受信されたパケットの詳細、タイミング情報、および Nmap がポート状態を判断するために行った正確な手順を含む、スキャンプロセスに関する追加情報を提供します。

詳細モードを使ってみましょう。

nmap -sT -v localhost -p 8080 > /home/labex/project/nmap_verbose_output.txt

このコマンドでは、-sT が TCP コネクトスキャン用で、-v が詳細モードを有効にし、localhost がターゲットで、-p 8080 がスキャンするポートを指定し、> /home/labex/project/nmap_verbose_output.txt が出力をファイルにリダイレクトします。

出力を確認しましょう。

cat /home/labex/project/nmap_verbose_output.txt

詳細な出力は、スキャンプロセスをより深く調べることができ、Nmap がポート状態とターゲットシステムで実行されているサービスに関する結論を導き出す方法を理解するのに役立ちます。

スキャン知識の拡充

TCP Connect スキャンの基本を理解したので、次のレベルに知識を深めましょう。このセクションでは、複数のポートをスキャンする方法と、その結果を解釈する方法を学びます。これにより、ターゲットシステムで実行されているネットワークサービスについて、より包括的な理解を得ることができます。

一般的なポートのスキャン

まず、ローカルマシン(localhost)上の最も一般的なポートをスキャンしましょう。これらの一般的なポートは、よく知られたネットワークサービスによってよく使用されます。

nmap -sT localhost --top-ports 10 > /home/labex/project/common_ports_scan.txt

このコマンドでは、-sT オプションは Nmap に TCP Connect スキャンを実行するよう指示します。localhost はターゲットを指定しており、これは自分自身のマシンです。--top-ports 10 オプションは、Nmap に最も一般的に使用される 10 個のポートをスキャンするよう指示します。> 記号は、スキャンの出力を /home/labex/project ディレクトリ内の common_ports_scan.txt という名前のファイルにリダイレクトします。

では、このスキャンの結果を見てみましょう。

cat /home/labex/project/common_ports_scan.txt

cat コマンドは、ファイルの内容を表示するために使用されます。このコマンドを実行すると、ポートのリストが表示されます。たとえば、ポート 21 は FTP(File Transfer Protocol)、ポート 22 は SSH(Secure Shell)、ポート 23 は Telnet、ポート 25 は SMTP(Simple Mail Transfer Protocol)、ポート 80 は HTTP(Hypertext Transfer Protocol)に使用されます。あなたのシステムでは、特定のサービスが実行されていない限り、これらのポートのほとんどは閉じているでしょう。たとえば、ポート 8080 の HTTP サーバが上位 10 のポートに含まれている場合、そのポートは開放されていると表示されます。

ポート範囲のスキャン

一般的なポートのスキャンに加えて、特定のポート範囲をスキャンすることもできます。localhost 上の 8000 から 8100 までのポートをスキャンしましょう。

nmap -sT localhost -p 8000-8100 > /home/labex/project/port_range_scan.txt

ここで、-p 8000 - 8100 オプションは、Nmap に 8000 から 8100 までの範囲のポートをスキャンするよう指示します。このスキャンの出力は、/home/labex/project ディレクトリ内の port_range_scan.txt という名前のファイルにリダイレクトされます。

このスキャンの結果を表示するには、次のコマンドを実行します。

cat /home/labex/project/port_range_scan.txt

出力では、ポート 8080(スキャン範囲内にある場合)が開放されていることがわかり、その他のポートは閉じている可能性が高いです。

手法の組み合わせ

これまで学んだ手法を組み合わせましょう。TCP Connect スキャンを実行し、8000 から 8100 までの範囲のポートで実行されているサービスを検出しようとします。

nmap -sT -sV localhost -p 8000-8100 > /home/labex/project/combined_scan.txt

-sV オプションは、サービス検出を有効にするために使用されます。これは、Nmap がポートが開放されているか閉じているかだけでなく、開放されたポートで実行されているサービスを特定しようとすることを意味します。この組み合わせスキャンの出力は、/home/labex/project ディレクトリ内の combined_scan.txt ファイルに保存されます。

結果を確認するには、次のコマンドを実行します。

cat /home/labex/project/combined_scan.txt

このスキャンは、これまでで最も詳細な情報を提供します。指定された範囲内の各ポートの状態を示し、開放されたポートで実行されているサービスを特定しようとします。

クリーンアップ

この実験を終える前に、使用していた Python HTTP サーバを停止してクリーンアップする必要があります。まず、サーバのプロセス ID(PID)を見つける必要があります。

ps aux | grep "python3 -m http.server 8080"

ps aux コマンドは、システム上で実行されているすべてのプロセスをリスト表示します。| 記号はパイプで、ps aux コマンドの出力を grep コマンドに渡します。grep コマンドは、"python3 -m http.server 8080" というテキストを含む行を検索します。これは、Python HTTP サーバを起動するために使用されるコマンドです。

Python HTTP サーバのプロセスを示す行を探します。この行の 2 列目にはプロセス ID(PID)が含まれています。PID をメモしたら、kill コマンドを使用してプロセスを停止できます。

kill <PID>

<PID> を実際に見つけたプロセス ID に置き換えます。たとえば、PID が 1234 の場合、次のコマンドを実行します。

kill 1234

まとめ

この実験では、Nmap を使用したネットワークポートスキャンの基本を学びました。スキャン用のサービスのセットアップ、基本的な TCP Connect スキャンの実施、およびスキャン結果の分析を練習しました。

習得した主要なスキルには、ネットワークポートの理解とそれをスキャンする重要性、簡単な HTTP サーバのセットアップ、TCP Connect スキャンのための Nmap の使用、ポート状態の解釈、詳細情報を得るための Nmap オプションの使用、複数のポートとポート範囲のスキャン、および開放されたポート上のサービスの特定が含まれます。これらのスキルは、ネットワーク調査の基礎であり、ネットワーク管理とセキュリティ評価に不可欠です。サイバーセキュリティの学習を進めるにつれて、これらの基本を基にして高度な技術やセキュリティ対策を探求することができます。