nmapの真実
TRANSCRIPT
100 年後にまた会いましょうNmapの真実
自己紹介小河 哲之Twitter : abend
ISOG-WG1Burp Suite Japan ユーザグループ
言いたい事
100 年後、 Nmap にまた会いたい。
why
なぜ、その結論に至ったのか。その真実をご紹介します。
Nmap
Network Mapper の略。ポートスキャン、ホスト探索、セキュリティチェックを行うためのソフトウエア。オープンソース。
きっかけは
1 通のメッセージから始まった。
きっかけは
Software Design で Nmap など記事書いてみませんか?
きっかけは
ええっ!?オレ??
きっかけは
July Tech Festa で講演聞いたんですよ。
きっかけは
http://www.slideshare.net/zaki4649/free-securitycheck
きっかけは
そう、きっかけは July Tech Festa で登壇したから。
記事を書く
初めて記事を書くことになった。
誰向け?
対象読者はインフラエンジニア
記事を書く
しかも、 8 ページも。1200 文字 ×8 ページ =9600 文字
流れを考えてみた
Nmap がどんなもんか説明して、オプションいくつか説明して終わる。
なので
なんとかなるかと思い、二つ返事で受諾した。
まずは
とりあえず、リファレンスを読み返してみた。
リファレンス
ウェーイ
日本語のリファレンスって、嬉しいよね。
だが、しかし
これが、真実とは限らない。
Ping Scan
-sP (Ping スキャン ) って、 Ping打つよね?
Ping Scan
Ping Scan
Ping だけではなかった。
Ping Scan
80/TCP へのアクセスもあるって。
だが、しかし
真実は異なる。
Wow
見えてきた
ICMP 、 80/TCP 、 443/TCP へパケットを送る。
パケットの真実
同セグメントの場合、 ARP も送る。
リファレンスの真実
リファレンスは語る
-sP は以前のオプションで、今は -sn オプション。
古いんだよ
日本語のリファレンスには -sn オプションの記載はない。
そう、真実は
日本語のリファレンスより英語のリファレンス読め。
次の真実
-T オプションでタイミングの調整ができる。
設定値は
-T0 から -T5 の 6 段階で制御可能。Nmap は -T3 がデフォルト。
どんな制御?
具体的にどのような調整がされるのだろうか。
リファレンス
ほぅ
-T0 だと 5 分に 1 回パケットを送る。-T1 だと 15 秒、 -T2 は 0.4 秒に1 回。
他にもいろいろある
-T4 は失敗時の再送回数 6 回、 -T5 は 2 回などなど・・・。
これだけ?
-T0 とかの再送回数は?
リファレンスでも
英語のリファレンスにも書かれていない。
そう、真実は
ソースの中にしかない。
いろいろあった case 'T': if (*optarg == '0' || (strcasecmp(optarg, "Paranoid") == 0)) { o.timing_level = 0; o.max_parallelism = 1; o.scan_delay = 300000; o.setInitialRttTimeout(300000); } else if (*optarg == '1' || (strcasecmp(optarg, "Sneaky") == 0)) { o.timing_level = 1; o.max_parallelism = 1; o.scan_delay = 15000; o.setInitialRttTimeout(15000); } else if (*optarg == '2' || (strcasecmp(optarg, "Polite") == 0)) { o.timing_level = 2; o.max_parallelism = 1; o.scan_delay = 400; } else if (*optarg == '3' || (strcasecmp(optarg, "Normal") == 0)) { } else if (*optarg == '4' || (strcasecmp(optarg, "Aggressive") == 0)) { o.timing_level = 4; o.setMinRttTimeout(100); o.setMaxRttTimeout(1250); o.setInitialRttTimeout(500); o.setMaxTCPScanDelay(10); o.setMaxSCTPScanDelay(10); o.setMaxRetransmissions(6); } else if (*optarg == '5' || (strcasecmp(optarg, "Insane") == 0)) { o.timing_level = 5; o.setMinRttTimeout(50); o.setMaxRttTimeout(300); o.setInitialRttTimeout(250); o.host_timeout = 900000; o.setMaxTCPScanDelay(5); o.setMaxSCTPScanDelay(5); o.setMaxRetransmissions(2); }
そう、真実は
-T0 は平行処理数は 1 で、遅延時間は 5 分に 1 回、再送回数は 10回(抜粋)
そう、真実は
-T1 は平行処理数は 1 で、遅延時間は 15 秒、再送回数は 10 回(抜粋)
そう、真実は
-T2 は平行処理数は 1 で、遅延時間は 0.4 秒、再送回数は 10 回(抜粋)
そう、真実は
-T3 は平行処理数および遅延時間はネットワーク状況に応じて変動、再送回数は 10 回(抜粋)
そう、真実は
-T4 は平行処理数はネットワーク状況により変動、応答時間の最大タイムアウトは 1250 ミリ秒、遅延時間は 10 ミリ秒、再送回数は6 回(抜粋)
そう、真実は
-T5 は平行処理数はネットワーク状況により変動、応答時間の最大タイムアウトは 300 ミリ秒、遅延時間は 5 ミリ秒、再送回数は 2 回(抜粋)
そう、真実は
ソースの中にしかない。
では
scan-delay は遅延時間を指定可能
リファレンスには
というわけで
--scan-delay 100ms で 0.1 秒間に 1 パケット
キャプチャしてみる
Time
ふむ
約 0.1 秒間に 1 パケット送っている。
ふむ
portscan servicescan
Time
真実
Service Scan は、 0.1 秒ではない。
真実
ガンガン、パケット出している。
メールした
[email protected] にバグ報告した。
回答きた
Nmap 「タイミングは time.ccで実装しているんだよ。」
回答きた
オレ「うん、そうっぽいね」
回答きた
Nmap 「 Service Scan はそれ実装していなかった。」
回答きた
オレ「やっぱ!!」
回答きた
Nmap 「次のプロジェクトで実装するよ。」
回答きた
オレ「・・・。」
ソース読んでいたんです。
他にバグがないか、ソース見てたんです。
X
XT H E X F I L E S
X
X は、 Xmas Scan の X
Xmas Scan
Xmas Scan は、 Nmap だとFIN 、 PSH 、 URG のフラグ設定し投げる。
Xmas Scan
RST が帰ってくるかどうかでポートの状況を判断する。
由来
色々なフラグが ON になっているから Xmas ツリーがライトアップされているみたいだからだそう。
Xでも Xmas
2016 年の Xmas は日曜日。
Xでも Xmas
そんな日に、 Nmap かけるんなら
Xでも Xmas
-v ( Verbos オプション)をつけて。
Message from Nmap
Nmap がこんなことを言ってくれる。
Merry Christmas
Nmap wishes you a merry Christmas! Specify -sX for Xmas Scan (https://nmap.org/book/man-port-scanning-techniques.html).
よく見て
Xmas だから Xmas Scan に何かを起こるわけではないが
Merry Christmas
チキンとケーキがなくても Nmap が祝ってくれる。
オレ、使ったことないけど。
-sX も使ってあげて。活用できるか不明だけど。
Xmasだけじゃない
Nmap が祝うのは、 Xmas だけではない。
他にもある
2016 年 9 月 1 日に -v を付けて試してみよう。
Message from Nmap
Nmap がこんなことを言ってくれる。
2016/9/1
Happy 19th Birthday to Nmap, may it live to be 119!
2016/9/1
Nmap は自分自身を祝う。
2116/9/1
そして、 100 年後の Nmap も。
結論
なので、
Happy Birthday!!
100 年後、 Nmap にまた会いたい。
宣伝
オプションの説明とかはSoftware Design に紙面の許される限り記載しています(初心者向け)。
宣伝
続きは Software Design5 月号で。