ブログ

FFRI BLOG

2012-09-21 「CVE-2012-4969」:IE脆弱性検証結果続報


技術戦略室鈴木です。

9月17日に報告されたIEの脆弱性(CVE-2012-4969)に関する続報をお知らせいたします。

今回、In the wildの検体を入手し、その検体と攻撃に利用された脆弱性について調査しました。

検体は以下のブログで報告されているものです。

http://eromang.zataz.com/2012/09/16/zero-day-season-is-really-not-over-yet/

このブログの筆者によれば、先日のJava Runtimeの脆弱性について調査を行っていたときにこの検体を発見したとのことです。

この検体はIEの脆弱性を突くもので、2つのJavaScriptコードとAdobe Flashのオブジェクトを組み合わせたものでした。

この脆弱性はuse-after-free脆弱性と呼ばれるもので、プログラマとしての視点からすると、このタイプの脆弱性を完全になくすのは非常 に難しいと言えます。

エラーチェックなどはありませんが、以下に今回の問題を理解するための簡単なコードを書いてみました。

MyApp::WorkWithObjメソッドは_myObjを利用して2つの仕事を行っています。_myObj->method1()を呼び出したとき、その先でどこかのコン ポーネントがMyApp::DeleteObjを呼び出してしまった場合、_myObj->method2()呼出しの結果は不定となってしまいます。さらに、C++のオ ブジェクト内にそのオブジェクトの関数テーブル(vtable)へのポインタ(vptr)が配置されていることを考慮した場合、_myObjのあった領域 にユーザー入力のデータが配置され、その結果、任意のアドレスにある関数テーブルを参照させることができてしまいます。

他にもユーザーからの入力をメモリ上に配置するコードが存在すれば、その場所ポイントすることで任意のアドレスの実行が可能となって しまいます。

code_example

この例の場合、単純なため、このような間違いを組み込むことは少ないかもしれませんが、コンポーネントや関係するプログラマの増加により複雑さが増していけば、このような間違いが起きる可能性はかなり高いと思います。

今回のIEの場合、JavaScriptの処理に問題があり、これからメソッドを呼び出そうとしているオブジェクトをその前の処理で削除してしま うというものでした。

また、9月18日のブログにて弊社FFR yaraiにてMetasploitの検証モジュールによる攻撃を防御できることをお伝えしましたが、今回、この検体についても同様に防御できることを確認いたしました。

- Windows XP SP3

- Internet Explorer 8 (英語版)

- FFR yarai 2.1.850

yarai検知画面


なお、この検体はIE8の日本語版では動作しませんでした。プログラムの挙動のログからの推測になりますが、この検体が利用している Adobe Flashのファイルが日本語版の場合には意図通り動作していないようです。

FFR yaraiのインストールされていない環境で確認した結果、細工されたWebサイトの閲覧だけで、サーバーに接続しファイル(EXE形式の 実行ファイル)をダウンロードしようとするコードが実行されました。現在はそのファイルは存在せずダウンロードに失敗しますが、そのまま動作すればそのユーザー権限で任意のファイルの実行が可能です。

バッファオーバーフロー系の脆弱性に関しては、危険な個所を開発環境やコンパイラが指摘するなどの機能も備わってきていますが、use- after-freeはコードの流れ全体を把握しないと判断できないという特性上、すべて見つけるのは困難だと言えます。そういう意味では、このような脆弱性は今後も発見され得ると思われ ます。

9月21日現在、この脆弱性のパッチは出ておらず、この検体はゼロデイ攻撃となっています。修正パッチが出るまでは攻撃対象となるIEの利 用を避ける、怪しいURLを閲覧しないといった対策が必要となります。なお、Microsoftより9月22日にこの脆弱性の修正パッチが提供される 予定とのことです。

 


関連記事

「セキュリティ アドバイザリ (2757760)」:Internet Exploer脆弱性検証結果報告