ASLR
読み:エイエスエルアー
外語:ASLR: Address Space Layout Randomization

 実行プログラムの命令やデータ、ヒープスタック等の配列を無作為に変更する技術。アドレス空間配置のランダム化。OpenBSDLinuxWindows Vistaなどで対応している。
目次

概要
 バッファーオーバーフロー脆弱性への対抗技術の一つ。
 オペレーティングシステムごとにアプローチは若干違うが、命令、ヒープ、スタックといった各領域について、メモリー領域への配列をランダム化する。実行ごとに無作為に配列されるため、バッファーオーバーフローを利用する不正な命令が、他の命令、文字列、あるいは共有ライブラリ等を(不正に)呼び出すことが難しくなり、もって攻撃を受けにくくでき、セキュリティが向上する。
 ASLRがない(従来の)状態では、同じようなシステムで同一のプログラムを実行すれば、命令や文字列などは同じ配置となる。この状態だと、バッファーオーバーフローによる攻撃がしやすい。

特徴

OpenBSD
 何よりもセキュリティを重視するOpenBSDが、ASLR的な機能を有効にした最初のOSとなった。
 この機能はW^Xと呼ばれているが、これはASLRとほぼ同じものである。パクリ疑惑まであるらしい。

Linux
 ASLRという語は元々、PaXというLinux向けの実装開発プロジェクトによる造語であった。
 Linuxでは、PaXやExec Shieldといったセキュリティ向上パッチを導入することで、アプリケーションのバッファーオーバーフローに対抗することにした。
 PaXは、NXビットを併用したセキュリティ向上を目指した実装である。コード領域とデータ領域を明確にページ分けし、その上で、データ用ページは実行不可に、コード用ページは書き込み不可にするとともに、無作為な配置を実施する。これにより、プログラムに対し、正しい実行以外を出来ないようにするものである。

Microsoft Windows
 Windows Vista以降では、専用にASLRに対応するようにリンクされた実行ファイルに限り、ASLRが利用できるようになった。
 DEPを併用することで、上述したLinuxのPaXやExec Shield相当以上のセキュリティが実現される。
 WindowsのASLRは、スタック、ヒープの他に、プロセス環境ブロック(PEB)などの配列も無作為に変更されるとしている。
 Microsoftの説明によれば、ASLRはDEP/GSなど他の防御壁を突破して動作したコードの正常な実行を妨げることで、不正なプログラムの侵入防止をするもの、としている。

再検索