Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014

22,099 views

Published on

SECCON 2014 オンライン予選(英語)に、私が出題した XSS Bonsai (盆栽XSS) が賞を受賞したので、その受賞挨拶です。

Published in: Technology
  • Be the first to comment

【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014

  1. 1. 受賞のご挨拶 山崎圭吾 (Twitter: @ymzkei5) Dec 08, 2014
  2. 2. 『Bonsai XSS』 クソ・問題・オブ・ザ・イヤー 受賞のご挨拶 山崎圭吾 (Twitter: @ymzkei5) Dec 08, 2014
  3. 3. クソ・問題・オブ・ザ・イヤー授賞式
  4. 4. 受賞者のご紹介  Bonsai XSS (別名:「箱庭XSSリローデッド」)さん SECCONオンライン予選で Webカテゴリとして出題。 1つのEXEファイルの中に、 ブラウザとWebアプリが 共存している世界。 「XSS」と表示されたalert ボックスを表示させると、 次のステージに進む。
  5. 5. 受賞理由について  動かない  落ちる  正しいフラグが出ない  先が長くてうんざりする  箱庭もう飽きた
  6. 6. 受賞理由について  動かない  落ちる  正しいフラグが出ない  先が長くてうんざりする  箱庭もう飽きた 後半は、私にはどうしようも ないので、前半3つについて 説明させていただきます!
  7. 7. 受賞理由(1): 動かない  初期バージョンは、Microsoft HTML Object Library (mshtml.dll) が別に必要だった。  .NET Framework に標準で含まれていると勘違い。  実際にはSDK を入れないと入らない子だった。  IEの「暗号化されていないフォームデータの送信」 の設定が「有効にする」になっている必要があっ た。  この設定、多くのみなさんは有効だと思いますが、 新しくAWSなどで借りた、まっさらなWindowsだと 「無効」だった。
  8. 8. 受賞理由(2): 落ちる  落ちる入力の例: ";document.write("<textarea/ onfocusout=alert('XSS')>");//
  9. 9. 受賞理由(3): 正しいフラグが出ない  Web以外の解き方で解いた場合に、崩れたフラグが出る のは意図した動作。  でも、そのチート対策が誤作動して、Web的に解いたのに 崩れたフラグが表示される事案が多数発生。(´・ω・`)
  10. 10. ( ³ω³) ファッ?!! どうしてこうなった?!!!  その真相が以下のスライドで明らかに!!  全世界を震撼させたその真実を見逃すな!!!!!! 怒りのあまり
  11. 11. 箱庭XSSの敗北の歴史(1)  2013年8月に横浜で開催された、『SECCON×CEDEC CHALLENGE』で、箱庭XSSはその産声をあげました。 当初は、「クロスサ イトスクリプティン グ・スピードラン」 という名前で、 予選・本戦・決勝戦 で、如何に早くア ラートボックスを表 示できるか?という 競技でした。
  12. 12. 箱庭XSSの敗北の歴史(2)  2013年の地方大会では、「箱庭XSSリベンジ」を出題。  このあたりからチートや(私の)ヤラカシとの闘いが始まります。
  13. 13. 箱庭XSSの敗北の歴史(2)  2013年の地方大会では、「箱庭XSSリベンジ」を出題。  このあたりからチートや(私の)ヤラカシとの闘いが始まります。 メモリをダンプする とフラグが丸見え。
  14. 14. 箱庭XSSの敗北の歴史(3)  SECCON 2013 オンライン予選では、「箱庭XSS Final」。
  15. 15. 箱庭XSSの敗北の歴史(3)  SECCON 2013 オンライン予選では、「箱庭XSS Final」。 メモリダンプで解こうとすると、正し いフラグ「アイ・アム・アラート出し たいマン」のはずが、「アイ・アム・ アラートマン」になるギミック付きで 意気揚々と出題。 ・・・したものの、
  16. 16. 箱庭XSSの敗北の歴史(3)  SECCON 2013 オンライン予選では、「箱庭XSS Final」。 サニタイズ脳の敗北 (このパターン自分で別の問 題で出題してたのに。。) http://dec12-kaz.hatenablog.com/entry/2014/01/26/170218
  17. 17. 箱庭XSSの敗北の歴史(3)  SECCON 2013 オンライン予選では、「箱庭XSS Final」。 さらには・・・別口で、 ショートカットキーが有効だっ たので、[CTRL]+[O] で、 javascript:alert('XSS') を開けた。。
  18. 18. 箱庭XSSの敗北の歴史(4)  2014年7月の、日本語でのオンライン予選で出題し た、「箱庭XSSリターンズ」。
  19. 19. 箱庭XSSの敗北の歴史(4)  2014年7月の、日本語でのオンライン予選で出題し た、「箱庭XSSリターンズ」。 ポップアップした ウィンドウでボタン を押すだけでクリア
  20. 20. 箱庭XSSの敗北の歴史(4)  2014年7月の、日本語でのオンライン予選で出題し た、「箱庭XSSリターンズ」。 それどころか1発目で ループさせると一気 に全クリア。orz
  21. 21. 箱庭XSSの敗北の歴史(4)  2014年7月の、日本語でのオンライン予選で出題し た、「箱庭XSSリターンズ」。 さらには・・・  デコンパイルして、 ブラックリストを 取り除いている正 規表現をつぶす。  WM_HTML_GETOB JECTメッセージで ハンドルを乗っ 取って好きな HTML動かす。
  22. 22. その時、歴史が動いた  ここまでの敗北の歴史を踏まえて、私は、 決意し(てしまっ)たのです。 よし! 今までのチートやヤラカシが再現しな い、 最強の「箱庭XSS」を作ろう! ・・・と。
  23. 23. 何をしたか(1)  難読化ツール×2種類。packer的なもの間に挟む。
  24. 24. 何をしたか(1)  難読化ツール×2種類。packer的なもの間に挟む。 を難読化ツールAにかけたEXE
  25. 25. 何をしたか(1)  難読化ツール×2種類。packer的なもの間に挟む。 を難読化ツールAにかけたEXE を内部に持っていてinvokeするEXE
  26. 26. 何をしたか(1)  難読化ツール×2種類。packer的なもの間に挟む。 を難読化ツールAにかけたEXE を内部に持っていてinvokeするEXE を難読化ツールBにかけたEXE
  27. 27. 何をしたか(1)  難読化ツール×2種類。packer的なもの間に挟む。 を難読化ツールAにかけたEXE を内部に持っていてinvokeするEXE を難読化ツールBにかけたEXE 様々な環境で 「動かない」と 言われ、夜中の 更新で半分に減 らしました。
  28. 28. 難読化ツール のイメージ
  29. 29. 何をしたか(2)  WebBrowserコントロールのハンドルを乗っ取られ てHTMLを書き換えられた場合に検知できるように、 Webページ表示時と、アラートボックス実行時の DOM構造を、MSHTMLを使って比較・検証。  mshtml.dllが無い環境で「動かない」原因に。。  document.writeと、イベントハンドラを組み合わせた 場合などに、DOM構造が変化してしまいチート扱い に。。 夜中の更新で、こ の検証部分、ざっ くり消しました。
  30. 30. 何をしたか(3)  ブラックリストを生成・検証する部分を二重化し て、片方が改ざんされても検出できるように。  異常を検出した場合にも、プログラムを止めずにそのまま 動かし、フラグだけ正しくないものが出る仕掛けに。  kernel32.dll のIsDebuggerPresent() でデバッガ検知。  プログラムをステップ実行されるという噂も聞い たので、タイマーで時の流れをチェック。5秒以上 止まったり、タイマー自体が止められた場合に異 常検知。 このせいで特定のイベント ハンドラなどでアプリが固 まった後に異常として検知。
  31. 31. 何をしたか(4)  WebBrowserコントロールは、ステージごとにdispose。  このせいで、ドラッグ&ドロップのイベントハンドラが使 われた場合などに通常のtry~catchでは捕まえられないレ ベルのエラーが…。  フラグは動的に生成。正しいフラグは「SECCON{…}」 で囲まれて表示されることで確認できるように。  WebBrowserコントロールがIE7互換で動くように。  「最初から」ボタンの挙動でフラグ生成に使う変数を 特定されたくなかったので、プログラムを再起動する ことに。
  32. 32.  ポップアップウィンドウの表示を抑止。  [CTRL]+[C]、[CTRL]+[V]以外のショートカットキーを無効化。 ステータスメニューも無効化。  外部から直接、alert() 後に呼ばれる関数を呼び出されない ように、動的に生成した秘密の文字列をチェック。  現在のステージにふさわしい数のブラックリストの文字列 があるかどうかチェック。  サブルーチンを細かく分割、ダミーも散りばめる。  もはや難読化前のコードすら自分で見ても意味が分からない状 態に。 何をしたか(5)
  33. 33. 異常を検知した時の動作(1)  チート対策機能が発動した場合の表示 正常時異常検知時
  34. 34. 異常を検知した時の動作(1)  チート対策機能が発動した場合の表示 この違い、 分かりますか・・・? 正常時異常検知時
  35. 35. 異常を検知した時の動作(1)  チート対策機能が発動した場合の表示 文字の色が 変わります。 正常時異常検知時
  36. 36. 異常を検知した時の動作(2)  全部で何ステージありましたか?  (正解) 29ステージです。  バイナリ的に解かれるなどのチートを検知すると、 30ステージ目が表示されるギミックがありました。 これがチートの誤検知 と組み合わさって、さ らに訳の分からない事 態に。。
  37. 37. 皆さまからの推薦の声  XSS Bonsai、エラーは出るし、落ちるし、halfway FLAGは通ら ないし、ひどい。正攻法でやるのが間違いなのか……。  いい加減にしろよbonsaiXSS  「盆栽のことは嫌いになっても、XSSのことは嫌いにならな いでください!」  bonsai xss is broken.  Whoever made this just wants to see the world burn. #seccon #bonsai 他にもIRCで数々の罵 倒や怨鬼の声が。
  38. 38. 結論  チートなんて気にせず、解いてくれる人が、楽し く、ストレス無く解ける問題を作ることに注力す べきだった。  ここまでして、チート誤検知までまねいて対策し たのに、結局、バイナリアンたちには、いとも簡 単に解かれてしまった。あいつら最強だ。  海外の方々の罵倒の数々を理解できなくて済んだ ので、英語がニガテで良かった。(´・ω・`)
  39. 39. 安全第一 凡ミスは、盆栽XSSみたいなミスのことではありません。 参加者の方にも、 SECCON運営の方にも、 多大なご迷惑をおかけして、 まことに 申し訳ございませんでした。 ご理解の程、 よろしくお願い申し上げます。

×