アカウント名:
パスワード:
どうも、この方法って乱暴に言うと「ASLRは空きメモリの中で実行コードの読み込み位置をランダム化して攻撃を避けやすくする。なら、空きメモリを減らしてやりゃあ、読み込み位置は1つに決まっちゃうんじゃね?モグラ叩きでモグラ穴を1個残して埋めてやりゃあ、確実にその穴からモグラが顔を出すみたいに」という方法みたいですね。 で、本家の方では「実証は32bitでやってるけど、64bitだと埋めなきゃいけないメモリが広すぎて機能しないんじゃね?」みたいな話が挙がってます。
元々ASLRって、繰り返し攻撃できる状態ならまぐれ当たりの確率が上がっていくので確実な防御ではないはずですよね。その程度のものを突破するためにメモリを急激に大量消費するってのは、発覚するリスクとか考えると「簡単に回避」でもないような気がします。 元ネタの英文とか斜め読みなので認識が間違ってるかもしれませんけど。
何というか、この手法は指摘されるまでもなくMSも認識してたはずです。64bitのアドレス空間を埋め尽くすのは現実的で無いため問題ないとの認識も。32bitシステムでは問題になりますけど…
拡張保護モード [msdn.com]の解説でふれていました。
攻撃者が悪意のあるコードを予測可能な位置に植え付ける手段としては Heap Spray (英語) 攻撃がありますが、64 ビットのアドレス空間を "埋め尽くす" ことは現実的でないため、この攻撃が成功する可能性は大幅に低下します。相当範囲のアドレス空間に攻撃が及ぶよりも先に、メモリとディスク領域の方が不足するでしょう
予約(MEM_RESERVE)するだけなら物理メモリもディスク領域も使わないはずなんだがなあ。
本家の (#42697175) [slashdot.org]がまさにその辺りの議論ですな。
「その通り。それで、ブラウザ上のJavaScriptからそれを行えるかね? JavaScriptにはメモリを予約する関数も low level binding もないのさ。実際にメモリを確保する(MEM_COMMIT)ことしかできないんだ。で、ライブラリの読み込み位置を予測できるだけのメモリを確保するずっと前に、コミット制限に引っかかるだろう。 結局のところ、元記事の方法は64bitプロセスに対しては成功しないだろう。」
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
簡単に回避できるかいまいち不明 (スコア:3, 参考になる)
どうも、この方法って乱暴に言うと「ASLRは空きメモリの中で実行コードの読み込み位置をランダム化して攻撃を避けやすくする。なら、空きメモリを減らしてやりゃあ、読み込み位置は1つに決まっちゃうんじゃね?モグラ叩きでモグラ穴を1個残して埋めてやりゃあ、確実にその穴からモグラが顔を出すみたいに」という方法みたいですね。
で、本家の方では「実証は32bitでやってるけど、64bitだと埋めなきゃいけないメモリが広すぎて機能しないんじゃね?」みたいな話が挙がってます。
元々ASLRって、繰り返し攻撃できる状態ならまぐれ当たりの確率が上がっていくので確実な防御ではないはずですよね。その程度のものを突破するためにメモリを急激に大量消費するってのは、発覚するリスクとか考えると「簡単に回避」でもないような気がします。
元ネタの英文とか斜め読みなので認識が間違ってるかもしれませんけど。
Re: (スコア:0)
何というか、この手法は指摘されるまでもなくMSも認識してたはずです。
64bitのアドレス空間を埋め尽くすのは現実的で無いため問題ないとの認識も。
32bitシステムでは問題になりますけど…
Re:簡単に回避できるかいまいち不明 (スコア:1)
拡張保護モード [msdn.com]の解説でふれていました。
攻撃者が悪意のあるコードを予測可能な位置に植え付ける手段としては Heap Spray (英語) 攻撃がありますが、64 ビットのアドレス空間を "埋め尽くす" ことは現実的でないため、この攻撃が成功する可能性は大幅に低下します。相当範囲のアドレス空間に攻撃が及ぶよりも先に、メモリとディスク領域の方が不足するでしょう
Re: (スコア:0)
予約(MEM_RESERVE)するだけなら物理メモリもディスク領域も使わないはずなんだがなあ。
Re:簡単に回避できるかいまいち不明 (スコア:1)
本家の (#42697175) [slashdot.org]がまさにその辺りの議論ですな。
「その通り。それで、ブラウザ上のJavaScriptからそれを行えるかね?
JavaScriptにはメモリを予約する関数も low level binding もないのさ。実際にメモリを確保する(MEM_COMMIT)ことしかできないんだ。で、ライブラリの読み込み位置を予測できるだけのメモリを確保するずっと前に、コミット制限に引っかかるだろう。
結局のところ、元記事の方法は64bitプロセスに対しては成功しないだろう。」