パスワードを忘れた? アカウント作成
290858 story
テクノロジー

ハッキングコンテストで使われたWindows 7版IE8のセキュリティ機構回避手法、公開される 14

ストーリー by hylom
よくやるなぁ 部門より

あるAnonymous Coward 曰く、

ハッキングコンテスト「Pwn2Own 2010」でWindows 7のハッキングに使われた脆弱性実証(Exploit)コードが公開された (Vreugdenhil Researchのブログ記事Exploitコード)。

このExploitコードはJavaScriptコードが含まれたHTMLコードとなっており、Windows7のIE8から開くとネイティブコードが実行されるというもの。内容は整数型のラップアラウンドを起こさせてからヒープ確保を行わせて文字列のヒープオーバーフローを起こすという単純なものだが、Windows7に備わっているセキュリティ機構であるASLR(アドレス空間配置のランダム化)やDEP(ヒープやスタックでのコード実行の禁止)を突破する点が新しい。方法の詳細は論文に書かれている。

ASLRの回避に使った方法は、バッファのオーバーフロー部分をいじくり回してヒープのレイアウトを求めることで、vftableにあるDLLのアドレスを手に入れるというもの。DEPの回避に使った方法は、今後作るオブジェクトと同じメモリ確保サイズの配列を作り、use-after-freeを利用して配列と同じメモリを別のオブジェクトに割り当てさせて、配列を書き換えてオブジェクトのメンバを操作することによって、間接callからVirtualProtectを呼ぶというもの。

VirtualProtectのアドレスもランダマイズされているが、IEで使用しているATLライブラリがVirtualProtectの呼び出しを含んでいるために、vftableから得たDLLのインポートセクションのアドレスからVirtualProtectのアドレスを取得することができるそうだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • ~と言う方法だった。今ではこのセキュリティーホールは塞がれている。とか書いて頂けるとありがたい。リンクを辿りたくない類の記事だし。
    • by Anonymous Coward on 2011年01月17日 16時52分 (#1889269)

      整数型のラップアラウンドによるヒープオーバーフロー自体はMS11-002なので既に修正されています。
      http://www.microsoft.com/japan/technet/security/bulletin/ms11-002.mspx [microsoft.com]
      ASLRとDEPの回避手法は今でも使えるはずです。

      それにしても、ASLRとDEPのbypassは広まってきていますね。例えばWindows7のIE8のCSS処理にある0day(未修正)な脆弱性を使った、ASLR/DEPをbypassするexploitも出てきています。
      https://www.metasploit.com/redmine/projects/framework/repository/entry... [metasploit.com]
      ASLRとDEPを過信しないことが大切ですね。

      親コメント
      • by Anonymous Coward
        現実の耐性菌と一緒で、それがなければ生き残れない環境とともに増えてくるのは当然でしょう。
    • by Anonymous Coward

      セキュリティホール自体は塞がれたかもしれないけど、ASLRを迂回する方法はそう簡単に対策を立てられない気がする(アプリの互換性に影響が出るから)。
      EMET [microsoft.com]で対策できるかもしれないしできないかもしれない。

      • by Anonymous Coward on 2011年01月17日 17時37分 (#1889307)

        メモリを読まれる以上、ASLRはどうしようもない気がしますね。
        それよりもDEPの回避を何とかした方が良いかと。
        これの対策には強制アクセス制御を導入すれば良いはず。
        例えば、Linuxの主要ディストロ(FedoraやUbuntuなど)では既にSELinuxやAppArmorなどの強制アクセス制御によって、ブラウザによるmprotect (WindowsでいうところのVirtualProtect)の実行を防いでいる(はず)ので、この手のDEP回避は通用しません。
        ただIEだとプラグインなどがVirtualProtectを呼んでいて互換性を崩すため無理…と言いそうな気もしないでもない。

        まぁROPでもDEP回避はできますが、今回ほどお手軽には行かないはず。バージョン依存も激しくなりますし。

        親コメント
        • by Anonymous Coward

          > ただIEだとプラグインなどがVirtualProtectを呼んでいて互換性を崩すため無理…と言いそうな気もしないでもない。
          Linuxでさえぐぐると「動きません」→「SELinuxを無効にしてください」のコンボがわらわら出てくるのにWindowsでできるわけがないでしょ。
          プラグインなんか引っ張り出すまでもなく、いまどきのブラウザはどれもJITのために動的生成したネイティブコードに実行許可を与えられることは必須です。そもそもタレコミにもIE自身がVirtualProtectを呼んでるって書いてるやん。

      • by Anonymous Coward
        ASLRの迂回に関しては、EMETは、無力です。特にWindows XPでの効力には期待しないこと。
  • by deleted user (37441) on 2011年01月17日 16時29分 (#1889246) ホームページ

    スゲーやつがいた。ホントだぞ。
    まで読んだ。

    続きはWebで。
    #ってのもスゲー古い感じがするな

  • by Anonymous Coward on 2011年01月17日 16時42分 (#1889258)
    完璧なものは無い。
    問題は間違いを指摘されてすぐ修正する勇気があるかどうかだ。
    • by Anonymous Coward
      何事にも例外はある。例えばおまえのカーチャンはおまえという完璧な馬鹿を作り出すことに成功した。
      • by Anonymous Coward

        お前の理屈も完璧だな。
        例外が多すぎるぞ。

  • by Anonymous Coward on 2011年01月17日 17時18分 (#1889289)

    DEPの適用範囲が違うx64版とかでも通用するの?
    あと、IE9は?

typodupeerror

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

読み込み中...