Trojan.Zbot.B の設定ファイルについて
同僚の板橋一正氏がブログに書いているように、TrojanZbot.B(別名 Zeus ボットネット)は、システム時間を基にランダムなドメイン名を生成し、そのドメインを含んだ URL からファイルをダウンロードします。
TrojanZbot.B は、/news/?s=[数値] というパスを使ってそのドメインにアクセスし、設定ファイルをダウンロードします。設定ファイルはデジタル署名されており、次のような内容になっています。
設定ファイルは暗号化されています。このファイルを復号化するには、RC4 を適用して、先頭から末尾までバイト単位で各先行バイトとの排他的論理和(XOR)を取る必要があります。復号化と難読化の解除を行うと、設定ファイルの内容が次のように、もう少しよくわかるようになります。
復号化と難読化の解除を行っても、まだ雑然とした状態になっています。完全に復元できた箇所もありますが、途切れ途切れの文字列も多く、欠けている部分もたくさんあります。実際のところ、設定ファイルは連続したテキストファイルではなく、構造化されたバイナリデータファイルです。ファイル内の各レコードには、ヘッダーが 1 つと複数の設定ブロックがあります。
ファイルオフセット 14h のダブルワード値 8FF9h には、ブロックのサイズが指定されていますが、このサンプルの実際のファイルサイズは 90FDh です。104h バイトの差は、末尾のデジタル署名によるものと考えられます。このうち、4 バイト分はデジタル署名されたメッセージのダイジェストの長さを示し、そのダイジェスト自体に 100h バイトが使われます。
最初の設定ブロックは、ファイルオフセット 30h から始まります。各ブロックには、最低 10h バイトがあります。ブロックの長さは、ブロックのダブルワード値 + 0Ch に 10h を足して計算されます。上記の図では、わかりやすくするためにブロックの範囲を赤で囲みました。圧縮ブロックと非圧縮ブロックの違いは、各ブロックの 4 番目のバイトにある最下位ビット(LSB)です。ファイルオフセット 1A9h から始まるブロックは、最下位ビットにもとづいて圧縮されています。Trojan.Zbot.B は、バイナリコマンドだけでなくテキストも受け付けます。この設定ファイルは、Web ブラウザの監視とブラウザへのインジェクションに使用されるバイナリファイルです。以下では、この設定ファイルに含まれているコマンドについて説明します。
各設定ブロックには、レコードが 1 つ以上含まれている可能性があります。Trojan.Zbot.B はブロックを読み取り、ブロックのレコードで定義されたコマンドを実行します。これは、設定ファイルの先頭から末尾に到達するまでループして実行されます。
各レコードは次の形を取っています。
ダブルワード: レコードサイズ – ワード: コマンド – 可変データ長
次に例を挙げます。
- 0000: ワード(文字列 ID)が後に続きます。文字列の定義(監視対象の URL)
- 0001: URL の定義
- 0004: HTML インジェクションの条件
- 0008: インジェクトされた HTML の本文
- 0010: HTML データキャプチャの条件
- 0020: キャプチャされた HTML データのテキスト表現
次に、コマンド 0000 のサンプルを示します。
レコードには、複数の文字列が含まれていることもあります。シマンテックでダウンロードした設定ファイルでは、全部で 47 個のレコードが見つかりました。レコードに含まれる URL 文字列には、金融機関や有名な Web サイトのものもありました。つまり、このトロイの木馬では、それらの Web サイトが監視および収集の対象になるということです。
私の次回のブログの記事では、設定ファイルに含まれる別のコマンドを取り上げる予定です。このコマンドは、認証フォームに HTML コードをインジェクトするようトロイの木馬に指示し、無防備なユーザーのデータを収集するというものです。
技術面でサポートしてくれた Andrea Lelli 氏に感謝します。
* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/ja にアクセスしてください。