Windows XPのゼロデイ脆弱性利用により作成されるバックドア型不正プログラム、複数の解析回避手法を利用

Microsoft は、2013年11月27日(米国時間)、WindowsXP および Windows Server 2003 に影響する、新たなゼロデイ脆弱性「マイクロソフト セキュリティ アドバイザリ(2914486)」(「CVE-2013-5065」)を公開しました。この脆弱性は、限定的な標的型攻撃において、不正な PDFファイル「TROJ_PIDIEF.GUD」により利用され、感染した PC上にバックドア型不正プログラム「BKDR_TAVDIG.GUD」を作成します。

トレンドマイクロは、この攻撃における最終ペイロードを実行するバックドア型不正プログラムの検体を独自に入手しました。この攻撃では、新たに公開されたゼロデイ脆弱性の利用のほかに、解析を回避する複数の手法(アンチデバッグ)が利用されています。通常、ゼロデイ脆弱性利用とアンチデバッグ技術が同時に用いられることは少ないものです

■デバッガ機能を阻止
問題のバックドア型不正プログラム「BKDR_TAVDIG.GUD」は、デバッグを阻止するための最初の手順として、新しいスレッドを作成して自身の不正な活動を続けます。そして元のスレッドはアンチデバッグ活動を行った後、削除されます。

不正プログラムは、新しく作成したスレッドのために、関数「NtSetInformationThread」 を利用して API を呼び出します。これは、通常、スレッドの実行優先度を付与する際に利用されるものです。しかし、この不正プログラムは、「THREADINFOCLASS」に「0×11 (ThreadHideFromDebugger)」を設定します。これにより、新しく作成されたスレッドからのデバッグ情報がデバッガに送られるのを阻止することになります。

これは、通常、「RtlQueryProcessDebugInformation」 によって実行され、「リモート デバッグ」のような特定のデバッグの処理が停止してしまう状況を防ぐための機能です。しかし、不正プログラムはこの機能を悪用しデバッガが情報を収集するのを阻止するため、解析がより困難となります。

図1 は、「NtSetInformationThread」のコードとなります。

図1:「NtSetInformationThread」関連のコードの一例
図1:「NtSetInformationThread」関連のコードの一例

■「NtCreateSection」を利用したコードインジェクション
この「BKDR_TAVDIG.GUD」は、作成するセクションを 2度マッピングします。1カ所は自身のプロセスコンテキストで、もう 1カ所は自身のコードをインジェクション(組み込む)するため新しく作成された対象プロセスです。これにより、不正プログラムは、対象プロセスにメモリを割り当てることができ、自身のコンテキスト上にマッピングされた同等するメモリにアクセスすることによって、対象プロセス上のメモリにアクセスしたり、変更したりすることができます。

図2:「NtCreateSection」関連のコードの一例
図2:「NtCreateSection」関連のコードの一例

■Windows API の脆弱性を利用し、任意のコードを実行
この「BKDR_TAVDIG.GUD」は、自身のシェルコードを実行するために、Windows API を呼び出す「SetWindowsLong」に存在する脆弱性を利用します。トレンドマイクロでは、「UPATRE」ファミリが同じ手法を利用しているのを確認しています。

図3:「SetWindowsLong 」関連のコードの一例
図3:「SetWindowsLong 」関連のコードの一例

■本体から抽出したシェルコード
この「BKDR_TAVDIG.GUD」は、対象プロセスに組み込むための実行コードの多くを再利用します。解析者にとって、これは良くもあり、悪くもあります。良い点は、組み込まれたコードは現在実行されているコードであり、大半はすでに解析済みなことです。

しかし、それは逆に不正プログラムのアンチデバッグ機能により、事態が困難化することを示しています。現在実行中のコードには、解析のために設定されたいくつかのブレークポイント(処理を中断するポイント)があるはずです。デバッガは割り込み命令「INT3」を配置することでブレークポイントを設定し、処理を中断します。解析者がこのブレークポイントの設定を解除しなかった場合、不正プログラムのコードは、設定されたブレークポイントを利用して組み込まれます。つまり、不正プログラムは自身のシェルコードを複数の INT3 の発生で修正することになります。これは、解析すべき対象プロセスの実行がフリーズし、動的解析を妨害することを意味します。

組み込まれたプロセスが “explorer.exe” だった場合を考えてみましょう。INT3 がプロセスのコンテキストで実行された場合、”explorer.exe” は、それ自体がデバッガにアタッチしていない限り、デバッグ環境に影響を与えてフリーズします。これが、不用心な解析者によるデバッグプロセスを複雑にするアンチデバッグ機能の効果です。

図4:コードの例
図4:コードの例

■複数のスレッドおよびプロセスを起動
この「BKDR_TAVDIG.GUD」は、自身の不正活動のために、複数のスレッドおよびプロセスを起動します。元の不正プログラムのプロセス下にあるスレッドは、以下の役割を担います。

  • デバッガ機能を阻止するための新しいスレッドの作成
  • Windows API の脆弱性を利用したシェルコードの実行。オペレーティングシステム(OS)が今回の脆弱性の影響を受けない場合、対象プロセスのスレッドとしてシェルコードが起動する。
  • “explorer.exe” へのコードのインジェクション

“explorer.exe” のコンテキスト下で実行されるスレッドは、特定のプロセスにコードインジェクションを行うのが主な役割です。”Internet Explorer”、”Mozilla Firefox”、”Google Chrome” および “Opera” の 4つのブラウザは、コードインジェクションの対象となっています。さらに、このスレッドは、システムの一時フォルダに “~tmp33.tmp” というファイルが作成されるのを監視します。ファイルが作成されると、自身のスレッドを終了します。

“explorer.exe” の対象プロセス内で実行されるスレッドの役割は、「BKDR_TAVDIG.GUD」が活動するためのコードを復号し、解凍することです。こうした一連の動きは、解析と検出を回避するためだけのものです。

解凍された「BKDR_TAVDIG.GUD」のコードには PEヘッダがありません。しかし、コードやデータ、インポートテーブル、fixupテーブルはあります。解凍後、メモリに直接読み込まれたコードに制御が渡る前に、実行ファイルは以下のことを行います。

  • セクションの前処理
  • 必要な API を収集するためのインポートテーブルの構文解析
  • 解凍されたコンポーネントが現在のメモリ位置と整合性が取れるように再配置するための fixupテーブルの構文解析

■自身の構造およびバックドア活動
「BKDR_TAVDIG.GUD」の構造を詳しく調べると、以下の内容を持ったエクスポートテーブルが確認できます。

  • DLLName:Down.dll
  • エクスポート関数:ModuleStart, ModuleStop, start

関数「ModuleStop」は、「BKDR_TAVDIG.GUD」自身のスレッドを終了させます。その他の関数はこのバックドア型不正プログラムの主な活動を実行します。これらの内容は、DLLファイルと一致しています。

繰り返しますが、「BKDR_TAVDIG.GUD」の主な目的は、解析回避です。下記のプログラムがすでに実行されていた場合、この不正プログラムは、一連の不正な活動を行いません。

  • dsniff.exe
  • ethereal.exe
  • ettercap.exe
  • snoop.exe
  • tcpdump.exe
  • windump.exe
  • wireshark.exe

「BKDR_TAVDIG.GUD」は、感染した PC から以下のさまざまな情報を収集すると、暗号化して C&Cサーバに送ります。

  • コンピュータ名
  • 国名
  • 現在の日付
  • 現在のディレクトリ
  • ドライブ名、各ドライブの種類と使用状況
  • 特定のディレクトリ上にあるファイル(ドライブのルートフォルダ、テンポラリフォルダなど)
  • インストールされたWindows 更新
  • IPv4 TCPコネクションテーブル
  • IPv4 ユーザ・データ・プロトコル (UD)のリスナーテーブル
  • ローカルグループ
  • ネットワーク資源(ネットワーク共有、共有プリンタなど)
  • OS 情報
  • プロセッサ情報
  • 実行中のプロセス
  • システムディレクトリ
  • システム言語
  • タイムゾーン
  • 動作可能時間
  • ユーザアカウント
  • ユーザ言語
  • ユーザ名

図5 は、収集した情報が書き込まれたメモリダンプの例です。

図5:PC の情報が書き込まれたメモリダンプ
図5:PC の情報が書き込まれたメモリダンプ

このような方法で収集された情報はすべて、HTTP POST リクエスト経由で、改ざんされたと思われる、以下の2つの「WordPress」のブログにアップロードされます。その URL のフォーマットは以下のとおりです。

  • http://<改ざんWebサイト #1>/wp-includes/sitemap/
  • http://<改ざんWebサイト #2>/wp-content/plugins/online-chat/

図6 は暗号化した POST リクエストのスクリーンショットです。

図6:暗号化された POST リクエスト
図6:暗号化された POST リクエスト

■「BKDR_TAVDIG.GUD」のバックドア活動に利用されるコマンド
「BKDR_TAVDIG.GUD」は、C&Cサーバからのコマンドを Webサイトで受け取ります。コマンドは、その Webサイト上の <div> と </div> タグの間に書き込まれます。これがこの不正プログラムが TAVDIG と名付けられたゆえんです。コマンドが DIV タグの間に書き込まれるからです。解読されたデータは、「CONFIG」というセクションを持つ初期化ファイルになります。このセクションのコマンドは以下のとおりです。

  • delete – 「いいえ」に設定されていると、この不正プログラムは作業を続行します。それ以外は中止します。
  • del_task – 「いいえ」に設定されていなければ、name で指定されたファイルを削除します。
  • down – 特定の URL からファイルをダウンロードします。
  • exe – コマンドを実行します。「down」コマンドのあるダウンロードしたファイルを含みます。
  • name – 削除すべきファイルを指定します。
  • result – 0 に設定されていると、「exe」コマンドから出された結果が C&C サーバに送られます。それ以外は無視します。

■結論
以上のことからわかることは、この攻撃に関与した人物は誰であれ、巧妙な技術を備えているということです。攻撃者は、新たなゼロデイ攻撃を利用しただけなく、解析をより困難にするための複数の手法を用いています。

今回の事例では、Windows OS の旧バージョンを使用し続けることへの落とし穴を強調することになりました。旧バージョンは、最新バージョンのようにセキュリティの強化や更新が行われません。さらに、両バージョンは、まもなく延長サポート期間が終了します。これはつまり、もはやセキュリティパッチが公開されないということです。Windows XP は 2014年4月、Sever 2003 は 2015年7月にサポート終了となります。

参考記事:

  • Windows XP/Server 2003 Zero-Day Payload Uses Multiple Anti-Analysis Techniques
    by Jayronn Christian Bucu (Senior Research Engineer)
  • 参考情報:

  • 関連ホワイトペーパー
     ・Windows XP サポート終了を迎えるに当たりセキュリティ観点から必要なこととは
  • 関連製品情報
     ・Trend Micro Deep Security
     ・Trend Micro 脆弱性対策オプション
     ・Trend Micro Safe Lock
  •  翻訳:品川 暁子(Core Technology Marketing, TrendLabs)