ウィキペディアによると、Linuxカーネルにはデフォルトで ASLRの弱い形式 があり、PaXまたはExec Shieldパッチを追加するだけで完全なASLRが有効になります。
LinuxカーネルのデフォルトASLRの弱点は何ですか?最近のバージョンで修正/改善されましたか?そうでない場合、メインラインカーネルが完全な実装を提供しないことを選択する理由はありますか?
ウィキペディアの記事は続きます:
これにより、スタックベースが8 MBの領域に配置され、524,288の可能な位置が含まれます。また、256の可能な位置を含む1 MB幅の領域のmmapベース。
後者は小さすぎて効果的ではなく、攻撃者はmmap()
アドレスポインターを見つけるために1つのセグメント内の256アドレスをプローブするだけで済みます。
この記事で触れていないのは、LinuxでのASLRの限定的な使用です。従来、2.6カーネルは、特定のメモリ領域(PIEコンパイル時)で(ネットワーク)プロセスにのみASLRを使用し、VDSOを固定アドレスにロードしていました。このような測定は、アドレスがallランダム化されている場合にのみ有効です。新しいカーネルでは、アドレスのランダム化のサポートが向上しています。さまざまなWindowsバージョンがまったく同じことをしたことに注意してください。