今回は nmap を用いて UDP スキャンを行い、Wireshark によりパケットキャプチャを解析していきます。
UDPスキャンとは?
UDPスキャンでは、任意のUDPポートにパケットを送信し、「ICMP port unreachable」のパケットが返ってきたらポートが閉じていると判断します。
それ以外のパケットが返ってきた場合もしくは何も返ってこない場合にポートが開放されていると判断します。
UDPはTCPと異なりパケットの到達性を保証せず、サービスによっては稼働時もパケットを返しません。
そのため、ポートが開放されている場合でも判断できない場合があり、その特性上スキャンには時間を要することがあります。
また、スキャン結果もTCPと比較して信頼性に欠けます。
nmap で UDP スキャンを行う
実際に通信を発生させて、パケットキャプチャを解析していきます。
Wireshark によるパケットキャプチャの取得方法や解析については以下記事で説明しているので併せてご参照ください。
以下コマンドを Kali で実行することで UDP スキャンを行うことができます。
nmap -sU -p 111 10.0.0.5
「-sU」オプションを付与することで UDP スキャンを行います。
「-p 111」オプションで、スキャン対象のポートを 111番に限定しています。
「10.0.0.5 」は Metasploitable の IP アドレスです。
root@kali:~# nmap -sU -p 111 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-30 07:50 EDT
Nmap scan report for 10.0.0.5
Host is up (0.0011s latency).
PORT STATE SERVICE
111/udp open rpcbind
MAC Address: 08:00:27:59:5C:61 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
root@kali:~#
スキャン結果は「open」となっており、ポートは開放されていることがわかりました。
パケットキャプチャを解析する
Wireshark で通信の流れを見ていきます。

Flow Graph では、UDP なので Flow Type は「All Flows」を選択します。また、「Limit to display filter」にチェックを入れることで、IPアドレスでフィルタリングが行えます。

3回の通信のやり取りで終わっています。
No. | 通信内容 |
---|---|
3 | Kali が Metasploitable に UDP パケットを送信 |
4 | Metasploitable が Kali に UDP パケットを送信 (この時点でポートが開放されていると判断) |
5 | Kali が Metasploitable に ICMP Port Unreachable を送信 (Kali からの送信なのでポートが閉じているとは判断しない) |
冒頭で説明したように、ICMP Port Unreachable 以外のパケットを受け取ったためポートが開放されていると判断しました。
その後 Kali から ICMP Port Unreachable が送信されていますが、これはパケットの方向が逆のためポートが閉じているとは判断しません。
ポートが閉じているときの通信の流れは?
ポートが開放しているときの通信の流れはわかりました。次に、ポートが閉じているときはどういった通信の流れとなるかを見ていきます。
開放されていない、2050番ポートに対して UDP スキャンを実施します。
root@kali:~# nmap -sU -p 2050 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-30 08:26 EDT
Nmap scan report for 10.0.0.5
Host is up (0.00076s latency).
PORT STATE SERVICE
2050/udp closed av-emb-config
MAC Address: 08:00:27:59:5C:61 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.33 seconds
root@kali:~#
スキャン結果は「closed」となっており、ポートは閉じていることがわかりました。
この通信を Wireshark で見てみます。


上記パケットキャプチャを見ると、通信の流れは以下となっていることがわかります。
No | 通信内容 |
---|---|
3 | Kali が Metasploitable に UDP パケットを送信 |
4 | Metasploitable が Kali に ICMP Port Unreachable を送信 |
ポートが開放されていないため ICMP Port Unreachable を受け取り、スキャンの結果は closed となりました。
ファイアウォールでポートが閉じられているときの通信の流れは?
最後に、Metasploitable のポートは開放されているが、ファイアウォールで遮断される場合の通信の流れを確認していきます。
Metasploitable 側で iptables を編集し、UDP の通信を遮断させます。
デフォルトでは全て許可する状態なので、以下コマンドを実行することで、Metasploitable に送信される UDP 通信をすべて DROP させます。
iptables -A INPUT -p udp -j DROP
msfadmin@metasploitable:~$ iptables -A INPUT -p udp -j DROP
msfadmin@metasploitable:~$ sudo iptables --list
[sudo] password for msfadmin:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP udp -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
msfadmin@metasploitable:~$
この状態で Kali から UDP スキャンを行います。
root@kali:~# nmap -sU -p 111 10.0.0.5
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-30 08:47 EDT
Nmap scan report for 10.0.0.5
Host is up (0.00057s latency).
PORT STATE SERVICE
111/udp open|filtered rpcbind
MAC Address: 08:00:27:59:5C:61 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.53 seconds
root@kali:~#
結果は「open|filtered」となりました。
これは、ポートが開放されているもしくはファイアウォール等で遮断されていることを示しています。
この通信の流れを Wireshark で見ていきます。


ファイアウォールでDROPされているため相手側から応答がなく、nmap がパケットの送信を再度試行しています。
それでも応答がないため、フィルタリングされているもしくはポートが開放していると判断しています。通信の流れは以下です。
No. | 通信内容 |
---|---|
3 | Kali から Metasploitable に UDP パケットを送信 |
4 | Kali から Metasploitable に UDP パケットを送信 |
※ iptables のルールは、その後必要ない場合は以下コマンドで削除しましょう。
msfadmin@metasploitable:~$ sudo iptables -D INPUT 1
まとめ
UDP スキャンを行った際の通信の流れを3パターン確認しました。
ICPM Port Unreachable が返ってこないとポートが閉じていると判断しないため、スキャンに時間を要し、信頼性にも欠けるため使いづらいスキャンである印象を受けました。
ただ、悪用可能なUDPサービスは極めて多いため、攻撃に用いられることは大いに有り得るとのことです。
今回は以上です。
くどり
この記事は「ハッキング・ラボのつくりかた 第7章 」をベースに作成しています。購入リンクは以下です。
※Amazonアソシエイトを使用しています。
コメント