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

前回は、本ブログにて Internet Explorer(IE)の脆弱性「CVE-2012-1875」を狙う「JS_DLOADER.QOA」について脆弱性の解析情報を紹介しました。

本記事では IE に存在する脆弱性「CVE-2012-1889」(Microsoft のセキュリティアドバイザリ (2719615) )を悪用する「HTML_EXPLOYT.AE」の解析結果を紹介します。


■脆弱性「CVE-2012-1889」の概要
本脆弱性は、Webブラウザとして高いシェアを持つ IE を介して、Microsoft XMLコア サービスの脆弱性が利用されるため、ユーザが実際にこの脆弱性に利用される可能性が高いと推測されます。

また、Microsoft から脆弱性に関する情報と修正プログラム「Fix it」とほぼ同時に攻撃コードと該当する脆弱性を利用する不正プログラムが複数確認されましたため、今後も同様な脆弱性を利用する不正プログラムの増加が予測されます。

本記事では、

  1. 脆弱性「CVE-2012-1889」を利用する攻撃の影響度が高いこと
  2. この脆弱性の再利用される可能性が高いこと

上記2点の理由から、この脆弱性を利用する「HTML_EXPLOYT.AE」の動作に焦点をあてて、解析の詳細を共有して脆弱性「CVE-2012-1889」に対する注意喚起を行うとともに、解決策を提案します。

■「HTML_EXPLOYT.AE」の概要
スパムメールなどに記載されている不正な URL をクリックし、不正 Webサイトに接続した結果、「HTML_EXPLOYT.AE」がユーザの PC に侵入し、実行されます。

侵入後、「HTML_EXPLOYT.AE」は、IE上に Microsoft XML コア サービスを呼び出し、脆弱性「CVE-2012-1889」を利用する攻撃を試みます。

「HTML_EXPLOYT.AE」は、「Data Execution Prevention(データ実行防止、DEP)」を回避する機能がないため、DEP が有効になった IE上では脆弱性攻撃に失敗し、システムエラーを発生させた後、終了します。

IEでは、IE 8以降のバージョンから DEP はデフォルトで有効になっているため、図1 のように脆弱性利用に失敗しますが、IE 7以下のバージョンでは脆弱性を悪用した攻撃に成功し、悪意あるサイトにアクセスした後、「BKDR_POISON.HUQA」をダウンロードおよび実行します。

図1:Internet Explorer 8上で「HTML_EXPLOYT.AE」を実行した際に発生した
エラー画面
図1:Internet Explorer 8上で「HTML_EXPLOYT.AE」を実行した際に発生したエラー画面

「BKDR_POISON.HUQA」は 80番ポートを利用した TCPプロトコルを利用し、不正リモートユーザからコマンド(命令)を受け、コマンドに従った「指定したファイル送信」や「システム情報の送信」などのバックドア活動を行います。

図2:「BKDR_POISON.HUQA」の80番ポートを利用したTCP通信
図2:「BKDR_POISON.HUQA」の80番ポートを利用した TCP通信

IE という多くのユーザを抱えたブラウザにおいて、かつ、攻撃コード公開による攻撃の再利用性が高くなった観点から、今後は DEP を回避する不正プログラムが作成される可能性が高いと想定されるます。なるべく早めの対応を推奨します。

■「HTML_EXPLOYT.AE」の詳細動作
「HTML_EXPLOYT.AE」の特徴的な動作は、以下のとおり大きく 3つとなります。

  • Microsoft XML コアサービス脆弱性利用
  • Heap Spray
  • 「Return-Oriented-Programming(ROP)」の機能なし
  • ○「HTML_EXPLOYT.AE」の動作1:Microsoft XML コアサービス脆弱性利用
    不正プログラム「HTML_EXPLOYT.AE」のコードを見てみましょう。

    「HTML_EXPLOYT.AE」は、今回脆弱性が発見された Microsoft XML コアサービス(msxml3.dll)を使用するため、Classid(ファイル識別子)で Microsoft XML コアサービスを指定したオブジェクト要素を指定します。

    図3:「HTML_EXPLOYT.AE」により指定されたMicrosoft XMLコアサービスの脆弱性攻撃コード
    図3:「HTML_EXPLOYT.AE」によって指定されたMicrosoft XMLコアサービスに存在する脆弱性を利用するコード

    その後、図3 のコードを実行することで初期化されていないメモリ内のオブジェクトをアクセスしようとする脆弱性攻撃が行われます。

    「HTML_EXPLOYT.AE」がMicrosoft XMLコアサービスの脆弱性をどのように利用するか確認するため、「Heap Spray」などを削除して実行します。実行結果は以下の通りとなります。

    図4:「HTML_EXPLOYT.AE」によるMicrosoft XMLコアサービス( msxml3.dll)のエラーコード
    図4:「HTML_EXPLOYT.AE」によるMicrosoft XMLコアサービス( msxml3.dll)のエラーコード

    では、上記のコードが正常に利用された場合、どのようなオブジェクト、仮想関数を呼び出すかを確認します。

    図5:Microsoft XML コアサービスでエラーが発生したコードの正常時の処理コード
    図5:Microsoft XML コアサービスでエラーが発生したコードの正常時の処理コード

    上記の「eax」はオブジェックトへのポイントとして「msxml3!Document::`vftable’」を示し、その後、呼び出される関数は、「msxml3!Document::weakRelease」となります。

    図6:関数「mshtml!CBodyElement::`vftable'」
    図6:関数「mshtml!CBodyElement::`vftable’」

    ○「HTML_EXPLOYT.AE」の動作2:Heap Spray
    不正プログラム「HTML_EXPLOYT.AE」のコードを見てみましょう。

    上記のエラーは指定された範囲よりサイズが大きな文字列をコピーするといったバッファオーバーフローではなく、誤ったオブジェックト参照で起こるエラーであるため、Heap Spray技法を利用し、脆弱性利用を試みます。

    一般的に Heap Spray は、メモリ領域であるHeap(ヒープ)にスプレーするという意味として、新しくヒープ領域を大量に確保し、大量の不正コードを作成します。誤ったオブジェックト参照などの脆弱性が存在する場合、大量に確保した不正コードが存在するヒープ領域へのコード制御を目的とした脆弱性利用の手法を示します。

    「HTML_EXPLOYT.AE」で Heap Spray を行うコードは、以下の通りです。

    図7:「HTML_EXPLOYT.AE」の Heap Spray のコード
    図7:「HTML_EXPLOYT.AE」の Heap Spray のコード

    「HTML_EXPLOYT.AE」によって作成された Heap Spray領域を実際に確認してみます。上記の「HTML_EXPLOYT.AE」の Heap Spray おコードにより作成されたヒープのサイズが 80,000バイトであり、230 のヒープが以下のように確認できます。

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

    そして、そのヒープ領域と、ヒープ領域に作成された不正コードが以下のように確認できます。

    図9:「HTML_EXPLOYT.AE」の Heap Spray によって確保されたヒープ領域、および作成された不正コード
    図9:「HTML_EXPLOYT.AE」の Heap Spray によって確保されたヒープ領域、および作成された不正コード

    ○「HTML_EXPLOYT.AE」の動作3:「Return-Oriented-Programming(ROP)」の機能なし

    「HTML_EXPLOYT.AE」は、脆弱性の利用後、どのように不正コードを実行しているかを確認します。

    図10:「HTML_EXPLOYT.AE」の脆弱性利用による不正コードへの移動
    図10:「HTML_EXPLOYT.AE」の脆弱性利用による不正コードへの移動

    「HTML_EXPLOYT.AE」は、上記のコードが示す通り、ROP機能がなく、ヒープスプレーによって作成した不正コードへの移動を試みます。

    IE 8 以降のバージョンには DEP機能が有効であるため、Heap Spray によって作成した不正コードへの移動に失敗します。

    図11:「HTML_EXPLOYT.AE」の Heap Spray によって作成した領域
    図11:「HTML_EXPLOYT.AE」の Heap Spray によって作成した領域

    IE 8より前のバージョン、または、Internet Explorer8以降のバージョンでもDEP機能が無効である場合、Heap Spray によって作成した不正コードへ移動します。

    図12:「HTML_EXPLOYT.AE」の Heap Spray によって作成した領域への移動
    図12:「HTML_EXPLOYT.AE」の Heap Spray によって作成した領域への移動

    その後、「HTML_EXPLOYT.AE」は、外部の不正なサイトに置かれた不正プログラム「BKDR_POISON.HUQA」をダウンロードし、実行します。

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

    まずは、「運用」の観点から出来る限り迅速に該当するセキュリティパッチ(Fixit)を適用してください。今回の脆弱性に対してご使用になっている IE に影響がない場合でも今後 DEP、「アドレス空間配置のランダム化(ASLR)」を回避する不正プログラムが登場することは容易に推測できますので、迅速な対応をおすすめします。

    しかし、パッチ検証などを行う必要が有るため、パッチ適用が迅速にできないユーザは、「仮想パッチ」などの機能を用いて脆弱性を利用した侵入に対する防御を行うことも有効です。

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

  • 1005061 – Microsoft XML Core Services Remote Code Execution Vulnerability(CVE-2012-1889)
  • また、脆弱性を利用した侵入に成功した場合でも、被害を最小限にと止めるためには、不正な Webサイトへのアクセスの防止とネットワークコンテンツフィルタリングが非常に有効です。

    トレンドマイクロでは、不正な Webサイトへの接続をブロックするWebレピュテーション技術を提供しているほか、組織のネットワークを可視化するソリューションとして「Deep Discovery」を提供しています。