IEの脆弱性「CVE-2012-1875」を狙う「JS_DLOADER.QOA」を徹底解析 - テクニカルレポート

これまで、本ブログを通じてApacheFirefox の脆弱性の解析情報を紹介してきました。

本記事では 2012年6月に Microsoft から修正プログラムが提供された Internet Explorer(IE)の脆弱性「MS12-037CVE-2012-1875)」を悪用する「JS_DLOADER.QOA」の解析結果を紹介します。


■概要:「MS12-037(CVE-2012-1875)」
今回紹介する「JS_DLOADER.QOA」が利用する脆弱性「CVE-2012-1875」は、Microsoft から 2012年6月13日(日本時間)に修正プログラムがリリースされており、それと同時に当該の脆弱性を利用する攻撃コードも公開されています。

Microsoft から脆弱性に関する情報と修正プログラムがリリースされた時点で攻撃コードが公開されたこと、および該当の脆弱性を利用する不正プログラムが発見されているケースはそれほど多いことではありません。また、脆弱性「CVE-2012-1875」は Windows がインストールされているほとんどの PC に搭載されている IE に潜在しているため、この脆弱性が悪用された場合、被害の影響範囲は非常に大きいものになると推測されます。

本記事では「JS_DLOADER.QOA」の解析結果を共有することで脆弱性「CVE-2012-1875」に対する注意喚起を行うとともに、解決策を提案します。

■「JS_DLOADER.QOA」の動作1:動作環境(OS、言語)確認
「JS_DLOADER.QOA」が行う特徴的な動作は大きく 3つ、「動作環境(OS、言語)確認」、「Heap Spray」、「ROP( Return-Oriented Programmin」です。

不正プログラム「JS_DLOADER.QOA」のコードを見てみましょう。
「JS_DLOADER.QOA」は、Java Script で記載されています。文書ファイルの脆弱性を利用する不正プログラムとは異なり、攻撃対象の OSバージョン、使用言語に関わる情報をスクリプトにより、柔軟に収得しています。

表1 が「JS_DLOADER.QOA」によって確認される OSバージョン, 使用(指定)言語です。

OSバージョン 言語
Windows XP、Windows Server 2003、Windows Vista、Windows 7 English(en)、Chinese(zh)、French(fr)、German(de)、Japanese(ja)、Portuguese(pt)、Korean(ko)、Russian(ru)

図1:「JS_DLOADER.QOA」のOSバージョン確認関数
図1:「JS_DLOADER.QOA」のOSバージョン確認関数

図2:「JS_DLOADER.QOA」の使用(設定)言語確認関数
図2:「JS_DLOADER.QOA」の使用(設定)言語確認関数

■「JS_DLOADER.QOA」の動作2:Heap Spray
「JS_DLOADER.QOA」は脆弱性「CVE-2012-1875)を利用した後、シェルコード(Shellcode)を実行させるため、「Heap Spray」記法を利用しています。

図3:「JS_DLOADER.QOA」の Heap Spray 一部コード
図3:「JS_DLOADER.QOA」の Heap Spray 一部コード

■「JS_DLOADER.QOA」の動作3:「Return-Oriented Programming(ROP)」記法
脆弱性「CVE-2012-1875」の利用に成功しても、対象アプリケーションである IE8 などは「Data Execution Prevention(DEP)」が設定されており、上記のように指定した「Heap Spray」に指定したヒープ(Heap)への移動(Jump)はできません。

図4:Process ExplorerによるIE 8のDEP 設定情報(DEP-ON)
図4:Process ExplorerによるIE 8のDEP 設定情報(DEP-ON)

そのため、「JS_DLOADER.QOA」は ROP記法を利用しています。

まずは、OS のバージョンや使用言語別に違うメモリ番地にロードされているモジュールを利用するため、スクリプトを利用し、前述のとおり動作環境(OS、言語)確認しました。その後、確認した環境情報に基づいて以下の ROP のコードを生成しています。

図5:「JS_DLOADER.QOA」の ROPコード
図5:「JS_DLOADER.QOA」の ROPコード

次に、「JS_DLOADER.QOA」を動作させ、上記のスクリプトはどの様に実行されるかを確認してみましょう。

■「JS_DLOADER.QOA」の動作詳細
「JS_DLOADER.QOA」のコードは複雑であり、Heap Spray などを削除し、どのように脆弱性が利用されるかを確認してみます。実行結果は以下の通りです。

図6:「JS_DLOADER.QOA」が利用する脆弱性コード
図6:「JS_DLOADER.QOA」が利用する脆弱性コード

上記のecxはオブジェックトへのポイントとして「mshtml!CBodyElement::`vftable’」であり、以下の仮想関数(Virtual Function)を示しています。

図7:「mshtml!CBodyElement::`vftable'」
図7:「mshtml!CBodyElement::`vftable’」

そして、エラーが発生した edx は [eax+70h] を示しており、正常な動作としては「mshtml!CElement::SecurityContext」を示していますが、脆弱性「CVE-2012-1875」により、誤った番地を示し、エラーが発生しています。

今回は、「JS_DLOADER.QOA」のコードをそのままを利用し、どの様に脆弱性が悪用されてしまうかを見てみましょう。

図8:「CCollectionCache::GetAtomFromName関数」
図8:「CCollectionCache::GetAtomFromName関数」

図9:「CElement::GetAtomTable関数」
図9:「CElement::GetAtomTable関数」

図10:「mshtml!CElement::Doc関数」
図10:「mshtml!CElement::Doc関数」

次に、どのようにメモリに Heap Spray が行われているか見てみます。

図11:上記「JS_DLOADER.QOA」の Heap Spray によって確保されたヒープ領域
図11:上記「JS_DLOADER.QOA」の Heap Spray によって確保されたヒープ領域

「JS_DLOADER.QOA」は細工されたスクリプトを利用し、すでに削除されたオブジェクトを参照することで脆弱性「CVE-2012-1875」の利用に成功し、大量に確保したヒープ領域にHeap Sprayで挿入したコード(Padding+ROP+Shellcode+Padding)を実行させます。

では、「JS_DLOADER.QOA」が脆弱性「CVE-2012-1875」を利用する方法は確認できたが、どのように IE8 など DEP 設定を回避しているのでしょうか。

DEP は実行可能ではない領域上でコード実行を防止する役割があります。「JS_DLOADER.QOA」が「CVE-2012-1875」脆弱性を利用して Heap Spray されたヒープ領域には実行権限がなく、RW(読み込み/書き込み)権限しかありません。

図12:上記「JS_DLOADER.QOA」の Heap Spray によって確保されたヒープ領域の権限
図12:上記「JS_DLOADER.QOA」の Heap Spray によって確保されたヒープ領域の権限

DEP 回避方法は既に様々な方法が紹介されていますが、「JS_DLOADER.QOA」は VirtualAlloc にコードを制御させ、「flprotect」引数に「0x40(実行と読み込みと書き込みを許可)」することによって、Heap Spray で確保したヒープ領域の属性を変更しています。

図13:「JS_DLOADER.QOA」の DEP 回避のための ROPコード
図13:「JS_DLOADER.QOA」の DEP 回避のための ROPコード

図14:「JS_DLOADER.QOA」の DEP 回避コードにより、実行可能となったヒープ領域属性
図14:「JS_DLOADER.QOA」の DEP 回避コードにより、実行可能となったヒープ領域属性

その後、call esp により、実行可能となったヒープ領域に移動します。

図15:「JS_DLOADER.QOA」の実行可能となったヒープ領域への移動コード
図15:「JS_DLOADER.QOA」の実行可能となったヒープ領域への移動コード

その後、「JS_DLOADER.QOA」のシェルコード(Shellcode)が実行され、外部の不正なサイトに置かれた画像(拡張子 JPG)ファイルを装った実行イメージ「BKDR_AGENT.BCSG」を “%temp%” フォルダにダウンロード後実行し、その後削除します。

図16:「JS_DLOADER.QOA」の不正プログラムダウンロードコード
図16:「JS_DLOADER.QOA」の不正プログラムダウンロードコード

■本脆弱性に対するトレンドマイクロからの対策およびソリューションのご提案
このような脆弱性に対してどのように対応すればよいのでしょうか。

まず、特定アプリケーションの脆弱性の存在が確認された場合、システム上に該当する脆弱性が利用されるアプリケーションがインストールされているかどうか、および脆弱性が利用された場合の影響度を考え、優先度に従った対策を講じましょう。

今回紹介した脆弱性は Internet Explorer の脆弱性を利用しており、かつ利用された場合リモートコードが実行されるため、影響度が高いと想定されます。こういった場合は早急な対策の実施は必須と言えます。

セキュリティ対策は様々な解決策、方法が公開されていますが、今回は「運用・製品・ひと(人)」の観点から解決策を考慮してみます。

まずは、「運用」の観点から出来る限り迅速に該当するセキュリティパッチを適用してください。セキュリティ対策プロセスに応じたパッチ適用を行うことは脆弱性を防ぐための最良な選択であります。

次に、「製品」の観点からセキュリティパッチの適用のための検証などで早期には難しい場合、「仮想パッチ」などの製品機能を用いて脆弱性を利用した侵入防御を行うことも有効です。

トレンドマイクロの製品であれば、サーバ向け総合セキュリティ製品「Trend Micro Deep Security」および、「Trend Micro 脆弱性対策オプション」を利用するユーザは、以下のフィルタを適用することにより、上記の脆弱性を利用する攻撃からシステムを防御することが可能です。

  • 1005051 – Internet Explorer Same ID Property Remote Code Execution Vulnerability(CVE-2012-1875)
  • また、脆弱性を利用した侵入に成功した場合でも、「製品」の観点から被害を最小限に留めるためには、ネットワークコンテンツフィルタリングが有効と言えます。

    「JS_DLOADER.QOA」は脆弱性を利用した侵入に成功した後、不正ウェブサイトに置かれている画像ファイルを装った実行イメージ「BKDR_AGENT.BCSG」のダウンロードを試みます。

    もし、プロキシサーバ、ファイアウォールが使用されたとしても 80番ポートを利用した HTTP通信により、画像ファイルを装った実行イメージをダウンロードしているため、完全に防御することは難しいと考えられます。

    トレンドマイクロのネットワーク監視ソリューション製品「Deep Discovery」では、画像ファイルに偽装した不正プログラムのダウンロード行為を「疑わしい振る舞い」として検知することが可能です。

    最後に、「人」の観点からいくら素晴らしい製品、および運用プロセスが決まっていても各個人のセキュリティ意識が低い場合、その組織のセキュリティレベルは当然低くなることは容易に想定できます。

    解析者である私の視点では、各個人、その組織が「脅威」を正しく理解した上で適切な対策を行うことが一番重要であると考えています。

    「脅威」に関して、数百・数千の不正プログラムを解析してきた立場から言えることは、不正プログラム、および脆弱性を悪用した攻撃に成功した場合、バックドア型不正プログラム、スパイウェアなどを順次に作成、ダウンロードさせる多段階攻撃の目的は、感染端末内の情報や金銭詐取です。

    すなわち、コンピュータ(サーバ)内部に外部に漏えいさせたくないデジタル情報、たとえば設計図、新規プロジェクト、ソースコードなどの機密情報、個人情報も窃取されるデジタル情報の対象になります。

    各個人としては、不審な Webサイトへアクセスせず、身元不明な送信者からの Eメールを開封しないといった今までよく知られた一般的なセキュリティ対策を講じることも、脆弱性を悪用した攻撃への対策として大きな効果を発揮します。

    セキュリティ管理者としては、パッチメンテナンスに非常に大きなリソース、時間などがかかりますが、システム内の情報資産を正しく把握し、守るべき情報資産の優先度を決めた後、新しい脆弱性が発見された場合、優先度に応じて対策を講じることをお勧めします。

    【更新情報】

    2012/06/25 11:10 「JS_DLOADER.QOA」は、OPR 9.205.80(公開日:2012年06月20日)より、「JS_DLOADER.SMGA」へ名称が変更になりました。