nmap 9つの真実

90
もも ももももももも 「」 Nmap 9 もももも

Upload: abendcve99990001

Post on 21-Apr-2017

7.973 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Nmap 9つの真実

もう「何も言えねぇ」

Nmap 9 つの真実

Page 2: Nmap 9つの真実

自己紹介

小河 哲之Twitter : abend

ISOG-WG1Burp Suite Japan User GroupProsit

2

Page 3: Nmap 9つの真実

きっかけ

Software Design5 月号に Nmap について記事を寄稿しました。記事執筆の過程で気づいたことなどをご紹介します。※ 資料中、バージョンの記載がないものは v7.12 を抜粋

3

Page 4: Nmap 9つの真実

はじめに

Nmap に存在する 8 つの隠しオプションと Nmap が発見できるたった 1 つのマルウェア ( ワーム ) の検出方法や、どうすればうまく活用できるのかをご紹介します。

8 つの隠しオプション+ 1 つのマルウェア=9 つの真実

4

Page 5: Nmap 9つの真実

Nmapネットワークスキャナの 1つ。 Gordon Lyon が 1997 年に作成。

- ポートスキャン- ホストの探索- OS やサービスの検出- 脆弱性スキャン

5

Page 6: Nmap 9つの真実

8 つの隠しオプション

Reference Guide や help に記載されているものが、 Nmap のすべてのオプションとは限らない。

6

Page 7: Nmap 9つの真実

--noninteractive

7

Page 8: Nmap 9つの真実

--noninteractiveNmap はインタラクティブなアプリケーションです。

Starting Nmap 7.25BETA1 ( https://nmap.org ) at 2016-07-30 23:38 JSTStats: 0:00:01 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth ScanSYN Stealth Scan Timing: About 0.10% done

8

Page 9: Nmap 9つの真実

--noninteractive実行中に Enter とか連打して、進捗状況を確認したりしますよね。これをできなくするためのオプション。

9

Page 10: Nmap 9つの真実

--noninteractivenmap_tty.cc の 336 行目から 342 行目抜粋。"Interactive keyboard commands:\n""? Display this information\n""v/V Increase/decrease verbosity\n""d/D Increase/decrease debugging\n""p/P Enable/disable packet tracing\n""anything else Print status\n" "More help: https://nmap.org/book/man-runtime-interaction.html\n");

10

Page 11: Nmap 9つの真実

--noninteractiveStarting Nmap 7.25BETA1 ( https://nmap.org ) at 2016-07-30 23:39 JSTPacket Tracing enabled.SENT (1.6510s) TCP 192.168.217.130:45411 > 192.168.217.131:8888 S ttl=41 id=54162 iplen=44 seq=1659576208 win=1024 <mss 1460>RCVD (1.6509s) TCP 192.168.217.131:8888 > 192.168.217.130:45411 RA ttl=64 id=0 iplen=40 seq=0 win=0Packet Tracing disabled.

11

p を押した

P を押した

Page 12: Nmap 9つの真実

--noninteractivepacket trace や debug もオプションつけ忘れた場合に有効化することや、オプションを付けていたが途中から無効化することも可能。

12

Page 13: Nmap 9つの真実

--noninteractive「スキャンがめちゃくちゃ遅いときにちゃんとパケット飛んでいるか確認するために、一時的に有効化する」などの用途があります。

--noninteractive をつけると、これらができなくなる。

13

Page 14: Nmap 9つの真実

--noninteractive日本語のリファレンスガイドを見ると

14

Page 15: Nmap 9つの真実

--noninteractivev4.00(2006/1/31) に追加されたオプションなので、日本語のリファレンスガイドはそれ以前に書かれたものだと推測される。

15

Page 16: Nmap 9つの真実

16

--noninteractive

結論:役に立たない

Page 17: Nmap 9つの真実

--nogcc

17

Page 18: Nmap 9つの真実

--nogccセグメント単位でスキャンする場合に一斉にパケット送る。そのため、スキャンにかかる時間が短い。

10 回の平均時間 ( 同セグの /24 に SYN Scan)オプションなし: 9.62sec--nogcc オプションあり: 3.73sec

18

Page 19: Nmap 9つの真実

--nogcc

19

0 0.42 0.84 1.26 1.68 2.1 2.52 2.94 3.36 3.78 4.2 4.62 5.04 5.46 5.88 6.3 6.72 7.14 7.56 7.98 8.4 8.82 9.24 9.6610.0810.510.920

50

100

150

200

250

300

350

pack

et

second

nogcc 3.72secオプションなし 11.06sec

Page 20: Nmap 9つの真実

--nogccfilter されているホストと何らかのサービスが稼働するホスト 計 2 ホストが検出されなかった。

オプションなし: 9 ホスト--nogcc オプションあり: 7 ホスト※1 ホストについては、 arp の応答が遅いためと推測される。 --send-ip オプションで改善。 20

Page 21: Nmap 9つの真実

--nogccnmap では輻輳制御が行われていますが、 --nogcc は輻輳制御を行わないために一斉にパケットが送信されます。

21

Page 22: Nmap 9つの真実

--nogccscan_engine.cc の 394 行目から 403行目を抜粋。

/* In case the user specifically asked for no group congestion control */ if (o.nogcc) { if (when) *when = USI->now; return true; }

22

Page 23: Nmap 9つの真実

--nogccNmap の輻輳制御は 3 つのポイントで行われます。

• congestion window• exponential backoff• slow start

23

Page 24: Nmap 9つの真実

--nogcc• congestion window→   drop 検知時にパケットを減らす• exponential backoff→   drop 検知時に劇的に速度を遅くする• slow start→  徐々にスキャン速度を上げていく

24

Page 25: Nmap 9つの真実

--nogcc--nogcc は一斉に送信するので、負荷が高くなる可能性があります。また、輻輳制御が行われないことによる結果の精度低下も予想され、検出漏れにつながる可能性がある。

やんちゃな方のためのオプション。

25

Page 26: Nmap 9つの真実

26

--nogcc

結論:やんちゃな方以外、役に立たない

Page 27: Nmap 9つの真実

--route-dst

27

Page 28: Nmap 9つの真実

--route-dstインタフェースごとに指定した IP のルーティング先を確認するためのオプション。

# nmap –e eth0 --route-dst 8.8.8.8Starting Nmap 7.25BETA1 ( https://nmap.org ) at 2016-09-20 12:41 JST8.8.8.8eth0 eth0 srcaddr 192.168.1.209 nexthop 192.168.1.254

28

Page 29: Nmap 9つの真実

29

--route-dst

結論:役に立たない

Page 30: Nmap 9つの真実

-I( 大文字の i)

30

Page 31: Nmap 9つの真実

-I( 大文字の i)ident scan はそもそも実装されていないらしい。case 'I': error("WARNING: identscan (-I) no longer supported. Ignoring -I"); break; // o.identscan++; break;

31

Page 32: Nmap 9つの真実

-thc

33

Page 33: Nmap 9つの真実

-thc# nmap -thc!!Greets to Van Hauser, Plasmoid, Skyper and the rest of THC!!

おめでとうってことらしい。

34

Page 34: Nmap 9つの真実

35

-thc

結論:役に立たない

Page 35: Nmap 9つの真実

-oH

36

Page 36: Nmap 9つの真実

HTML で出力できるオプション。エスケープに漏れがあれば、 XSS の可能性も。

37

-oH

Page 37: Nmap 9つの真実

-oH 2.30BETA16 から 3.93 までは、

} else if (strcmp(long_options[option_index].name, "oH") == 0) {

fatal("HTML output is not yet supported");

※ すべてのバージョンを確認してません。

38

Page 38: Nmap 9つの真実

-oH 3.94ALPHA1 からは 7.12} else if (strcmp(long_options[option_index].name, "oH") == 0) { fatal("HTML output is not directly supported, though Nmap includes an XSL for transforming XML output into HTML. See the man page.");※ すべてのバージョンを確認してません。

39

Page 39: Nmap 9つの真実

-oHこれまで ( たぶん ) 一度も実装されなかったオプションだと思われる。 Nmap の XSS は見てみたかった。

40

Page 40: Nmap 9つの真実

41

-oH

結論:役に立たない

Page 41: Nmap 9つの真実

--ff

42

Page 42: Nmap 9つの真実

--ff16byte にフラグメントしてくれるオプション。 Reference に載っている「 -f 」は 8byte にフラグメントするオプション。

43

Page 43: Nmap 9つの真実

--ff「 -f 」、「 --ff 」ともにフラグメントする byte 数を加算していく。

} else if (strcmp(long_options[option_index].name, "ff") == 0) { o.fragscan += 16;

44

Page 44: Nmap 9つの真実

--ffこの場合はどうなるでしょうか。

45

nmap -f -f --ff --ff 192.168.1.1

Page 45: Nmap 9つの真実

--ff「 -f 」 8byte × 2 + 「 --ff 」 16byte×2 = 48byte でフラグメントされる。「 -v 」、「 -vv 」も同様に、つければつけるほど、 verbose は高くなる。

46

Page 46: Nmap 9つの真実

--ff「何 byte にフラグメントされるでしょう ? 」という小学生レベルの算数が学べる。

nmap -f -f --ff 192.168.1.1

47

Page 47: Nmap 9つの真実

--ffただ単にフラグメントしたいなら、「 -f 」や「 --ff 」を使うより、「 -mtu XX 」でフラグメントしたほうがコマンドが見やすい。

nmap -mtu 24 192.168.1.1

48

Page 48: Nmap 9つの真実

49

--ff

結論:小学生以外、役に立たない

Page 49: Nmap 9つの真実

--deprecated-xml-osclass

50

Page 50: Nmap 9つの真実

--deprecated-xml-osclass

-oX の osclass タグが osmatch タグの子になるのかどうかを指定するオプションのようです。用途が不明。

51

Page 51: Nmap 9つの真実

--deprecated-xml-osclass

オプションにハイフンなどの記号が含まれるものが他にもありますが、最大遅延時間を指定するオプションではどっちが実行可能なオプションでしょうか。

①  --max-scan-delay②  --max_scan_delay

52

Page 52: Nmap 9つの真実

--deprecated-xml-osclass両方とも実行可能です。

Nmap のすべてのオプションで「 - 」(ハイフン ) 、「 _ 」 ( アンダーバー )のどちらでも実行できます。ただし、 --max_scan-delay のように「 - 」、「 _ 」を混在させるのはダメ、ゼッタイ。

53

Page 53: Nmap 9つの真実

--deprecated-xml-osclass

nmap.cc の 597 行目から 598 行目を抜粋。「 - 」、「 _ 」をそれぞれ定義しています。

{"max_scan_delay", required_argument, 0, 0}, {"max-scan-delay", required_argument, 0, 0},

deprecated-xml-osclass も両方定義されている。

54

Page 54: Nmap 9つの真実

ソースを見て、これに気づいた時の気持ちが osscan.cc の 1209 行目に書かれていたのでご紹介します。

--deprecated-xml-osclass

55

Page 55: Nmap 9つの真実

char *p, *q; /* OH YEAH!!!! */

--deprecated-xml-osclass

56

Page 56: Nmap 9つの真実

では、ここで日本語のリファレンスガイドを見てみましょう。

--deprecated-xml-osclass

57

Page 57: Nmap 9つの真実

--deprecated-xml-osclass

58

コンザイ、ダメ、ゼッタイって言ったのに、混在したものが記載されている。

Page 58: Nmap 9つの真実

--deprecated-xml-osclass

59

実際に使用してみるとどうなるかというと

nmap: unrecognized option '--max_scan-delay'See the output of nmap -h for a summary of options.

Page 59: Nmap 9つの真実

コンザイ、ゼッタイ、ダメ

--deprecated-xml-osclass

60

Page 60: Nmap 9つの真実

日本語のリファレンスガイドが間違えている !!

--deprecated-xml-osclass

61

Page 61: Nmap 9つの真実

--deprecated-xml-osclass

62

max_scan_delay オプションは・・・

• v3.75(2004/10/18) に追加される。• v3.99(2006/1/25) から「 - 」、

「 _ 」の両方が使用可能になる。

Page 62: Nmap 9つの真実

--deprecated-xml-osclass

63

v3.75 から v3.99(2006/1/25) の間に11 バージョンリリースされている。すべて「 _ 」のみとなっており、混在したものは存在しなかった。

そのため、ただ単に日本語のリファレンスガイドはタイプミスであると思われる。

Page 63: Nmap 9つの真実

--deprecated-xml-osclass

64

日本語リファレンスガイドは、古いだけではなく誤りもあった。これを発見した時の気持ちが netutil.cc の 4478行目にありました。

Page 64: Nmap 9つの真実

continue; /* D'oh! */日本語訳:おいおい、なんてこった

--deprecated-xml-osclass

65

Page 65: Nmap 9つの真実

66

--deprecated-xml-osclass

結論:役に立たない

Page 66: Nmap 9つの真実

67

~ 途中経過 ~

8 オプション、全て役に立たない。

Page 67: Nmap 9つの真実

検出可能なたった 1 つのマルウェア

68

Page 68: Nmap 9つの真実

1 つのマルウェア ( ワーム )

Nmap は Service Scan でたった 1 つだけマルウェア ( に感染したホスト ) を見つけることができる。

69

Page 69: Nmap 9つの真実

Service ScanService Scan(-sV オプション ) には、intensity(--version-intensity) という重みが存在している。 0 から 9 までの段階があり、特に指定しない場合はintensity は 7 になる。

70

Page 70: Nmap 9つの真実

Service Scannmap-service-probes に各ポートとfinger print が保存されている。このファイルの rarity が intensity にあたる。

71

Page 71: Nmap 9つの真実

Service Scannmap-service-probes に、 126 パターンが登録されている。

72

Num

Rarity0

10

20

30

40

50

60

26

03

8 912

5

50

31

None1 2 3 4 5 6 7 8 9

intensityを指定していなければ実施されない

Page 72: Nmap 9つの真実

Service Scan-sV オプションだけでは、 3割程度しか活用できていない。 intensity を指定することで pc-anywhere や JavaRMIなどを正確に把握できる可能性が高まる。

73

Page 73: Nmap 9つの真実

Service Scanいくつかある rarity 9 のひとつ。

Probe TCP mydoom q|\x0d\x0d|rarity 9ports 706,3127-3198match mydoom m|\x04\x5b\0\0\0\0\0\0| p/MyDoom virus backdoor/ v/v012604/

74

Page 74: Nmap 9つの真実

Service Scanいくつかある rarity 9 のひとつ。

Probe TCP mydoom q|\x0d\x0d|rarity 9ports 706,3127-3198match mydoom m|\x04\x5b\0\0\0\0\0\0| p/MyDoom virus backdoor/ v/v012604/

75

Page 75: Nmap 9つの真実

_人人人人人人人人人_>    mydoom !?  < ̄ Y^Y^Y^Y^Y^Y^Y ̄

76

Page 76: Nmap 9つの真実

Mydoom

77

https://www.ipa.go.jp/security/topics/newvirus/mydoom.html

Page 77: Nmap 9つの真実

Mydoom

78

2004 年ころにブレイク。メールで感染を広げるタイプで、特定の期間にwww.sco.com などへ攻撃を仕掛ける。特定ポートで待ち受ける。

※2004 年は北島康介「チョー気持ちいい」が流行語大賞になった年

Page 78: Nmap 9つの真実

試してみた

79

Windows XP SP3 に感染させた。

Page 79: Nmap 9つの真実

WORM_MYDOOM.BR

80

Page 80: Nmap 9つの真実

Intensity の指定なし

81

# nmap -p- -sV IP アドレス

PORT STATE SERVICE VERSION21/tcp open ftp Microsoft ftpd25/tcp open smtp Microsoft ESMTP 6.0.2600.594980/tcp open http Microsoft IIS httpd 5.1135/tcp open msrpc Microsoft Windows RPC139/tcp open netbios-ssn Microsoft Windows 98 netbios-ssn443/tcp open https?445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds1025/tcp open msrpc Microsoft Windows RPC5424/tcp open unknown

Page 81: Nmap 9つの真実

Intensity の指定あり

82

# nmap -p- -sV --version-intensity 9 IP アドレス

PORT STATE SERVICE VERSION21/tcp open ftp Microsoft ftpd25/tcp open smtp Microsoft ESMTP 6.0.2600.594980/tcp open http Microsoft IIS httpd 5.1135/tcp open msrpc Microsoft Windows RPC139/tcp open netbios-ssn Microsoft Windows 98 netbios-ssn443/tcp open https?445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds1025/tcp open msrpc Microsoft Windows RPC5424/tcp open mydoom MyDoom virus backdoor v012604

Page 82: Nmap 9つの真実

Nmap が Mydoom に対応 !!

83

Nmap 4.00(2006 年 1 月 31 日リリース ) に probe が追加されている。約 2年間かけて、 Nmap が Mydoom に対応 !!

Page 83: Nmap 9つの真実

これで Mydoom なんて怖くない

84

だが、オプションをつけるだけでMydoom が見つかるようになるなんて、もう

Page 84: Nmap 9つの真実

85

何も言えねぇ

Page 85: Nmap 9つの真実

86

たった 1 つのマルウェア検出

結論:Mydoom に困っている人以外、役に立たない

Page 86: Nmap 9つの真実

87

まとめ

Page 87: Nmap 9つの真実

88

まとめ

9 つの真実はどれも役に立たない。 Reference Guide や help に記載されていないのも、当たり前なのかもしれない。

Page 88: Nmap 9つの真実

Nmapネットワークスキャナの 1 つ。 Gordon Lyon が 1997 年に作成。- ポートスキャン- ホストの探索- OS やサービスの検出- 脆弱性スキャン- やんちゃのサポート- 算数のお勉強- 1 つのワームを検出

89

New!!

Page 89: Nmap 9つの真実

最後に

service_scan.cc の 845 行目を見ながらお別れをしようと思います。

90

Page 90: Nmap 9つの真実

if (newstrlen < 3) return -1; // Have a nice day!

91