どうもご無沙汰しております。前回のアライ出しは一昨年の9月、もはや「アライ出し更新しないんですか?」という声も止んで久しい今日この頃であるが、皆様いかがお過ごしでしょうか。この不定期連載の更新を心待ちにしていた方が一人でもいらっしゃったのであれば、それは非常にありがたいことである。
筆者の近況はというと、昨年は経営に携わる仕事が中心であったため、どうしても情報セキュリティの最新事情よりも、会社の事業活動をウォッチして是正することが主となっていた。しかしながら、今年はふたたび研究開発部門を主管する立場となったため、従来どおりの活動が可能となった。そこで、本連載も復活ののろしを上げたい。復活の最初のテーマは、やはりこれしかないだろう。それはもちろんWindowsのセキュリティについてである。
昨年の10月、MicrosoftはEnhanced Mitigation Evaluation Toolkit(EMET)と呼ばれる追加ツールをリリースした。従来は、脆弱性の影響を緩和できる機能を組み込むためには、ソフトウェアをソースコードから再コンパイルする必要があった。また、脆弱性の悪用を抑止する機能はより最新のWindowsに搭載されているため、その恩恵は古いバージョンのWindowsでは受けることができなかった。しかし、EMETツールを使用することでこうした問題点を解決できるという。具体的には、次のような緩和機能を提供する。
1. SEHOP
バッファオーバーフローに代表されるメモリ上書きの脆弱性をWindows上で悪用する場合のテクニックのひとつに、SEH(Structured Exception Handling: 構造化例外処理)の上書きがある。Structured Exception Handler Overwrite Protection (SEHOP)は、このテクニックを抑止するためにWindows Server 2008およびVista SP1から導入された保護機構である。この保護機構により、実際にMS09-032の攻撃コードを失敗させたとMicrosoftは述べている。
2. 動的なDEP
Data Execution Prevention (DEP)は、本来はデータを格納するだけのメモリ領域にシェルコードが書き込まれて実行されてしまうことを抑止する保護機構である。Windows XP SP2から導入された。
3. NULLページ割り当ての防止
これはアドレス0x00000000(NULL)に近いページの割り当てをさせないことで、NULL間接参照の悪用を防止するというものである。ただし、現行のバージョンのEMETはユーザモードでの保護をサポートしており、カーネルモードのNULL間接参照の問題を保護はサポートしていない、とMicrosoftは述べている。
4. Heap Sprayテクニックの防止
Heap Sprayは、ブラウザ用プラグインの脆弱性を悪用する攻撃コードによく用いられるテクニックである。EMETはHeap Sprayで一般に使用されるヒープ領域を事前に確保しておくことでこのテクニックが成功することを阻止する。ただし、この方法は一般的な保護機構ではないとMicrosoftは述べている。
EMETは次のレジストリキーを使用している。
HKey_Local_Machine\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
このレジストリキーは通常デバッガを設定するために使用される。つまり、ある特定のアプリケーションが起動されるたびにデバッガが起動する、ということになる。これにより、毎回デバッガでアタッチするという手間を省くことができるので、より効率的にアプリケーション開発時にバグを発見することができるという目的を達成できるのだ。
そして、デバッガの代わりにEMETを登録することで、保護対象のプログラムが起動されるたびにEMETが起動する。その結果、上記のような保護を対象のプログラムに適用するというしくみである。