FlokiBotはボットの一群となるか

dennis

投稿者:Dennis Schwarz
投稿アーカイブ:analysis, Botnets, Encryption, Interesting Research, Malware, Reverse Engineering, SSL, threat analysis

Flashpointは10月初めに、FlokiBotという新しいマルウェア・ファミリーに関して、アンダーグラウンド市場におけるフォーラムの宣伝を解析して発表しました。サンプルが出回るまで多少時間がかかりましたが、hasherezadeという研究者が11月初めにVirusTotal上のものに警告を出しました。彼女はこちらにもそのドロッパーについての解析を掲載しています。本稿では、当社がこれまでに行ったFlokiBotの解析について説明します。

Zeus亜種

フォーラムの宣伝に記載されているように、FlokiBotは流出したZeus 2.0.8.9ソースコードで開発されたZeusベースの金融機関を標的とするトロイの木馬とは別の亜種です。それについてはバイナリをざっと見れば確認でき、このサンプルには以下のとおりリバース・エンジニアリングを開始するためのデバッグの記述まで記載されています。

また、コマンド&コントロール(C2)パネルのログインはZeusに非常によく似ています。

login-1-1024x240

バージョン

Zeusベースのマルウェアには、多くの場合、バージョン番号を特定する識別容易なコード・スニペットが備わっています。

version

この特定のサンプルはバージョン12です。FlokiBotのバージョンは、従来のa.b.c.d形式(例:0x02000809から2.0.8.9まで)にマッピングしないため、他の亜種とは異なります。

Base Config

Zeus用語では、サンプルの「base config」は各バイナリに組み込まれる静的構成です。これは、通常さまざまなアイテムを含む暗号化された構造ですが、FlokiBotの場合、暗号化キーとC2 URLがあるだけです。単にXORであるbase configを復号化する従来のZeus方式が使用されます。

decrypt_base_config

このサンプルの復号化されたbase configは1,076バイトで、次のように見えます。

decrypted_bc-1024x483

C2は赤で強調され、その他の非\x00の大量のデータは258バイトの暗号化キーで、C2コミュニケーションを保護するために使用されます。

Zeus C2コミュニケーションのレビュー

Zeusでは、C2コミュニケーションで「binstorage」というデータ構造が使用されます。それはヘッダーと可変個のセクションで構成されています。ヘッダーは48バイトで、次の構造で表すことができます。

セクションは可変の長さで、次の構造で表すことができます。

C2コミュニケーションには、binstorageデータが2度暗号化されます。最初は「視覚的暗号化」と呼ばれるXORベースのアルゴリズムを使用します。

visual_encrypt

2度目の暗号化にはbase configから258バイトのキーを使用します。このキーは、実際にはRC4のキースケジューリング・アルゴリズム(KSA)により生成された「S」値です。これは、視覚的暗号化データを暗号化する際にRC4の疑似乱数生成アルゴリズム(PRGA)と共に使用されます。

従来、Zeusはこの暗号化binstorageをHTTP POSTリクエストによってC2に送りますが、FlokiBotでは状況が少し異なります。

FlokiBot C2コミュニケーション

FlokiBotの宣伝を見て、コミュニケーション・プロトコルに対する何らかの変更があると予測しました。

「ペイロードは、Zeus(パケットはZeusのようには見えない)とは異なり、ディープ・パケット・インスペクションによって検出できない異なるコミュニケーション・プロトコルを使用します。Configは暗号化されたgate.phpにより直接ボットへ伝達されます。すべてのレポートがHDDに書き込まれてから、C2センターに対する1回のリクエストで伝達されます。」

当社の解析によると、変更は、追加ヘッダーの追加と、コミュニケーションのタイプに応じてデータをエンコードするbase64の2つにまとめることができます。変更が基本的な感じがすればするほど、上記の宣伝に記載されているような「Zeusとは異なる」そして「1回のリクエストで伝達できる」何かを実装しています。

追加ヘッダーは1つのサブ・ヘッダーと可変個のbinstorageセクションに分割できます。サブ・ヘッダーは次のようになります。

各binstorageセクションには2個のサブ・ヘッダーが含まれます。最初のサブ・ヘッダーは次のように見えます。

2番目のサブ・ヘッダーは次のように見えます。

この新たにパッケージ化されたbinstorageは、この後、可視暗号化とRC4により上記のように暗号化されます。コミュニケーションのタイプに応じて、暗号化データもHTTP POSTリクエストでC2に送られる前に、base64を使用してエンコードされます。また、コミュニケーションのタイプに応じて、C2からの応答が異なる方法で処理されます(詳細は後述)。

本稿執筆時点で、当社が確認してきたすべてのC2 URLがHTTPSを使用していました。さらに、.onionベースのC2 URLをチェックするコードもあり、そのような場合には、ローカルTORプロキシを通ってC2トラフィックを転送しています。

Dynamic Config

Zeus用語では、「dynamic config」はC2サーバーからフェッチされたコンフィギュレーション・ファイルを意味します。通常、そのデータではとりわけ、追加C2 URLとwebinjects(金融機関を標的とするトロイの木馬には必須手段)が含まれます。FlokiBotには、dynamic configをフェッチするために2つのコード・パスがあります。最初のパスは、システム情報をC2サーバーに送ってconfigをリクエストする、より伝統的な方法を選択します。収集された情報の概要と使用されるbinstorageセクションのタイプは以下のとおりです。

これら(SBCID_X)のほとんどが汎用Zeusタイプであり、さらに詳しい情報はリークされたソースコード内で検索できます。このデータは、上記のようにパッケージ化され、追加のbase64エンコードなしでC2に送信されます。

応答では、まずRC4と視覚的復号化を使用してデータが復号化されます。次に、新たに追加されたヘッダー(上記参照)から大量のデータが解凍されます。このデータはコマンド・バイトとコマンド・データの2ピースに分割できます。

コマンド・バイトのゼロはアップデートされたdynamic configを意味します。残りのコマンド・データはRC4と視覚的復号化を使用して復号化され、プレーンテキストはdynamic configを持ったbinstorage構造です。一例とdynamic configのさらに人間に解読可能な構文解析は、以下のとおりです。

dynamic_config

FlokiBotにはZeusのDynamicConfig::updateConfig関数までの2番目のコード・パスがあります(リークされたソースコード参照)が、処理中の作業(依然として開発中の作業)のようです。これにより、DWORDに「1」を記憶させるタイプ11003のbinstorageセクションが1つ作成されます。上記のようにパッケージ化され暗号化されますが、C2サーバーに送信する前にbase64で暗号化データをエンコードします。

C2からの応答で、上記のようにそのデータは復号化され解凍されます。本稿執筆時点で、当社が見た唯一の応答は、コマンド・データが示しているように、「2」というコマンド・バイトと空のプレーンテキストbinstorageです。

Webinjects

上記のdynamic configの例に明らかに欠けているのはwebinjectsです。この解析ではマン・イン・ザ・ブラウザ(MITB)の実装に掘り下げた分析が実行されませんでしたが、コードの隠ぺいが標準Zeusの実装であることを暗示しています。この例でwebinjectsがないことは、未使用であることを解析する特定のキャンペーン/バージョンである可能性が高いのです。しかし、その他のZeusの亜種の傾向に基づいて、新しいFlokiBotキャンペーン/バージョンが出回っている場合には、webinjectsの出現を予測します。

ボット・コマンド

FlokiBotには、暗号化文字列が含まれています。それを復号化するには、従来のZeusメソッドを使用します。

decrypt_strings

復号化文字列の全リストはこちらで入手できます。このリストには、FlokiBotで使用できるその他の機能の概要を示す以下の26のボット・コマンドがあります。

DDoSの機能

bot_ddos_startとbot_ddos_stopのコマンドは興味深いものです。他のZeus亜種にはDDoS機能(最も知られているのはZeus Gameover)が盛り込まれていますが、それは共通機能ではありません。実装される次の3つの基本的なDDoS攻撃があります。

Zeus Gameoverの過去の調査では、攻撃者は銀行への攻撃で金を奪う際に強奪から注意をそらす手段としてDDoS機能を使用すると示唆されています。FlokiBotのDDoS機能の裏にある発想がこれと同じかどうかを判断するのは時期尚早です。とはいえ、当社のお客様は、たとえ攻撃者の標的になったとしても攻撃を緩和するための対応策があります。

クレジットカードのトラック2メモリ・スクレーピング

FlokiBotの宣伝や復号化した文字列が示しているように、FlokiBotにはクレジットカードのトラック2データのメモリを抽出する機能も備わっています。そのDDoS機能のように、実装は非常に簡単です。感染したメモリでトラック2のデータ・フォーマットのように見える大量のデータをスキャンします。通常、会員番号(PAN)から考えられる銀行識別コード(BIN)が3、4、5、6のいずれかで始まっているかどうかや、それが次のカード・タイプにマッピングするかどうかを調べます。

さらにチェックして、数字が存在すると思われる場所にあるか、「=」フィールド・セパレータが正しい場所にあるかを確認します。何らかの潜在的トラック2データが検出された場合、ZeusのReport::writeStringFormat機能(リークされたソースコード参照)と次の書式文字列を使用して、いつの間にか消えてC2に戻っています。

Keylogger: %s

Track 2: %s

結論

FlokiBotは、金融機関を標的とする新しいZeusベースのトロイの木馬の亜種であり、アンダーグラウンド市場のフォーラムで高額(1,000ドル)で売られ、最近インターネット上に出現するようになりました。その「破壊機能」は、多少の修正を加えたC2プロトコル、基本的なDDoS攻撃機能、基本的なクレジットカードのメモリ・スクレーパーのように見えます。この新しい亜種であるFlokiBotがどれほど活発であり、まん延していくかを想定するのは時期尚早ですが、偶然にも本稿執筆中に新バージョン(13)がインターネット上に出現しました。ASERTでは、引き続きこの脅威を監視し、FlokiBotがボットの一群となるかどうかに注目していきます。