今回は、新たに見つかった脆弱性などについてのブログを紹介する。まず最初は、米マイクロソフトの「Internet Explorer(IE)」に見つかった脆弱性。その脆弱性を悪用する攻撃が実行されているとして、英ソフォスが警戒を呼びかけた。問題の脆弱性「CVE-2012-1875」は6月の月例パッチ「MS12-037」で修正されている。

ソフォスのアンチウイルス製品による脅威検出のダイアログ

 ソフォスの研究部門はこの脆弱性を狙う試みを多数確認しているという。巧妙に細工されたJavaScriptコードがインターネット上で出回っており、これをWebページに埋め込めば疑いを持たないサイト訪問者を攻撃できる。また、オープンソースの脆弱性検証ツール「Metasploit Framework」には、(ペネトレーションテストや調査目的に限られるが)不正なJavaScriptを生成して攻撃を自動化するプラグインモジュールが追加されている。

 「Same IDプロパティのリモートでコードが実行される脆弱性」と称されるCVE-2012-1875は、IEのメモリー管理に不具合を引き起こす可能性があり、一般的にはuse-after-free(解放済みメモリー使用)バグとして知られている。

 最新のOSでは、この種のエクスプロイトを困難にするためにDEP(データ実行防止)とASLR(アドレス空間のランダム化)の2種類の技術が使われている。DEPはメモリー領域がデータ格納用にだけ使われるよう割り当て、不正なコードの実行を遮断する。ASLRはDLLなどのソフトウエアモジュールをメモリーのランダムな位置に読み込み、攻撃者が必要なライブラリー機能の位置を簡単に推測できないようにする。

WindowsのDEP設定ダイアログ

 しかし、DEPやASLRによってリモートのコード実行が不可能になるわけではない。IEにCランタイムDLLの旧バージョンを読み込ませることによって、ASLRを回避することが可能だ。古いCランタイムDLLは、ASLRが標準になる前にコンパイルされたため、ASLRの適用対象に入っていない。このためASLR対象外のDLLをロードすると、それがたとえASLR対応プログラム内でも、終了する位置を推測できてしまう。

 DEPも、ROP(Return Oriented Programming)と呼ばれる方法によって迂回される。ROPは既にメモリー上に存在する1ないし2命令の細かいコードの断片をつなぎ合わせ、全体として不正なコードに組み立てる。そしてジャンプ先となるメモリーアドレスのリストを作成し、これらコードの断片を次々と実行する。

ROP手口のコード
d

 ASLRの有効性を弱めてDEPを回避すれば、攻撃者は不正なプログラムの実行を先へと進めることができる。ソフォスは、まだパッチを当てていないユーザーに対して、今すぐにパッチを適用するよう呼びかけている。