WindowsXP SP2より、NXビットによるプロテクションが提供されています。この機能は、バッファオーバランなどを利用したマルウェアからPCを守るのに有効とされています。
具体的には、スタックをオーバフローさせ、スタック上に配置した悪意あるコードへ制御を移すことで実現される攻撃をブロックできるのです。
この機能は、NXビットをサポートしたCPU(AMD Opteron/Athlon64など)との組み合わせでのみ機能します。
機能しているかどうかを確かめるには、次のコードをコンパイルして実行してみればいいでしょう。
#include <stdio.h> int dummy(void) { return 3; } int main(int argc, char *argv[]) { unsigned char evilP[128]; unsigned char *srcP; int (*evilfP)(); int i; srcP = (unsigned char*)dummy; for(i = 0 ; i < 128 ; i++) { evilP[i] = srcP[i]; } evilfP = (int(*)())evilP; printf("%d\n", (*evilfP)()); return 0; }
このコードが何も問題なく実行されたら、NXビットによるプロテクトは機能していません。機能している場合には、次のようなダイアログが現れます。
なお、コンパイラをお持ちでない方のために、上記のソースをコンパイルしたものを、evil.exeとして置いておきます。ダウンロードしたら、コマンドプロンプトから実行してください。
Windowsに関してへ戻る。