Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

バグハンターの哀しみ

39 506 vues

Publié le

AVTOKYO2015の発表資料です。

Publié dans : Technologie
  • Soyez le premier à commenter

バグハンターの哀しみ

  1. 1. バグハンター の哀しみ Masato Kinugawa か な
  2. 2. 自己紹介 Masato Kinugawa 孤独のバグハンター XSSだけが友達
  3. 3. 普段のお仕事 職場 自宅 勤務時間 やる気がある時 仕事 セキュリティバグを探す 収入 Bug Bounty ➡これだけでやっていける?
  4. 4. 去年の年収
  5. 5. 去年の年収 41050707 円
  6. 6. 去年の年収 41050707 円 (8進数)
  7. 7. あかるい話は ここまでだ!
  8. 8. 話すこと 前 インターネットを 止められた話 後 哀しいバグ
  9. 9. インターネットを 止められた話
  10. 10. 概要 BenesseのサイトのXSSを探した 自宅のネット回線がとまった 紆余曲折あり ➡なぜBenesseのXSSを探していたか?
  11. 11. 2013年夏 U+2028/2029を使ったDOM based XSS の可能性に気付いた http://masatokinugawa.l0.cm/2013/09/u2028 u2029.domxss.html アバウトな正規表現を書くと簡単にハマる 詳細はBlogで:U+2028/2029とDOM based XSS 影響を調べていた ハマってる人多いかも? ということで
  12. 12. 調査方法 ❶ URLの#以降にU+2028とDOM based XSSが起き得る文字列をつけて まわる ❷ 変なエラーがでないかみる http://host/#[U+2028]'"><svg/onload=alert(1)>
  13. 13. すると Benesseのサイトにメチャ普通のDOM based XSSがあった https://web.archive.org/web/20130723155109/http://manabi.benes se.ne.jp/#"><svg/onload=alert(1)> function writeAccesskeyForm(){ var htm = ''; var ownURI = location.href; //略 htm+= '<input type="hidden" name="backurl" value="' + ownURI + '">'; //略 document.write(htm); } writeAccesskeyForm();
  14. 14. それから 2013/08/05 報告 2013/08/06 応答 "この度は、「Benesseマナビジョン」の脆弱性をご指摘 いただき、誠にありがとうございます。 至急こちらでも 事実を確認の上、対応を進めるようにいたします。 この 度はご連絡いただき誠にありがとうございました。" 2013/8下旬 修正を確認
  15. 15. この対応を受け 修正する姿勢、 報告を受け入れる姿勢を感じた 別のとこも探して報告しよう! これが XSS-Nightmare の はじまりであった…
  16. 16. 探した 普通のReflected XSSがすぐみつかった この度は、新たに3件のXSS脆弱性をご指摘いただき 、 誠にありがとうございます。 今回についても弊社 でも事実確認の上、 鋭意対策を進めさせていただき ます。 前回に引き続き、大変貴重なご指摘を賜りま したこと、 重ねがさね御礼申し上げます。 2013/08/28 報告 2013/08/30 応答
  17. 17. 同じころ manabi.benesse.ne.jpに突然アクセス できなくなる IPを変えるとアクセスできるようになる 詳しくみると ➡検査のリクエストが原因で アクセス拒否してる?
  18. 18. そういうこともあるだろう (問題の報告のついでに)一応連絡: 「検査のリクエストでアク禁してるかもし れないけど報告の通りなのでよろしく」 後日 修正が不適切であるとのこと、 ご指摘ありがとう ございます。 確認・検討のうえ、 対応を進めさせ ていただきます。 誠にありがとうざいました。 ➡アク禁のことはスルー まあ伝わっているよね
  19. 19. その後も報告を続ける 修正方法が悪く何度も不完全だと伝える その確認のたびにアクセス拒否… IPを変更して確認を繰り返す
  20. 20. そして 2013/9/7夕方に事件は起きた
  21. 21. なにが起きた?! 最初は障害や機器の故障を疑った ところがどれも違う プロバイダのメールを見ると 警告がきていることに気付く そこから不審なアクセスがあった、ウイルスに 感染などして踏み台になっていないか
  22. 22. 不審なアクセス 思い当たると言えば思い当たる 警告メールの前後に脆弱性を検査・ 報告したサービス: Google、excite、Benesse (というか、日頃やっていること、 アクセスだけみたら全部不審) ➡これまで報告していなかったサービス アクセス拒否もあるし、どう考えても怪しい
  23. 23. ねじれ ご指摘、誠にありがとうございます。 9月6日、9月7 日にいただきましたメールの内容についても 弊社でも 確認のうえ、鋭意対策を進めさせていただきます。 た いへん貴重なご指摘を賜りましたこと、 重ねがさね御 礼申し上げます。 9月9日、返信では相変わらず感謝:
  24. 24. @niftyからお手紙が届く 攻撃行為をしないという誓約書が同封 待ってくれ、違うんだ…
  25. 25. Benesse/@niftyに 電話でコンタクト 両「セキュリティ上の理由で答えられない」 僕「家のネットが止まって困っている。 事実関係を確認させてほしい。」
  26. 26. らちが明かない!! まともに仕事ができないのでWiMAXを契約 テザリングを使ってすがる思いでBlogに書く もうだめだ… そんなときに現れた救世主 それが http://masatokinugawa.l0.cm/2013/09/xss.benesse.html たぶんXSSが理由でインターネットがとまった
  27. 27. 徳丸先生である!
  28. 28. DMを頂く ブログ読みました。この件について、 ベネッセと連絡をとっています。メー ルアドレスを教えて頂けますか? あなたが神か!
  29. 29. その後のやりとり ベネッセはセキュリティ業者に侵入 検知システムの運用を委託していて、 攻撃を検知すると、ブロックやISP への連絡をしているそう。 ふむふむ
  30. 30. その後のやりとり そのフローにひっかかり、 IPS(侵入防止システム)検知 ➡ セキュリティベンダの監視 ➡ ISPへの連絡 ➡ ISPによる遮断 となったようだ なるほど~
  31. 31. その後のやりとり やりとりの結果、ベネッセからISPに 連絡することは可能と言われた。 報告時点のIPアドレスを教えてもらえ れば報告と照合するとのこと。 ええ、記録あるかな…
  32. 32. あった 日頃、自ドメイン(vulnerabledoma.in)で ブラウザの動作テストをしているので、 自分のアクセスが毎日のようにあった! 8月28日: XX.X.XX.2 8月29日: XX.X.XX.25 8月30日: XX.X.XX.195 8月31日: XX.X.XX.14 9月01日: XX.X.XX.14 .... こんなかんじです:
  33. 33. 連絡後 「不正アクセス情報の取り下げ」 および「停止についての解除のお願 い」をしたとのこと。あとはプロバイ ダの判断になる。 ありがたい・・
  34. 34. そしてついに 感涙 9月13日夕方(停止から約1週間)、 インターネット再開!
  35. 35. 改めて 徳丸さんの協力なしには自力で事情を 説明することは難しかったです。 この時は本当にありがとうございました! ※ みみりん では ありません
  36. 36. そんな徳丸先生の本が 絶賛発売中だ! http://www.amazon.co.jp/dp/ 4822279987/ http://www.amazon.co.jp/dp/ 4797361190/ 今すぐ購入!!
  37. 37. 大きな会社の中は複雑 なんだろうなぁ… 問題を通して感じたこと そりゃ情報の持ち出し も起こるよな…
  38. 38. 他人事ではない あなたにBenesseのサイトへXSSっぽい リクエストを送らせるリンクを送る http://manabi.beness(略)/?<script>alert(1)</script> サイトが利用不可に 最悪インターネットが止まる?! あなたがアクセス ※危険なのでリンクできない
  39. 39. 侵入検知会社の間違い 攻撃かどうかを精査していない 攻撃の性質を理解していない XSSの対処にIPブロックする意味を問いたい サイト全体を止める方がまだわかる 今回は報告と照合すれば済んだはず 根は遠隔操作事件の問題に近い? ➡根本を修正する手助けをするべき XSSの対処にはそれしかないと思う
  40. 40. XSSの脅威 勝手な操作の実行 機密情報の奪取 ページ内容変更によるフィッシング
  41. 41. XSSの脅威 勝手な操作の実行 機密情報の奪取 ページ内容変更によるフィッシング ネット回線の停止
  42. 42. 教訓:世の中には つついてはいけないものがある
  43. 43. 実は最近も止められた! 料金の未納で。 (勘違いで手続きができてなかった)
  44. 44. 世間は厳しい…
  45. 45. 哀しいバグ
  46. 46. ネット再開後 Benesseに事前にIPアドレスを伝えれば、 検査をしてもよいということになった 100件近い脆弱性を報告 (全てをわずかな期間で修正してくれた。 この姿勢は本当に素晴らしい。) その結果 ➡今回はこの中から2つ紹介!
  47. 47. DOM based XSS ❶ https://web.archive.org/web/20130904143057/http://www. benesse.co.jp/s/land/pass/ jQuery("#nav-pw li a, a.tab-link") .bind("click touchstart", function(event){ setTimeout(function(){ hash = location.hash; if (hash != "" && jQuery(hash).length) { //省略 } }, 500); });
  48. 48. DOM based XSS ❶ 特定のリンクのクリック時に イベント を動作させる jQuery("#nav-pw li a, a.tab-link") .bind("click touchstart", function(event){ ...
  49. 49. 特定のリンク <div id="nav-pw"> <ul> <li id="nav-first"><a href="#first-login"><img src="img/nav_pw_01.png" width="260" height="50" alt=" はじめてログインするかたへ"></a></li> <li id="nav-passmodif"><a href="#passmodif"><img src="img/nav_pw_02.png" width="270" height="50" alt=" パスワードを変更(へんこう)したい"></a></li> <li id="nav-passlost"><a href="#passlost"><img src="img/nav_pw_03.png" width="270" height="50" alt=" パスワードを忘(わす)れたので再発行(さいはっこう)したい ... jQuery("#nav-pw li a, a.tab-link") どれも # へのリンク
  50. 50. これを踏まえ jQuery("#nav-pw li a, a.tab-link") .bind("click touchstart", function(event){ setTimeout(function(){ hash = location.hash; if (hash != "" && jQuery(hash).length) { //省略 } }, 500); }); もう一度よくみてほしい
  51. 51. これを踏まえ jQuery("#nav-pw li a, a.tab-link") .bind("click touchstart", function(event){ setTimeout(function(){ hash = location.hash; if (hash != "" && jQuery(hash).length) { //省略 } }, 500); }); 0.5秒の間にhashは変えられる! もう一度よくみてほしい
  52. 52. 現在のソース hash = location.hash; // 2013.10.4 XSS対応 if(hash == "#first-login"|| hash == "#passmodif" || hash == "#passlost") { }else { hash = ""; } if (hash != "" && jQuery(hash).length) { ... http://www.benesse.co.jp/s/land/pass/ 内のtabs.jsを参照 !
  53. 53. DOM based XSS ❷ <script type="text/javascript"> $(document).ready(function(){ result = "./answer/answer_" + $.query.get('result') + ".html"; $("#answer_box").load(result); }); </script> ... <div id="answer_box"></div> resultというパラメータからパスを組立→ そのURLのレスポンスをページに書き出す
  54. 54. DOM based XSS ❷ パスは同一ドメイン内に制限、セーフ? <script type="text/javascript"> $(document).ready(function(){ result = "./answer/answer_" + $.query.get('result') + ".html"; $("#answer_box").load(result); }); </script> ... <div id="answer_box"></div> https://web.archive.org/web/20120329044331/http://wm.benesse.ne.jp/ contents/oyashindan/answer.html?
  55. 55. No! 同じドメインでユーザのアップロードする アバター画像をホストしている 画像のコメント領域などに<script>…とか書い ておけばそのままの内容をアップロード
  56. 56. こうすれば /vulnpage?result=/../../../../uploads/profile/icon.jpg%23 $(document).ready(function(){ result = "./answer/answer_" + $.query.get('result') + ".html"; $("#answer_box").load(result); }); ➡画像のバイナリをページ内に書き出す
  57. 57. DEMO http://vulnerabledoma.in/avtokyo2015/
  58. 58. まとめ これからもできるだけ皆さんに迷惑を かけないようバグを探しますので どうぞよろしくお願いします
  59. 59. @kinugawamasato masatokinugawa [at]gmail.com Thanks!

×