Proofpointは、2018年5月に初めてDanaBotを確認しました。基本的なトロイの木馬と情報窃盗の機能を備えたDanaBotは、詐欺行為や犯罪行為に用いるために、無防備なユーザーから機密性の高いバンキング情報を収集します。このトロイの木馬は当初から、アフィリエイトの追加、ジオターゲティングの強化、モジュール化を通した機能の拡張を行ってきました。このブログでは、DanaBotのウェブインジェクト/ターゲティングスキーム、およびその通信プロトコル/コマンドやコントロールインフラストラクチャのレビューを行います。
ジオターゲティング
2018年初頭のキャンペーンでは、DanaBotは主にオーストラリアをターゲットにしていましたが、それ以後、そのターゲットはさまざまな新たな地域を含みつつ拡大し続けています。各地域はbot内のキャンペーンIDと関連付けられており、それにより目的地域のための各ウェブインジェクション/ターゲットが感染後に配布されます。DanaBotはオーストラリア、北米、ヨーロッパの一部を引き続き標的にしていますが、加えて我々は、例えば今まで報告のなかったドイツをターゲットにしているID 27などといった、新たな地域を対象にした新規キャンペーンIDの報告を受けるようになりました。1キャンペーンID 27の標的とそれに関連するインジェクトスクリプトについて下記の表1に示しました。
標的 | インジェクトファイル |
https://www.airbnb.de/ | airbnb.js |
https://www.alternate.de/ | alternate.js |
https://www.baur.de/ | baur.js |
https://www.bonprix.de/ | bonprix.js |
https://www.booking.com/index.de.html | booking.js |
https://www.conrad.de/ | conrad.js |
https://www.cyberport.de/ | cyberport.js |
https://www.douglas.de/ | douglas.js |
https://www.esprit.de/ | esprit.js |
https://www2.hm.com/de_de/ | hm.js |
https://www.home24.de/ | home24.js |
https://www.idealo.de/ | idealo.js |
https://www.ladenzeile.de/ | ladenzeile.js |
https://www.lidl.de/ | lidl.js |
https://www.rakuten.de/ | rakuten.js |
https://www.saturn.de/ | saturn.js |
表 1:キャンペーン27の標的リスト
以下のスクリーンショット(図1)は、インジェクトからの抜粋となります。場合によっては、DanaBotはブラウザとオペレーティングシステムのフィンガープリンティングを実行し、可能な限り最も真実味のある偽のウェブサイトを被害者に向け表示します。DanaBotのインジェクトを回収することで、盗まれた情報がどのように転送されるかについてさらなる見識が得られます。
図3を見ると、被害者にとって、実際の銀行のページと、資格情報を盗むために設計されたJavaScriptをインジェクトしたページとの違いを見分けることがどれほど難しいことか、お分りいただけるでしょう。DanaBotは、Zeus型のウェブインジェクトを今までずっと使用してきており、現在も継続して使用しています。
アフィリエイトリストやジオターゲティングの継続的な拡大に加えて、DanaBotはさらにモジュールを追加し続けています。プロキシモジュール(インジェクトに使用)と共に配布されるその他のモジュールには、一般的にスティーラーモジュールやTorモジュールが含まれています。さらに、我々の調査では以下の特定のモジュールには遭遇していませんが、Checkpointは今年4月後半、キャンペーンID 7への感染後に配布されるランサムウェアモジュールを確認し、詳細に報告しています。
DanaBotのローダー
ローダーの通信プロトコルは、2 月に詳述されて以降変更されていませんが、このプロトコルとそれが使用するコマンドについてこれから深く掘り下げます。DanaBotのローダーには、コマンドとコントロールとの通信を暗号化するために使用される、エンコードされたRSA公開鍵が備えられています。図5は、キーBLOBがXORデコードされている、デコンパイルされたDanaBotローダーからの抜粋を示しています。
任意のローダーバイナリでRSA公開鍵バッファを検索すると、1バイトのXOR キーが付きます。これにより、図6のスクリプトと同様のIDA Pythonスクリプトを使用して、公開鍵のデコードが簡単になります。
DanaBotのローダーは、コントロールパネルと共有している、同じRSA公開鍵を継続して使用しています。上記のPythonスクリプトは、公開鍵BLOB構造体として格納されているRSA公開鍵のXOR演算を行います。これにより、DanaBot開発者は、メモリ内でデコードされた後に鍵を現状どおりにインポートできます。
上記の構造体は、以下に示すRSA公開鍵BLOB構造体の理解に役立ちます。
● 赤の場合、SigAlgID、HashAlgID
● 青の場合、RSAマジック値、bitlen(1024)、公開指数
● 緑の場合、RSA鍵に関連付けられたn値
コマンドと制御通信
DanaBotの通信プロトコルは、2019年の初めに行われた修正以降、研究者によって詳細に報告されています。以下では、プロトコルをさらに解剖して、さらなる情報を抽出していきます。
DanaBotはコマンドやコントロールサーバーを定期的にサイクルアウトしますが、多くのbot設定を通じていくつかのサーバーが存続しているようです。これらの主力コマンドおよびコントロール サーバーの中で最も復元力のあるものを、以下のVirusTotalグラフ内に示しました(図10)。
感染時に、ローダーは後続のモジュールと構成ファイルをダウンロードするために接触を図ります。aliveコマンドとコントロールサーバーへと送信される初期のパケットは、図11の例のようになります。
1番目のパケット – キー交換
最初に送信されるパケットには、クライアントによって生成されたRSA公開鍵が含まれており、それはその後、AES暗号化されます。サンプルをローカルで実行すると、(1回の)パケット暗号化に使用されるAES BLOBを復元でき、よってコマンドとコントロールに最初に送信されたRSA公開鍵を取得できます。復号化された最初のパケットの後半を確認すると、以下のAES BLOBが取得できます。
オフセット0x04では、指定されたアルゴリズム識別子(Alg ID)はCALG_AES_256です。これは、DanaBotが鍵をコマンドとコントロールに渡すのではなく、キーBLOB構造体を渡している点で、特に興味深いと考えます。以下のローダーによって生成されたRSA公開鍵を確認すると、以前に確認したものと同様のBLOB構造を見ることができます。
この情報により、我々は、DanaBotのコマンドおよびコントロールインフラストラクチャがWindows® VPSでホストされており、ポート443で実行されているカスタムサーバーアプリケーションが Windows crypt APIを利用していると考えるに至りました。c2sに対してさらなる調査を行うことで、この考えをさらに裏付けられます。
上記の図14は、DanaBotの主力コマンドやコントロールIPのうちの1つを入力するとShodanが返すアウトプットです。
2番目のパケット – Hello
我々は、サーバーアプリケーションがデータを処理し提供する方法を知っています。それとプロトコル形式を組み合わせることで、通信を再実装して、異なるアフィリエイトIDのモジュールのクエリとプルを行うことができます。2番目のパケットの前半部分は「hello パケット」です。以下に示すhelloは、bot ID、キャンペーンID、コマンドID、および多種のチェックサム/値など、さまざまなフィールドで構成されています。
ローダーからサーバーへの2番目の通信セットは、場合によって異なり、メインモジュールがリクエストされるか、ローダーモジュール/設定のリストに対してクエリを実行するかのいずれかとなります。
3番目のパケット – Request Module List(またはMain Bot 非表示)
図17は、botのクエリモジュール/構成の復号化されたバージョンを示しています。
サーバーは、ローダーがダウンロードするモジュールと設定ファイルのリストを返します。
モジュール名 | モジュール / 設定ハッシュ |
Proxy | B003C6D5EF304D6EC18B5FD767831E49 |
Tor | 731945282257BD03A0D3036BF4887B6B |
BitVideo | AE0AE9B9FC77EAB4235EE378D75B43D4 |
PFilter | 01FA5F4EEBED2BE8145A1231E27108CA |
BitFiles | A8F8B08326807A6CB6E4FF2C7D8E7157 |
KeyProcess1 | 98B358D5419EBA2E0CEC0EF320DD2447 |
表 2:一般的なモジュール/ハッシュ
4番目のパケット – Request Module
モジュールや設定のリストを受け取ると、botは被害者への感染を完了するために必要なものをリクエストします。図18は、2番目のチェックサム値がリクエストされたファイルのハッシュに置き換えられた様子を示しています。これは、コマンドやコントロールからファイルをリクエストする際に生じる、パケット構造の唯一大きな変更点です。
4番目のパケット – Request Module
モジュールや設定のリストを受け取ると、botは被害者への感染を完了するために必要なものをリクエストします。図18は、2番目のチェックサム値がリクエストされたファイルのハッシュに置き換えられた様子を示しています。これは、コマンドやコントロールからファイルをリクエストする際に生じる、パケット構造の唯一大きな変更点です。
結論
先日誕生から2年目を迎えた、金銭的な動機を持つトロイの木馬 DanaBotは、非常に収益性の高いモジュラークライムウェアプロジェクトへと成長しました。DanaBotはより多くのアフィリエイトが追加されるにつれて、ジオターゲットを進化させ続け、さらにランサム機能性をテストするために分岐しました。この戦略の変化は、ドメインコントローラからランサムウェアを実行する以前に犯罪者が被害者の価値をプロファイリングするための事前偵察をより多く行っているという、我々が観察しているその他の変遷と確実に一致しています。脅威アクターは、被害者の価値をプロファイリングすることを選択した場合、攻撃の数を減らし効果的にその質を高めています。Dridex/BitpaymerやTrickbot/Ryukがこれらのタイプの偵察活動の先頭に立っていますが、DanaBotも追いつきつつあるようです。
バイナリアーティファクト
E:\Merzadenio\Sniffer\ics\OverbyteIcsMsSslUtils.pas
E:\Merzadenio\Sniffer\ics\OverbyteIcsWndControl.pas
E:\Merzadenio\Sniffer\ics\OverbyteIcsWSocket.pas
E:\Merzadenio\Sniffer\UProxyServer.pas
E:\Merzadenio\Units\System.Zip.LZMA.pas
E:\Merzadenio\Builds\Admin\32x\MRTTest\Morff\source\dcu32\closely4.dpr
E:\Merzadenio\Builds\Admin\32x\MRTTest\Morff\source\dcu32\disappointed5.dpr
E:\Merzadenio\Builds\Admin\32x\MRTTest\Morff\source\dcu32\tight2.dpr
E:\Merzadenio\Builds\Admin\32x\MRTTest\Morff\source\dcu64\cheek5.dpr
妥協の指標
ポート443上:
149.28.180.182
89.144.25.243
178.209.51.211
95.179.186.57
モジュールハッシュ
配信された追加のマルウェア
55389ec0683ee7e7f49f39975e585313
f40f4338cf5cf6e71fbb54a6583d5e23
Recent Comments