パスワードを忘れた? アカウント作成
7286142 story
セキュリティ

ASLR を簡単に回避する方法が公開される 22

ストーリー by reo
weasel 部門より

ある Anonymous Coward 曰く、

KingCope というハッカーが Windows 7, 8 で ASLR を回避する方法を公開した (kingcopes´ blag の記事本家 /. 記事より) 。

ASLR とは exe データやモジュールの読み込み位置をランダム化して、クラッキングを困難にする技術。2001 年に PaX という Linux 向けセキュリティパッチとしてリリースされました。Windows 8 または更新プログラムを適用した Windows 7 では ASLR が確実に適用されるように強制することができますが (参考: フォティーンフォティ技術研究所の資料 [PDF])、アプリの互換性の低下として様々なデメリットも表面化しているようです。簡単に回避できるならアプリ互換性をとったほうが良かったのでしょうか? それとも多少は (古いウィルスには) 効果があるので良かったのでしょうか?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by JULY (38066) on 2013年01月29日 11時49分 (#2314706)

    ざっと読んだ感じだと、割り当てられなくなるまでヒープを要求して、割り当てられなくなったら、そのヒープの領域をひたすら適当なデータで埋めて、それが終わったら、ちょろっと開放して DLL をロードすれば、その DLL はちょろっと開放した領域にロードされるから、後はそのちょろっと開放した時の範囲でヒープスプレーをして、目的の物を見つけ出して呼び出す、といった感じかな?

    ひたすらヒープを埋める時には、

    During the heap filling stage Windows might become unresponsive and will relax soon afterwards

    といった具合に、ほぼ DoS 状態になると思うけど、「なんか激重になったなぁ」と思ってプログラムを強制終了されたら、シェルコードの実行まではたどり着かないんじゃないかなぁ。特に 64bit 版だったりしたら、かなり時間もかかりそうだし。

    • by Anonymous Coward

      時間よりもメモリを使い切って死ぬ

    • by Anonymous Coward

      Windows8だと強制終了できないときが多い
      50%くらいの確率でタスクマネージャーやProcessExplorerから強制終了してもゾンビプロセスが残って強制終了できない

  • by Anonymous Coward on 2013年01月29日 11時47分 (#2314702)

    どうも、この方法って乱暴に言うと「ASLRは空きメモリの中で実行コードの読み込み位置をランダム化して攻撃を避けやすくする。なら、空きメモリを減らしてやりゃあ、読み込み位置は1つに決まっちゃうんじゃね?モグラ叩きでモグラ穴を1個残して埋めてやりゃあ、確実にその穴からモグラが顔を出すみたいに」という方法みたいですね。
    で、本家の方では「実証は32bitでやってるけど、64bitだと埋めなきゃいけないメモリが広すぎて機能しないんじゃね?」みたいな話が挙がってます。

    元々ASLRって、繰り返し攻撃できる状態ならまぐれ当たりの確率が上がっていくので確実な防御ではないはずですよね。その程度のものを突破するためにメモリを急激に大量消費するってのは、発覚するリスクとか考えると「簡単に回避」でもないような気がします。
    元ネタの英文とか斜め読みなので認識が間違ってるかもしれませんけど。

    • by Anonymous Coward

      何というか、この手法は指摘されるまでもなくMSも認識してたはずです。
      64bitのアドレス空間を埋め尽くすのは現実的で無いため問題ないとの認識も。
      32bitシステムでは問題になりますけど…

      • by Anonymous Coward on 2013年01月29日 13時58分 (#2314872)

        拡張保護モード [msdn.com]の解説でふれていました。

        攻撃者が悪意のあるコードを予測可能な位置に植え付ける手段としては Heap Spray (英語) 攻撃がありますが、64 ビットのアドレス空間を "埋め尽くす" ことは現実的でないため、この攻撃が成功する可能性は大幅に低下します。相当範囲のアドレス空間に攻撃が及ぶよりも先に、メモリとディスク領域の方が不足するでしょう

        親コメント
        • by Anonymous Coward

          予約(MEM_RESERVE)するだけなら物理メモリもディスク領域も使わないはずなんだがなあ。

          • by Anonymous Coward on 2013年01月29日 17時36分 (#2315074)

            本家の (#42697175) [slashdot.org]がまさにその辺りの議論ですな。

            「その通り。それで、ブラウザ上のJavaScriptからそれを行えるかね?

            JavaScriptにはメモリを予約する関数も low level binding もないのさ。実際にメモリを確保する(MEM_COMMIT)ことしかできないんだ。で、ライブラリの読み込み位置を予測できるだけのメモリを確保するずっと前に、コミット制限に引っかかるだろう。
            結局のところ、元記事の方法は64bitプロセスに対しては成功しないだろう。」

            親コメント
    • by Anonymous Coward
      実行コードの読み込み位置を探すのに必要なのは、空メモリじゃなくて空き論理アドレス空間なのでは?
      読み込み位置を固定アドレスに追い込むために、本当にヒープを要求して物理メモリの空きを減らさなくても、zero pageでも何でもいいからアドレス空間にマップしまくればいいような気がするんだけど。それだったら重くなったりして見た目で気づかれることなく実行できてしまうのではないかな。
      • by Anonymous Coward
        物理メモリとswapが枯渇したら作れないぞ
        • by Anonymous Coward

          windowsって物理メモリ+swapの合計以上の仮想アドレスは貰えもしないのだっけ?

          あ、PAE有効な32bit機なら物理メモリを使い切ることなく仮想アドレス空間を埋め尽くせるんじゃ・・・
          と思ったけど32bit機で4GB越えのメモリ積んだマシンなんて見たことなかった。

  • by Anonymous Coward on 2013年01月29日 11時13分 (#2314661)

    デフォルトでは ExtExport.exe ie4uinit.exe ieinstal.exe ielowutil.exe ieUnatt.exe iexplore.exe msfeedssync.exe mshta.exe PresentationHost.exe にしか設定されてないのに?

  • by Anonymous Coward on 2013年01月29日 11時51分 (#2314712)

    編集者は文体の統一くらいしろと言いたいところだがそれ以前に文体がバラバラなのはコピペ切り貼りの強いサインだからまずそっちの調査からだな。

  • by Anonymous Coward on 2013年01月29日 21時45分 (#2315308)

    様々な不具合と書きながらその実例が生ポインタの値をそのままPCHに書き出すという愚かな設計をしていたVC++しか出ていない辺り、ASLRを無効にしてのテストもせずになんでもかんでもASLRのせいにしているんだろうなと思います

    • by Egtra (38265) on 2013年02月02日 2時34分 (#2317741)

      たしかに、あまり思い浮かびませんがもう1つ。CygwinもASLRでやられるアプリ(群)だと思います。Vista以降、rebaseallを使う機会が多くなりました。

      forkを無理してがんばって実装しているので、DLLを特定のアドレスに読み込めないといけないようです。そのためどうしてもASLRとは相性が悪いですね。

      親コメント
typodupeerror

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

読み込み中...