XP Antivirus: Rogue AV with a custom packer」より
May 30,2008 posted by Nicolas Brulez,Security Researcher

 最近のマルウエアやミスリーディング・アプリケーションは,その大半がパッカーによってコードが難読化されている。こうした迷惑ソフトウエアに使われるパッカーは,既存のものだけではない。検出回避策としてポリモーフィック技術を採用した専用パッカーを使う例もある(関連記事:ITPro Dictionary「ポリモーフィック」)。今後,隔週ペースでこの種の専用パッカーを取り上げ,使われている検出回避の仕組みを解説していく。

 今回はセキュリティ・ソフトウエアをかたる悪質なXP Antivirusを紹介しよう。このソフトは,問題などないパソコンなのにマルウエアが感染しているという偽警告を出す。「除去」を望むユーザーは,49.95ドルの登録料を払うことになる(関連記事:根絶できないミスリーディング・アプリ「XP Antivirus」による被害)。

●解析対象ファイルのヘッダー部

 解析するファイルを受け取ると,筆者は必ずexeファイル編集用のPEエディタで開いてヘッダー部を調べ,そのファイルがパッカーで処理されたものかどうか判断するためのヒントを探す。

 このヘッダー部は,典型的なパック処理されていないファイルのように見える。変わったセクション名や,(リソース・セクションの実行権限やテキスト・セクションの書き込み権限といった)不審なセクション設定は見当たらない。こうしたヘッダーは,解析の手がかりを見付けにくくするように細工されている。ただし,最終セクションの実サイズが実際の該当部分に比べ相当小さい。これは普通でないし,リソース・セクションとしては,なおさら異常だ。このことから,リソースのデータが圧縮されていると考えられる。

●インポート・テーブル

  パックされていないファイルには大抵,かなり多くの関数がインポートされている。ファイル・サイズが大きい場合は特にそうだ。この解析対象のファイルは,4種類のDLLから15個の関数をインポートしていた。

 GUI満載でネットワーク・アクセス機能を備え,ハード・ディスクのスキャンといった作業まで行う実行可能ファイルのサイズが,わずか959Kバイトで,関数を15個しかインポートしておらず,これら以外の関数をすべて実行時に動的ロードするとは考えにくい。

 こうした簡単な確認を二つ行うだけで,ファイルの不審な点を見つけ,次の逆アセンブラ「IDA Pro」を使った解析に移ることができる。

●IDA Proによる静的解析

 解析対象ファイルのコードにざっと目を通すと,処理内容を隠すための目くらましコードと難読化の処理が使われていることがすぐに分かる。使われている関数はそう多くないから,すべての動作を追いかけて分析する作業は大して面倒でない。

 全関数の詳細を説明すると時間がかかりすぎるので,コードの流れを軽く追って,興味深い部分だけにコメントしよう。最初に気づいた点は,ローダーがkernel32.dllのイメージベースを探し出す方法だ。よく知られたやり方だが,少しだけ難読化しようとしていた。プッシュしたESPレジスタをEDIレジスタにポップしてからループを開始する。この処理の開始段階で,ESPレジスタにはkernel32.dllのメモリー上のアドレスが入っており,関数はこれを使う。

 論理シフト命令SHR/SHLを使ってkernel32.dllのアドレスを最も近いページのアドレスに丸め,そのページのdwordデータを読み始める。そして,読み込んだdwordデータがハード・コーディングされたマジック・ナンバー(あらかじめプログラムに書き込まれている数値)に一致するまで,ページの内容を読んでいく。この値はMZマーカーであり,後ろに2バイトのデータが続いている。マジック・ナンバーそのものは,コード内に登場しない。値の比較前に必ずビット・ローテート演算ROLを施したハード・コーディング値を使い,計算で求める。