Nmap を使用したポートスキャン

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、Nmap を使ってポートスキャンを行う方法を学びます。この実験では、TCP 接続スキャン、SYN スキャン、特定のポートのスキャン、ポート範囲、トップポートなど、さまざまな種類のスキャンが扱われます。nmap -sTnmap -sSなどのコマンドを、異なる IP アドレスと範囲で実行し、その結果を Xfce 端末で確認します。

各スキャンタイプには独自の特徴と使用例があります。たとえば、TCP 接続スキャンでは、完全な TCP 3-way ハンドシェイクが行われ、信頼性は高いものの、ステルス性が低いです。この実験が終了するまでに、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/common_ports("Common Ports Scanning") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/syn_scan("SYN Scan") nmap/NmapGroup -.-> nmap/stealth_scanning("Stealth and Covert Scanning") subgraph Lab Skills nmap/tcp_connect_scan -.-> lab-530176{{"Nmap を使用したポートスキャン"}} nmap/common_ports -.-> lab-530176{{"Nmap を使用したポートスキャン"}} nmap/port_scanning -.-> lab-530176{{"Nmap を使用したポートスキャン"}} nmap/target_specification -.-> lab-530176{{"Nmap を使用したポートスキャン"}} nmap/syn_scan -.-> lab-530176{{"Nmap を使用したポートスキャン"}} nmap/stealth_scanning -.-> lab-530176{{"Nmap を使用したポートスキャン"}} end

nmap -sT 127.0.0.1 を使って TCP 接続スキャンを実行する

このステップでは、Nmap を使って TCP 接続スキャンを行う方法を学びます。TCP 接続スキャンは、TCP スキャンの基本的な形式であり、ターゲットとの接続を確立するために完全な TCP 3-way ハンドシェイクを行います。この方法は、他のスキャンタイプよりもステルス性が低いですが、信頼性が高く、特別な特権を必要としません。

始める前に、TCP 3-way ハンドシェイクを理解しましょう:

  1. SYN (同期化): スキャナーは SYN パケットをターゲットに送信します。
  2. SYN/ACK (同期化/応答): ポートが開いている場合、ターゲットは SYN/ACK パケットで応答します。
  3. ACK (応答): スキャナーは ACK パケットをターゲットに送信することで接続を完了します。

Nmap の -sT オプションは、この完全な TCP 接続スキャンを実行します。TCP 接続を完了するため、ターゲットシステムによって簡単にログに記録されます。

では、127.0.0.1 (localhost) で TCP 接続スキャンを行いましょう。このアドレスは常に自分自身のマシンを指します。

  1. Xfce 端末を開きます。
  2. 次のコマンドを実行します:
sudo nmap -sT 127.0.0.1

このコマンドは、Nmap に対して IP アドレス 127.0.0.1 で TCP 接続スキャン (-sT) を行うように指示します。パスワードの入力を求められます。labex ユーザーはパスワードなしで sudo 特権を持っているため、Enter キーを押してください。3. 出力を確認します。ローカルマシン上の開いているポートのリストが表示されるはずです。出力は次のようになります:

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000063s latency).
Other addresses for localhost: ::1

PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    closed smtp
80/tcp    closed http
111/tcp   closed rpcbind
139/tcp   closed netbios-ssn
445/tcp   closed microsoft-ds
631/tcp   closed ipp
3306/tcp  closed mysql
5432/tcp  closed postgresql
8080/tcp  closed http-proxy
8443/tcp  closed https-alt
9090/tcp  closed zeus-admin
10000/tcp closed snet-sensor-mgmt

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

出力は、ターゲットシステム上の開いている、閉じている、またはフィルタリングされたポートを示しています。この場合、自分自身のマシンをスキャンしています。STATE 列は各ポートの状態を示しています。open は、Nmap がそのポートに対して TCP 接続を確立できたことを意味します。closed は、Nmap がその SYN パケットに応答して TCP リセット (RST) パケットを受信したことを意味します。

nmap -sS 192.168.1.1 を使って SYN スキャンを実行する

このステップでは、Nmap を使って SYN スキャン(「半開き」スキャンとも呼ばれます)を行う方法を学びます。SYN スキャンは、完全な TCP 3-way ハンドシェイクを行わないため、TCP 接続スキャンよりもステルス性の高い手法です。

SYN スキャンの仕組みは以下の通りです:

  1. SYN (同期化): スキャナーは SYN パケットをターゲットに送信します。
  2. SYN/ACK (同期化/応答): ポートが開いている場合、ターゲットは SYN/ACK パケットで応答します。
  3. RST (リセット): 接続を完了するために ACK を送信する代わりに、スキャナーは RST パケットを送信して接続を突然終了させます。

完全な TCP 接続が確立されないため、SYN スキャンは TCP 接続スキャンと比較して、ターゲットシステムによってログに記録される確率が低くなります。ただし、SYN スキャンでは通常、生のパケットを作成するために root 特権が必要です。

Nmap の -sS オプションは SYN スキャンを実行します。

では、192.168.1.1 で SYN スキャンを行いましょう。注: この IP アドレスはおそらくローカルネットワーク上のプライベート IP アドレスです。このアドレスをスキャンする許可があることを確認してください。実際のシチュエーションでは、許可なくネットワークをスキャンすることは違法です。この実験の目的では、この IP アドレスがテスト環境内の安全なターゲットを表すものと仮定します。このアドレスにデバイスがない場合、スキャン結果はおそらくすべてのポートがフィルタリングされていると表示されます。

  1. Xfce 端末を開きます。
  2. 次のコマンドを実行します:
sudo nmap -sS 192.168.1.1

このコマンドは、Nmap に対して IP アドレス 192.168.1.1 で SYN スキャン (-sS) を行うように指示します。パスワードの入力を求められます。labex ユーザーはパスワードなしで sudo 特権を持っているため、Enter キーを押してください。3. 出力を確認します。出力はターゲットシステムによって異なります。以下のようになる場合があります:

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0012s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp closed https

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

出力は、ターゲットシステム上の開いている、閉じている、またはフィルタリングされたポートを示しています。STATE 列は各ポートの状態を示しています。open は、Nmap がその SYN パケットに対して SYN/ACK パケットを受信したことを意味します。closed は、Nmap が RST パケットを受信したことを意味します。filtered は、ネットワークフィルタリングが Nmap がポートに到達するのを妨げているため、Nmap がポートが開いているか閉じているかを判断できなかったことを意味します。

nmap -p 22,80 192.168.1.1 を使って特定のポートをスキャンする

このステップでは、Nmap を使ってターゲットシステム上の特定のポートをスキャンする方法を学びます。ターゲット上で実行されていると疑われる特定のサービスやアプリケーションに焦点を当てたスキャンを行いたい場合に役立ちます。

Nmap の -p オプションを使うと、スキャンしたいポートを指定できます。個々のポート、ポートの範囲、またはその両方の組み合わせを指定できます。この場合、IP アドレス 192.168.1.1 のポート 22 と 80 をスキャンします。

  • ポート 22 は一般的に SSH(Secure Shell)に使用され、セキュアなリモートアクセスプロトコルです。
  • ポート 80 は一般的に HTTP(Hypertext Transfer Protocol)に使用され、ウェブブラウジングに使用されるプロトコルです。

注: 前のステップと同様、192.168.1.1 はおそらくローカルネットワーク上のプライベート IP アドレスです。このアドレスをスキャンする許可があることを確認してください。実際のシチュエーションでは、許可なくネットワークをスキャンすることは違法です。この実験の目的では、この IP アドレスがテスト環境内の安全なターゲットを表すものと仮定します。このアドレスにデバイスがない場合、スキャン結果はおそらくポートがフィルタリングされているか閉じていると表示されます。

  1. Xfce 端末を開きます。
  2. 次のコマンドを実行します:
sudo nmap -p 22,80 192.168.1.1

このコマンドは、Nmap に対して IP アドレス 192.168.1.1 のポート 22 と 80 (-p 22,80) をスキャンするように指示します。別途指定がない限り、Nmap は既定の SYN スキャンを使用します。パスワードの入力を求められます。labex ユーザーはパスワードなしで sudo 特権を持っているため、Enter キーを押してください。3. 出力を確認します。出力はターゲットシステムによって異なります。以下のようになる場合があります:

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0011s latency).

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

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

出力は、ターゲットシステム上のポート 22 と 80 の状態を示しています。open は、Nmap がその SYN パケットに対して SYN/ACK パケットを受信したことを意味し、ポートが接続を待ち受けていることを示しています。

nmap -p 1-100 127.0.0.1 を使ってポート範囲をスキャンする

このステップでは、Nmap を使ってターゲットシステム上のポート範囲をスキャンする方法を学びます。特定の範囲内のすべての開いているポートを特定したい場合に役立ち、これによりターゲット上で実行されているサービスを理解するのに役立ちます。

前のステップで学んだように、Nmap の -p オプションを使うと、スキャンしたいポートを指定できます。ポート範囲をスキャンするには、start-end という構文を使います。ここで start は開始ポート番号、end は終了ポート番号です。この場合、IP アドレス 127.0.0.1 のポート 1 から 100 までをスキャンします。

127.0.0.1 はループバックアドレスで、localhost とも呼ばれます。常に現在のマシンを指します。127.0.0.1 をスキャンすることは安全で、特別な許可は必要ありません。

  1. Xfce 端末を開きます。
  2. 次のコマンドを実行します:
nmap -p 1-100 127.0.0.1

このコマンドは、Nmap に対して IP アドレス 127.0.0.1 のポート 1 から 100 (-p 1-100) をスキャンするように指示します。ローカルマシンをスキャンしているため、sudo は必要ありません。別途指定がない限り、Nmap は既定の SYN スキャンを使用しますが、sudo を使用していないため、TCP 接続スキャンに戻ります。3. 出力を確認します。出力は LabEx VM 上で実行されているサービスによって異なります。以下のようになる場合があります:

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000081s latency).
Not shown: 97 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
631/tcp open  ipp
992/tcp open  unknown

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

出力は、ローカルマシン上のポート 1 から 100 の状態を示しています。open は、Nmap がポートに対して TCP 接続を確立できたことを意味し、ポートが接続を待ち受けていることを示しています。closed は、Nmap が RST パケットを受信したことを意味し、ポートが待ち受けていないことを示しています。filtered は、Nmap がポートが開いているか閉じているかを判断できなかったことを意味します。

nmap --top-ports 10 192.168.1.0/24 を使って人気のあるポートをスキャンする

このステップでは、Nmap を使ってネットワーク上の最も一般的なポートをスキャンする方法を学びます。複数のホスト上で最も可能性の高いサービスを迅速に特定したい場合に役立ちます。Nmap は最も頻繁に使用されるポートのリストを保持しており、--top-ports オプションを使うと、これらのポートの指定された数をスキャンできます。

--top-ports オプションは、Nmap のサービス頻度リストに基づいて、指定された数の最も一般的なポートをスキャンするように Nmap に指示します。このリストは、何年にもわたるネットワークスキャンで収集された統計データから作成されています。

この場合、ネットワーク 192.168.1.0/24 上の最も一般的な 10 個のポートをスキャンします。

  • 192.168.1.0/24 は、ネットワーク範囲を表す CIDR(Classless Inter-Domain Routing)表記です。/24 は、IP アドレスの最初の 24 ビットが固定されていることを示しており、このネットワークには 192.168.1.0 から 192.168.1.255 までのすべての IP アドレスが含まれます。

重要: ネットワーク範囲をスキャンすると、ネットワーク性能に影響を与える可能性があり、侵入的なものと見なされる場合があります。進行する前に、ネットワークをスキャンする許可があることを確認してください。この実験の目的では、この IP アドレスがテスト環境内の安全なターゲットを表すものと仮定します。このアドレスにネットワークがない場合、スキャンでは開いているポートが見つからない可能性があります。

  1. Xfce 端末を開きます。
  2. 次のコマンドを実行します:
sudo nmap --top-ports 10 192.168.1.0/24

このコマンドは、Nmap に対してネットワーク 192.168.1.0/24 上の最も一般的な 10 個のポート (--top-ports 10) をスキャンするように指示します。パスワードの入力を求められます。labex ユーザーはパスワードなしで sudo 特権を持っているため、Enter キーを押してください。Nmap は既定の SYN スキャンを使用します。3. 出力を確認します。出力は、ネットワーク上のデバイスによって異なります。以下のようになる場合があります:

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.00098s latency).

PORT     STATE SERVICE
21/tcp   filtered  ftp
22/tcp   open  ssh
23/tcp   filtered  telnet
25/tcp   filtered  smtp
53/tcp   filtered  domain
80/tcp   open  http
110/tcp  filtered  pop3
135/tcp  filtered  msrpc
139/tcp  filtered  netbios-ssn
443/tcp  filtered  https

Nmap scan report for 192.168.1.2
Host is up (0.00098s latency).

PORT     STATE SERVICE
21/tcp   filtered  ftp
22/tcp   filtered  ssh
23/tcp   filtered  telnet
25/tcp   filtered  smtp
53/tcp   filtered  domain
80/tcp   filtered  http
110/tcp  filtered  pop3
135/tcp  filtered  msrpc
139/tcp  filtered  netbios-ssn
443/tcp  filtered  https

Nmap done: 256 IP addresses (2 hosts up) scanned in 2.52 seconds

出力は、ネットワーク範囲内の各ホスト上の最も一般的な 10 個のポートの状態を示しています。open は、Nmap がその SYN パケットに対して SYN/ACK パケットを受信したことを意味し、ポートが接続を待ち受けていることを示しています。filtered は、Nmap がポートが開いているか閉じているかを判断できなかったことを意味し、通常はファイアウォールが接続をブロックしているためです。

Xfce 端末で結果を確認する

このステップでは、前のステップで行った Nmap スキャンの結果を確認します。Xfce 端末は各コマンドの出力を表示し、スキャン結果を分析して、ターゲットシステム上の開いているポートとサービスを特定することができます。

  1. TCP 接続スキャンの出力を確認する
    Xfce 端末で戻る操作を行って、コマンド nmap -sT 127.0.0.1 の出力を見つけます。このスキャンでは、TCP 接続スキャン方法を使って、ローカルマシン上のポートの状態を判断しました。STATE 列を見て、ポートが open(開いている)、closed(閉じている)、または filtered(フィルタリングされている)かどうかを確認します。
  2. SYN スキャンの出力を確認する
    コマンド sudo nmap -sS 192.168.1.1 の出力を見つけます。このスキャンでは、SYN スキャン方法を使っており、一般的に TCP 接続スキャンよりも高速で隠密性が高いです。再び、STATE 列を調べて、スキャンされたポートの状態を判断します。
  3. 特定のポートスキャンの出力を確認する
    コマンド sudo nmap -p 22,80 192.168.1.1 の出力を見つけます。このスキャンでは、指定された IP アドレスのポート 22 と 80 を対象にしています。出力を確認して、これらのポートが開いている、閉じている、またはフィルタリングされているかどうかを確認します。
  4. ポート範囲スキャンの出力を確認する
    コマンド nmap -p 1-100 127.0.0.1 の出力を見つけます。このスキャンでは、ローカルマシン上のポート 1 から 100 をスキャンしました。この範囲内の開いているポートを特定するために出力を分析します。
  5. 人気のあるポートスキャンの出力を確認する
    コマンド sudo nmap --top-ports 10 192.168.1.0/24 の出力を見つけます。このスキャンでは、指定されたネットワーク上の最も一般的な 10 個のポートをスキャンしました。出力を調べて、ネットワーク内のホストでこれらのポートのうちどれが開いているかを確認します。

これらのスキャン結果を確認することで、ネットワーク上で実行されているサービスに関する貴重な情報を得ることができ、潜在的なセキュリティ脆弱性を特定することができます。特定の出力は、LabEx VM の設定やスキャンしているネットワークによって異なりますので、ご注意ください。

まとめ

この実験では、Nmap を使ってさまざまなポートスキャンを行う方法を学びました。-sT オプションを使って 127.0.0.1 で TCP 接続スキャンを行い、完全な TCP 3 手順ハンドシェイクを理解しました。また、-sS を使って 192.168.1.1 で SYN スキャンを実行し、-p 22,80 を使って 192.168.1.1 で特定のポートをスキャンし、-p 1 - 100 を使って 127.0.0.1 でポート範囲をスキャンし、--top - ports 10 を使って 192.168.1.0/24 で人気のあるポートをスキャンしました。すべての結果は Xfce 端末で確認しました。