■連載の第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の仕組みは図18の通りである。AMD64アーキテクチャのプロセッサ上で稼働するWindows XP SP2では,仮想メモリー空間を管理する「
ページ・テーブル」が拡張され,メモリー領域は「プログラムを実行できる領域」と「プログラムを実行できないデータ用の領域」とに色分けされる。ページ・テーブルでこの色分けを行うビットのことを「NXビット(実行不許可ビット)」と呼ぶ。XP SP2はプログラムを起動する際に,データ領域用のNXビットをオンにする。このオン・オフはOSだけで処理するため,既存のプログラムを特別に変更する必要はない。

図18●データ実行防止機能の仕組み
AMD64アーキテクチャのプロセッサは,データ用の領域に上書きされたプログラム(ワームなど)が実行されようとするのを禁止する。そのメモリーのアドレスがプログラム用の領域かデータ用の領域かをあらかじめ記録するのに,ページ・テーブル上の「NXビット」を利用している。

 もしハードウエアDEPが有効になっている状態でユーザーがプログラムを起動しようとすると,プロセッサはそのプログラムが記憶されたメモリー領域のNXビットを確認する。もしそのメモリー領域がデータ用のものである場合,プロセッサは例外エラーを発生させ,プログラムを強制終了する。バッファ・オーバーフロー攻撃で不正なプログラムが上書きされるバッファ領域は,そもそもデータ領域なので,ハードウエアDEPが有効だと起動されなくなる。

 

【用語解説】
データ実行防止機能
データ用のメモリー領域からのプログラム実行を禁止する機能。これを実現するためにAMDのプロセッサ実装された技術の名称が「拡張ウィルス対策機能」である。Back

ページ・テーブル
ページ方式の仮想メモリーを利用している場合に,仮想メモリーのアドレスと実メモリーのアドレスを対応させる表のこと。Back