Task 1 Introduction
ネットワークを標的にする際、繰り返し行われる下記のタスクを処理するための効率的なツールが欲しくなります。
- どのシステムが稼働しているか?
- どのシステムが稼働しているか、これらのシステムでどのサービスが稼働しているか。
その答えの一つのツールがNmapです。こちらでは、稼働中のコンピュータを見つける方法を紹介します。こちらは、Nmapに特化した4つのルームのうちの最初のルームです。実行中のサービスの発見に関する方法は、ポートスキャンに焦点を当てた次のNmapのルームで回答しています。
このルームは、Nmapシリーズの4つのうちの1つ目でです。これらの4つのルームは、Network Securityモジュールの一部でもあります。
このルームでは、ポートスキャンの前に、オンラインになっているシステムを発見するためにNmapが実行するステップについて説明します。オフラインのシステムをポートスキャンしても時間を浪費するだけで、ネットワークに不要なノイズを発生させるだけなので、この対応は非常に重要です。
Nmapが稼働中のホストを発見するために使用する様々なアプローチについて紹介します。特に、以下のものを取り上げます。
- ARPスキャン:このスキャンは、ARPリクエストを使って稼動中のホストを発見します。
- ICMPスキャン:このスキャンでは、ICMPリクエストを使用して稼働中のホストを検出します。
- TCP/UDP pingスキャン:このスキャンでは、TCPポートとUDPポートにパケットを送信し、稼働中のホストを特定します。
また、arp-scanとmasscanという2つのスキャナーを紹介し、それらがNmapのホスト発見の一部とどのように重なっているかを説明します。
このルームでは、Nmap を使ってシステムやサービスを積極的に発見していくことにします。Nmapは、ネットワークセキュリティの専門家でオープンソースプログラマーのGordon Lyon(Fyodor)氏によって作られ、1997年にリリースされました。NmapはNetwork Mapperの略で、GPLライセンスで公開されている無償のオープンソースソフトウェアです。Nmapは、ネットワークをマッピングし、稼働中のホストを特定し、稼働中のサービスを発見するための業界標準のツールです。Nmapのスキャンは多くのオプションがあり、提供するコマンドライン引数に依存します。
■Question ※無し
Task 2 Subnetworks
主要な作業に移る前に、いくつかの用語について復習しておきましょう。ネットワーク・セグメントとは、共有媒体によって接続されたコンピュータのグループです。例えば、媒体はイーサネットスイッチやWiFiアクセスポイントになります。IPネットワークでは、サブネットワークは通常、一緒に接続され、同じルーターを使用するように構成された1つまたは複数のネットワークセグメントに相当します。ネットワークセグメントは物理的な接続を意味し、サブネットワークは論理的な接続を意味します。
能動的な偵察の一環として、ホストのグループまたはサブネットに関するより多くの情報を発見したいとします。同じサブネットに接続している場合、スキャナは生きているホストを発見するためにARP(アドレス解決プロトコル)に頼ります。ARPは、リンク層上での通信が可能になるようにハードウェアアドレス(MACアドレス)を取得することですが、これを利用してホストがオンラインであることを推測することができます。
ネットワークAにいる場合、ARPはそのサブネット(10.1.100.0/24)内のデバイスのみを発見することができます。ターゲットシステムのサブネットが異なる場合、生成されたすべてのパケットは、デフォルトゲートウェイ(ルーター)を経由して別のサブネット上のシステムに到達しますが、ARPクエリーはルーティングされないため、ルーターを越えることができません。ARPはリンク層のプロトコルのため、サブネットを超えることができません。
■Question
- From computer1
- To computer1 (to indicate it is broadcast)
- Packet Type: “ARP Request”
- Data: computer6 (because we are asking for computer6 MAC address using ARP Request)
How many devices can see the ARP Request?
⇒4
Did computer6 receive the ARP Request? (Y/N)
⇒N
- From computer4
- To computer4 (to indicate it is broadcast)
- Packet Type: “ARP Request”
- Data: computer6 (because we are asking for computer6 MAC address using ARP Request)
How many devices can see the ARP Request?
⇒4
Did computer6 reply to the ARP Request? (Y/N)
⇒Y
Task 3 Enumerating Targets
Task 1でスキャンに使用できる様々なテクニックについて触れました。それぞれを詳しく説明し、実際のターゲットに対して使用する前に、スキャンしたいターゲットを指定する必要があります。一般的には、リスト、範囲、サブネットのいずれかを指定することができます。ターゲット指定の例としては以下となります。
- リスト:MACHINE_IP scanme.nmap.org example.com は、3つのIPアドレスをスキャンします。
- レンジ:10.11.12.15-20は、6つのIPアドレス(10.11.12.15-20)をスキャンします。
- サブネット:MACHINE_IP/30は、4つのIPアドレスをスキャンします。
nmap -iL list_of_hosts.txt のように、ターゲットリストの入力としてファイルを指定しておくことも可能です。
Nmapがスキャンするホストのリストを確認したい場合は、nmap -sL TARGETSを使用することができます。このオプションは、Nmapがスキャンするホストの詳細なリストをスキャンせずに表示します。ただし、Nmapはすべてのターゲットに対して、名前を取得するためにDNSの逆解析を試みます。名前は、ペンテスターに対して、さまざまな情報を明らかにする可能性があります。(NmapにDNSサーバーへのアクセスをさせたくない場合は、-nを追加します)。
Start AttackBoxボタンでAttackBoxを起動し、AttackBoxの準備ができたらターミナルを開き、Nmapを使ってQuestionに回答してください。
■Question
What is the first IP address Nmap would scan if you provided 10.10.12.13/29 as your target?
(ヒント:コンソールでnmap -sL 10.10.12.13/29 を実行)
⇒10.10.12.8
How many IP addresses will Nmap scan if you provide the following range 10.10.0-255.101-125?
(ヒント:コンソールでnmap -sL 10.10.0-255.101-125 を実行し、最終行を確認)
⇒6400
Task 4 Discovering Live Hosts
次に図に示したTCP/IPのレイヤーを再確認してみましょう。稼働中のホストを発見するために各プロトコルを活用します。下から上に向かって、使用することができます。
ICMPには多くのタイプがあります。ICMPのpingはType8(Echo)とType0(Echo Reply)を使用します。
同じサブネット上のシステムにpingを送信する場合は、ICMP Echoの前にARPクエリを送信する必要があります。
TCPとUDPはトランスポート層ですが、ネットワーク・スキャンを目的とする場合、スキャナは一般的なTCPまたはUDPポートに特別に作成したパケットを送信して、ターゲットが応答するかどうかを確認することができます。この方法は、特にICMP Echoがブロックされている場合に効率的です。
■Question
Send a packet with the following:
From computer1
To computer3
Packet Type: “Ping Request”
What is the type of packet that computer1 sent before the ping?
⇒ARP REQUEST
What is the type of packet that computer1 received before being able to send the ping?
⇒ARP RESPONSE
How many computers responded to the ping request?
⇒1
Send a packet with the following:
From computer2
To computer5
Packet Type: “Ping Request”
What is the name of the first device that responded to the first ARP Request?
⇒router
What is the name of the first device that responded to the second ARP Request?
⇒computer5
Send another Ping Request. Did it require new ARP Requests? (Y/N)
⇒N
Task 5 Nmap Host Discovery Using ARP
どのホストが稼働しているかはどうやって知るのですか? オフラインのホストや使われていないIPアドレスをスキャンして時間を浪費しないようにすることが重要です。オンラインホストを発見する方法には、いろいろなものがあります。ホスト発見オプションが提供されていない場合、Nmapは以下のアプローチに従って、稼働中のホストを発見します。
- 特権ユーザがローカルネットワーク(Ethernet)上のターゲットをスキャンしようとするとき、NmapはARPリクエストを使用します。特権ユーザとは、rootまたはsudoersに属し、sudoを実行できるユーザです。
- 特権ユーザがローカルネットワーク外のターゲットをスキャンしようとする場合、NmapはICMPエコー要求、ポート80へのTCP ACK(応答)、ポート443へのTCP SYN(同期)、およびICMPタイムスタンプ要求を使用します。
- 非特権ユーザーがローカルネットワーク外のターゲットをスキャンしようとすると、Nmapはポート80と443にSYNパケットを送信して、TCP 3ウェイハンドシェイクに頼ろうとします。
Nmapは、デフォルトでは、ライブホストを見つけるためにpingスキャンを使用し、その後、ライブホストのみをポートスキャンします。Nmapを使って、ポートスキャンせずにオンラインホストの検出のみをした場合は、nmap -sn TARGETSを実行します。使用されるさまざまな技術をしっかり理解するために、さらに深く掘り下げてみましょう。
ARPスキャンは、ターゲットシステムと同じサブネットにいる場合にのみ可能です。イーサネット(802.3)およびWiFi(802.11)では、通信する前にシステムのMACアドレスを知っておく必要があります。MACアドレスはリンク層のヘッダーに必要で、ヘッダーには送信元MACアドレスと送信先MACアドレスなどのフィールドが含まれます。MACアドレスを取得するために、OSはARPクエリーを送信します。ARPクエリに応答するホストは、稼働しています。ARPクエリーは、ターゲットが自分と同じサブネット上にある場合、つまり、同じイーサネット/WiFi上にある場合にのみ機能します。ローカルネットワークのNmapスキャン中に、多くのARPクエリが生成されることを予期しておく必要があります。Nmapにポートスキャンを行わず、ARPスキャンだけを実行させたい場合は、nmap -PR -sn TARGETSを使用します。次の例は、Nmapがポートスキャンを行わずにARPを使用してホストを発見することを示しています。nmap -PR -sn MACHINE_IP/24を実行して、ターゲットマシンと同じサブネット上のすべての稼働中のシステムを発見しています。
pentester@TryHackMe$ sudo nmap -PR -sn 10.10.210.6/24
Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 07:12 BST
Nmap scan report for ip-10-10-210-75.eu-west-1.compute.internal (10.10.210.75)
Host is up (0.00013s latency).
MAC Address: 02:83:75:3A:F2:89 (Unknown)
Nmap scan report for ip-10-10-210-100.eu-west-1.compute.internal (10.10.210.100)
Host is up (-0.100s latency).
MAC Address: 02:63:D0:1B:2D:CD (Unknown)
Nmap scan report for ip-10-10-210-165.eu-west-1.compute.internal (10.10.210.165)
Host is up (0.00025s latency).
MAC Address: 02:59:79:4F:17:B7 (Unknown)
Nmap scan report for ip-10-10-210-6.eu-west-1.compute.internal (10.10.210.6)
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 3.12 seconds
このケースでは、攻撃側のIPアドレスは10.10.210.6で、ARPリクエストを使用して同じサブネット上の稼働中のホストを発見しています。ARPスキャンは、下図のように動作します。Nmapは、すべてのターゲットコンピュータにARPリクエストを送信し、オンラインになっているコンピュータはARP応答を返送します。
もし、tcpdumpやWiresharkなどのツールを使って生成されたパケットを見ることができれば、下図のようなネットワークトラフィックを確認することができます。下図では、Wiresharkが各ARPリクエストに関連する送信元MACアドレス、送信先MACアドレス、プロトコル、クエリを表示しています。送信元アドレスは攻撃側のMACアドレス、送信先アドレスはターゲットのMACアドレスが分からないのでブロードキャストアドレスになっています。しかし、Info欄に表示されるターゲットのIPアドレスは確認できます。図では、10.10.210.1から始まるサブネット上のすべてのIPアドレスのMACアドレスを要求していることがわかります。要求しているIPアドレスを持つホストは、そのMACアドレスを含むARP応答を送信し、それによって、そのホストがオンラインであることを知ることができます。
ARPスキャンについて話すと、ARPクエリを中心に構築されたスキャナであるarp-scanを挙げることができます。スキャンをカスタマイズするための多くのオプションがありますので、詳細な情報はarp-scan wikiをご覧ください。よく使われるのは arp-scan --localnet または単に arp-scan -l です。このコマンドはローカルネットワーク上の全ての有効なIPアドレスにARPクエリーを送信します。さらに、システムが複数のインターフェースを持っていて、そのうちの一つのインターフェースにある稼働中のホストを発見したい場合、-I を使ってインターフェースを指定することができます。例えば、sudo arp-scan -I eth0 -l は eth0 インターフェース上の全ての有効な IP アドレスに対して ARP クエリーを送信します。
以下の例では、arp-scan ATTACKBOX_IP/24 を使用して AttackBox のサブネットをスキャンしています。このスキャンは、前回のスキャンと近い時間帯に実行したため nmap -PR -sn ATTACKBOX_IP/24 では、同じ 3 つの稼働ホストが確認できました。
pentester@TryHackMe$ sudo arp-scan 10.10.210.6/24
Interface: eth0, datalink type: EN10MB (Ethernet)
WARNING: host part of 10.10.210.6/24 is non-zero
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.10.210.75 02:83:75:3a:f2:89 (Unknown)
10.10.210.100 02:63:d0:1b:2d:cd (Unknown)
10.10.210.165 02:59:79:4f:17:b7 (Unknown)
4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 2.726 seconds (93.91 hosts/sec). 3 responded
同様に、arp-scanコマンドは、tcpdump、Wireshark、または同様のツールを使用して見ることができる多くのARPクエリを生成します。arp-scanとnmap -PR -snのパケットキャプチャは、同じようなトラフィックパターンを生成していることがわかります。以下は、Wiresharkの出力です。
■Question
- From computer1
- To computer1 (to indicate it is broadcast)
- Packet Type: “ARP Request”
- Data: try all the possible eight devices (other than computer1) in the network: computer2, computer3, computer4, computer5, computer6, switch1, switch2, and router.
⇒3
Task 6 Nmap Host Discovery Using ICMP
ターゲット・ネットワーク上のすべてのIPアドレスにPingを打ち、Ping(ICMP Type 8/Echo)リクエストに対して、誰がPing応答(ICMP Type 0)を返すかを確認することができます。簡単でしょう?これは最も簡単な方法ですが、必ずしも信頼できるとは限りません。多くのファイアウォールはICMPエコーをブロックします。Windowsの新しいバージョンでは、デフォルトでICMPエコー要求をブロックするホストファイアウォールが設定されています。ターゲットが同じサブネット上にある場合、ARPクエリーがICMPリクエストに先行することを忘れないでください。
ICMPエコー要求を使用して稼働中のホストを検出するには、オプション -PEを追加します。(次の図に示すように、ICMPエコースキャンは、ICMPエコー要求を送信し、ターゲットがオンラインであればICMPエコー応答で返信することを前提として動作します)
以下の例では、nmap -PE -sn MACHINE_IP/24を使用してターゲットのサブネットをスキャンしています。このスキャンでは、サブネット上のすべてのIPアドレスにICMPエコーパケットを送信します。ここでも、生きているホストが応答することを期待します。しかし、多くのファイアウォールがICMPをブロックしていることを覚えておくとよいでしょう。以下の出力は、攻撃端末から sudo nmap -PE -sn MACHINE_IP/24 を使用して、仮想マシンのクラス C サブネットをスキャンした結果を示しています。
pentester@TryHackMe$ sudo nmap -PE -sn 10.10.68.220/24
Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 10:16 BST
Nmap scan report for ip-10-10-68-50.eu-west-1.compute.internal (10.10.68.50)
Host is up (0.00017s latency).
MAC Address: 02:95:36:71:5B:87 (Unknown)
Nmap scan report for ip-10-10-68-52.eu-west-1.compute.internal (10.10.68.52)
Host is up (0.00017s latency).
MAC Address: 02:48:E8:BF:78:E7 (Unknown)
Nmap scan report for ip-10-10-68-77.eu-west-1.compute.internal (10.10.68.77)
Host is up (-0.100s latency).
MAC Address: 02:0F:0A:1D:76:35 (Unknown)
Nmap scan report for ip-10-10-68-110.eu-west-1.compute.internal (10.10.68.110)
Host is up (-0.10s latency).
MAC Address: 02:6B:50:E9:C2:91 (Unknown)
Nmap scan report for ip-10-10-68-140.eu-west-1.compute.internal (10.10.68.140)
Host is up (0.00021s latency).
MAC Address: 02:58:59:63:0B:6B (Unknown)
Nmap scan report for ip-10-10-68-142.eu-west-1.compute.internal (10.10.68.142)
Host is up (0.00016s latency).
MAC Address: 02:C6:41:51:0A:0F (Unknown)
Nmap scan report for ip-10-10-68-220.eu-west-1.compute.internal (10.10.68.220)
Host is up (0.00026s latency).
MAC Address: 02:25:3F:DB:EE:0B (Unknown)
Nmap scan report for ip-10-10-68-222.eu-west-1.compute.internal (10.10.68.222)
Host is up (0.00025s latency).
MAC Address: 02:28:B1:2E:B0:1B (Unknown)
Nmap done: 256 IP addresses (8 hosts up) scanned in 2.11 seconds
スキャン出力は、8台のホストが起動していることを示し、さらに、そのMACアドレスを示しています。一般的に、ターゲットが自分のシステムと同じサブネットにいない限り、ターゲットのMACアドレスを知ることはないと思われます。上記の出力は、Nmapが、受け取ったARP応答に基づいてこれらのホストが稼働していることを確認したため、ICMPパケットを送信する必要がなかったことを示しています。
上記のスキャンを繰り返します。ただし、今回は、異なるサブネットに属するシステムからスキャンします。結果は同様ですが、MACアドレスがありません。
pentester@TryHackMe$ sudo nmap -PE -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:16 EEST
Nmap scan report for 10.10.68.50
Host is up (0.12s latency).
Nmap scan report for 10.10.68.52
Host is up (0.12s latency).
Nmap scan report for 10.10.68.77
Host is up (0.11s latency).
Nmap scan report for 10.10.68.110
Host is up (0.11s latency).
Nmap scan report for 10.10.68.140
Host is up (0.11s latency).
Nmap scan report for 10.10.68.142
Host is up (0.11s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap scan report for 10.10.68.222
Host is up (0.11s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 8.26 seconds
Wiresharkのようなツールを使ってネットワークパケットを見ると、下の画像のようなものが見えてきます。宛先サブネットとは異なるサブネットにある1つのソースIPアドレスが、ターゲットサブネット内のすべてのIPアドレスにICMPエコーリクエストを送信し、どれが応答するかを確認していることがわかります。
ICMPエコーリクエストはブロックされる傾向があるので、システムがオンラインかどうかを判断するために、ICMPタイムスタンプまたはICMPアドレスマスクのリクエストも考慮するとよいでしょう。Nmapはタイムスタンプ要求(ICMPタイプ13)を使用し、タイムスタンプ応答(ICMPタイプ14)を得るかどうかをチェックします。-PPオプションを追加すると、NmapはICMPタイムスタンプリクエストを使用するようになります。下図のように、生きているホストが応答することを期待します。
次の例では、nmap -PP -sn MACHINE_IP/24を実行して、ターゲットマシンサブネット上のオンラインコンピュータを検出します。
pentester@TryHackMe$ sudo nmap -PP -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:06 EEST
Nmap scan report for 10.10.68.50
Host is up (0.13s latency).
Nmap scan report for 10.10.68.52
Host is up (0.25s latency).
Nmap scan report for 10.10.68.77
Host is up (0.14s latency).
Nmap scan report for 10.10.68.110
Host is up (0.14s latency).
Nmap scan report for 10.10.68.140
Host is up (0.15s latency).
Nmap scan report for 10.10.68.209
Host is up (0.14s latency).
Nmap scan report for 10.10.68.220
Host is up (0.14s latency).
Nmap scan report for 10.10.68.222
Host is up (0.14s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 10.93 seconds
前のICMPスキャンと同様に、このスキャンでは、ターゲットのサブネット内のすべての有効なIPアドレスに、多数のICMPタイムスタンプ要求が送信されます。下のWiresharkのスクリーンショットでは、1つのソースIPアドレスが、オンラインホストを発見するために、可能な限りのIPアドレスにICMPパケットを送信しているのがわかります。
同様に、Nmapはアドレスマスククエリー(ICMPタイプ17)を使用し、アドレスマスク応答(ICMPタイプ18)を取得するかどうかをチェックします。このスキャンは、オプション -PMで有効にすることができます。下図に示すように、ライブホストはICMPアドレスマスク要求に対して応答することが期待されます。
ICMPアドレスマスククエリを使用して稼働中のホストを発見するため、nmap -PM -sn MACHINE_IP/24コマンドを実行しました。以前のスキャンで、少なくとも8台のホストが稼働していることが分かっていましたが、このスキャンでは1台も返されませんでした。これは、ターゲットシステムまたはルート上のファイアウォールが、このタイプのICMPパケットをブロックしているためです。したがって、同じ結果を得るためには、複数のアプローチを学ぶことが不可欠です。1つのタイプのパケットがブロックされている場合、ターゲットネットワークとサービスを発見するために、常に別の方法を選択することができます。
pentester@TryHackMe$ sudo nmap -PM -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:13 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 52.17 seconds
応答は得られず、どのホストがオンラインであるかを把握することはできませんでしたが、このスキャンでは、すべての有効なIPアドレスにICMPアドレスマスク要求を送信し、応答を待っていたことに注目することが重要です。以下のスクリーンショットに見られるように、各ICMPリクエストは2回送信されました。
■Question
What is the option required to tell Nmap to use ICMP Timestamp to discover live hosts?
⇒-PP
What is the option required to tell Nmap to use ICMP Address Mask to discover live hosts?
⇒-PM
What is the option required to tell Nmap to use ICMP Echo to discover life hosts?
⇒-PE
Task 7 Nmap Host Discovery Using TCP and UDP
TCP SYN Ping
TCPポート(デフォルトでは80)にSYN(Synchronize)フラグを設定したパケットを送信し、応答を待つことができます。開いているポートであればSYN/ACK(Acknowledge)、閉じているポートであればRST(Reset)の応答があるはずです。この場合、ホストが立ち上がっているかどうかを推測するために、何らかの応答があるかどうかだけをチェックします。ポートの具体的な状態は、ここでは重要ではありません。下図は、TCPの3ウェイハンドシェイクが通常どのように行われるかを示したものです。
NmapにTCP SYN pingを使わせたい場合は、-PSオプションの後にポート番号、範囲、リスト、またはそれらの組み合わせを指定することで実現できます。たとえば、-PS21はポート21を対象とし、-PS21-25はポート21、22、23、24、25を対象とします。最後に、-PS80,443,8080は、80、443、8080の3つのポートをターゲットにします。
特権ユーザー(rootとsudoers)は、下図のように、TCP SYNパケットを送信でき、ポートが開いていてもTCP 3ウェイ・ハンドシェイクを完了する必要がありません。非特権ユーザーは、ポートが開いている場合、3ウェイハンドシェイクを完了させる必要があります。
nmap -PS -sn MACHINE_IP/24 を実行して、ターゲット VM のサブネットをスキャンしてみます。以下の出力に見られるように、5つのホストを発見することができました。
pentester@TryHackMe$ sudo nmap -PS -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
Nmap scan report for 10.10.68.121
Host is up (0.16s latency).
Nmap scan report for 10.10.68.125
Host is up (0.089s latency).
Nmap scan report for 10.10.68.134
Host is up (0.13s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 17.38 seconds
下図のWiresharkでネットワークトラフィックを見ることで、舞台裏で何が起きているのかを詳しく見てみましょう。技術的には、TCP pingスキャンで使用するTCPポートを指定していなかったため、Nmapは一般的なポートを使用しました。ポート80でリッスンしているサービスはすべて応答することが期待され、ホストがオンラインであることを間接的に示しています。
TCP ACK Ping
これは、ACKフラグが設定されたパケットを送信するものです。これを実行するには、Nmapを特権ユーザで実行する必要があります。非特権ユーザーで試すと、Nmapは3ウェイハンドシェイクを試みます。
デフォルトでは、ポート80が使用さ れます。構文は、TCP SYN pingと似ています。-PAの後には、ポート番号、範囲、リスト、またはそれらの組み合わせを指定する必要があります。たとえば、-PA21、-PA21-25、-PA80,443,8080 を考えてください。ポートを指定しない場合、ポート80が使用されます。
次の図は、ACKフラグを持つTCPパケットは、RSTフラグを設定したTCPパケットを返してもらう必要があることを示しています。ACKフラグを持つTCPパケットは進行中のコネクションの一部ではないので、ターゲットはRSTフラグをセットして応答します。期待される応答は、ターゲットホストが稼働しているかどうかを検出するために使用されます。
この例では、sudo nmap -PA -sn MACHINE_IP/24を実行して、ターゲットのサブネット上のオンラインホストを検出します。TCP ACK pingスキャンにより、5つのホストがアップしていることが検出されました。
pentester@TryHackMe$ sudo nmap -PA -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:46 EEST
Nmap scan report for 10.10.68.52
Host is up (0.11s latency).
Nmap scan report for 10.10.68.121
Host is up (0.12s latency).
Nmap scan report for 10.10.68.125
Host is up (0.10s latency).
Nmap scan report for 10.10.68.134
Host is up (0.10s latency).
Nmap scan report for 10.10.68.220
Host is up (0.10s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 29.89 seconds
下図のようにネットワークトラフィックを覗いてみると、ACKフラグが設定され、ターゲットシステムのポート80に送信されたパケットを多数発見することができます。Nmapは各パケットを2回送信しています。応答がないシステムは、オフラインまたはアクセス不能になります。
UDP Ping
最後に、ホストがオンラインかどうかを調べるためにUDPを使用することができます。TCP SYN Pingとは逆に、開いているポートにUDPパケットを送っても、何も返ってこないことが予想されます。しかし、閉じたUDPポートにUDPパケットを送ると、ICMP port unreachableパケットを受け取ることが期待できます。これは、ターゲットシステムが稼働していて利用可能であることを示します。
次の図では、開いているUDPポートにUDPパケットを送信しても、何も応答がないことがわかります。しかし、閉じたUDPポートにUDPパケットを送信すると、ターゲットがオンラインであることを間接的に示す応答がトリガーされることがあります。
ポートを指定する構文は、TCP SYN pingおよびTCP ACK pingと同様です。Nmapは、UDP pingに-PUを使用します。次の例では、UDPスキャンを使用し、5つのライブホストを発見しています。
pentester@TryHackMe$ sudo nmap -PU -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
Nmap scan report for 10.10.68.121
Host is up (0.10s latency).
Nmap scan report for 10.10.68.125
Host is up (0.14s latency).
Nmap scan report for 10.10.68.134
Host is up (0.096s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 9.20 seconds
生成されたUDPパケットを検証してみましょう。次のWiresharkのスクリーンショットでは、Nmapが、閉じている可能性が高いUDPポートにUDPパケットを送信していることが分かります。下の画像は、Nmapが一般的でないUDPポートを使って、ICMP宛先到達不能(port unreachable)エラーを引き起こしていることを示しています。
Masscan
余談ですが、Masscan は利用可能なシステムを発見するために同様のアプローチを使用しています。ただし、ネットワークスキャンを迅速に終了させるため、Masscanは生成するパケットのレートをかなり積極的に上げています。構文は非常に似ており、-p の後にポート番号、リスト、または範囲を指定することができます。次の例を見てください。
- masscan MACHINE_IP/24 -p443
- masscan MACHINE_IP/24 -p80,443
- masscan MACHINE_IP/24 -p22-25
- masscan MACHINE_IP/24 --top-ports 100
■Question
Which TCP ping scan does not require a privileged account?(特権アカウントを必要としないTCP pingスキャンはどれですか?)
⇒TCP Syn PING
Which TCP ping scan requires a privileged account?(特権アカウントを必要とするTCP pingスキャンはどれですか?)
⇒TCP ACK PING
What option do you need to add to Nmap to run a TCP SYN ping scan on the telnet port?(TelnetポートでTCP SYN pingスキャンを実行するために、Nmapにどのようなオプションを追加する必要がありますか?)
⇒-PS23
Task 8 Using Reverse-DNS Lookup
Nmapのデフォルトの動作は、リバースDNSオンラインホストを使用することです。ホスト名から多くのことがわかるので、これは有用なステップでしよう。しかし、そのようなDNSクエリを送信したくない場合は、-nを使用してこのステップをスキップすることができます。
デフォルトでは、Nmapはオンラインホストを検索します。しかし、-Rオプションを使用すると、オフラインのホストであってもDNSサーバに問い合わせることができます。特定のDNSサーバを使用したい場合は、-dns-servers DNS_SERVERオプションを追加することができます。
■Question
We want Nmap to issue a reverse DNS lookup for all the possibles hosts on a subnet, hoping to get some insights from the names. What option should we add?(Nmapに、サブネット上のすべての可能性のあるホストのDNS逆引きを発行させ、その名前から何らかの洞察を得たいと考えています。どのようなオプションを追加すればよいでしょうか。)
⇒-R
Task 9 Summary
ARP、ICMP、TCP、UDPがどのように生きているホストを検出することができるかを学習しました。ホストからのいかなる応答も、それがオンラインであることを示すものです。以下は、これまで取り上げたNmapのコマンドラインオプションの簡単な要約です。
Scan Type | Example Command |
---|---|
ARP Scan | sudo nmap -PR -sn MACHINE_IP/24 |
ICMP Echo Scan | sudo nmap -PE -sn MACHINE_IP/24 |
ICMP Timestamp Scan | sudo nmap -PP -sn MACHINE_IP/24 |
ICMP Address Mask Scan | sudo nmap -PM -sn MACHINE_IP/24 |
TCP SYN Ping Scan | sudo nmap -PS22,80,443 -sn MACHINE_IP/30 |
TCP ACK Ping Scan | sudo nmap -PA22,80,443 -sn MACHINE_IP/30 |
UDP Ping Scan | sudo nmap -PU53,161,162 -sn MACHINE_IP/30 |
ポートスキャンを行わず、ホストの発見のみを目的とする場合は、-snを付けることを忘れないでください。-snを省略すると、Nmapはデフォルトで生きているホストを見つけた後、ポートスキャンを実行します。
Option | Purpose |
---|---|
-n | no DNS lookup |
-R | reverse-DNS lookup for all hosts |
-sn | host discovery only |
■Question ※無し