コーデックがないと偽ってウイルスをダウンロードさせる
職場の同僚が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」だったので、そのほかのスクリプトは入ってなさそうだ。もっとほかに隠し機能があるかもしれないけど。