ExPirO - EPOファイル感染型ウイルス

ファイル感染型ウイルスとは、「calc.exe」や「notepad.exe」などの実行ファイルに寄生する能力を備えたマルウェアのことです。感染したファイルを実行しても、「calc.exe」が感染していることに私たちは気づきません。計算機が正しく動作しているからです。しかし、マルウェアはひそかに不正な活動を行っています。

今回の記事では、Expiroを詳しく見ていきましょう。Expiroは新たなファイル感染型ウイルスではありませんが、形を変えて度々登場するマルウェアです。

Expiroの特徴

通常、ファイル感染型ウイルスはその感染過程でホストファイルのエントリポイントを変更し、ホストファイルに寄生したマルウェア本体に誘導します。マルウェア本体とは不正な活動を行うバイナリコードのことです。

しかし、Expiroはエントリポイントを変更しません。代わりに、ホストのオリジナルコードのいくつかを移動させ、それらをExpiroのコードと置き換えます。このタイプのマルウェアを私たちはEPO(エントリポイント オブスキュアリング)ファイル感染型ウイルスと呼んでいます。

Expiroはホストファイルに新たなセクションを追加し、その新たなセクションにマルウェア本体の大部分を配置します。実行ファイルのセクションでは、特定のファイルのデータ、コード、その他リソースが分かれています(図1参照)。


図1. 感染したファイル内に新たに追加されたセクションのセクションヘッダ情報

追加されたセクションの名前は「.vmp0」です。上の例の場合、仮想サイズは(0x1a6000)1,728,512バイトになっています。感染したファイルのなかには、(0x7d000)512,000バイトの生データのサイズと仮想サイズが同じものもあります。生データのサイズは追加されたセクションの物理的なサイズですが、仮想サイズは実行中のプロセスで割り当てられたメモリです。

仮想アドレス(0x42000)はホストファイルに割り当てられたメモリによりますが、生データへのファイルポインタはホストファイルのもともとのサイズによります。

特有のフラグがオペレーションシステムに対し、このセクションにはExecute、Read、Writeアクセスがあることを伝えています((0xE0000000)。

.vmp0セクションの中身は暗号化されています。Expiroはセクション全体に階層化された復号アルゴリズムを使用し、文字列が必要な場合には要求に応じてシンプルな復号ルーチンを用います。

感染を示す証拠

Expiroは図2に示すように、感染させたファイルのサイズを(0x7d000)512,000バイト増やします。


図2. ホストファイルと感染したファイルのファイルサイズの違い

しかし、皆さんがもともとのファイルサイズを知らない限り、ファイルのサイズが512,000バイト増えているのかどうかを見分けるのは容易ではありません。つまり、皆さんのファイルが感染しているかどうかを見極めるのは難しいということです。

システムがすでに感染しているかどうかを見極める方法として、Process Explorerを使う方法があります。このツールを使えば、Expiroが作成したMutexを見ることができるようになります。

Mutexは特定のプロセスにおいてスレッドを同期させるために使われるものですが、たいていのマルウェアやファイル感染型ウイルスの場合、システムがすでに感染しているかどうかを見極めるための目印として使われます。

もし感染しているファイルがシステム内のサービスの1つだった場合、使われているMutexは「gazavat-svc_28」と「gazavat-svc」になります(図3参照)。感染しているのが通常のファイルの場合、使われているMutexは「kkq-vx-mtx28」と「kkq-vx-mtx1」になります(図4参照)。


図3. 感染しているサービスのMutex


図4.感染している通常ファイルのMutex

まとめ

私たちのコンピュータシステムはファイル感染型ウイルス、トロイの木馬、その他の種類のマルウェアに感染します。これらに対する最良の防御策は安全な形でコンピュータを使用し、システムにウイルス対策製品やその他セキュリティ製品をインストールすることです。そしてもちろん、それらを常にアップデートすることです。

それでは、お気をつけて。