カーネル・セキュリティ・メカニズムの構成および使用
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バイナリは、このオプションの設定から発生するコンパイルの問題など、そうしない特定の理由がないかぎり、通常、このフラグ・セットを使用して構築されます。