ASLRの定義

アドレス空間レイアウトランダム化(ASLR)は、プロセスのアドレス空間内の主要なデータ領域の位置をランダムに配置するセキュリティ技術です。 これには、実行可能ファイルのベースと、スタック、ヒープ、ライブラリの位置が含まれます。 これにより、ASLRは攻撃者がターゲットアドレスを予測することをより困難にし、メモリ破損バグの悪用をはるかに困難にします。

併せてこちらもご参照ください: バッファオーバーフロー攻撃

ASLRの歴史

2001: LinuxカーネルのオープンソースパッチであるPaXプロジェクトは、増加するバッファオーバーフロー攻撃の問題に対処するために実装されています。 これは、ASLRの概念の起源と見なされています。
2003:OpenBSDには同様の機能が統合されています。
2005: ASLRは、バージョン2.6.12以降のLinuxカーネルに統合されています。
2007:Microsoftは、いくつかの新しいセキュリティ機能の一部として、Windows VistaにASLRを導入しました。 Appleは、Mac OS X Leopard(10.5)でASLRを導入しました。
2011: Appleは、バージョン4.3でiOSプラットフォームにASLRを拡張しました。

ASLRの利点

  • 悪用されにくい. ASLRはメモリアドレスをランダム化することで、攻撃者が特定のコードがメモリ内のどこに存在するかを予測することをはるかに困難にします。 これにより、バッファオーバーフローやリターンツーライブ攻撃など、特定の種類の脅威が大幅に軽減されます。
  • システム全体の保護. ASLRはシステムレベルで実装されているため、個々のアプリケーションだけでなく、システム上で実行されているすべてのプロセスを保護します。

ASLRの制限

  • 情報漏洩. 攻撃者がメモリレイアウトを明らかにする方法(メモリリークの脆弱性など)を見つけることができれば、ASLRをバイパスできます。 これは、ベースアドレスがわかると、相対アドレスもわかるためです。
  • 限定的なエントロピー. ランダム性(またはエントロピー)の程度は、システムのアーキテクチャによって異なります。 32ビットシステムでは、64ビットシステムと比較してASLRで利用できるエントロピーがはるかに少ないため、効果が低下します。