McAfee Avert Labs Blog
W32/Xpaj: Know Your Polymorphic Enemy」より
September 21,2009 Posted by Vitaly Zaytsev

 近ごろのウイルス対策ソフトはさまざまな技術を採用しているため,割と簡単にマルウエアを処理できる。適切なエミュレータ方式のスキャン・エンジンを使えば,エントリ・ポイント難読化(EPO)という手口を使うものも含めて,大半の(攻撃用コードを暗号化する)ポリモーフィック型と(攻撃用コードを変化させる)メタモーフィック型のマルウエアに対応可能だ(関連記事:ITPro Dictionary「ポリモーフィック」/ウイルス作者と対策ソフトのいたちごっこは終わらない)。ところが,「W32/Zmist」(別名「Mistfall」)のようにロード遅延とランダムなコード・ブロック挿入を行うマルウエアだと,コード・エミュレータは最適な対策といえない。我々は最近,活発に感染を広げている「W32/Xpaj」の新たな亜種を見つけた。この亜種は,よく知られている検出回避策を使っているのだが,実際のウイルス検査ではなかなか発見できない。

 W32/Xpajの新しい亜種は,コード・ブロックをランダムに挿入する方法でファイルに感染する。その際,ファイル本来のエントリ・ポイントは変えない。その代わり,異なる機能を持つコード・ブロックをいくつか作り,感染ファイルのコード・セクション全体のランダムな場所に書き込む。この感染方法はW32/Zmistと似ているが,W32/Xpajはコード挿入でなくコード置換を行う。

 コードの復号は,無条件ジャンプ命令でつながった多くのコード・ブロックで処理する。復号モジュールが動き出すと,制御権を握っていろいろな作業を実行する。

(1)感染アプリケーションの元々の状態を保存し,W32/Xpajの使う全レジスタの値を記録しておく

(2)W32/Xpaj本体の置かれているメモリーの保護フラグを変更する

(3)W32/Xpaj本体を復号する

(4)復号済みのW32/Xpaj本体へジャンプする(ほかの処理も行う)

 各作業は,個別のコード・ブロックや,組み合わされた一つの大きなブロックで行われる。

 復号処理が終わると,制御権は復号モジュールと通常異なるセクションにあるW32/Xpaj本体へ戻る。ここでW32/Xpajの作者は,相対ジャンプ命令でなくレジスタを使うジャンプ命令を選んだ。レジスタ・ベースのジャンプ処理を採用し,厳重に暗号化した本体コードや関数横取りといった手法を組み合わせたことで,この新たな亜種は対策しにくくなった。

 W32/Xpajは,感染処理中に作ったコード・ブロックのいずれかの先頭を指す「call」命令を大量に探し出して置換し,少なくとも1回は確実に実行される環境を整える。

 ポリモーフィック・コード・ブロックの書き込む場所に規則性がないため,解析するサンプルによってはコード・エミュレータがW32/Xpajのコードにたどり着けない。つまり,W32/Xpajの仕掛けたコードを全部は見つけられず,感染ファイルを見逃す可能性がある。このようなサンプルの存在は,一部のウイルス対策ソフト・ベンダーにとって予想外の脅威だろう。その一方で,W32/Xpajが制御権を獲得できない場合もある。例えば,実際に出回っている以下のサンプルがそうだ。

・4843998e3564ac1a1e137149bc3ce28e
・8e4260d0a29c0133bad3bc0e39057456
・db4fff8a4a21e9c824cde3ebd151fbf2

 W32/Xpajは,本体の復号中に何百万回もの繰り返し処理を生成することがある。動的コード変換にきちんと対応していないコード・エミュレータは,このような処理で失敗しかねない。W32/Xpajは,自分自身を感染ファイルと一体化させ,プログラム制御フローの構成要素になる。W32/Xpajが復号モジュールと置き換えた元々の関数は,エンコードしてW32/Xpaj本体と同じセクションに保存する。

 W32/Xpajのこの亜種は,本体の入ったセクションの実効サイズが150Kバイト増えた。強力な難読化が施してあり,遠隔サーバーから新たな命令を受け取る機能も備えている。

・tooratios.com(82.98.235.66)
・abdulahuy.com(82.98.235.66)

 ベルギーでホスティングされている上記サーバーは現在も機能しており,以下のファイルを使って命令を送っている。

・hxxp://abdulahuy.com/{blocked}/stamm.dat

 興味深いことにこの作者は,W32/Xpajの活動を監視するためにログ記録機能を組み込んでいた。W32/Xpajに感染したファイルは,活動報告と感染パソコンの情報(OSのバージョン,適用されているサービス・パック,IPアドレスなど)を上記サーバーに送信する。

os=00000005.00000001.02000B28 & amp;cm=18B51294&adn=A120BB0F & amp;knv=00000012 & amp;hdd=002F606E & amp;cid=0000000C & amp;vvr=00000001

 現在ウイルス対策ソフト・ベンダーの多くは,このW32/Xpajの亜種を検出できていない(オンライン・セキュリティ検査サービス「VirusTotal」の結果は以下の通り)。


Copyrights (C) 2009 McAfee, Inc. All rights reserved.
本記事の内容は執筆時点のものであり,含まれている情報やリンクの正確性,完全性,妥当性について保証するものではありません。
◆この記事は,マカフィーの許可を得て,米国のセキュリティ・ラボであるMcAfee Avert Labsの研究員が執筆するブログMcAfee Avert Labs Blogの記事を抜粋して日本語化したものです。オリジナルの記事は,「W32/Xpaj: Know Your Polymorphic Enemy」でお読みいただけます。