Using x86 segment limits to approximate NX protection
警告状態ではあるが、対応の必要はなし。
x86のセグメントにあるリミット機能を使用してNX(No eXecute)保護機能をエミュレートする。XDビットが無効な時に表示されるメッセージである。XDビットが有効の場合は本メッセージが表示されない。
1. Exec_ShieldはIngo Molnar氏によって32ビット x86プロセッサ用に開発されたNX機能をエミュレートするパッチである。実行コードがコードセグメント(Code Segment)の上限値を超えるかどうかをチェックすることによりNX機能をエミュレートする。RedHat及びRedHatをベースとしたいくつかのディストリビューションのカーネルにはこのパッチが当っているが、Linuxのメーンストリームには取り入れられていない。exec_shieldを /proc/sys/kernel/exec-shieldや/proc/sys/kernel/exec-shield-randomizeの内容を変更することによってセキュリティレベルの変更が可能である。詳細はに掲載されている:
http://www.jp.redhat.com/support/manuals/RHEL3_RELEASE-NOTES-U3-ja.html
2. AMD社及びインテル社はNX機能をそれぞれプロセッサにXDビット(eXecute Disable bit)、NXビット(No eXecute bit)にて実装した。インテル系プロセッサのNX機能はPAE(Page Address Extension)を有効にし且つカーネル側でCONFIG_X86_PAE=yでなければならない。上記の条件が満たすとカーネルが起動時にプロセッサのPTE(Page Table Entry)のの64ビット目のNXビットをセットし、ハードウエアのNX機能によりページの保護を行なう。保護されるページにはデータの保存だけが有効となる。そこから命令を実行しようとするとプロセッサがページフォルト(Page Fault)を発生し実行を中断し、問題のプロセスにSIGKILLシグナルが送信される仕組になる。これにより悪意を持ったプログラムからバッファオーバーフロー攻撃を免かれる。