/0アドレス空間を6分でスキャンできるという「masscan」を使ってみた
※はじめに言っておきますが実際にmasscanで/0スキャンをしたわけではありません.
/0アドレス空間をわずか6分でスキャンできると言われる「masscan」というスキャンツールを使ってみました.なんと1秒間に1千万パケットを送信できるそうです.オソロシヤ
robertdavidgraham/masscan · GitHub
このまえZMAPという高速スキャナを使いましたが,それよりもはるかに速いです.
まずはインストールから
$ sudo apt-get install git gcc make libpcap-dev $ git clone https://github.com/robertdavidgraham/masscan $ cd masscan $ make
masscanの使い方は基本的にnmapと似ています.また,-Pnオプションや-nオプションなど,nmapのオプションもそのまま使えます.(masscan --nmapで使用可能なオプションを表示)
試しに「google.com」の80番ポートを拝見してみました.
$ ./masscan -p80 173.194.117.174/28 Starting masscan 1.0.3 (http://bit.ly/14GZzcT) at 2014-08-29 08:34:03 GMT -- forced options: -sS -Pn -n --randomize-hosts -v --send-eth Initiating SYN Stealth Scan Scanning 16 hosts [1 port/host] Discovered open port 80/tcp on 173.194.117.168 Discovered open port 80/tcp on 173.194.117.172 Discovered open port 80/tcp on 173.194.117.174 Discovered open port 80/tcp on 173.194.117.164 Discovered open port 80/tcp on 173.194.117.166 Discovered open port 80/tcp on 173.194.117.160 Discovered open port 80/tcp on 173.194.117.162 Discovered open port 80/tcp on 173.194.117.165 Discovered open port 80/tcp on 173.194.117.163 Discovered open port 80/tcp on 173.194.117.161 Discovered open port 80/tcp on 173.194.117.169 Discovered open port 80/tcp on 173.194.117.167 Discovered open port 80/tcp on 173.194.117.171 Discovered open port 80/tcp on 173.194.117.170 Discovered open port 80/tcp on 173.194.117.175 Discovered open port 80/tcp on 173.194.117.173
送信パケットをキャプチャしたらこんな感じ(IP以上のヘッダーのみ)
Internet Protocol Version 4, Src: 192.168.11.9 (192.168.11.9), Dst: 173.194.117.172 (173.194.117.172)
Version: 4
Header Length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT(Not ECN-Capable Transport))
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
Total Length: 40
Identification: 0x4429 (17449)
Flags: 0x00
0... .... = Reserved bit: Not set
.0.. .... = Don't fragment: Not set
..0. .... = More fragments: Not set
Fragment offset: 0
Time to live: 255
Protocol: TCP (6)
Header checksum: 0x8886 [validation disabled]
[Good: False]
[Bad: False]
Source: 192.168.11.9 (192.168.11.9)
Destination: 173.194.117.172 (173.194.117.172)
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
Transmission Control Protocol, Src Port: 41243 (41243), Dst Port: http (80), Seq: 0, Len: 0
Source Port: 41243 (41243)
Destination Port: http (80)
[Stream index: 0]
[TCP Segment Len: 0]
Sequence number: 0 (relative sequence number)
Acknowledgment number: 0
Header Length: 20 bytes
.... 0000 0000 0010 = Flags: 0x002 (SYN)
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...0 .... = Acknowledgment: Not set
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..1. = Syn: Set
[Expert Info (Chat/Sequence): Connection establish request (SYN): server port http]
[Connection establish request (SYN): server port http]
[Severity level: Chat]
[Group: Sequence]
.... .... ...0 = Fin: Not set
Window size value: 1024
[Calculated window size: 1024]
Checksum: 0xee60 [validation disabled]
[Good Checksum: False]
[Bad Checksum: False]
Urgent pointer: 0
一般的な(?)SYNパケットのように見えます.
アプリケーション層のヘッダーは特に付加されていないようです.
また,ACKが返ってきた直後にRSTパケットを送信することでステルススキャンを行っている様子が確認できました.
/0スキャンについて
Entire Scanはいろいろと危険です(いろんな人に怒られちゃうかも).やるときには細心の注意をはらいましょう.
また,全IPv4空間を数分でスキャンするにはギガビットイーサネット環境が必要となるでしょう.うかつに実行すると自分自身の回線がパンクするかもしれません.
サブネットを/0にしてスキャンするのは通常のコマンドでは不可能です.("range too big"と表示される)
それを可能にする悪魔のコマンドがこちら.
$ masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt
嬉しい事に,masscanでは--offlineオプションで,実際にネットワークにパケットを送らずにスキャンのパフォーマンステストができます.
試しに1コア1GBメモリのVM上で/4スキャンのテストをしてみました.
$ time ./masscan -p80 0.0.0.0/4 --rate 100000000 --offline
Starting masscan 1.0.3 (http://bit.ly/14GZzcT) at 2014-08-29 09:18:12 GMT
-- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 268435456 hosts [1 port/host]
real 2m57.074s
user 2m17.820s
sys 0m0.256s このクソスペで3分とは恐ろしい...(笑)
個人的にはnmapやzmapのようにUDPスキャンの実装も欲しかったなーと思います.
最後にスキャナ関連で,最近ほよたかさんの「hping」の話が面白かったので紹介させていただきます.こちらのツールもなかなかに変態です.