コーデックがないと偽ってウイルスをダウンロードさせる


職場の同僚がBitTorrentからウィルスを拾ってきた。ウイルスの種類はこれ。


http://canon-its.jp/product/eset/topics/malware0811.html


WMA/TrojanDownloader.GetCodec.Gen はメディアファイルを改ざんするマルウェアです。PC上で見つかったすべてのオーディオファイルをWMA形式に変換し、ユーザーの誘導先URLを指すフィールドをヘッダに追加します。そして、メディアファイルを再生するにはそのURLからコーデックをダウンロードする必要があるというメッセージを表示します。WMA/TrojanDownloader.GetCodec.Genは、Win32/GetCodec.AなどのGetCodecの亜種による感染を支援するWimad.Nと深い関わり合いを持つダウンローダーです。


とのこと。最近、バイナリエディタと仲良しなので面白そうだと思って。できるところまでやってみた。

まず、WMAファイルの仕様があるかどうかを調べてみた。
うーむ、見つからない。

仕様書そのものは見つからなかったけど、WMAファイルについて調べていると実は、WMAファイルのフォーマットは、ASFファイルフォーマットをベースにしているらしい。

初めて知った。

でもって、ASFのファイルフォーマットはMicrosoftから公開されている。


http://www.microsoft.com/windows/windowsmedia/forpros/format/asfspec.aspx


う、英語だ。つらい。

まぁ、とりあえず概要だけでもと思って読み始めてみる。構造体の羅列。そしてオブジェクトの種類ごとに固定GUIDが振られている。そのGUIDは必ずオブジェクトの先頭に付加されているので、

ファイルをそのGUIDで検索すれば、それ以降が実際のデータの中身ということだ。

今回、ストリームデータそのものは特に関係ないと思ったので、メタデータ的なオブジェクトに絞って、ファイル内をGUIDで検索。......でもあまりにその数が多い。でも、だいぶ読み方がわかってきた。

そこで、外部から何やらダウンロードしてくるという動作から、中にURLを持っているはずだと思って、ファイル内を検索してみる。すると、2つのURLらしきものがヒットした。


1.www.773four.com


2.dudethisishowwedoitallnightlong.2myip.net/


1は実際にあるレコードレーベル。問題なさそうだ。名前からしても2が怪しい。
"dude this is how we do it all night long"だって。


なので、この2のURLの記述がある周辺を当たってみた。GUIDでオブジェクトを指定していると言ったが、仕様書と見比べながら、よーく見てみると、URLの記述のちょっと上にそのGUIDが存在する。


これは、仕様書によると、「ASF_Script_Command_Object」と言って、WMAファイルに埋め込めるスクリプトの情報が含まれているらしい。これはいよいよ怪しい。

ちょうどここからが、コマンド文字列。

「URLANDEXIT」?なんのこっちゃ。

Webで、WMAスクリプト+URLANDEXITで検索してみたところ、山ほどヒットした。ほとんどがマルウェア関連。
けっこうこのメディアファイルを使用したマルウェアダウンローダの解析をしている人はいっぱいいた。


http://www.docstoc.com/docs/3715914/sc-sep-08


どうやら、URLANDEXITコマンドはMediaPlayerへダウンロードを行うように発行するコマンドらしい。これは、いささかやばいと思ったのか、マイクロソフトがこのコマンドの有効/無効を切り替えるパラメータを外出し(レジストリ)にしてた。


http://support.microsoft.com/kb/828026

URLAndExitCommandsEnabled : URLAndExit スクリプト コマンドを有効にするかどうかを設定します。デフォルト値は 1 (有効) です。


どうも、MediaPlayerが不明のコーディックをダウンロードする処理を不正に利用しているのではなく、さも、そのように見せかけて、単にWMAスクリプトを実行しているだけのような気がする。

そもそも、WMAスクリプトを埋め込めること自体知らんかった。知っていれば、Mediaファイルエディタなんかで開いてみれば一発でわかったかも。

ちなみに、ASF_Script_Command_Objectはひとつしか存在できず、その中に複数のコマンドを入れるらしい。今回の場合は、Commnads Countというパラメータの値が「1」だったので、そのほかのスクリプトは入ってなさそうだ。もっとほかに隠し機能があるかもしれないけど。