セキュリティ ネットワーク

Nmapのudpスキャンの速度が遅い事象の解決策

先日以下の記事でnmapの基本的な使い方やオプションについて解説しました。ただudpにはスキャン速度が遅いという特徴があり、どう高速化するかは脆弱性診断士やネットワーク管理者の悩みの種でもあると思います。

スキャン短縮のためTオプションや--max-rtt-timeout等を指定して調整できますが、そういった速度調整など踏み込んだことに触れてる記事は多くありませんので、本記事で解説していきます。

Nmapを使ったUDPスキャンの使い方

まずはNmapのUDPスキャンの基本的な実施方法について確認しておきましょう。NmapでUDPスキャンを行う場合の基本的な書式は以下の通りです。

nmap -sU [オプション] [対象のIPアドレス]

サンプル

C:\Users\owner>nmap -sU 192.168.11.6
Starting Nmap 7.93 ( https://nmap.org ) at 2023-03-18 12:40 東京 (標準時)
Stats: 0:14:13 elapsed; 0 hosts completed (1 up), 1 undergoing UDP Scan
UDP Scan Timing: About 87.70% done; ETC: 12:57 (0:02:00 remaining)
Nmap scan report for 192.168.11.6
Host is up (0.062s latency).
Not shown: 959 closed udp ports (port-unreach), 40 open|filtered udp ports (no-response)
PORT    STATE SERVICE
123/udp open  ntp
MAC Address: 18:3E:EF:DD:1D:30 (Apple)

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

//同じ対象にTCPスキャンをかけた場合46.12 secondsかかった

一見問題なくスキャンが終わっていそうですが、赤字の経過時間のところを見ると対象が1IPにもかかわらずそれなりに時間を要していることがわかります。実際の業務では数十、数百の対象にUDPスキャンをかけることもありますので、これが積算されると膨大な時間になり時間内に終わらないといった悩みの種になるというわけです。こういった悩みを解消するためスキャン速度の調整方法について触れていきましょう。

方法1:-Tオプションを利用する

最もベーシックな調整方法はこれです。Nmapでは--max-rtt-timeoutや--host-timeout、--max-retriesなどスキャン速度を調整するためのオプションが多くありますが、それぞれの適切な設定値や設定変更に伴うデメリットを把握している必要があるため、慣れてない人にとってはハードルが高いという問題があります。どころがこの-Tオプションを利用すると先に述べた--max-rtt-timeoutなど細かいパラメータ調整をまとめて行ってくれるので、比較的簡単にスキャン速度の調整を行うことができます。

この-Tオプションは0~5の6段階で調整できますが、オプションによって設定される各パラメータ一覧は以下の通りです。

nmap公式から引用
https://nmap.org/book/performance-timing-templates.html

例えば-T4オプションを利用した場合max-rtt-timeoutが1250となっているため、リクエストを送信して1250msの間応答がなければタイムアウトとみなして再試行を行い、またmax-retriesが6となっているため再試行は6回に限定される、といったスキャン内容の調整が行われます。なのでスキャン速度を早くしたい場合まずは-T4オプションを利用してみる、というのは有効な手段でしょう。ただNmapの内部ではネットワークが信頼できる場合自動でパラメータが調整されるため、既にスキャンの最適化が行われていると速度があまり改善しない場合もあります。そういったケースは後述する方法も試してみてください。

方法2:max-rtt-timeoutオプションを利用する

続いてUDPスキャンを早くする方法の一つとしてmax-rtt-timeoutオプションを利用するという方法があります。-Tオプションでもmax-rtt-timeoutの指定は行われますが比較的余裕を持った数字で指定されることが多いです。このプローブ(調査用リクエスト)の応答を待機する最大時間を小さくすることでスキャン時間を短縮できます。公式ではローカルのネットワークセグメントのシステムが対象の場合100msに指定するか、或いはpingを送信してみてRTTを調べ、この値の3~4倍の値を指定することを推奨しています。

試しに私の以下の環境で試したところrttが68msで、ローカルなこともあったので100msで十分だろうということで100msにして検証してみました。ただ光回線でローカルのセグメントのシステムに対する対象のためか、もともと信頼のあるネットワークとしてnmapの内部で既に最適化されていたようで、あまり恩恵は受けられませんでした。

C:\Users\owner>ping 192.168.11.6

192.168.11.6 に ping を送信しています 32 バイトのデータ:
192.168.11.6 からの応答: バイト数 =32 時間 =29ms TTL=64
192.168.11.6 からの応答: バイト数 =32 時間 =43ms TTL=64
192.168.11.6 からの応答: バイト数 =32 時間 =4ms TTL=64
192.168.11.6 からの応答: バイト数 =32 時間 =68ms TTL=64

192.168.11.6 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 4ms、最大 = 68ms、平均 = 36ms
C:\Users\owner>nmap -sU  -T4 --max-rtt-timeout 100ms 192.168.11.6
Starting Nmap 7.93 ( https://nmap.org ) at 2023-03-18 14:57 東京 (標準時)
Warning: 192.168.11.6 giving up on port because retransmission cap hit (6).
Nmap scan report for 192.168.11.6
Host is up (0.060s latency).
Not shown: 987 closed udp ports (port-unreach)
PORT      STATE         SERVICE
68/udp    open|filtered dhcpc
123/udp   open          ntp
631/udp   open|filtered ipp
1000/udp  open|filtered ock
5353/udp  open|filtered zeroconf
9370/udp  open|filtered unknown
16503/udp open|filtered unknown
17814/udp open|filtered unknown
18004/udp open|filtered unknown
22053/udp open|filtered unknown
24854/udp open|filtered unknown
28369/udp open|filtered unknown
49193/udp open|filtered unknown
MAC Address: 18:3E:EF:DD:1D:30 (Apple)

Nmap done: 1 IP address (1 host up) scanned in 1075.89 seconds
//オプションを指定しなかった場合のスキャンが1038.42secondsなので今回は恩恵がない模様

方法3:--max-retriesオプションを利用する

一個前の例ではプローブの応答時間を短くする例を紹介しましたが、再試行の回数を減らすという方法も存在します。アグレッシブ目な-T4オプションでもmax-retriesの回数が6に設定されており、6回再試行が行われます。この回数を減らすことでスキャン速度の向上が期待できます。ネットワーク環境が良くターゲットホストがレート制限をしていない場合、既にNmapの内部では通常1回しか再送されないようになるため必ずしも効果があるわけではありませんが、スキャンの遅いホストがいるケースでは極めて有効になるでしょう。

//実際はこのように色々なオプションを組み合わせる
C:\Users\owner>nmap -sU -T4 --max-rtt-timeout 100ms --max-retries 1 192.168.11.6
Starting Nmap 7.93 ( https://nmap.org ) at 2023-03-18 15:20 東京 (標準時)
Warning: 192.168.11.6 giving up on port because retransmission cap hit (1).
Nmap scan report for 192.168.11.6
Host is up (0.0053s latency).
Not shown: 952 open|filtered udp ports (no-response), 47 closed udp ports (port-unreach)
PORT    STATE SERVICE
123/udp open  ntp
MAC Address: 18:3E:EF:DD:1D:30 (Apple)

Nmap done: 1 IP address (1 host up) scanned in 44.32 seconds
//オプションを設定する前は1075.89seconds掛かっていたが僅か44secondsで終わった

早い!今までは1000秒以上掛かっていたスキャンが僅か44秒で終わりました。私の環境ではこの方法があっていたようですね。何度か実行してみましたが似たような結果になったので確かにスキャンが早くなってそうです。

-セキュリティ, ネットワーク