VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

CentOSでバッファーオーバーフロー脆弱性に対する防御機能が有効になっているか確認する

カーネルパラメータやCPUに関する機能であまり普段設定する箇所ではないのですが、そのような設定項目があって有効になっている事の確認方法ぐらいは知っておいた方が良さそうです。

RedhatES5の資料になりますが下記資料を参考にしました。
NSA(National Security Agency)の『Guide to the Secure Configuration of Red Hat Enterprise Linux 5』
 

(1)ExecShieldが有効になっているか確認


 
1)ExecShieldとは?
 
・下記サイトの説明によると、特定のメモリー領域から命令を実行できないようするLinuxの機能で、バッファ・オーバーフロ-攻撃に対して有効な防御機能のようです。
Exec-Shieldとは
  
・デフォルトで有効になっているようですが、何かの手順ミスで無効になってしまっていないか確認します。
 
2)ExecShieldが有効になっている事を確認するには?
 
“kernel.exec-shield”、”kernel.randomize_va_space”というカーネルパラメータで制御されています。
 
sysctlコマンドで現時点で有効になっているか確認出来ます。
 
$ sysctl kernel.exec-shield
kernel.exec-shield = 1
 
$ sysctl kernel.randomize_va_space
kernel.randomize_va_space = 2

 
1と2の値の違いの意味はよく分かりませんが、有効にはなっているようです。
 

(2)Execute Disable (XD)、No Execute (NX)機能が有効になっているか確認


 
1)Execute Disable (XD)、No Execute (NX)機能とは?
 
・新しいのx86ファミリーの32ビットプロセッサーは、ページメモリ単位にコードの実行を保護する機能をサポートしています。
 この機能は、AMDプロセッサーではNo Execute (NX)、インテルプロセッサーではExecute Disable (XD)と呼ばれるそうです。
 
・この機能はバッファーオーバーフロー脆弱性に対する不正な攻撃を防ぐのに役立つので出来るだけ有効にすべきとの事です。
 
・その他のプロセッサー(Itanium、POWER、64ビットx86)はこの機能をサポートしていて、これらのプラットフォーム用の標準カーネルもサポートしているようです。
 
2)使用しているCPUがこの機能サポートしているか確認するには?
 
PAE(Physical Address Extension、物理アドレス拡張)とNX機能がサポートされているか確認します。
 
下記コマンドで確認します。
$ cat /proc/cpuinfo
 
①CPUが32ビットか64ビットか?
 
“flags”欄に”lm”の文字があれば64ビット
 
②PAEとNX機能がサポートされているか?
 
“flags”欄に”pxe”、”nx”の文字があればサポートされている。
 
3)x86システム上で新しいカーネルがインストールされているか確認する
 
32ビットカーネルの場合は、XDまたはNXサポートを有効にするためにkernel-PAEパッケージがインストールされている必要があります。(64ビットx86カーネルパッケージの場合は対応済みなので必要ありません。)
 
①OSが32ビットか64ビットか?
 
以下のコマンドで確認できます。
$ uname -m
 
②インストールする場合
 
下記コマンドでインストールします。
# yum install kernel-PAE
 
インストール後、必要に応じて、新しいカーネルが起動時にロードされるように/etc/grub.confを編集します。
 
4)BIOSでNX、XD機能を有効にする
 
システムによってはこの機能をBIOSで選択して有効にする必要があります。
BIOSの設定画面でXD、NX機能が有効になっていることを確認します。
モバイルバージョンを終了