NXビット

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ビットによるプロテクトは機能していません。機能している場合には、次のようなダイアログが現れます。

www.wildtree.jp_araki_images_nxbit.jpg (画像提供: kanai氏)

なお、コンパイラをお持ちでない方のために、上記のソースをコンパイルしたものを、evil.exeとして置いておきます。ダウンロードしたら、コマンドプロンプトから実行してください。

Windowsに関してへ戻る。