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

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

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

アドレス空間配置のランダム化(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 | sudo tee /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 ...]

データ実行の防止またはNo eXecute

データ実行防止(DEP)機能は、No eXecute (NX)とも呼ばれ、アプリケーションまたはサービスが実行不可能なメモリー領域でコードを実行することを防ぎます。ハードウェアで強制されたDEPは、互換性のあるCPU上のNXビットと連携して動作し、特定のタイプのバッファ・オーバーフロー攻撃を防止します。この機能では、ハードウェア機能を使用してシステムを保護するため、デフォルトで有効になっており、無効にすることはできません。

Oracle Linuxでは、ハードウェアにNXビットを実装していないCPUのために、ソフトウェアでNXビットをエミュレートすることはありません。

位置独立実行形式

位置独立実行形式(PIE)機能では、カーネルがテキストを再配置できないように、ランダム・メモリー・アドレスで実行可能バイナリをロードします。開発者はこの機能を使用して、アプリケーションがロードされるたびに異なるメモリー・アドレスにロードされるアプリケーションをコーディングできるため、攻撃者はアプリケーションがメモリー内に格納される場所を予測しにくくなります。そのため、メモリー関連の攻撃からの保護に役立ちます。

位置独立バイナリを生成するには:

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

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

PIEを有効にしてバイナリまたはライブラリを構築したかどうかをテストするには、次のコマンドを実行します。

sudo readelf -d elfname | grep -i flags

多くの場合、このコマンドはPIEフラグが設定されているかどうかを示します。デフォルトでは、Oracle Linux 9バイナリは、このオプションの設定から発生するコンパイルの問題など、そうしない特定の理由がないかぎり、通常、このフラグ・セットを使用して構築されます。