Task 1 Introduction
ここは、Nmapシリーズ(ネットワークセキュリティ入門モジュールの一部)の2つ目です。
- Nmap Live Host Discovery
- Nmap Basic Port Scans
- Nmap Advanced Port Scans
- Nmap Post Port Scans
前回では、オンラインシステムの発見に焦点を当て、Nmapスキャンの3つのステップを説明しました。
- ターゲットの列挙
- ライブホストの発見
- 逆DNSルックアップ
次のステップは、どのポートが開いていてリッスンしているか、どのポートが閉じているかをチェックすることでしょう。そこで、今回と次回では、ポートスキャンと、nmapが使用するさまざまなタイプのポートスキャンに焦点を当てます。ここでは、以下のことを説明します。
- TCP connect port scan
- TCP SYN port scan
- UDP port scan
さらに、ポート、スキャンレート、並列プローブの数を指定するためのさまざまなオプションについても説明します。
■Question ※無し
Task 2 TCP and UDP Ports
IPアドレスがネットワーク上の多数のホストを特定するのと同じ意味で、TCPポートまたはUDPポートは、そのホスト上で実行されているネットワークサービスを特定するために使用されます。サーバーは、ネットワークサービスを提供し、特定のネットワークプロトコルに準拠しています。例としては、時刻の提供、DNSクエリへの応答、Webページの提供などがあります。ポートは通常、その特定のポート番号を使用するサービスにリンクされています。例えば、HTTPサーバーはデフォルトでTCPポート80に接続し、さらにHTTPサーバーがSSL/TLSをサポートしている場合は、TCPポート443で待ち受けることになります(TCPポート80と443は、SSL/TLSをサポートしている場合は、TCPポート443で待ち受けることになります)。(TCPポート80と443はHTTPとHTTPSのデフォルトポートですが、Webサーバーの管理者は必要に応じて他のポート番号を選択することができます)。さらに、1つのTCPまたはUDPポートで複数のサービスが(同じIPアドレスで)リッスンすることはできません。
単純化しすぎかもしれませんが、ポートを2つの状態に分類することができます。
- オープンポートは、そのポートでリッスンしているサービスがあることを示します。
- クローズド・ポートとは、そのポートでリッスンしているサービスがないことを示します。
しかし、現実的な場面では、ファイアウォールの影響を考慮する必要があります。たとえば、ポートが開いていても、ファイアウォールがパケットをブロックしている場合があります。そこで、Nmapは次の6つの状態を考慮します。
- Open:指定されたポートでサービスがリッスン中であることを示します。
- Closed:指定されたポートにアクセス可能ですが、どのサービスもリッスンしていないことを示します。アクセス可能とは、到達可能であり、ファイアウォールや他のセキュリティ機器/プログラムによってブロックされていないことを意味します。
- Filtered: ポートがアクセス可能でないため、Nmapがそのポートを開いているか閉じているか判断できないことを意味します。この状態は、通常、ファイアウォールがNmapのそのポートへの到達を妨げていることが原因です。Nmapのパケットがポートに到達するのをブロックしている可能性があり、代わりに、応答がNmapのホストに到達するのをブロックしている可能性もあります。
- Unfiltered: ポートはアクセス可能ですが、Nmapがそのポートが開いているか閉じているか判断できないことを意味します。この状態は、ACKスキャン-sAを使用したときに遭遇します。
- Open|Filtered: ポートが開いているかどうかをNmapが判断できないことを意味します。これは、Nmapが、そのポートが開いているかフィルタリングされているかを判断できないことを意味します。
- Closed|Filtered:これは、Nmapが、ポートが開いているかフィルタリングされているかを判断できないことを意味します。これは、Nmapが、ポートが閉じているかフィルタリングされているかを判断できないことを意味します。
■Question
Which service uses UDP port 53 by default?
⇒DNS
Which service uses TCP port 22 by default?
⇒SSH
How many port states does Nmap consider?
⇒6
Which port state is the most interesting to discover as a pentester?
⇒open
Task 3 TCP Flags
Nmapは、さまざまな種類のTCPポートスキャンをサポートしています。これらのポートスキャンの違いを理解するために、TCPヘッダを確認する必要があります。TCPヘッダとは、TCPセグメントの最初の24バイトのことです。次の図は、RFC 793で定義されているTCPヘッダーを示しています。この図は一見高度に見えますが、理解するのはとても簡単です。最初の行には、送信元のTCPポート番号と送信先のポート番号が記載されています。ポート番号は16ビット(2バイト)割り当てられていることがわかります。2行目と3行目には、シーケンス番号と確認応答番号があります。各行には32ビット(4バイト)が割り当てられており、合計6行で24バイトを構成しています。
特に、Nmapが設定したり解除したりできるフラグに注目する必要があります。ここでは、TCPフラグを赤色で強調表示しました。フラグビットの設定とは、その値を1にすることです。左から右へ、TCPヘッダのフラグは次のとおりです。
- URG: 緊急フラグは、ファイルされた緊急ポインタが重要であることを示します。緊急ポインタは、受信データが緊急であることを示し、URGフラグが設定されたTCPセグメントは、以前に送信されたTCPセグメントを待つことを考慮せずに、直ちに処理されることを示します。
- ACK: 確認応答フラグは、確認応答番号が有意であることを示します。TCPセグメントを受信したことを確認するために使用されます。
- PSH: Pushフラグ TCPにデータを速やかにアプリケーションに渡すように要求するフラグです。
- RST: リセットフラグは、接続をリセットするために使用されます。ファイアウォールなどの他のデバイスがTCP接続を切断するために送信することがあります。このフラグは、データがホストに送信され、受信側に応答するサービスがない場合にも使用されます。
- SYN: 同期フラグは、TCP 3ウェイハンドシェイクを開始し、相手ホストとシーケンス番号を同期させるために使用されます。シーケンス番号はTCPコネクション確立時にランダムに設定する必要があります。
- FIN:送信側にはもう送信するデータがありません。
■Question
What 3 letters represent the Reset flag?
⇒RST
Which flag needs to be set when you initiate a TCP connection (first packet of TCP 3-way handshake)?
⇒SYN
Task 4 TCP Connect Scan
TCPコネクトスキャンは、TCPの3ウェイハンドシェイクを完了させることで動作します。標準的なTCP接続の確立では、クライアントはSYNフラグを設定したTCPパケットを送信し、サーバーはポートが開いていればSYN/ACKで応答し、最後にクライアントはACKを送信して3方向のハンドシェイクを完了させます。
我々はTCPポートが開いているかどうかを知ることに興味があるのであって、TCPコネクションを確立することに興味があるのではありません。したがって、RST/ACKを送信することによってその状態が確認されると同時に、接続は破棄されます。TCPコネクトスキャンを実行するかどうかは、-sTを使用して選択することができます。
特権ユーザ(rootまたはsudoer)でない場合、TCPコネクトスキャンがオープンTCPポートを発見する唯一の可能なオプションであることに注意することが重要です。
次のWiresharkのパケットキャプチャウィンドウでは、NmapがSYNフラグを設定したTCPパケットを、256、443、143など、さまざまなポートに送信しているのがわかります。デフォルトでは、Nmapは最も一般的な1000個のポートに接続しようとします。閉じたTCPポートは、SYNパケットに対してRST/ACKで応答し、それが開いていないことを示します。このパターンは、閉じたポートとのTCP 3ウェイハンドシェイクを開始しようとすると、すべての閉じたポートに対して繰り返されます。
ポート143が開いていることが分かるので、SYN/ACKで応答し、NmapはACKを送信して3ウェイハンドシェイクを完了しました。下図は、Nmapホストとターゲットシステムのポート143の間で交換されたすべてのパケットを示しています。最初の3つのパケットは、TCPの3ウェイハンドシェイクが完了したものです。そして、4番目のパケットがRST/ACKパケットでそれを破っています。
-sT (TCP接続スキャン) を説明するために、次のコマンド例では、開いているポートの詳細なリストが返されました。
Pentester Terminal
pentester@TryHackMe$ nmap -sT 10.10.199.134
Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:53 BST
Nmap scan report for 10.10.199.134
Host is up (0.0024s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
143/tcp open imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.40 seconds
なお、-Fをつけると高速モードが有効になり、スキャンされるポートの数が1000から最も一般的な100ポートに減少します。
ランダムな順序ではなく、連続した順序でポートをスキャンするために、-rオプションを追加できることも特筆すべき点です。このオプションは、例えばターゲットが起動したときにポートが一貫した方法で開いているかどうかをテストするときに便利です。
■Question
Launch the VM. Open the AttackBox and execute nmap -sT 10.10.199.134 via the terminal. A new service has been installed on this VM since our last scan. Which port number was closed in the scan above but is now open on this target VM?(THM上でVMを起動します。AttackBox を開き、ターミナルから nmap -sT 10.10.199.134 を実行します。前回のスキャン(上述のコマンド例)以降、このVMに新しいサービスがインストールされています。このターゲットVM上で現在開いているポート番号はどれでしょうか)
⇒110
What is Nmap’s guess about the newly installed service?
⇒pop3
Task 5 TCP SYN Scan
非特権ユーザーはコネクトスキャンに限定されます。しかし、デフォルトのスキャンモードはSYNスキャンであり、これを実行するには特権(rootまたはsudoer)ユーザが必要です。SYNスキャンでは、TCPの3ウェイハンドシェイクを完了する必要はなく、サーバーからの応答を受け取ると、接続を切断します。TCP接続を確立しなかったため、スキャンがログに記録される可能性が低くなります。このスキャンタイプは、-sSオプションを使用することで選択できます。下図は、TCP 3ウェイハンドシェイクを完了しないTCP SYNスキャンがどのように動作するかを示しています。
Wiresharkの次のスクリーンショットは、TCP SYNスキャンを示しています。閉じたTCPポートの場合の動作は、TCPコネクトスキャンと同様です。
この2つのスキャンの違いをよりよく理解するために、次のスクリーンショットを考えてみよう。次の図の上半分では、TCPコネクトスキャン -sTトラフィックを見ることができます。開いているTCPポートは、接続を閉じる前に、NmapがTCPの3ウェイハンドシェイクを完了させる必要があります。次の図の下半分では、SYNスキャン-sSがTCP 3ウェイハンドシェイクを完了する必要がないことがわかります。 代わりに、NmapはSYN/ACKパケットを受信すると、RSTパケットを送信します。
TCP SYNスキャンは、Nmapを特権ユーザーとして実行する場合、rootとして実行するかsudoを使用する場合のデフォルトのスキャンモードで、非常に信頼性の高い選択肢です。これは、先にTCPコネクトスキャンで見つけたオープンポートを正常に検出したものの、ターゲットとの間にTCP接続が完全に確立されていないことを示しています。
Pentester Terminal
pentester@TryHackMe$ sudo nmap -sS 10.10.89.73
Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:53 BST
Nmap scan report for 10.10.89.73
Host is up (0.0073s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
110/tcp open pop3
111/tcp open rpcbind
143/tcp open imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
■Question
Launch the VM. Some new server software has been installed since the last time we scanned it. On the AttackBox, use the terminal to execute nmap -sS 10.10.89.73. What is the new open port?(VMを起動し、前述のスキャン以降、新しいサーバソフトウェアがいくつかインストールされています。AttackBox上で、ターミナルを使用して、nmap -sS 10.10.89.73を実行します。新しいオープンポートは何でしょう?)
⇒6667
What is Nmap’s guess of the service name?
⇒irc
Task 6 UDP Scan
UDPはコネクションレス型のプロトコルであるため、接続確立のためのハンドシェイクを必要としません。UDPのポートでリッスンしているサービスが,こちらのパケットに応答することは保証できません。ただし、閉じたポートにUDPパケットを送信すると、ICMP port unreachableエラー(タイプ3、コード3)が返されます。UDPスキャンは-sUオプションで選択できます。さらに、別のTCPスキャンと組み合わせることもできます。
次の図は、開いているUDPポートにUDPパケットを送っても、その返信は期待できないことを示しています。したがって、開いているポートにUDPパケットを送っても、何もわかりません。
しかし、下図のように、タイプ3、宛先到達不能、コード3、ポート到達不能のICMPパケットを取得することが予想されます。つまり、何の応答も発生しないUDPポートが、Nmapがオープン状態であることを示すのです。
下記のWiresharkのキャプチャでは、閉じたポートごとにICMPパケットの宛先到達不能(port unreachable)が生成されていることがわかります。
このLinuxサーバーに対してUDPスキャンを開始したところ、確かにポート111が開かれていることが分かりました。一方、Nmapは、UDPポート68が開いているかフィルタリングされているかを判断することができません。
Pentester Terminal
pentester@TryHackMe$ sudo nmap -sU 10.10.73.231
Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:54 BST
Nmap scan report for 10.10.73.231
Host is up (0.00061s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
68/udp open|filtered dhcpc
111/udp open rpcbind
MAC Address: 02:45:BF:8A:2D:6B (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 1085.05 seconds
■Question
Launch the VM. On the AttackBox, use the terminal to execute nmap -sU -F -v 10.10.73.231. A new service has been installed since the last scan. What is the UDP port that is now open?
⇒53
What is the service name according to Nmap?
⇒domain
Task 7 Fine-Tuning Scope and Performance
デフォルトの1000ポートではなく、スキャンしたいポートを指定することができます。ポートの指定は、直感的に理解できるようになります。いくつか例を見てみましょう。
- ポートリスト:-p22,80,443 は、ポート 22、80、443 をスキャンします。
- ポート範囲:-p1-1023は、1~1023のすべてのポートをスキャンし、-p20-25は、20~25番のポートをスキャンします。
-p-で全ポートのスキャンを要求すると、65535ポートすべてをスキャンします。最も一般的な100個のポートをスキャンしたい場合は、-Fを追加します。top-ports 10を使用すると、最も一般的な10個のポートをチェックします。
-T<0-5>でスキャンのタイミングを制御することができます。-T0が最も遅く(偏執的)、-T5が最も速いです。Nmapのマニュアルページによると、6つのテンプレートがあります。
- paranoid (0)
- sneaky (1)
- polite (2)
- normal (3)
- aggressive (4)
- insane (5)
IDSを回避するには、-T0または-T1を検討するのがよいでしょう。たとえば、-T0は一度に1つのポートをスキャンし、各プローブを送信する間に5分待つので、1つのターゲットのスキャンが終了するまでの時間を推測することができます。タイミングを指定しない場合、Nmapは通常の-T3を使用します。T5は、速度の点で最も優れているものの、パケットロスの可能性が高くなるため、スキャン結果の精度に影響を与える可能性があることに注意する必要があります。T4はCTFや練習用ターゲットでスキャンを学ぶときによく使われ、-T1はステルス性がより重要な実際の活動でよく使われます。
また、--min-rate <number> と --max-rate <number> を使用して、パケットレートを制御することもできます。例えば、--max-rate 10または--max-rate=10は、スキャナが1秒間に10個以上のパケットを送信しないようにします。
さらに、--min-parallelism <numprobes>と--max-parallelism <numprobes>でプロービングの並列化を制御することができます。Nmapはターゲットをプローブして、どのホストが生きているか、どのポートが開いているかを発見します。プローブ並列化では、こうしたプローブを何回並列に実行できるかを指定します。たとえば、--min-parallelism=512は、Nmapが少なくとも512個のプローブを並列に維持するよう促します。この512個のプローブは、ホスト検出とオープンポートに関連します。
■Question
What is the option to scan all the TCP ports between 5000 and 5500?
⇒-p5000-5500
How can you ensure that Nmap will run at least 64 probes in parallel?
⇒--min-parallelism=64
What option would you add to make Nmap very slow and paranoid?
⇒-T0
Task 8 Summary
ここでは、3種類のスキャンを取り上げました。
Port Scan Type | Example Command |
---|
TCP Connect Scan | nmap -sT MACHINE_IP |
TCP SYN Scan | sudo nmap -sS MACHINE_IP |
UDP Scan | sudo nmap -sU MACHINE_IP |
これらのスキャンタイプは、ターゲットホスト上で実行されているTCPおよびUDPサービスの検出を開始するのに役立つはずです。
Option | Purpose |
---|
-p- | all ports |
-p1-1023 | scan ports 1 to 1023 |
-F | 100 most common ports |
-r | scan ports in consecutive order |
-T<0-5> | -T0 being the slowest and T5 the fastest |
--max-rate 50 | rate <= 50 packets/sec |
--min-rate 15 | rate >= 15 packets/sec |
--min-parallelism 100 | at least 100 probes in parallel |
出典:Nmap Basic Port Scans