Lab 1.4: Nmap
オンライン演習
接続性: この演習を行うには、クラス内ネットワーク(560A VPN経由)に接続している必要があります
目的
- Nmapを使用してネットワーク範囲10.130.10.0/24をスイープすることでターゲットマシンを特定する
- Nmapでポート範囲を指定し、より一般的なポートを決定するためにNmap-servicesファイルを分析する
- TCPおよびUDPポートスキャンを実施し、両者の違いを分析する
ウォークスルービデオ
ラボのセットアップ
使用するVM:
- Linux
Slingshot Linux VMから10.130.10.10にpingできる必要があります:
コマンド
ping -c 4 10.130.10.10
想定される結果
sec560@560vm:~$ ping -c 4 10.130.10.10
PING 10.130.10.10 (10.130.10.10) 56(84) bytes of data.
64 bytes from 10.130.10.10: icmp_seq=1 ttl=63 time=77.3 ms
64 bytes from 10.130.10.10: icmp_seq=2 ttl=63 time=77.1 ms
64 bytes from 10.130.10.10: icmp_seq=3 ttl=63 time=79.7 ms
64 bytes from 10.130.10.10: icmp_seq=4 ttl=63 time=81.3 ms
--- 10.130.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 77.051/78.840/81.315/1.757 ms
ラボ – ステップバイステップの手順
1: 初期スキャン
ターゲットサブネットのスキャンを実行しましょう。
コマンド
nmap -n 10.130.10.1-10
想定される結果
sec560@560vm:~$ nmap -n 10.130.10.1-10
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 18:08 UTC
Nmap scan report for 10.130.10.5
Host is up (0.083s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT STATE SERVICE
80/tcp open http
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
Nmap scan report for 10.130.10.6
Host is up (0.082s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT STATE SERVICE
80/tcp open http
3389/tcp open ms-wbt-server
Nmap scan report for 10.130.10.10
Host is up (0.086s latency).
Not shown: 996 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
23/tcp open telnet
80/tcp open http
9100/tcp open jetdirect
Nmap done: 10 IP addresses (3 hosts up) scanned in 11.85 seconds
-n
はNmapがドメイン名を解決しないことを意味します。Nmapスキャンの実行中にp
キーを押すとパケット単位のロギングがオンになり、Shift-p
でオフになります。
講義で説明したように、Nmapはroot
として実行されていない限り、ICMPパケットを送信できないことを思い出してください。前のコマンドをsudo
で実行するか、rootユーザーとして実行すると、ICMPパケットも確認できます。
また、v
キーとd
キーをそれぞれ複数回押して、冗長性とデバッグ情報を試してみてください。十分な速さで入力できない場合は、スキャンを再起動してから押してみてください。
2: 10.130.10.33のスキャン
次に、ターゲットマシン10.130.10.33のTCPポートスキャンを実施しましょう。
新しいターミナルを開く
ネットワーク10.130.10.0/24に関連するトラフィックを表示するようにtcpdumpを起動します(名前解決なし)。
パケットを観察するためにスニファーを実行できるように、新しいターミナルウィンドウを起動してください:
コマンド
sudo tcpdump -i tun0 -nn net 10.130.10.0/24
想定される結果
sec560@slingshot:~$ sudo tcpdump -i tun0 -nn net 10.130.10.0/24
以下のコマンドが実行されるまで、パケットは表示されません。
次に、元のNmapターミナルウィンドウに戻って、Nmapを起動して10.130.10.33ホストをスキャンし、TCP接続スキャン(完全な3ウェイハンドシェイク)を実行します:
コマンド
sudo nmap -n -sT 10.130.10.33 -F
想定される結果
sec560@560vm:~$ sudo nmap -n -sT 10.130.10.33 -F
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 18:11 UTC
Nmap scan report for 10.130.10.33
Host is up (0.075s latency).
Not shown: 98 filtered tcp ports (no-response)
PORT STATE SERVICE
1433/tcp open ms-sql-s
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 3.12 seconds
上記のように、Nmapはスキャンの完了にかかる合計時間を表示します。
また、スニファーの出力を確認してください。マシンからターゲットへ送信される多数のSYNパケット(S
)が表示されるはずです。3ウェイハンドシェイクを完了するために、比較的少ない数のSYN-ACKが返ってきて、マシンからACKが送信されます。
ただし、Nmapはこの呼び出しですべてのTCPポートをスキャンしたわけではありません。/usr/share/nmap/nmap-services
ファイルに示されているように、最も頻繁に使用される上位100ポート(-F
を使用したため、そうでなければ上位1,000ポート)をスキャンしました。-p 0-
を使用してすべてのポートをスキャンする場合、このコマンドは5分以上かかる可能性があります。すべてのポートをスキャンしたい場合は、最初にラボを完了した後に実行してください。--top-ports 3000
を使用してより多くのポートをスキャンした場合の結果を見てみましょう。
コマンド
sudo nmap -n -sT 10.130.10.33 --top-ports 3000
想定される結果
sec560@560vm:~$ sudo nmap -n -sT 10.130.10.33 --top-ports 3000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 18:12 UTC
Nmap scan report for 10.130.10.33
Host is up (0.078s latency).
Not shown: 2997 filtered tcp ports (no-response)
PORT STATE SERVICE
1433/tcp open ms-sql-s
3389/tcp open ms-wbt-server
5985/tcp open wsman
Nmap done: 1 IP address (1 host up) scanned in 14.40 seconds
このスキャンは時間がかかりましたが、Nmapがより多くのオープンポートを発見したことに注目してください。もちろん、スキャンするポートが多いほど時間がかかります。これは時間と精度のトレードオフです。すべての65,536ポートをチェックすることもできますが、それには長い時間がかかります(1,000ポートの約65倍)。少数のホストでは問題にならないかもしれませんが、より大きなネットワークやターゲット範囲では、スキャンが禁止的に遅くなる可能性があります。
3: 出力フォーマット
次に、Nmapが-oA
オプションを介して作成できる出力フォーマットファイルを確認します。デフォルトのポートで-sT
スキャンを再実行し、すべての主要なフォーマットスタイル(Normal、Greppable、XML出力を示す-oA
)で結果を保存します。結果を/tmp
ディレクトリのファイルに、スキャンタイプとターゲットのIPアドレスを示すベース名scan
で保存します。また、-F
(上位100ポートのみをスキャン)と-T4
(タイムアウトを減らして並列にスキャン)でスキャンを高速化します。
コマンド
sudo nmap -n -sT 10.130.10.0/24 -oA /tmp/scan -F -T4
想定される結果
sec560@560vm:~$ sudo nmap -n -sT 10.130.10.0/24 -oA /tmp/scan -F -T4
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 18:13 UTC
Nmap scan report for 10.130.10.4
Host is up (0.081s latency).
Not shown: 93 filtered tcp ports (no-response)
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
[...trimmed for brevity...]
Nmap scan report for 10.130.10.45
Host is up (0.079s latency).
Not shown: 99 filtered tcp ports (no-response)
PORT STATE SERVICE
3389/tcp open ms-wbt-server
Nmap done: 256 IP addresses (13 hosts up) scanned in 10.07 seconds
/tmp
内のスキャンに関連するファイルのリストを取得します。
コマンド
ls -l /tmp/scan*
想定される結果
sec560@560vm:~$ ls -l /tmp/scan*
-rw-r--r-- 1 root root 2627 Aug 14 18:13 /tmp/scan.gnmap
-rw-r--r-- 1 root root 3065 Aug 14 18:13 /tmp/scan.nmap
-rw-r--r-- 1 root root 19786 Aug 14 18:13 /tmp/scan.xml
同じベース名で異なる拡張子を持つ3つのファイルが表示されるはずです:
.gnmap
サフィックスのGreppable形式.nmap
サフィックスのNormal形式.xml
サフィックスのXML形式
less
を使用して.nmap
ファイルを確認します(q
を押して終了):
コマンド
less /tmp/scan.nmap
このファイルには、スキャン中に画面に表示されたのと同じ情報が含まれていることがわかります。
次に、.xml
出力ファイルを見てみましょう(q
を押して終了):
コマンド
less /tmp/scan.xml
このファイルはXMLであり、人間にとってははるかに読みにくいです。ただし、この形式は、EyeWitness(このコースで後ほど説明します)を含む他のツールで読み取ることができます。
最後に、cat
を使用して.gnmap
の内容を表示しましょう。
コマンド
cat /tmp/scan.gnmap
想定される結果
sec560@560vm:~$ cat /tmp/scan.gnmap
# Nmap 7.94SVN scan initiated Wed Aug 14 18:13:03 2024 as: nmap -n -sT -oA /tmp/scan -F -T4 10.130.10.0/24
Host: 10.130.10.4 () Status: Up
Host: 10.130.10.4 () Ports: 53/open/tcp//domain///, 88/open/tcp//kerberos-sec///, 135/open/tcp//msrpc///, 139/open/tcp//netbios-ssn///, 389/open/tcp//ldap///, 445/open/tcp//microsoft-ds///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (93)
Host: 10.130.10.5 () Status: Up
Host: 10.130.10.5 () Ports: 80/open/tcp//http///, 445/open/tcp//microsoft-ds///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (97)
Host: 10.130.10.6 () Status: Up
Host: 10.130.10.6 () Ports: 80/open/tcp//http///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (98)
...trimmed for brevity...
特定のホストのすべての結果が、各オープンポートと関連サービスが識別された状態で1行に保存されていることに注意してください。この形式はgrep
を使用して簡単に検索できます。実際に今やってみましょう!
4: オープンポートによるホストの検索
LDAPで使用されるポート389でリスニングしているすべてのシステムを見つけましょう。
コマンド
grep 389/open /tmp/scan.gnmap
想定される結果
sec560@560vm:~$ grep 389/open /tmp/scan.gnmap
Host: 10.130.10.4 () Ports: 53/open/tcp//domain///, 88/open/tcp//kerberos-sec///, 135/open/tcp//msrpc///, 139/open/tcp//netbios-ssn///, 389/open/tcp//ldap///, 445/open/tcp//microsoft-ds///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (93)
Host: 10.130.10.5 () Ports: 80/open/tcp//http///, 445/open/tcp//microsoft-ds///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (97)
Host: 10.130.10.6 () Ports: 80/open/tcp//http///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (98)
Host: 10.130.10.7 () Ports: 135/open/tcp//msrpc///, 445/open/tcp//microsoft-ds///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (97)
Host: 10.130.10.21 () Ports: 135/open/tcp//msrpc///, 139/open/tcp//netbios-ssn///, 445/open/tcp//microsoft-ds///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (96)
Host: 10.130.10.23 () Ports: 135/open/tcp//msrpc///, 445/open/tcp//microsoft-ds///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (97)
...truncated for brevity...
よく見ると、.4システムのみがポート389
でリスニングしていますが、他のホストもこのリストに表示されます。これは389
が3389
の一部であるためです。正確に389
を探したい場合は、別のコマンドを使用する必要があります。ポート番号の前にスペースがあることに注意してください。grepの-w
オプションを使用して「完全な単語を形成する一致を含む行のみを選択」することができます(man grep
の出力に記載されています)。
コマンド
grep -w 389/open /tmp/scan.gnmap
想定される結果
sec560@560vm:~$ grep -w 389/open /tmp/scan.gnmap
Host: 10.130.10.4 () Ports: 53/open/tcp//domain///, 88/open/tcp//kerberos-sec///, 135/open/tcp//msrpc///, 139/open/tcp//netbios-ssn///, 389/open/tcp//ldap///, 445/open/tcp//microsoft-ds///, 3389/open/tcp//ms-wbt-server/// Ignored State: filtered (93)
wc -l
(小文字のL)を使用して、ポート445でリスニングしているホストの数を調べましょう。
wc -l
コマンドを使用して、ポート445が開いているホストの数を取得できます。
コマンド
grep -w 445/open /tmp/scan.gnmap | wc -l
想定される結果
sec560@560vm:~$ grep -w 445/open /tmp/scan.gnmap | wc -l
7
wc
コマンドは「単語数」を取得するために使用され、-l
(小文字のL)オプションは行数を返すようにコマンドに指示します。ポート445でリスニングしている6つのシステムがあることに注意してください。
ポート445でリスニングしているシステムのリストが必要な場合は、cut
を使用してIPアドレスを抽出できます。区切り文字を-d
で指定し、スペース' '
を区切り文字として使用します。IPアドレスは2番目のフィールドで、-f 2
で選択できます。
コマンド
grep -w 445/open /tmp/scan.gnmap | cut -d ' ' -f 2
想定される結果
sec560@560vm:~$ grep -w 445/open /tmp/scan.gnmap | cut -d ' ' -f 2
10.130.10.4
10.130.10.5
10.130.10.7
10.130.10.21
10.130.10.23
10.130.10.25
10.130.10.44
5: nmap-servicesファイル
次に、以下を実行してnmap-services
ファイル(Nmapがスキャンする最も頻繁なポートのリストを取得するファイル)のポートを確認します:
コマンド
less /usr/share/nmap/nmap-services
このファイルの形式には、サービス名(例: ftp)、関連するポートとプロトコル(例: 21/tcp
)、Fyodorの広範なインターネットスキャン研究中に特定のポートが発見された相対的な頻度、およびオプションのコメントが含まれます。ポート自体は通常TCPまたはUDPですが、RFC 4960で定義されている代替レイヤー4プロトコルであるStream Control Transmission Protocol(SCTP)に関連するものもあります。
6: UDPスキャン
NmapでTCPポートスキャンを確認したので、次はUDPポートスキャンを試してみましょう。前に説明したように、LinuxカーネルはICMPポート到達不能応答を抑制して、毎秒1つだけ送信します。10.130.10.10はLinuxマシンであるため、1秒に1メッセージの動作が表示されます。tcpdumpスニファーを実行し続けて、ホスト10.130.10.10との間のパケットを表示してください。
次に、-sU
を使用して10.130.10.10のUDPポートスキャンを実行するようにNmapを起動します
コマンド
sudo nmap -n -sU 10.130.10.10
スニファーの出力では、複数のUDPパケットと定期的に送信されるいくつかのICMPポート到達不能が表示される可能性があります。
Nmapウィンドウで、スペースバーを押してステータスレポートを取得します。システムの速度とネットワークの速度に応じて、スキャンがわずかな割合しか完了していないことがわかる可能性があります。
出力は以下のようになります:
想定される結果
スペースバーを押してステータスを表示します。
sec560@560vm:~$ sudo nmap -n -sU 10.130.10.10
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 18:18 UTC
Stats: 0:00:12 elapsed; 0 hosts completed (1 up), 1 undergoing UDP Scan
UDP Scan Timing: About 2.57% done; ETC: 18:27 (0:08:13 remaining)
遅い!
このスキャンは非常に遅いです。スキャンが完了する前にCTRL-Cを押してNmapを停止してください。
7: ターゲットUDPスキャン
次に、ターゲットのNmap UDPスキャンを再実行します。今回は、より狭いポートのリスト(53,111,414,500-501)に焦点を当てます。.4および.10ホストをターゲットにします。
コマンド
sudo nmap -n -sU 10.130.10.4,10 -p 53,111,414,500-501
想定される結果
sec560@560vm:~$ sudo nmap -n -sU 10.130.10.4,10 -p 53,111,414,500-501
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 18:19 UTC
Nmap scan report for 10.130.10.4
Host is up (0.085s latency).
PORT STATE SERVICE
53/udp open domain
111/udp open|filtered rpcbind
414/udp open|filtered infoseek
500/udp open|filtered isakmp
501/udp open|filtered stmf
Nmap scan report for 10.130.10.10
Host is up (0.077s latency).
PORT STATE SERVICE
53/udp closed domain
111/udp closed rpcbind
414/udp closed infoseek
500/udp closed isakmp
501/udp closed stmf
Nmap done: 2 IP addresses (2 hosts up) scanned in 3.94 seconds
.4(Windows Domain Controller)ホストではポートがopen|filtered
として表示されることに注意してください。
.10(Linux)ホストでは、すべてのポートがclosed
です。一見すると、これは混乱を招く可能性があります。これが、オープンポートのみを表示するために--open
オプションを使用したい理由です。
--open
を使用してコマンドを再度実行すると、Nmapが10.130.10.10でリスニングしているUDPポートを見つけられなかったことがはるかに明確になります:
コマンド
sudo nmap -n -sU 10.130.10.4,10 -p 53,111,414,500-501 --open
想定される結果
sec560@560vm:~$ sudo nmap -n -sU 10.130.10.4,10 -p 53,111,414,500-501 --open
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 18:19 UTC
Nmap scan report for 10.130.10.4
Host is up (0.078s latency).
PORT STATE SERVICE
53/udp open|filtered domain
111/udp open|filtered rpcbind
414/udp open|filtered infoseek
500/udp open|filtered isakmp
501/udp open|filtered stmf
Nmap done: 2 IP addresses (2 hosts up) scanned in 1.98 seconds
結論
このラボでは、Nmapスキャンがターゲット環境をスイープして潜在的なターゲットシステムを特定する方法を確認しました。また、TCPおよびUDPスキャンのさまざまなオプションと、非常に便利な--open Nmapコマンドラインオプションについても調べました。