Nmap で高度なホスト検出を実行する

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、Nmap を使って高度なホスト探索を行う方法を学びます。この実験では、-PS オプションを使った特定のポートでの TCP ピング、-PU オプションを使った UDP ピング、-Pn を使ったピングのスキップ、およびこれらの手法を組み合わせた包括的なスキャンなど、様々な手法が扱われます。また、探索結果をファイルに保存し、Xfce 端末で稼働中のホストを分析する方法も学びます。

この実験全体を通して、nmap -PS22,80 192.168.1.1 のようなコマンドを実行して TCP ピングスキャンを行い、nmap -PU53 192.168.1.1 で UDP ピングを行い、nmap -Pn -oN hosts.txt 192.168.1.1 で結果を保存します。これらの実践的な演習により、Nmap のホスト探索機能の理解が深まります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/tcp_connect_scan("Basic TCP Connect Scan") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/host_discovery("Host Discovery Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/udp_scanning("UDP Scanning Techniques") subgraph Lab Skills nmap/tcp_connect_scan -.-> lab-547102{{"Nmap で高度なホスト検出を実行する"}} nmap/save_output -.-> lab-547102{{"Nmap で高度なホスト検出を実行する"}} nmap/port_scanning -.-> lab-547102{{"Nmap で高度なホスト検出を実行する"}} nmap/host_discovery -.-> lab-547102{{"Nmap で高度なホスト検出を実行する"}} nmap/target_specification -.-> lab-547102{{"Nmap で高度なホスト検出を実行する"}} nmap/udp_scanning -.-> lab-547102{{"Nmap で高度なホスト検出を実行する"}} end

nmap -PS22,80 192.168.1.1 を使ったポートでの TCP ピングの使用

このステップでは、Nmap を使って対象ホストの特定のポートで TCP ピングスキャンを行う方法を学びます。この手法は、ホストがオンラインであるかどうか、およびそれらのポートで特定のサービスが実行されているかどうかを判断するのに役立ちます。

始める前に、TCP ピングとは何かを明確にしましょう。従来の ICMP ピングとは異なり、TCP ピングは対象ホストの指定されたポートに TCP SYN パケットを送信します。ポートが開いている場合、対象ホストは SYN/ACK パケットで応答します。ポートが閉じている場合、対象ホストは RST パケットで応答します。Nmap はこの動作を使って、ホストがオンラインであるかどうか、およびポートが開いているか閉じているかを判断します。

Nmap の -PS オプションは、TCP SYN ピングスキャンを実行するために使用されます。コンマ区切りのリストを使って、1 つ以上のポートをスキャンすることができます。

例を試してみましょう。ホスト 192.168.1.1 のポート 22 と 80 で TCP ピングスキャンを行うために、Nmap を使います。

LabEx VM 内で端末を開きます。デフォルトのディレクトリは ~/project であることを忘れないでください。次のコマンドを実行します:

nmap -PS22,80 192.168.1.1

このコマンドは、Nmap に対象ホスト 192.168.1.1 のポート 22 と 80 に TCP SYN パケットを送信するように指示します。

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.0013s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.05s

この例では、Nmap はホスト 192.168.1.1 が稼働しており、ポート 22 (SSH) と 80 (HTTP) が開いていることを報告しています。ポートが閉じている場合、出力は "closed" の代わりに "open" を表示します。ホストがダウンしている場合、Nmap は "Host is down" と報告します。

次に、対象ホストが到達できないか、またはファイアウォールによる制限を受けているシナリオを考えてみましょう。このような場合、Nmap は応答を受け取らない可能性があり、出力はホストがダウンしているか、またはポートがフィルタリングされていることを示します。

nmap -PS22,80 192.168.1.2

192.168.1.2 に到達できない場合、次のような出力が表示されるかもしれません:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.2
Host is down (no responses received).

Nmap done: 1 IP address (0 hosts up) scanned in 5.03s

これは、Nmap が対象ホストから応答を受け取らなかったことを示しており、ネットワーク問題やファイアウォールルールのために、ホストがダウンしているか、または到達できない可能性があることを示唆しています。

nmap -PU53 192.168.1.1 を使った UDP ピングの実行

このステップでは、Nmap を使って対象ホストの特定のポートで UDP ピングスキャンを行う方法を学びます。この手法は、特に TCP ピングがファイアウォールによってブロックされている場合に、ホストがオンラインであるかどうかを判断するのに役立ちます。

始める前に、UDP ピングとは何かを理解しましょう。TCP SYN パケットを送信する TCP ピングとは異なり、UDP ピングは対象ホストの指定されたポートに UDP パケットを送信します。ポートが開いている場合、対象ホストはまったく応答しない場合があります(多くの UDP サービスは、特定の要求が行われない限り応答を送信しません)。ポートが閉じている場合、対象ホストは通常、ICMP の「ポート到達不能」エラーで応答します。Nmap は応答の有無(または応答の種類)を使って、ホストがオンラインであるかどうかを判断します。

Nmap の -PU オプションは、UDP ピングスキャンを実行するために使用されます。スキャンするポートを指定する必要があります。UDP ピングに使用する一般的なポートはポート 53(DNS)です。DNS サーバーが多く利用可能であるためです。

例を試してみましょう。ホスト 192.168.1.1 のポート 53 で UDP ピングスキャンを行うために、Nmap を使います。

LabEx VM 内で端末を開きます。デフォルトのディレクトリは ~/project であることを忘れないでください。次のコマンドを実行します:

nmap -PU53 192.168.1.1

このコマンドは、Nmap に対象ホスト 192.168.1.1 のポート 53 に UDP パケットを送信するように指示します。

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.0020s latency).
PORT   STATE         SERVICE
53/udp open|filtered domain

Nmap done: 1 IP address (1 host up) scanned in 2.03s

この例では、Nmap はホスト 192.168.1.1 が稼働していることを報告しています。ポート 53 の状態は open|filtered と表示されています。これは、Nmap がポートから応答を受け取った(開いていることを示す)場合、または応答を受け取らなかったが、ポートが閉じているかどうかを確定的に判断できなかった(フィルタリングされていることを示す、おそらくファイアウォールによる)場合を意味します。

次に、対象ホストが到達できないシナリオを考えてみましょう。このような場合、Nmap は応答を受け取らない可能性があり、出力はホストがダウンしていることを示します。

nmap -PU53 192.168.1.2

192.168.1.2 に到達できない場合、次のような出力が表示されるかもしれません:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.2
Host is down (no responses received).

Nmap done: 1 IP address (0 hosts up) scanned in 5.03s

これは、Nmap が対象ホストから応答を受け取らなかったことを示しており、ホストがダウンしているか、または到達できない可能性があることを示唆しています。

nmap -Pn 127.0.0.1 を使ったピングのスキップ

このステップでは、Nmap の -Pn オプションを使ってホスト検出ピングをスキップする方法を学びます。これは、ホストがオンラインであるかどうかを事前に確認せずにホストをスキャンしたい場合に便利です。これは、ピングがファイアウォールによってブロックされている場合や、ホストが稼働していると仮定して時間を節約したい場合に役立ちます。

通常、Nmap はポートをスキャンする前にホスト検出フェーズを実行します。これには、対象ホストがオンラインであるかどうかを判断するためにさまざまな種類のプローブ(ICMP、TCP SYN など)を送信することが含まれます。Nmap がホストがダウンしていると判断した場合、ポートスキャンフェーズをスキップします。

-Pn オプションは、Nmap にこのホスト検出フェーズをスキップし、すべての対象ホストをオンラインであるかのように扱うように指示します。これは、ホストがピングプローブに応答するかどうかに関係なく、Nmap が直接ポートスキャンフェーズに進むことを意味します。

例を試してみましょう。-Pn オプション付きの Nmap を使って、ローカルホストアドレス 127.0.0.1 をスキャンします。

LabEx VM 内で端末を開きます。デフォルトのディレクトリは ~/project であることを忘れないでください。次のコマンドを実行します:

nmap -Pn 127.0.0.1

このコマンドは、Nmap にホスト検出ピングをスキップし、127.0.0.1 のポートをスキャンするように指示します。

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
631/tcp  open  ipp
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.10s

この例では、Nmap はホスト 127.0.0.1 が稼働しており、開いているポートを表示しています。システム上で ICMP ピングがブロックされていたとしても、-Pn オプションのおかげで Nmap は依然としてポートをスキャンします。

重要なことは、対象ホストが実際にダウンしている場合、-Pn オプションを使用すると結果が不正確になる可能性があることです。Nmap は依然としてポートをスキャンしようとしますが、応答を受け取らない場合があり、ホストの状態に関する誤った結論につながる可能性があります。

nmap -PS22 -PU53 192.168.1.0/24 を使った手法の組み合わせ

このステップでは、Nmap を使って TCP と UDP のピング手法を組み合わせてネットワーク上の稼働中のホストを検出する方法を学びます。手法を組み合わせることで、特にファイアウォールやその他のネットワークセキュリティ対策を扱う際に、ホスト検出の信頼性を高めることができます。

前のステップで学んだように、-PS は TCP SYN ピングに、-PU は UDP ピングに使用されます。これらの手法を組み合わせることで、特定のポートに TCP SYN パケットと、別のポートに UDP パケットを送信することができます。これらのプローブのいずれかが応答を受け取った場合、Nmap はそのホストを稼働中と見なします。

この例では、Nmap を使って、192.168.1.0/24 のネットワーク全体に対して、ポート 22(SSH)に TCP SYN パケットと、ポート 53(DNS)に UDP パケットを送信します。

LabEx VM 内で端末を開きます。デフォルトのディレクトリは ~/project であることを忘れないでください。次のコマンドを実行します:

nmap -PS22 -PU53 192.168.1.0/24

このコマンドは、Nmap に次のアクションを実行するよう指示します:

  • -PS22:対象ネットワーク内の各ホストのポート 22 に TCP SYN パケットを送信します。
  • -PU53:対象ネットワーク内の各ホストのポート 53 に UDP パケットを送信します。
  • 192.168.1.0/24192.168.1.0/24 のネットワーク全体をスキャンします。これは、192.168.1.0 から 192.168.1.255 までの IP アドレス範囲を指定する CIDR 表記です。

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.0016s latency).
Nmap scan report for 192.168.1.10
Host is up (0.0020s latency).
Nmap scan report for 192.168.1.20
Host is up (0.0025s latency).
...
Nmap done: 256 IP addresses (3 hosts up) scanned in 5.03 seconds

この例では、Nmap はホスト 192.168.1.1192.168.1.10、および 192.168.1.20 が稼働していることを報告しています。Nmap は、ポート 22 に送信した TCP SYN パケットまたはポート 53 に送信した UDP パケットのいずれかに応答を受け取ることでこれを判断しました。

このように手法を組み合わせることは、単一の手法を使用するよりも効果的であり、ある種のプローブをブロックする可能性のあるファイアウォールやその他のセキュリティ対策を迂回する確率を高めるためです。

nmap -Pn -oN hosts.txt 192.168.1.1 を使った検出結果の保存

このステップでは、-oN オプションを使って Nmap のスキャン結果をファイルに保存する方法を学びます。これは、調査結果を文書化したり、後で分析する際に便利です。

-oN オプションは、Nmap にスキャン結果を「通常」の形式で指定されたファイルに保存するよう指示します。通常の形式は、読みやすく解析しやすい人間が読める形式です。

この例では、Nmap を使ってホスト 192.168.1.1 をスキャンし、ホスト検出ピングをスキップ(-Pn)し、結果を ~/project ディレクトリ内の hosts.txt という名前のファイルに保存します。

LabEx VM 内で端末を開きます。デフォルトのディレクトリは ~/project であることを忘れないでください。次のコマンドを実行します:

nmap -Pn -oN hosts.txt 192.168.1.1

このコマンドは、Nmap に次のアクションを実行するよう指示します:

  • -Pn:ホスト検出ピングをスキップします。
  • -oN hosts.txt:スキャン結果を通常の形式で hosts.txt ファイルに保存します。
  • 192.168.1.1:ホスト 192.168.1.1 をスキャンします。

スキャンが完了した後、cat コマンドを使って hosts.txt ファイルの内容を表示できます:

cat hosts.txt

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

## Nmap 7.80 scan initiated Tue Oct 27 10:00:00 2023 as: nmap -Pn -oN hosts.txt 192.168.1.1
Nmap scan report for 192.168.1.1
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https

## Nmap done at Tue Oct 27 10:00:05 2023 -- 1 IP address (1 host up) scanned in 5.03 seconds

hosts.txt ファイルには、人間が読める形式で Nmap のスキャン結果が含まれています。このファイルを使って文書化、レポート作成、またはさらなる分析を行うことができます。

Xfce 端末で稼働中のホストを分析する

このステップでは、Xfce 端末で直接 Nmap のスキャン結果を分析する方法を学びます。前のステップで作成した hosts.txt ファイルから情報をフィルタリングして抽出するために、基本的な Linux コマンドを使用します。これにより、稼働中のホストとその開いているポートを迅速に特定できます。

まず、hosts.txt ファイルの内容を確認しましょう。LabEx VM 内で端末を開きます。デフォルトのディレクトリは ~/project であることを忘れないでください。次のコマンドを実行します:

cat hosts.txt

Nmap のスキャン結果が表示され、ホストの状態(稼働中または停止)と開いているポートが含まれているはずです。

ホストが稼働中であることを示す行のみを抽出するには、grep コマンドを使用できます:

grep "Host is up" hosts.txt

このコマンドは、hosts.txt ファイルをフィルタリングして、文字列 "Host is up" を含む行のみを表示します。出力は次のようになります:

Nmap scan report for 192.168.1.1
Host is up (0.000073s latency).

これにより、ホスト 192.168.1.1 が稼働中であることがわかります。

稼働中のホストの IP アドレスを抽出するには、grepawk を組み合わせることができます。awk は、1 行のテキストから特定のフィールドを抽出するために使用できる強力なテキスト処理ツールです。

grep "Host is up" hosts.txt | awk '{print $5}'

このコマンドはまず、hosts.txt ファイルをフィルタリングして "Host is up" を含む行を見つけ、その後 awk を使用して各一致する行の 5 番目のフィールド($5)を出力します。これは IP アドレスです。出力は次のようになります:

192.168.1.1

特定のホストの開いているポートを見つけるには、grep を使用して hosts.txt ファイルをポート番号を含む行でフィルタリングできます。たとえば、192.168.1.1 の開いているポートを見つけるには、次のコマンドを使用できます:

grep "192.168.1.1" hosts.txt

これにより、hosts.txt ファイルの 192.168.1.1 を含むすべての行が表示され、開いているポートを列挙する行も含まれます。

これらの基本的な Linux コマンドを組み合わせることで、Xfce 端末で直接 Nmap のスキャン結果を迅速に分析し、必要な情報を抽出することができます。

まとめ

この実験では、参加者は Nmap を使って高度なホスト検出を行う方法を学びます。まず、-PS オプションを使って特定のポートで TCP ピングを行い、たとえば nmap -PS22,80 192.168.1.1 のように、ホストがオンラインであり、特定のサービスが実行されているかどうかを確認します。また、-PU を使って UDP ピングを行い、-Pn を使ってピングをスキップし、より広範なスキャンのために手法を組み合わせます。さらに、検出結果をファイルに保存し、Xfce 端末で稼働中のホストを分析する方法を学びます。