Analysis of a Win32.Delf Variant」より
April 3,2008 posted by Joren McReynolds, Security Researcher

 GoogleのSMTPサーバーを参照したり,同サーバーと通信したりするマルウエアのサンプルはかなりの数にのぼっている。当記事では,これらのサンプルの一つを詳しく分析し,その過程でリバース・エンジニアリングと情報収集の方法をいくつか解説しよう。同時に,このウイルスの特徴と影響について説明したい。記事を最後まで読めば,マルウエアがSMTPを参照する理由が明らかとなり,さらに掲載したスクリーンショットからその目的が分かるだろう。

静的分析

 まず,今回の実行可能ファイルが圧縮されているのか,あるいは保護されているのかを確認した。実行可能ファイルを解析ツール「PEiD」に読み込んだところ,「Borland Delphi 6.0 - 7.0」と表示された。このシグネチャが偽物でない限り(これについては別の投稿記事で説明した),直ちに分析に取りかかれる。Delphiアプリケーションの優れた点の一つは,静的な逆コンパイルと分析が可能なことだ。逆コンパイラは,DaFixer[TMG]の「DeDe」またはGPcHの「DE Decompiler」が使用できる。通常はDeDeを使うため,今回は実験的な意味でDE Decompilerを選んだ。DE DecompilerでWin32.Delfの亜種を開くと,以下が表示される。



[画像のクリックで拡大表示]

 図1の画面をざっと見るだけで,かなりの情報を入手したことになる。赤で囲んだ部分から,使用言語をDelphi v7に絞り込める。プログラムの名前が最初は「WormList」であったことも分かる。通常,識別子はプログラムの中身を表すので,今回のワームには何らかのリストが含まれていると考えるのが妥当だ。画面の左側にはプロシージャがいくつかあり,ここにも識別子が記載されている。これらの内容から,このマルウエアがコンピュータ名を取得し,ファイルを削除し,インターネットの接続を確認し,FormCreateプロシージャで「何らかの処理」を行うと考えるのが極めて自然だろう。さらに特筆すべきは,スペイン語(NameComputador)が使用されている点で,作者や攻撃対象を特定するヒントとなる。FormCreateプロシージャをダブルクリックすると,該当するアセンブリ・コードと興味をそそられるような情報が表示される。

 図2の画面から,GoogleのSMTPサーバーに対する参照や,テキスト・ファイル「msnlist.txt」への参照といった興味深い情報がいくつか判明した。既に分かっている情報と合わせると,今回のワームが米マイクロソフトの「MSN」をターゲットにした「MSNワーム」で,このmsnlist.txtファイルからコンタクト(連絡先情報)を取得/保管している可能性があると結論付けることができる。プロシージャとコードにも目を通すと,以下の画面に遭遇する。



[画像のクリックで拡大表示]

 上記画面の「TldSMTP」を簡単に検索してみると,「Indy Sockets」というSMTP/POP3/NNTP/HTTPプロトコル対応インターネット・コンポーネントの一部であることが分かった。これで,このワームの通信手段が明らかになった。今回の事例によって,静的分析が動的分析と行動分析の補完になることが理解できたのではないだろうか。

動的分析

 静的分析でいくつかの確固たる証拠が示された場合でも,必ず動的分析も行って推定を確認するほか,その他の機能を暴く必要がある。図1を参照すれば,プロシージャのアドレスをさしあたってのブレーク・ポイントに使用できることが分かる。実行可能ファイルをデバッガ「OllyDbg」に読み込み,当該アドレスにブレーク・ポイントを設定して実行してみる。最初に止まるのはFormCreate()の開始部分で,2回目に止まるのはInternetGetConnectedStateを呼び出すだけのIsConnected()だ。インターネットに接続しない環境で分析を続けたいなら,InternetGetConnectedStateの戻り値を変える(有効な値については,米マイクロソフトの開発者向けポータル・サイト「MSDN」を参照のこと)。

 往々にして,静的分析で物事が判明することはない。ここで,動的分析のテクニックを紹介するために,静的分析を通じて発見した「このマルウエアはMSNがターゲット」という事実は無視しよう。万一,OllyDbgで再実行したとしても,(Messengerをインストールしていない場合,または現在サインインしていない場合)例外を起こし,プロセスが終了する。このマルウエアがMessengerを検索,あるいは活用しようと試みていることがどうやって分かるだろうか。次の図を見てほしい。



[画像のクリックで拡大表示]

 EAXは,例外とプロセス終了を起こす関数呼び出しの直前に「CoMessenger」を参照している。CoMessengerをざっとオンライン検索してみると,Delphiで使うWindows/MSN Messengerライブラリであることが分かる。したがって,この呼び出しは「Messenger := MessengerAPI_TLB.CoMessenger.Create」に相当する。Messengerをインストールしてこの場所までのデバッグを再び行うと,この関数呼び出しの必要性が改めて確認できる。図中の2番目に囲んだ部分が,ファイル「Msgsc」のどこかに移動する呼び出しを意味しているからだ。OllyDbgでAlt+Eを押して「Executable Modules」ウィンドウを表示すると,これがMessengerアプリケーションの使用するDLLの一つ「C:\Program Files\Messenger\Msgsc.dll」であると判明する。

 コードを先に進むと,Msgsc.dllに対してさらに多くの呼び出しが行われ,友人の電子メール・アドレスがスタックに格納される始める。CreateFileにブレークポイントを設定してみると,msnlist.txtがマルウエアと同じディレクトリに作られ,このファイルにこれらの電子メール・アドレスが格納されることを確認できる。ステップ実行すると,「Lista MSN (」を参照していることにも気付くはずだ。さらにステップ実行すると,盗まれた連絡先情報の数がこの文字列に連結されていることが分かる。これらの盗まれた連絡先は,後でマルウエア作者が情報を入手できるアドレスに送信される。。マルウエアの成果を確認するには,バイナリ形式で保存されているGmailのログイン情報を使用し,作者の受信トレイをのぞけばよい。



[画像のクリックで拡大表示]

 ぼかした部分は感染したホストのコンピュータ名であり,カッコ内の数字は,被害者の連絡先リストから盗まれた電子メール・アドレスの数を示す。さらに,それぞれの電子メールには添付ファイルとしてmsnlist.txtが含まれており,実際に盗まれた電子メール・アドレスが記載されている。

結論

 マルウエアの作者は,開発期間を短縮するため,常にコードやコンポーネントを借用するものだ。そこで,こうしたコンポーネントを見つけ出し,どのように利用されているか把握することが重要だ。コードに含まれる文字列を検索してみるという極めて単純な行為が,たくさんの有益な結果を生み出すと同時に,より深い理解につながる。



Copyrights (C) 2008 Websense, Inc. All rights reserved.

本記事の内容は執筆時点のものであり,含まれている情報やリンクの正確性,完全性,妥当性について保証するものではありません。
◆この記事は,ウェブセンスの許可を得て,米国のセキュリティ・ラボの研究員が執筆するブログWebsense Security Labs Blogの記事を抜粋して日本語化したものです。オリジナルの記事は,Analysis of a Win32.Delf Variantでお読みいただけます。