3.15 カーネル・セキュリティ・メカニズムの構成および使用

3.15.1 アドレス空間配置のランダム化
3.15.2 データ実行防止
3.15.3 位置独立実行形式

Linuxカーネルには、システムのセキュリティの強化に使用できる、いくつかのセキュリティ・メカニズムが搭載されています。これらのメカニズムにより、プロセスのアドレス空間の配置をランダム化したり、実行不可能なメモリー内でコードが実行されるのを防ぎます。

3.15.1 アドレス空間配置のランダム化

アドレス空間配置のランダム化(ASLR)は、特定のタイプのバッファ・オーバーフロー攻撃を撃退するのに役立ちます。ASLRでは、ベース、ライブラリ、ヒープ、スタックをプロセスのアドレス空間のランダムな位置に配置します。これにより、攻撃プログラムは次の命令のメモリー・アドレスを予測することが困難になります。ASLRはLinuxカーネルに組み込まれており、パラメータ/proc/sys/kernel/randomize_va_spaceによって制御されます。randomize_va_spaceパラメータは、次の値をとることができます。

0

ASLRを無効化します。この設定は、カーネルがnorandmapsブート・パラメータでブートされる場合に適用されます。

1

スタック、仮想動的共有オブジェクト(VDSO)ページ、共有メモリー領域の位置をランダム化します。データ・セグメントのベース・アドレスは、実行可能コード・セグメントの末尾の直後に配置されます。

2

スタック、VDSOページ、共有メモリー領域およびデータ・セグメントの位置をランダム化します。これがデフォルトの設定です。

次のように、新しい値を/proc/sys/kernel/randomize_va_spaceに書き込むことで、設定を一時的に変更できます。

# echo value > /proc/sys/kernel/randomize_va_space

値を完全に変更するには、次のように設定を/etc/sysctl.confに追加します。

kernel.randomize_va_space = value

また、sysctl -pコマンドを実行します。

randomize_va_spaceの値を変更する場合は、アプリケーション・スタックをテストして、新しい設定と互換性があることを確認する必要があります。

必要に応じて、次のコマンドを使用して、特定のプログラムとその子プロセスに対してASLRを無効にできます。

% setarch `uname -m` -R program [args ...]

3.15.2 データ実行防止

データ実行防止(DEP)機能は、アプリケーションまたはサービスが実行不可能なメモリー領域でコードを実行することを防ぎますハードウェア強制DEPはNX (Never eXecute)ビットとともに、互換性のあるCPU上で機能します。Oracle Linuxでは、ハードウェアにNXビットを実装していないCPUのために、ソフトウェアでNXビットをエミュレートすることはありません。

DEP機能は無効化できません。

3.15.3 位置独立実行形式

位置独立実行形式(PIE)機能では、カーネルがテキストを再配置できないように、ランダム・メモリー・アドレスで実行可能バイナリをロードします。位置独立バイナリを生成する手順:

  • コンパイル時に、gcc-fpieオプションを設定します。

  • リンク時にld-pieオプションを設定します。

バイナリまたはライブラリを再配置できるかどうかをテストするには、次のコマンドを使用します。

# readelf -d elfname | grep TEXTREL