Nmap 9つの真実

1,010 views

Published on

2016年avtokyo発表資料

Published in: Engineering

Nmap 9つの真実

  1. 1. もう「何も言えねぇ」 Nmap 9つの真実
  2. 2. 自己紹介 小河 哲之 Twitter:abend ISOG-WG1 Burp Suite Japan User Group Prosit 2
  3. 3. きっかけ Software Design5月号 にNmapについて記事を 寄稿しました。記事執筆の 過程で気づいたことなどを ご紹介します。 ※資料中、バージョンの記載 がないものはv7.12を抜粋 3
  4. 4. はじめに Nmapに存在する8つの隠しオプションと Nmapが発見できるたった1つのマルウェア(ワー ム)の検出方法や、どうすればうまく活用できる のかをご紹介します。 8つの隠しオプション+1つのマルウェア=9つの真実 4
  5. 5. Nmap ネットワークスキャナの1つ。Gordon Lyonが 1997年に作成。 - ポートスキャン - ホストの探索 - OSやサービスの検出 - 脆弱性スキャン 5
  6. 6. 8つの隠しオプション Reference Guideやhelpに記載されている ものが、Nmapのすべてのオプションとは限らな い。 6
  7. 7. --noninteractive 7
  8. 8. --noninteractive Nmapはインタラクティブなアプリケーションです。 Starting Nmap 7.25BETA1 ( https://nmap.org ) at 2016-07-30 23:38 JST Stats: 0:00:01 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan SYN Stealth Scan Timing: About 0.10% done 8
  9. 9. --noninteractive 実行中にEnterとか連打して、進捗状況を確 認したりしますよね。これをできなくするためのオ プション。 9
  10. 10. --noninteractive nmap_tty.ccの336行目から342行目抜粋。 "Interactive keyboard commands:n" "? Display this informationn" "v/V Increase/decrease verbosityn" "d/D Increase/decrease debuggingn" "p/P Enable/disable packet tracingn" "anything else Print statusn" "More help: https://nmap.org/book/man-runtime- interaction.htmln"); 10
  11. 11. --noninteractive Starting Nmap 7.25BETA1 ( https://nmap.org ) at 2016-07-30 23:39 JST Packet 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=0 Packet Tracing disabled. 11 pを押した Pを押した
  12. 12. --noninteractive packet traceやdebugもオプションつけ忘れ た場合に有効化することや、オプションを付けて いたが途中から無効化することも可能。 12
  13. 13. --noninteractive 「スキャンがめちゃくちゃ遅いときにちゃんとパケッ ト飛んでいるか確認するために、一時的に有効 化する」などの用途があります。 --noninteractiveをつけると、これらができな くなる。 13
  14. 14. --noninteractive 日本語のリファレンスガイドを見ると 14
  15. 15. --noninteractive v4.00(2006/1/31)に追加されたオプション なので、日本語のリファレンスガイドはそれ以前 に書かれたものだと推測される。 15
  16. 16. 16 --noninteractive 結論: 役に立たない
  17. 17. --nogcc 17
  18. 18. --nogcc セグメント単位でスキャンする場合に一斉にパ ケット送る。そのため、スキャンにかかる時間が 短い。 10回の平均時間(同セグの/24にSYN Scan) オプションなし:9.62sec --nogccオプションあり:3.73sec 18
  19. 19. --nogcc 19 0 50 100 150 200 250 300 350 0 0.27 0.54 0.81 1.08 1.35 1.62 1.89 2.16 2.43 2.7 2.97 3.24 3.51 3.78 4.05 4.32 4.59 4.86 5.13 5.4 5.67 5.94 6.21 6.48 6.75 7.02 7.29 7.56 7.83 8.1 8.37 8.64 8.91 9.18 9.45 9.72 9.99 10.26 10.53 10.8 packet second nogcc 3.72sec オプションなし 11.06sec
  20. 20. --nogcc filterされているホストと何らかのサービスが稼 働するホスト 計2ホストが検出されなかった。 オプションなし:9ホスト --nogccオプションあり:7ホスト ※1ホストについては、arpの応答が遅いためと 推測される。--send-ipオプションで改善。 20
  21. 21. --nogcc nmapでは輻輳制御が行われていますが、-- nogccは輻輳制御を行わないために一斉にパ ケットが送信されます。 21
  22. 22. --nogcc scan_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
  23. 23. --nogcc Nmapの輻輳制御は3つのポイントで行われま す。 • congestion window • exponential backoff • slow start 23
  24. 24. --nogcc • congestion window → drop検知時にパケットを減らす • exponential backoff → drop検知時に劇的に速度を遅くする • slow start → 徐々にスキャン速度を上げていく 24
  25. 25. --nogcc --nogccは一斉に送信するので、負荷が高く なる可能性があります。また、輻輳制御が行わ れないことによる結果の精度低下も予想され、 検出漏れにつながる可能性がある。 やんちゃな方のためのオプション。 25
  26. 26. 26 --nogcc 結論: やんちゃな方以外、役に立た ない
  27. 27. --route-dst 27
  28. 28. --route-dst インタフェースごとに指定したIPのルーティング先 を確認するためのオプション。 # nmap –e eth0 --route-dst 8.8.8.8 Starting Nmap 7.25BETA1 ( https://nmap.org ) at 2016-09-20 12:41 JST 8.8.8.8 eth0 eth0 srcaddr 192.168.1.209 nexthop 192.168.1.254 28
  29. 29. 29 --route-dst 結論: 役に立たない
  30. 30. -I(大文字のi) 30
  31. 31. -I(大文字のi) ident scanはそもそも実装されていないらしい。 case 'I': error("WARNING: identscan (- I) no longer supported. Ignoring -I"); break; // o.identscan++; break; 31
  32. 32. -thc 33
  33. 33. -thc # nmap -thc !!Greets to Van Hauser, Plasmoid, Skyper and the rest of THC!! おめでとうってことらしい。 34
  34. 34. 35 -thc 結論: 役に立たない
  35. 35. -oH 36
  36. 36. HTMLで出力できるオプション。エスケープに漏 れがあれば、XSSの可能性も。 37 -oH
  37. 37. -oH 2.30BETA16から3.93までは、 } else if (strcmp(long_options[option_index].name, "oH") == 0) { fatal("HTML output is not yet supported"); ※すべてのバージョンを確認してません。 38
  38. 38. -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
  39. 39. -oH これまで(たぶん)一度も実装されなかったオプ ションだと思われる。NmapのXSSは見てみた かった。 40
  40. 40. 41 -oH 結論: 役に立たない
  41. 41. --ff 42
  42. 42. --ff 16byteにフラグメントしてくれるオプション。 Referenceに載っている「-f」は8byteにフラグ メントするオプション。 43
  43. 43. --ff 「-f」、「--ff」ともにフラグメントするbyte数を加 算していく。 } else if (strcmp(long_options[option_index]. name, "ff") == 0) { o.fragscan += 16; 44
  44. 44. --ff この場合はどうなるでしょうか。 45 nmap -f -f --ff --ff 192.168.1.1
  45. 45. --ff 「-f」8byte × 2 + 「--ff」16byte×2 = 48byteでフラグメントされる。「-v」、「-vv」も 同様に、つければつけるほど、verboseは高く なる。 46
  46. 46. --ff 「何byteにフラグメントされるでしょう?」という小 学生レベルの算数が学べる。 nmap -f -f --ff 192.168.1.1 47
  47. 47. --ff ただ単にフラグメントしたいなら、「-f」や「--ff」 を使うより、「-mtu XX」でフラグメントしたほう がコマンドが見やすい。 nmap -mtu 24 192.168.1.1 48
  48. 48. 49 --ff 結論: 小学生以外、役に立たない
  49. 49. --deprecated-xml-osclass 50
  50. 50. --deprecated-xml-osclass -oXのosclassタグがosmatchタグの子になる のかどうかを指定するオプションのようです。用 途が不明。 51
  51. 51. --deprecated-xml-osclass オプションにハイフンなどの記号が含まれるもの が他にもありますが、最大遅延時間を指定す るオプションではどっちが実行可能なオプションで しょうか。 ① --max-scan-delay ② --max_scan_delay 52
  52. 52. --deprecated-xml-osclass 両方とも実行可能です。 Nmapのすべてのオプションで「- 」(ハイフン)、 「_」(アンダーバー)のどちらでも実行できます。 ただし、--max_scan-delayのように「-」、 「_」を混在させるのはダメ、ゼッタイ。 53
  53. 53. --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
  54. 54. ソースを見て、これに気づいた時の気持ちが osscan.ccの1209行目に書かれていたので ご紹介します。 --deprecated-xml-osclass 55
  55. 55. char *p, *q; /* OH YEAH!!!! */ --deprecated-xml-osclass 56
  56. 56. では、ここで日本語のリファレン スガイドを見てみましょう。 --deprecated-xml-osclass 57
  57. 57. --deprecated-xml-osclass 58 コンザイ、ダメ、ゼッタイって言ったのに、混在した ものが記載されている。
  58. 58. --deprecated-xml-osclass 59 実際に使用してみるとどうなるかというと nmap: unrecognized option '-- max_scan-delay' See the output of nmap -h for a summary of options.
  59. 59. コンザイ、ゼッタイ、ダメ --deprecated-xml-osclass 60
  60. 60. 日本語のリファレンスガイドが間違 えている!! --deprecated-xml-osclass 61
  61. 61. --deprecated-xml-osclass 62 max_scan_delayオプションは・・・ • v3.75(2004/10/18)に追加される。 • v3.99(2006/1/25) から「-」、「_」の両 方が使用可能になる。
  62. 62. --deprecated-xml-osclass 63 v3.75からv3.99(2006/1/25)の間に11 バージョンリリースされている。すべて「_」のみと なっており、混在したものは存在しなかった。 そのため、ただ単に日本語のリファレンスガイド はタイプミスであると思われる。
  63. 63. --deprecated-xml-osclass 64 日本語リファレンスガイドは、古いだけではなく 誤りもあった。これを発見した時の気持ちがnet util.ccの4478行目にありました。
  64. 64. continue; /* D'oh! */ 日本語訳:おいおい、なんてこった --deprecated-xml-osclass 65
  65. 65. 66 --deprecated-xml-osclass 結論: 役に立たない
  66. 66. 67 ~ 途中経過 ~ 8オプション、全て役に立たない。
  67. 67. 検出可能なたった1つのマルウェア 68
  68. 68. 1つのマルウェア(ワーム) NmapはService Scanでたった1つだけマル ウェア(に感染したホスト)を見つけることができる。 69
  69. 69. Service Scan Service Scan(-sVオプション)には、 intensity(--version-intensity)という重み が存在している。 0から9までの段階があり、特 に指定しない場合はintensityは7になる。 70
  70. 70. Service Scan nmap-service-probesに各ポートとfinger printが保存されている。このファイルのrarity がintensityにあたる。 71
  71. 71. Service Scan nmap-service-probesに、126パターンが 登録されている。 72 Num Rarity 2 6 0 3 8 9 12 5 50 31 0 10 20 30 40 50 60 None 1 2 3 4 5 6 7 8 9 intensityを 指定していな ければ実施さ れない
  72. 72. Service Scan -sVオプションだけでは、3割程度しか活用でき ていない。 intensityを指定することでpc- anywhereやJavaRMIなどを正確に把握で きる可能性が高まる。 73
  73. 73. Service Scan いくつかあるrarity 9のひとつ。 Probe TCP mydoom q|x0dx0d| rarity 9 ports 706,3127-3198 match mydoom m|x04x5b000000| p/MyDoom virus backdoor/ v/v012604/ 74
  74. 74. Service Scan いくつかあるrarity 9のひとつ。 Probe TCP mydoom q|x0dx0d| rarity 9 ports 706,3127-3198 match mydoom m|x04x5b000000| p/MyDoom virus backdoor/ v/v012604/ 75
  75. 75. _人人人人人人人人人_ > mydoom !? <  ̄Y^Y^Y^Y^Y^Y^Y ̄ 76
  76. 76. Mydoom 77 https://www.ipa.go.jp/security/topics/newvirus/mydoom.html
  77. 77. Mydoom 78 2004年ころにブレイク。メールで感染を広げる タイプで、特定の期間にwww.sco.comなど へ攻撃を仕掛ける。特定ポートで待ち受ける。 ※2004年は北島康介「チョー気持ちいい」が 流行語大賞になった年
  78. 78. 試してみた 79 Windows XP SP3に感染させた。
  79. 79. WORM_MYDOOM.BR 80
  80. 80. Intensityの指定なし 81 # nmap -p- -sV IPアドレス PORT STATE SERVICE VERSION 21/tcp open ftp Microsoft ftpd 25/tcp open smtp Microsoft ESMTP 6.0.2600.5949 80/tcp open http Microsoft IIS httpd 5.1 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows 98 netbios-ssn 443/tcp open https? 445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds 1025/tcp open msrpc Microsoft Windows RPC 5424/tcp open unknown
  81. 81. Intensityの指定あり 82 # nmap -p- -sV --version-intensity 9 IPアドレス PORT STATE SERVICE VERSION 21/tcp open ftp Microsoft ftpd 25/tcp open smtp Microsoft ESMTP 6.0.2600.5949 80/tcp open http Microsoft IIS httpd 5.1 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows 98 netbios-ssn 443/tcp open https? 445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds 1025/tcp open msrpc Microsoft Windows RPC 5424/tcp open mydoom MyDoom virus backdoor v012604
  82. 82. NmapがMydoomに対応!! 83 Nmap 4.00(2006年1月31日リリース)に probeが追加されている。約2年間かけて、 NmapがMydoomに対応!!
  83. 83. これでMydoomなんて怖くない 84 だが、オプションをつけるだけでMydoomが見つ かるようになるなんて、もう
  84. 84. 85 何も言えねぇ
  85. 85. 86 たった1つのマルウェア検出 結論: Mydoomに困っている人以 外、役に立たない
  86. 86. 87 まとめ
  87. 87. 88 まとめ 9つの真実はどれも役に立たない。 Reference Guideやhelpに記載されていな いのも、当たり前なのかもしれない。
  88. 88. Nmap ネットワークスキャナの1つ。Gordon Lyonが1997 年に作成。 - ポートスキャン - ホストの探索 - OSやサービスの検出 - 脆弱性スキャン - やんちゃのサポート - 算数のお勉強 - 1つのワームを検出 89 New!!
  89. 89. 最後に service_scan.ccの845行目を見ながらお 別れをしようと思います。 90
  90. 90. if (newstrlen < 3) return -1; // Have a nice day! 91

×