■連載の第4回は,Windows XP SP2の「データ実行防止(DEP)」機能の動作原理について解説する。プログラムを実行できないデータ領域を判別するために,プロセッサが備える「NXビット(実行不許可ビット)」という機能を利用して,バッファ・オーバーフロー攻撃を防止する。 (本連載は『日経Windowsプロ』2004年8月号に掲載された特集「緊急報告!Windows XP SP2の全貌」に最新の情報を反映させたものです) (中田 敦)
|
Windows XP SP2では,長年ユーザーを悩ませてきた「バッファ・オーバーフロー攻撃」に根本的な対策を実施する。「データ実行防止(DEP)機能」という新機能が搭載されるからだ。 DEPには「ハードウエアDEP」と「ソフトウエアDEP」の2種類がある。ハードウエアDEPは,バッファ・オーバーフローの疑いのあるプログラムをプロセッサの機能によって強制終了してくれるというもの。当面はAMD64アーキテクチャのプロセッサ(Athlon 64/Opteron)でしか利用できないが,将来的にはインテルを含む幅広いCPU環境で利用できる。 バッファ・オーバーフロー攻撃とは,プログラムに割り当てられたバッファより大きなサイズのデータを送りつけることで,プログラムを誤動作させ,送りつけたデータ中に仕込んだコードを実行させるというものである。Blasterワームも,Windowsの「RPCインターフェース」のバッファ・オーバーフローを悪用して,攻撃用プログラムをWindows上で実行していた。 ハードウエアDEPはバッファ・オーバーフロー攻撃を防ぐために,米Microsoftと米Advanced Micro Devices(AMD)が共同開発した新技術である。 一方のソフトウエアDEPは,Windowsの「例外ハンドリング・メカニズム」を監視し,プログラムにおいて例外処理が発生した際に不正なプログラムが実行されることを防ぐ機能である。マイクロソフトは,ソフトウエアDEPによってもバッファオーバー・フロー攻撃を防ぐことが可能であり,ソフトウエアDEPはAMD64アーキテクチャ以外のプロセッサでも有効になるとしている。なおソフトウエアDEPに関しては,マイクロソフトの情報公開が進んでいないため,現時点で詳細は不明である。
データ領域でのプログラム実行を禁止
もしハードウエアDEPが有効になっている状態でユーザーがプログラムを起動しようとすると,プロセッサはそのプログラムが記憶されたメモリー領域のNXビットを確認する。もしそのメモリー領域がデータ用のものである場合,プロセッサは例外エラーを発生させ,プログラムを強制終了する。バッファ・オーバーフロー攻撃で不正なプログラムが上書きされるバッファ領域は,そもそもデータ領域なので,ハードウエアDEPが有効だと起動されなくなる。
【用語解説】
*ページ・テーブル |