IIJ-SECT

IIJ

 

Security Diary

HOME > Security Diary > SpyEyeボットによるリソースデータの使用

SpyEyeボットによるリソースデータの使用

IIR Vol.13の1.4.2節ではSpyEyeボットの動作概要について説明しましたが、このエントリではIIRに書ききれなかったSpyEyeボットの動作について書かせていただきます。

SpyEyeボットは感染動作の過程で、その内部に保持している合計で5つのリソースデータを使用します。リソース名と対応するデータを以下の図に示します。

SpyEyeボットのリソースデータ

「C+数字」はデータを保持するリソースであることを意味し、C1/C2/C3の3つがあります。C1にはインストール時に収集するコンピュータ名やボットの実行パス、ビルド時に指定したフォルダ名やミューテックス名などが格納されます。C2には各種設定ファイルとプラグインのDLLを含むzipデータをXORキーでエンコードした、いわゆるconfig.binと呼ばれるデータファイルが格納されます。そしてC3にはC2のzipを解凍するために必要なパスワードが入っています。 一方、「SC+数字」はコードを保持するリソースをあらわします。SC1はボットのインストールを目的とした、explorer.exeに行うインジェクションによって実行されるコードの本体になります。SC2はC1のデータを収集するためのコードです。

以上のことを踏まえたうえで、動作概要をIIR版よりも少しだけ詳細に解説します。ボットは実行されるとリソースC1/SC2をロードして、SC2を実行することによってC1にコンピュータ名やボリュームのシリアルナンバー、OSのバージョンなどの端末情報を格納します。次にexplorer.exeにSC1をインジェクションします。蛇足ですが、このインジェクションの手法は、SpyEyeボットのバージョンによっては少し変わった手法を採用しているようです。他のプロセスにインジェクションしたコードを実行する際には、一般的にCreateRemoteThread関数が使われることが多いですが、1.3.45ではNtClose関数にジャンプコードを埋め込むことで、インジェクトしたコードを実行させています。

SpyEyeボットの動作

explorer.exeにインジェクトされたコードは、ボットを「C:\ビルド時の指定フォルダ名」にコピーし、オリジナルを削除します。その後コピーしたボットを起動します。以上で最初のインストール動作は完了します。コピーされたボットは、C3を環境変数にセットし、インラインの実行ファイルをそのPEヘッダを解析してロードした後に、そのエントリポイントをコールします。

インラインのexeのエントリポイントからの実行は、先ほどセットした環境変数からC3を取得しつつ、C2をロードして同じフォルダに保存します。C2はパスワードつきzipのXORエンコードデータになっており、そのパスワード解除にC3が利用されます。この後再びexplorer.exeへインラインの実行ファイルをインジェクションします。

二度目にexplorer.exeにインジェクションされたインラインの実行ファイルのコードは、config.binに含まれているプラグインを起動するとともに、その他のプロセスへさらにインジェクションを行い、最終的にそのインジェクトされたコードが情報の搾取やボットの隠蔽に必要な関数をフックすることになります。

このように、5つのリソースデータはSpyEyeボットの感染動作と密接に関連しており、ロードされたリソースがどういう目的で使われるデータ(もしくはコード)なのかを理解しておくと、解析を楽に進めることができます。ちなみに、なぜSpyEyeの作者はリソースデータを使っているのでしょうか?config.binや端末情報を収集するデータ構造とそれに付随するコードは、頻繁にサイズや構造が変化するため、おそらく作者は本体の実行ファイルの汎用性を保つために、それらを本体から分離したかったのではないでしょうか。

今回は、IIRに書けなかったSpyEyeのリソースデータとそれを使った動作についてご説明しました。SpyEyeの検出方法についてはもう少し書いてみたいことがありますので、機会があれば書かせていただきたいと思います。

-
 
カテゴリー :
セキュリティ事件  
タグ :
Malware  
この記事のURL :
https://sect.iij.ad.jp/d/2011/11/108081.html