Zeusの亜種、Panda Bankerの出現

dennis

投稿者:Dennis Schwarz
投稿アーカイブ:分析、ボットネット、暗号化、関心の高い調査、マルウェア、リバース・エンジニアリング、脅威分析

数カ月前、Proofpointが、銀行を標的とする「Panda Banker」という新たなトロイの木馬についてのブログを投稿しました。Proofpointは、Fox-ITがこれを発見したことを認めており、両社は、Panda Bankerが銀行を標的とするトロイの木馬であるZeusのソースコードを基盤とする亜種であると述べています。注意深く見てみると、Panda Bankerは確かにZeusと類似していますが、CitadelやZeusVMなどの亜種とは異なる部分が多くあります。本稿では、Panda Bankerのコマンド&コントロール(C2)のメカニズムと、そのC2サーバーから構成とWebInjectルールを引き出すために必要なものについて詳しく考察していきます。

検体

本稿のために以下の検体が使用されました。

基本構成

基本構成は、マルウェアの実行可能ファイルに暗号化されて保存されている可変長のバイナリー構造です。その他、暗号化キー、C2 URL、ボットネット名を保持しています。コードの至るところに、以下のような暗号化された基本構成へのリファレンスがあります。

base_config_code

暗号化された基本構成は、バイナリーBLOBと類似している一方で、復号化に使用される以下の構造を持ちます。

復号後、基本構成から最初に抽出しなければならないデータは暗号化キーです。基本構成内のオフセットは検体によってさまざまですが、以下に一例を示します。

crypto_key

キーは、X.509 subjectPublicKeyInfo DER SEQUENCEとしてフォーマットされたRSA公開キーです。

基本構成では、暗号化された複数のC2 URLがさまざまなオフセットに存在する可能性があります。暗号化された各C2チャンクは、101バイトの長さです。上記のキーはRSA公開キーであるにもかかわらず、URLを復号化するためにRC4で使用されます。以下は、検体の1つのURLです。

基本構成から最後に抽出されるデータは、任意に設定されるボットネット名です。設定されている場合はUTF-16文字列として保存され、設定されていない場合は「not set」に設定されます。

C2の通信

Panda Bankerは、C2メカニズムにHTTP POSTリクエストを使用しています。リクエストの例は以下のとおりです。

http_request

レスポンスの例は以下のとおりです。

http_response

(注意:Panda Bankerの新バージョン(2.2.x)は、URIおよびPOSTデータをbase64でエンコードします。詳細については後ほど説明します。)

リクエスト

リクエストのプレーン・テキスト・データは、以下のようなJSONオブジェクトです。

post_data

このオブジェクトは、以下のように記述されます。

暗号化のために、ランダムな32バイト・キーと16バイトのIVが生成されます。その後、AES-256を使用してデータがCBCモードで暗号化されます。プレーン・テキストを埋め込む必要がある場合は、NULLバイトが使用されます。

次に、ランダムな32バイトAESキーがRSA PKCS#1 v1.5と基本構成の公開キーを使用して暗号化されます。暗号化後は、POSTデータは次のように構成されます。

先ほども述べたように、新バージョン(2.2.x)は最終構造をbase64でエンコードしますが、旧バージョンはこれを行いません。

C2レスポンスに移る前に、POSTリクエストで使用された怪しいURIを説明する必要があります。怪しいURIは一見ランダムに見えますが、背後には従わなければならない構造があります。Panda BankerのURIを生成するには、以下のステップに従います。

  1. 「/」で開始する
  2. 2~10のランダムな数字(rand_num)を生成する
  3. rand_numのランダムな英数字をURIの後に追加する
  4. 「/」を後に追加する
  5. コンピュータ名を取得する
  6. HKLM\software\microsoft\windows nt\currentversionより、InstallDateのレジストリ値を取得する
  7. HKLM\software\microsoft\windows nt\currentversionより、DigitalProductIdのレジストリ値を取得する
  8. DigitalProductIdのCRC32値を求める
  9. GetVersionEx Windows APIを使用して、OSVERSIONINFOEXの構造を取得する
  10. その構造のCRC32値を求める
  11. コンピュータ名、InstallDate、DigitalProductIdのCRC32値、OSVERSIONINFOEXのCRC32値を一緒にパックする
  12. データ・チャンクにSHA-256を適用する
  13. ハッシュの最初16バイトのみを使用する
  14. 以下のように、生成されたURIを使用して、残りのハッシュのバイトにXORを適用する
for i in range(len(sysinfo_sha256)):
    sysinfo_sha256_xord.append(chr(ord(sysinfo_sha256[i]) ^ ord(uri[i % rand_num + 1])))

15a. 旧バージョン(2.2.xより前のバージョン)の場合、XORを適用したデータを大文字の16進数にエンコードする

16a. エンコードしたデータをURIの後に追加する

16b. 追加がすべて終了したら、ランダムな数字(0~99)を生成し、生成した値が20未満の場合、「/」を後に追加する

バージョン2.2.xのURIの例は以下のとおりです。

/H6YZXXbdc/hvqU2o4/k2Dm/1Fjo/n/m/YLVEg

赤い部分はステップ1~4、青い部分は残りのステップの出力に相当します。

レスポンス

C2によって返されたデータは、複数の層を使用して暗号化されます。新バージョン(2.2.x)の最初の層は、以下のようにbase64でエンコードされます。

layer1

復号化後(または旧バージョンの場合)の次の層は、以下のとおりです。

layer2

次のように構成されます。

ランダムに生成され、C2リクエストで使用された同じ32バイト・キーが、レスポンス・データの復号化に使用されます。その結果、以下のようなJSONオブジェクトが得られます。

layer3

[“data”]キーに着目すると、その値はbase64でエンコードされます。デコードされると、構造化された別のバイナリーBLOBを返します。このバイナリーBLOBは、先ほど説明した組み込みの基本構成のように復号化が可能です。復号化されると、別のJSONオブジェクトが返されます。

layer4

マルウェアの内部では、組み込みRSAキー(基本構成キーとは別のもの)と[“sign”]値を使用して、この層におけるデータの完全性が検証されます。この[“data”]値は、前の層と同様に復号化でき、最後のJSONオブジェクトを返します。Panda Bankerの構成は以下のとおりです。

layer5

WebInject

Panda Bankerの構成には興味深い部分が多々ありますが、特に目を引くのは[“url_webinjects”]です。構成されたそのURLを上記のC2リクエストおよびレスポンス・プロトコルに代入することで、異なるJSONオブジェクトが得られます。WebInjectのJSONオブジェクトのキーは以下のとおりです。

webinjects1

このオブジェクトを理解するために、[webinjects]キー/値から見ていきます。値は、以下のとおりbase64でエンコードされており、URLを含む構造にデコードされます。

webinjects2

16バイトのヘッダーが各エントリの前に追加されます。エントリのサイズは、ヘッダーのオフセット2(2バイト)にあります。個々のエントリに分割された後は、URLのインデックス(1ベース)を使用して、対応するWebInjectデータを取得できます。

webinjects3

このWebInjectデータは、多数の部分で構成されています。各部分はそのサイズ(4バイト)で始まります。以下は、ZeusのWebInject用語を使用した、JSONフォーマットのPanda Banker WebInjectの例です。

webinjects4

[“set_url”]は攻撃対象となる金融機関です。[“data_before”]および[“data_after”]は、Panda Bankerが金融機関のWebサイトのどこにコードを挿入すべきかを制御しています。[“data_inject”]には、挿入する、悪意のある(通常は難読化された)コードが含まれます。

具体的なこの例では、悪意のあるコードにより、「Tables」として知られる不正取得ソフトウェアがセットアップされます。「Tables」によって、銀行の認証情報、アカウント情報、現金を盗むことが可能になります。

tables

結論

本稿では、銀行を標的とする新たなトロイの木馬であるPanda BankerのC2のメカニズムを詳しく考察しました。新しいマルウェアについて、そのライフサイクルの初期に今後どの程度アクティブになり蔓延するかを評価するのは困難ですが、Panda Bankerは間違いなく目を光らせておくべき対象です。Panda Bankerは、銀行を標的とする立証済みのマルウェア・プラットフォーム(Zeus)を基盤として構築されているだけではありません。すでに多くの検体とボットネットが出回っています。加えて、本稿作成時点でASERTが知る限りでは、9つの異なるバージョンで開発が盛んに進められています。最新バージョンの2.2.5は、2016年7月7日以降確認され始めています(VirusTotalによる)。