W32.Flamer は巧妙に作られたプラットフォームであり、それを構成するコンポーネントの数を把握するのは、容易なことではありません。Web サーバーやデータベースサーバー、SSH 通信まで備えているうえに、スクリプトインタープリタも用意されているので、攻撃者は各種のスクリプトを介して機能強化版を簡単に配備できるからです。これらのスクリプトは、いわば「アプリ」に分割されているようなもので、しかも攻撃者は「アプリストア」に相当する仕組みも持ち、そこから悪質な機能を持つ新しいアプリを取得することができます。
こうしたコンポーネントのすべてがどのように連携しているのかを理解するために、mssecmgr.ocx というファイルから見てみましょう。これが W32.Flamer のメインファイルであり、感染したコンピュータで実行される脅威の最初のコンポーネントです。mssecmgr.ocx ファイルには、大量のサブコンポーネントが含まれています。そのサブコンポーネントの内訳と、このファイルにどのように格納されているかを次の図 1 に示します。
図 1: W32.Flamer のコンポーネントの概要
さまざまなスクリプトも含めてほとんどのサブコンポーネントは、mssecmgr.ocx に埋め込まれている暗号化された大きなリソースに格納されています。このリソースには各項目をリストしたテーブルがあり、そのテーブルがデータを取得するための索引として機能します。この点は標準のファイルシステムの動作とも似ています。リソーステーブルには、スクリプトが含まれるほか、スタンドアロンの実行可能 DLL ファイルもいくつか含まれています。advnetcfg.ocx、nteps32.ocx、boot32drv.sys、msglu32.ocx、soapr32.ocs、jimmy.dll、00006411.dll などがそれに該当します。
このリソースセクションの外に、HTTP サーバー、SOCKS プロキシ、SSH、SQL データベース、そして当然ながら Lua インタープリタを実装したコードが存在します。Lua は、他のアプリケーションに埋め込まれることを前提として設計された軽量のスクリプト言語です。Lua を使うとアプリケーションの機能を簡単に拡張することができ、埋め込み先のプログラムの機能を利用するスクリプトも作成できます。Lua を使うことで、攻撃者が W32.Flamer の新機能すなわち「アプリ」を開発するときに必要な負担が軽減されます。
mssecmgr.ocx が実行されると、複雑なプロセスによって mssecmgr.ocx 自身が、実行中のシステムに埋め込まれます(図 2)。
図 2: mssecmgr.ocx の最初の実行
まず mssecmgr.ocx は advnetcfg.ocx を抽出して実行し、次に nteps32.ocx を advnetcfg.ocx に渡します。そうすると、nteps32.ocx が正常な shell32.dll ファイルにインジェクトされます。これらのファイルが実行された状態で、mssecmgr.ocx はメインの「アプリ」形式の Lua スクリプトを起動します。
このスクリプトは、更新された「アプリ」があるかどうかをアプリデータベースから検索します(コードでは、「アプリ」のリポジトリは FLAME と呼ばれています)。スクリプトには、アプリのリポジトリにアップロードする機能もあります。その後、盗み出したデータを格納するデータベースファイルを作成し、他の各種「アプリ」の実行を開始します。
一連の Lua スクリプトは、次に示した図 3 のように分割できます。
図 3: W32.Flamer で使われる Lua スクリプト
一番下にあるのが、データベースアクセスやネットワークアクセスといった機能を他のスクリプトに提供するライブラリスクリプトです。その上に、悪質な行為を実行する高次のスクリプトがあります。
これらの最上位スクリプトはいくつかのセットに分割されます。簡単に説明すると、以下のようになります。
- ATTACKOP - 脆弱性の悪用などさまざまなテクニックを使って他のコンピュータを攻撃し、その上に移動する。
- CASafety - ウイルス対策ソフトウェアがあるかどうかをチェックする。
- CRUISE - 資格情報を盗み出す。
- Euphoria - LNK 脆弱性を利用して接合ポイントディレクトリ上に拡散する。
スクリプトの中には、追加の実行可能ファイルを利用して動作するものもあります。たとえば、ATTACKOP スクリプトは soapr32.ocx ファイルを呼び出します。soapr32.ocx がローカルコンピュータから広範囲のネットワークデータを盗み出し、RC4 暗号化されたファイルに書き込みます。
ATTACKOP_JIMMY スクリプトは、その機能を実行するために以下のいずれかの実行可能ファイルを利用する可能性があります。
- mssvc32.ocx
- msglu32.ocx
- jimmy.dll
W32.Flamer の概略とその動作は以上のとおりです。W32.Flamer を完全に理解するには、埋め込まれている約 60 の Lua スクリプトをすべて解析し、そのサブコンポーネントをそれぞれリバースエンジニアリングして、そのすべてを再構築しなければなりません。W32.Flamer をリバースエンジニアリングするときと標準的なマルウェアをリバースエンジニアリングするときの違いを喩えるとしたら、1 件の住宅ではなく 1 つの町全体の設計図を引き直すようなものだと言えるでしょう。
* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/ja にアクセスしてください。