NXビット 【No-Execute bit】 XDビット / Execute Disable bit

概要

NXビット(No-Execute bit)とは、x86系マイクロプロセッサが備えるメモリ保護機能での一つで、メモリ上にデータとして記録された領域をプログラムとして実行するのを防ぐ仕組み。米AMD社の製品では「NXビット」、米インテル(Intel)の製品では「XDビット」と呼ぶ。

現代的なCPUおよびオペレーティングシステム(OS)では、メインメモリ(RAM)を「仮想記憶」という仕組みで管理し、「ページ」と呼ばれる等しい容量の領域に分割して物理メモリとストレージの間で随時入れ替え(ページング)を行っている。

NXビットはページのアドレスなどを管理するページテーブル上で、各ページの情報を表すエントリ内に設けられた特定のビットで、これが「1」に設定されると内容をプログラムとして実行することが禁止される。

これにより、ネットワークを通じて攻撃者がソフトウェアに不正な攻撃用プログラムコードを送り込んで実行させる「バッファオーバーラン攻撃」(バッファオーバーフロー攻撃)などを効果的に防ぐことができる。

この攻撃手法はソフトウェアのメモリ管理の欠陥を悪用し、外部から過剰なデータを送りつけて受信用の一時的なデータ保管領域(バッファ)を溢れさせ、本来データが保管される領域に置かれた攻撃用のコードを実行させるものである。データ領域のNXビットがオンになっていれば攻撃コードを誤って実行することはなく、ソフトウェアはOSによって強制終了させられる。

NXビットは2003年にAMD社が「NXビット」の名称でAMD64(x86-64)命令セットのプロセッサ製品に搭載し始め、翌年にはまったく同じ仕様がIntel社によって「XDビット」の名称でIntel 64命令セットAMD64互換)の製品群に採用されるようになった。Windowsのデータ実行防止DEP:Data Execution Protection)など、多くのOSがNXビットを用いてメモリ保護を行う機能を実装している。

(2019.1.6更新)

CPUの用語一覧