Linux版BambooTokenマルウェア、MQTT経由のC2でリモートシェルとファイル窃取を実行

Linux版バックドア「BambooToken」は、MQTTをコマンド&コントロール(C2)チャネルとして使用しており、攻撃者はブローカー経由のトピックを通じて侵害したホストのプロファイリング、シェルコマンドの実行、ファイル転送を行うことができます。

静的にリンクされたx86-64 ELFサンプルの解析によると、その設定情報、タスクのルーティング、ネットワークペイロードはそれぞれ異なるXORルーチンで難読化されています。

調査対象となったサンプル(SHA-256: bf0681e43f51e98fe7ec24bf73a43facc66b0feb325a3a835f8f01b2861b926e)は、2.4MBのシンボル情報を除去したC++実行ファイルです。

このハッシュ値はBlack Lotus Labsが公開しているBambooTokenのIOC(侵害指標)リストに掲載されており、プロトコルやファイル名の一致のみから攻撃者を特定するのではなく、既知の複数プラットフォームにまたがるキャンペーンとの関連性を示しています。

BambooTokenのC2ブートストラップ処理は、59バイトの設定用blobに含まれています。

起動時、マルウェアは最終バイトをキーとする単純な1バイトXOR演算を行い、改行で区切られた2つの値を復元します。すなわち、ブローカーのホスト名live-hk[.]c2iznja[.]comと、ハードコードされたグループトピック{534E19D5-434B-4cad-A0C2-8D75E0B2FBFC}です。

その後インプラントは、感染ホスト個別のUUID形式のクライアント識別子を生成します。この仕組みにより、攻撃者は共有グループを通じて一斉に指示を送ることも、クライアントごとのトピックを通じてホスト固有のタスクを指定することも可能になります。

接続用ラッパーはデフォルトでTCPポート2883を使用し、被害者がオフラインになったことを示すMQTTの「last will」メッセージを登録します。接続に失敗した場合は15秒後に再試行されます。

このサンプルには、二重フォークによるデーモン化処理を呼び出す-iオプションも含まれています。この処理により、端末からのデタッチ、新規セッションの作成、作業ディレクトリの/への変更、umaskのゼロ設定が行われます。

ただし、このバイナリには起動時の永続化(persistence)機構は組み込まれていないため、デーモン化の実装自体を再起動後の永続化の証拠とみなすべきではありません。

BambooTokenのメインクライアントは、固定のグループトピック、生成されたクライアントID、そしてプラグイン機能やLua機能に関連する追加のトピック名を購読します。

ただし、調査対象のディスパッチャで実装が確認されたのは、ホストインベントリ収集、シェル操作、ファイル管理の各パスのみでした。

グループトピック宛にONLINEリクエストが発行されると、ホストのプロファイリングが実行されます。その応答には、現在のユーザー名、ホスト名、OSリリース情報、マシンID、MACアドレス、ローカルIPv4アドレス、CPUモデル、プロセスID、スレッドIDが含まれます。

インベントリのフィールドの一部、具体的にはmemver、および一部のLinux関連の製品メタデータは、実際に収集された値ではなく静的なプレースホルダーです。

GBhackersと共有されたレポートの中でReverserは、BambooTokenの活動は少なくとも2023年まで遡ることができ、標的はアジアと南米にまたがっており、新しい亜種ではMQTTベースのC2が採用されていると述べています。

Linux版BambooTokenマルウェアの詳細

SHELLリクエストを送ると、専用のシェルワーカーが起動し、<client-id>/Shellを購読して<client-id>/Shell/Resp経由でデータを返します。

このワーカーはJSON形式のコマンドを受け取り、それをpopen()に渡すことで最終的に/bin/sh -cを呼び出します。各命令はそれぞれ個別のシェルコマンドとして実行され、永続的な疑似端末(pseudo-terminal)セッションが作られるわけではありません。

出力は1,024バイトの行バッファに収集されるため、標準エラー出力は、操作者がそれを標準出力にリダイレクトした場合にのみ返される仕組みになっています。

FILEEXパスは、<client-id>/File<client-id>/File/Respを使用してファイルワーカーを起動します。これはディレクトリ一覧の取得、アップロード、ダウンロード、削除、停止、終了の各操作に対応しています。

ディレクトリ一覧の取得処理では、fliesという珍しい名前のプロトコルフィールドが使われています。これは(おそらく”files”の)綴り間違いであり、防御側がデコードされたBambooTokenの通信を識別する手がかりになる可能性があります。

BambooTokenは、MQTTペイロード用に2つ目の、繰り返し使用される別のXORキーを使用しています。

+0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ

トピックの変換方法は異なります。スラッシュで区切られた各セグメントは、それぞれキーの先頭からXOR演算され、小文字の16進数に変換される一方、スラッシュ区切り文字とMQTTのワイルドカードはそのまま可視の状態で残されます。

例えば、ONLINE647e7d7b7d71に、/Shell/7858545e5fに変換されます。

この変換処理は表面的な検査を複雑にするかもしれませんが、キー自体がバイナリに埋め込まれているため、実質的な機密性を提供するものではありません。

また、調査対象となった接続経路ではTLS設定を呼び出す処理も確認されなかったため、不審なMQTTの使用、異常なポート2883宛の通信、エンコードされたトピック構造といった要素に基づくネットワーク検知の価値がより一層高まっています。

ファイル窃取に関しては、BambooTokenはデータを128KB単位のチャンクで送信します。各チャンクには、パス、転送ID、サイズ、オフセットといったJSON形式のメタデータが含まれ、その後にNUL区切り文字と生のファイルバイト列が続きます。バッファ全体は、送信前にXORによって難読化されます。

アップロード処理はこの流れを逆に辿り、要求されたパスとオフセットにデータを書き込みます。なお、アップロードされたペイロードが自動的に実行される仕組みは確認されませんでした。

組み込まれているブローカーは、これまで202.144.192[.]149と関連付けられてきました。Black Lotus LabsのIOC資料には、このホスト名とTCPポート2883を伴うMQTT関連インフラの観測記録が残されており、また同じSHA-256に関する公開サンドボックスの記録でも、この宛先に対する名前解決と接続試行が観測されたと報告されています。

ただし、これらの記録はあくまで過去の観測に基づく指標であり、当該ホスト名やアドレス、ブローカーが現在も稼働中であることを裏付けるものではない点に注意が必要です。

防御側にとって最も有効な検知の手がかりとなるのは、Linuxサーバーからの外向きMQTT通信、TCPポート2883への接続、UUID形式のクライアントトピック、共通のBambooTokenグループ識別子、そしてONLINESHELLFILEEXcommand、あるいは特徴的なfliesフィールドを含むXORデコード後のペイロードです。

SOCのアラート調査を1件あたり21分短縮。即座に得られるIOCコンテキストでSOCを強化しましょう: TI LookupをあなたのSOCに統合する

翻訳元: https://gbhackers.com/linux-bambootoken-malware/

本記事は gbhackers.com の記事を翻訳・要約したものです。