マルウェアの多くは、自身を変化させる機能を持っています。侵入先のコンピュータに自身をコピーするときにセキュリティソフトウェアの目を逃れること、あるいは解読したメモリ領域を実行したり解読したメモリ値を読み取ったりしてマルウェアを解析しようとするエンジニアの試みを阻害することが目的です。今回のブログでは、メモリを共有して自身の姿を変えるトロイの木馬の動作について説明します。
マルウェアのプロセスは、図 1 の赤線のように進みます。
図 1.脅威のプロセスを示すコード
ebx-4 というアドレスは、.data セクションの先頭を示しています。初期状態では、ebx-4 は 0 なので、31h や 32h と比較すると失敗になります。
コードによってアドレス ebx-4 に 31h が書き込まれると、トロイの木馬は自身のファイル名を使って WinExec 関数を実行し、自身を実行します。次に、ExitProcess 関数を使って自身を終了します。実行時には ebx-4 の値が常に 0 なので、プログラムは単に実行と終了を繰り返しているだけのように見えますが、実際には悪質な処理を実行しています。ここが、このマルウェアの巧妙なところです。
ファイル構造
このファイルのサンプルには、以下のような構造の .data セクションがあります。
図 2.ファイルサンプルの構造
Characteristics の rw- d0000040 は異例な構成で、以下のように設定されています。
IMAGE_SCN_MEM_SHARED 設定が行われているのでメモリ値が共有されています。
実際の動作
このマルウェアが初めて実行されたときには、アドレス ebx-4 が 0 のため、コードはこのアドレスに 31h を書き込んで自身を再実行します。再実行されたときには、ExitProcess の実行前なので、このアドレスで 31h を保持しているメモリが共有されます。
図 3.再実行されるとプロセスは異なるルートを進む
新しく実行されたプログラムはこのアドレスに 32h を書き込み、自身を再実行します。新しいプログラムは、このアドレスで 32h を保持しているメモリを共有します。
図 4.プロセスが復号ルーチンに達する
アドレスが 32h なので、プログラムは _decrypt 関数を実行し、暗号化されたコードを復号したうえでアドレス esi にジャンプします。この動作を順に示すと、以下のようになります。
- Windows でファイルがロードされる。
- アドレスはファイルの初期値として 0 をとる。
- 値を 31h に書き換える。
- 自身を実行する。
- Windows で共有メモリを除くファイルイメージがロードされる。元のファイルのディスクイメージでは 0 のまま。
- 値 31h でプログラムが実行される。
- 最初のプロセスを終了する。
- 値を 32h に書き換える。
- 自身を実行する。
- Windows で共有メモリを除くファイルイメージがロードされる。元のファイルのディスクイメージでは 0 のまま。プログラムが復号ルーチンに達し、コンピュータが危殆化する。
- 2 度目に実行されたプロセスを終了する。
図 5. 実行順で示した動作
サンドボックスでのプロセスの動作
攻撃者は、自動の脅威解析システムから悪質な動作を隠そうとしていると考えられます。自動の脅威解析システムを搭載している 8 つの Web サイトにサンプルファイルを送信してみたところ、結果は以下のとおりでした。
- ThreatExpertでは、ファイルの作成、レジストリの改変、予想外のネットワークアクセスが記録されました。この結果からこのサンプルの動作を特定し、マルウェアであると判定しました。
- 3 つの Web サイトでプロセスの実行が記録されましたが、そのほかの異常はありませんでした。
- 残る 4 つの Web サイトでは、何も記録されませんでした。
自動の脅威解析システムは、図 5 の赤い枠線で示したセクションしか監視していないようです。このタイプの特殊コードが自動の解析システムをすり抜けることは、たびたび確認されています。
シマンテックは、このタイプの悪質なコードと手口を引き続き監視していく予定です。疑わしいプログラムは実行しないようにし、オペレーティングシステムとウイルス対策ソフトウェアは最新の状態に保つことをお勧めします。
* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/jaにアクセスしてください。