100年後にまた会いましょう
Nmapの真実
自己紹介
小河 哲之
Twitter:abend
ISOG-WG1
Burp 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秒ではない。
真実
ガンガン、パケット出している。
メールした
dev@nmap.orgにバグ報告した。
回答きた
Nmap「タイミングはtime.ccで実装して
いるんだよ。」
回答きた
オレ「うん、そうっぽいね」
回答きた
Nmap「Service Scanはそれ実装してい
なかった。」
回答きた
オレ「やっぱ!!」
回答きた
Nmap「次のプロジェクトで実装する
よ。」
回答きた
オレ「・・・。」
ソース読んでいたんです。
他にバグがないか、ソース見てたん
です。
X
T 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月号で。

Nmapの真実