Video Screencast Help
Security Response

W32.Changeup のポリモーフィックエンジンについて

Created: 28 Jul 2010 01:47:41 GMT • Translations available: English
Takayoshi Nakayama's picture
0 0 Votes
Login to vote

W32.Changeup は Visual Basic で書かれたポリモーフィックワームです。ポリモーフィックワームは数多く存在しますが、Visual Basic で書かれたポリモーフィックワームは、とても稀です。今回は、W32.Changeup がどのようにポリモーフィックエンジンを実装しているのかを解析しました。

まず、このワームが実行された時、まずは自身のあるフォームから LinkTopic を取得します。この LinkTopic に W32.Changeup が利用するフォーム名やモジュール名のベースとなる文字列が記録されていて、感染する度にこの文字列がランダムに変化します。
次にこの LinkTopic の文字列に “x” を足した文字列を自分の自身のファイルの中から探します。この文字列が見つかったアドレスの次のバイトの位置に 2525 バイトの暗号化データが置かれています。バイナリのイメージは以下のようになります。ハイライトされている部分が LinkTopic に設定されている文字列です。

この領域は元々画像が収められているべき領域なのですが、実際には画像ではなく、このワームが利用する文字列を RC4 で暗号化したデータが収められています。この画像は非表示に設定されたフォームの中にあり、実際に画像として利用されることはありません。
 
このワームが次に行うことは、この領域を暗号解除することです。この領域には、このワームが利用する Windows API の関数名などもこの領域に格納されていて、この領域の暗号が解かれるまで、このワームは限られた Windows API のみを利用して動作します。
 
一つ興味深いことは、この領域に含まれる文字列から文字を細切れに集めてきて、接続先の URL を動的に作成していることです。接続先のホストを隠すための細工だと思われます。具体的には以下の図に示すようなコードが使われています。

画像領域の暗号が解かれた後は、このワームに実装されている以下のような悪意のあるコードが実行されます。

  • 自分自身をシステムにコピーする
  • 自分自身を起動するためのレジストリキーを作成する
  • リムーバブルディスクやネットワーク共有に自分自身をコピーする
  • 上記で示されているホストからのファイルのダウンロードと実行を行う

また、このワームは自分自身をコピーする際に形を変化させます。ファイルサイズは変わりませんが MD5 などのファイルのハッシュ値が変化します。具体的に以下のようなことが行われます。

  • 自分自身をメモリー内に読み込む
  • LinkTopic に設定するランダムな 8 文字のアルファベットを生成する
  • LinkTopic をメモリー内で置き換える。この時、モジュール名やフォーム名も同時に置き換わります。
  • リソース領域の製品バージョン、ファイルバージョン、内部名も書き換えます。
  • 画像領域を新しい鍵で再度暗号化します。

また、RC4 暗号を解くための鍵には、LinkTopic の文字列が使われていますので、この文字列が変化するとことに伴って、画像領域も再度暗号化する必要が出てきます。感染する度に、毎回、異なる鍵で暗号化が施されますので、この領域のバイナリーデーターが毎回変化します。
 
特筆すべきは、何よりもこのプログラムが Visual Basic で書かれていることです。Visual Basic で書かれたウィルスの多くはトロイの木馬的なものが多いですが、その中にポリモーフィックワームが混ざっていても、ポリモーフィックであることが見落とされてしまう可能性があります。ある意味でのポリモーフィックワームを Visual Basic でも作成できるということを、私たちは今後も注意する必要があります。