- Cisco Talos はこのほど、「Manjusaka」という新たな攻撃フレームワークが実際に展開されているのを確認しました。今後広く蔓延する可能性があります。このフレームワークは、Cobalt Strike に倣ったものだと言われています。
- 新しいマルウェアファミリのインプラントは、Windows および Linux 用の Rust 言語で記述されています。
- コマンドアンドコントロール(C2)は GoLang で記述されており、簡体字中国語のユーザーインターフェイスを備えています。十分に機能するバージョンの C2 を無料で入手でき、カスタム構成の新しいインプラントを簡単に生成できるため、攻撃者の間でこのフレームワークの使用が広まる可能性が高くなっています。
- 新型コロナウイルスと青海省海西モンゴル族チベット族自治州をテーマにしたおとり文書を使用した攻撃が実際に展開されていることが最近確認されました。これらの不正ドキュメントによって、感染したエンドポイントに最終的には Cobalt Strike ビーコンが配布されています。
- 同じ攻撃者が Cobalt Strike ビーコンと Manjusaka フレームワークのインプラントの両方を使用していることが確認されています。
はじめに
Cisco Talos は、作成者が「Manjusaka」(簡体字中国語で「牛花」と表記、曼珠沙華のこと)と呼ぶ比較的新しい攻撃フレームワークが実際に使用されているのを確認しました。
防御する企業の側は、Cobalt Strike や Sliver などの攻撃フレームワークを引き続き追跡し、こうしたツールを使用した攻撃を効果的に防げるようにすることが重要です。Manjusaka が実際に広く展開されているのはまだ確認していませんが、世界中の攻撃者に採用される可能性があります。今回 Talos が情報公開するのは、Manjusaka の展開状況について早い段階でお知らせするためです。このフレームワークの機能と実際の使用が確認されることになった攻撃についても詳しく説明します。
調査は、悪意のある Microsoft Word の不正ドキュメントから始まりました。このドキュメントには Cobalt Strike ビーコンが含まれており、誘い込みの手口として、青海省海西モンゴル族チベット族自治州の最大の都市の 1 つであるゴルムド市で新型コロナウイルスの感染例が確認されたことに言及していました。調査中、このフレームワーク(GitHub で無料で入手可能)が使用されていること以外には、攻撃とフレームワークの開発者との間に直接的な関連性は確認されませんでした。なお、はっきりした被害者像を裏付けるデータは見つかっていません。ただ、被害者の少なさを考慮すればそれも当然のことで、攻撃は初期段階にあると推測されます。不正ドキュメントの作成時期が 2022 年 6 月後半であることがメタデータから判明したことも、その裏付けとなります。
不正ドキュメントの感染チェーンを調査していたところ、Manjusaka 感染をインストゥルメント化するためのインプラントが Cobalt Strike ビーコンと同じ IP アドレスに接続するのを確認しました。このインプラントは Rust プログラミング言語で記述されており、Windows および Linux オペレーティングシステム向けのサンプルが見つかりました。Windows 向けのインプラントには、インターネットでルーティングできない IP アドレスをコマンドアンドコントロール(C2)として持つテストサンプルが含まれていました。Talos は、GitHub で Manjusaka の C2 実行ファイルも発見しました。GoLang で記述された C2 ELF バイナリであり、十分に機能し、簡体字中国語のユーザーインターフェイスを備えています。C2 を分析する中で、構成を指定してインプラントを生成しました。開発者は、Manjusaka のインプラント生成フレームワークは Cobalt Strike や Sliver に似ていると謳っています。
公開された Manjusaka フレームワークの設計図には、さまざまなコンポーネント間の通信の記載があります。ですが、こうしたコンポーネントの多くは、無料で入手できる C2 バイナリには実装されていません。したがって、可能性としては次のいずれかとなります。
- 現在、フレームワークの開発が積極的に進められており、これらの機能はまもなく提供される。
- 開発者は、有料のサービス/ツールを介してこれらの機能を提供する予定であるか、すでに提供している。無料で入手できる C2 は、評価用のデモコピーにすぎない。
Manjusaka の設計図
Manjusaka の攻撃フレームワーク
このマルウェアインプラントは、「Manjusaka」という RAT ファミリです。Manjusaka の C2 は、GoLang で記述された ELF バイナリです。一方、インプラントは Rust プログラミング言語で記述されており、任意のコマンドの実行など、感染したエンドポイントの制御に使用できるさまざまな機能で構成されています。Talos は、インプラントの EXE バージョンと ELF バージョンを発見しました。Windows と Linux プラットフォームに対応するこれらのサンプルセットは、どちらもほぼ同じ RAT 機能と通信メカニズムのセットで構成されています。
通信
このサンプルは、固定アドレス「http[:]//39[.]104[.]90[.]45/global/favicon.png」に HTTP リクエストを送信します。この HTTP リクエストにはサーバーではなくサンプルによって定義される固定セッション Cookie が含まれています。HTTP リクエストのセッション Cookie は base64 でエンコードされており、バイナリデータ(感染したエンドポイントのフィンガープリントや C2 への登録のために使用されるランダムバイトとシステムの予備情報)の圧縮コピーも含まれています。以下の画像は、そうしたセッション Cookie を生成するために使用される情報を示したものです。
Cookie の情報は、圧縮され base64 にエンコードされる前に、以下の表のように配置されます。
通信は通常の通信パターンに従います。今回の場合、下の画像のように、インプラントは「/global/favicon.png」という URL にリクエストを送信します。
リクエストは HTTP GET ですが、データとして 0x191a の 2 バイトを送信します。応答は常に同じで、5 バイトの 0x1a1a6e0429 となります。これは C2 の標準応答であり、インプラントに対する何らかの種類のアクションに対応しているわけではありません。
セッション Cookie が提供されていない場合、サーバーから 302 コードが返り、http[:]//micsoft[.]com にリダイレクトされます。そして今度はさらに 301 コードが返り、http[:]//wwwmicsoft[.]com にリダイレクトされます。公開時点では、リダイレクトは研究者の注意をそらすためのトリックとなっているようです。ドメインと、この C2 の作成者と、C2 を実行している攻撃者との間に、直接的な相関関係は見つかりませんでした。
インプラントの機能
このインプラントは、多数のリモートアクセス型トロイの木馬(RAT)機能で構成されています。いくつかの標準機能と専用のファイル管理モジュールなどが含まれます。
C2 が受信したさまざまなリクエストを処理するためのケース切り替え
RAT が提供するコマンド
インプラントは、C2 サーバーから受信したリクエストと付随するデータに基づいて、感染したエンドポイントで次の機能を実行できます。
- 任意のコマンドの実行:「exe /c」を使用して、システム上で任意のコマンドを実行
- 指定されたファイルのファイル情報を取得:作成時刻と最終書き込み時刻、サイズ、ボリュームのシリアル番号、ファイルインデックス
- システムで確立されている現在のネットワーク接続(TCP および UDP)に関する情報を取得:ローカル ネットワーク アドレス、リモートアドレス、所有プロセス ID(PID)など
- ブラウザのログイン情報を収集:Chromium ベースのブラウザの場合、「SELECT signon_realm, username_value, password_value FROM logins」クエリを使用。収集対象とするブラウザは、Google Chrome、Chrome Beta、Microsoft Edge、360(Qihoo)、QQ Browser(Tencent)、Opera、Brave、Vivaldi
- パスワードをはじめとする Wi-Fi SSID 情報を収集:コマンド「netsh wlan show profile <WIFI_NAME> key=clear」を使用
- Premiumsoft Navicat のログイン情報を取得:Navicat は、MySQL、Mongo、Oracle、SQLite、PostgreSQL などさまざまな DB タイプに接続できるグラフィカルなデータベース管理ユーティリティ。インストールされているこのソフトウェアのレジストリキーをインプラントが読み取って各 DB サーバーの構成を列挙し、値(ポート、ユーザー名、パスワード(Pwd))を取得
- 現在のデスクトップのスクリーンショットを取得
- エンドポイントから、次のような包括的なシステム情報を取得
- システムメモリのグローバル情報
- プロセッサの電力情報
- 現在の温度および臨界温度(「SELECT * FROM MSAcpi_ThermalZoneTemperature」を使用して WMI から読み取り)
- システムに接続されているネットワーク インターフェイスに関する情報:名前
- 処理時間とシステム時間:ユーザー時間、終了時間、作成時間、カーネル時間
- プロセスモジュール名
- ディスクとドライブの情報:ボリュームのシリアル番号、名前、ルートパス名、ディスクの空き容量
- ネットワークアカウント名、ローカルグループ
- Windows のビルド番号とメジャーバージョン番号
- ファイル管理モジュールを有効化し、ファイル関連のアクティビティを実行
ファイル管理機能
インプラントのファイル管理機能には次のようなものがあります。
- ファイルの列挙:ディスク上の指定された場所にあるファイルを一覧表示。「ls」コマンドに相当する機能
- ファイルシステム上にディレクトリを作成
- 現在の作業ディレクトリの取得と設定
- ファイルのフルパスの取得
- ディスク上のファイルとディレクトリの削除
- 2 つの場所の間でファイルを移動。ファイルを新しい場所にコピーし、古いコピーを削除
ファイルのコピー操作(完了)と移動操作(一部)
- ファイルのデータの読み取りと書き込み
ELF 亜種
ELF 亜種は、Windows 向けの実行ファイルとほぼ同じ機能セットで構成されています。ただし、ELF 亜種には 2 つの重要な機能が欠けています。Chromium ベースのブラウザからログイン情報を収集する機能と、Wi-Fi のログイン情報を収集する機能です。
Windows バージョンと同様に、ELF 亜種も、エンドポイントから次のようなさまざまなシステム固有の情報を収集します。
- グローバルシステムの情報:ページサイズ、クロックティック数、現在の時刻、ホスト名、バージョン、リリース、マシン ID など
- /proc/meminfo のシステムメモリ情報:キャッシュメモリサイズ、空きメモリと合計メモリ、スワップメモリサイズ、スラブメモリサイズなど
- /proc/uptime のシステム稼働時間:システム稼働時間とコアのアイドル時間
- /proc/os-release および lsb-release の OS 識別情報
- /proc/stat のカーネルアクティビティ情報
- /proc/cpuinfo および /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq の CPU 情報
- /sys/class/hwmon および /sys/class/thermal/thermal_zone*/temp の温度情報
- /sys/class/net のネットワーク インターフェイス情報と統計情報
- デバイスのマウントとファイルシステム情報SCSI デバイス情報
- /etc/passwd およびユーザーのグループリストのアカウント情報
どちらのバージョンにも、機能的に同等のファイル管理モジュールが含まれています。このモジュールは、感染したシステム上のファイルとディレクトリを管理するためだけに使用されます。
機能的に同等のファイル管理モジュールを含む、インプラントの EXE バージョンと ELF バージョン
コマンドアンドコントロール サーバー
調査の過程で、Talos は GitHub でホストされている Manjusaka の C2 サーバーバイナリのコピー(hxxps://github[.]com/YDHCUI/manjusaka)を発見しました。
感染したエンドポイントを監視および管理するほか、Windows および Linux 向けのペイロードを生成できます。生成されるペイロードは、前述した Rust インプラントです。
C2 サーバーと管理パネルは主に、Rust ベースのインプラント/ステージャの管理とコマンドの発行に使用される Gin Web フレームワーク上に構築されています。
C2 サーバーのインプラント生成プロンプト
いくつかのオプションを入力して「生成」ボタンを押すと、以下の形式で C2 への GET リクエストが送信されます。
http://<C2_IP_ADDRESS>:<Port>/agent?c=<C2_IP_ADDRESS>:<PORT>&t=<EXTENDED_URL_for_C2>&k=<ENCRYPTION_KEY>&w=true
C2 サーバーは、リクエスト送信者用に構成された Rust ベースのインプラントを生成します。C2 は packr を使用して、Rust ベースの未構成インプラントを C2 バイナリ内に保存します。このバイナリは、パッケージ化された単一の C2 バイナリで、外部依存関係なしでインプラントを生成します。
C2 はダミーの Rust インプラントから成る「ボックス」(GoLang ベースの C2 バイナリ内の仮想フォルダ)を開きます。場所は「plugins/npc.exe」です。実行ファイルは、Rust インプラントのビルド済みバージョンです。C2 サーバーは、Web UI を介して入力された C2 情報に基づいてホットパッチをこの実行ファイルに適用します。
スケルトンの Rust インプラントには、C2 IP/ドメインのプレースホルダと、特殊文字「$」と「*」がそれぞれ 0x21 回繰り返された形式の拡張 URL が含まれています。
たとえばダミーインプラント内には、C2 IP/ドメインのプレースホルダが次のように 16 進数で記載されています。
24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
これは、次のような IP アドレスを持つ C2 に置き換えられます。
33 39 2E 31 30 34 2E 39 30 2E 34 35 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
こうして、先ほどの HTTP GET リクエストへの応答として、ホットパッチを適用したバイナリをダウンロードできるようになります。
攻撃:感染チェーン
今回の攻撃に関連して、不正ドキュメントが標的に配布され、感染したシステムで Cobalt Strike ビーコンが展開されたことも確認しています。
感染チェーンで使用された不正ドキュメントは、青海省海西モンゴル族チベット族自治州最大の都市の 1 つであるゴルムド市における新型コロナウイルスのパンデミックに関する報告と勧告を装ったものでした。具体的な内容は、新型コロナウイルスの感染例とその後の接触者追跡に関する報告です。
ゴルムド市における新型コロナウイルスの感染例の報告を装った不正ドキュメント
不正ドキュメントの分析
不正ドキュメントには VBA マクロが含まれています。このマクロは rundll32.exe を実行し、Metasploit シェルコード(ステージ 1)をプロセスに挿入して、次のステージ(ステージ 2)をメモリ内にダウンロードして実行します。
ステージ 1 シェルコードの接続先は、39[.]104[.]90[.]45/2WYz です。
ステージ 1 シェルコードがリモートロケーションから次のステージ(ステージ 2)をダウンロード
ステージ 2 の分析
リモートロケーションからダウンロードされた次のステージのペイロードは、また別のシェルコードです。構成内容は次のとおりです。
- XOR でエンコードされた実行ファイル:Cobalt Strike
- Cobalt Strike ビーコンを復号し、反射的にメモリにロードするシェルコード
メモリ内のステージ 3(Cobalt Strike ビーコン)を復号して MZ の先頭から実行するコード
ステージ 3:Cobalt Strike ビーコン
続いて、前のステージで復号された Cobalt Strike ビーコンが MZ ファイルの先頭から実行されます。ビーコンは、現在のプロセスのメモリに自身を反射的にロードできます。
DLL エクスポートのアドレスを計算して呼び出すことにより、ビーコンが現在のプロセスに自身を反射的にロード
ビーコンの構成は次のとおりで、0x4D シングルバイトキーで XOR エンコードされています。
BeaconType – HTTPS
Port – 443
SleepTime – 60000
MaxGetSize – 1048576
Jitter – 0
MaxDNS – Not Found
PublicKey –
b'0\x81\x9f0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x81\x8d\x000\x81\x89\x02\x81\x81\x00\x95\xe2\xd1\xdd1N\x99\x13W%\xdd\x86\x1ep\xf7c\x12\x8f\xf3\xc3\x81\x93\xc7\n84\xa2^T\x13\x93\x8d6\xec\xb5V\x931\x01\xd2\x87o\xa1\xa8\x10\xea\x9f\x8c\xc2uY\x92\xa0z\x82d1m\x02\xa44\xdbc\xdf\xd7\x1d#2U\x1b\x158\xc8\x1dqX\x91\xe5\x9b@\x9a\xe2\xea\x0b\xd2\xcd\x9f\xae\xb1h\x08\x15|\xa3\x0cc\xde<\x17o|\x0c\x96\x878\xd2\xb4|\x86}\xa7H\x99\xd7\x8fc\xc8#\xe7W7\xec\x8fmx\xeb\xe3{\x02\x03\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
C2Server – 39[.]104[.]90[.]45,/IE9CompatViewList.xml
UserAgent – Not Found
HttpPostUri – /submit.php
HttpGet_Metadata – Not Found
HttpPost_Metadata – Not Found
SpawnTo – b’\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00′
PipeName – Not Found
DNS_Idle – Not Found
DNS_Sleep – Not Found
SSH_Host – Not Found
SSH_Port – Not Found
SSH_Username – Not Found
SSH_Password_Plaintext – Not Found
SSH_Password_Pubkey – Not Found
HttpGet_Verb – GET
HttpPost_Verb – POST
HttpPostChunk – 0
Spawnto_x86 – %windir%\syswow64\rundll32.exe
Spawnto_x64 – %windir%\sysnative\rundll32.exe
CryptoScheme – 0
Proxy_Config – Not Found
Proxy_User – Not Found
Proxy_Password – Not Found
Proxy_Behavior – Use IE settings
Watermark – 999999
bStageCleanup – False
bCFGCaution – False
KillDate – 0
bProcInject_StartRWX – True
bProcInject_UseRWX – True
bProcInject_MinAllocSize – 0
ProcInject_PrependAppend_x86 – Empty
ProcInject_PrependAppend_x64 – Empty
ProcInject_Execute – CreateThread
SetThreadContext
CreateRemoteThread
RtlCreateUserThread
ProcInject_AllocationMethod – VirtualAllocEx
bUsesCookies – True
攻撃者の特定
攻撃者の特定について考える前に、マルウェアの開発者と攻撃実行者を区別することが重要です。C2 バイナリは、すべての機能は揃っていないものの十分に機能する自己完結型の形で公開されています。つまり、誰でもダウンロードして、今回確認した攻撃で使用できたということです。
そのため、攻撃者を特定する手がかりになるものとして解釈し得るデータポイントをリストアップすることにしました。また、分析を行うようセキュリティコミュニティに要請し、攻撃者やフレームワークの背後にいる開発者の特定に役立つ可能性のあるデータポイントが他にもあれば、リストに追加してもらうようにしました。
今回の攻撃に関しては、攻撃者の特定につながる手がかりは多くありません。確信を持って公式に言えることは、ゴルムド市で新型コロナウイルスの感染例が確認されたことが不正ドキュメントで言及されていて、その詳細が時系列で記載されているという事実だけです。
Manjusaka の開発者の特定については、手がかりになるものがいくつかあります。
- Rust ベースのインプラントで、依存関係の解決に標準のio ライブラリリポジトリを使用していない。代わりに、中国科学技術大学のドメインである ustc[.]edu[.]cn にあるミラーを使用するよう、開発者が手動で構成している。
- C2 メニューとオプションはすべて簡体字中国語で書かれている。
- Talos の OSINT では、このフレームワークの作成者が中国の広東省にいることが示唆されている。
まとめ
Manjusaka の攻撃フレームワークは誰でも入手できます。つまり、広く入手できる攻撃技術が、犯罪目的のマルウェアを使用する攻撃者と APT 攻撃者のどちらからも支持を集めていることになります。この新しい攻撃フレームワークにはインプラントに期待されるすべての機能が含まれていますが、最新のプログラミング言語で記述されていて、移植も可能です。フレームワークの開発者は、MacOSX のようなプラットフォームを簡単に攻撃対象に加えることができます。組み込みデバイスで実行されるため標的にされにくい Linux も例外ではありません。十分に機能するバージョンの C2 が入手できるようになったことで、攻撃者の間でこのフレームワークの使用が広まる可能性が高まっています。
簡単に入手できて、さまざまな攻撃者が悪用する可能性のあるこうしたツールやフレームワークに対し、警戒を怠らないようにする必要があります。リスク分析アプローチに基づいた多層防御戦略には最高の予防効果がありますが、優れたインシデント対応計画で常に補完する必要があります。インシデント対応計画は机上の演習でテストするだけでなく、攻撃者との実際の攻防で試されるたびに見直し改善しておくことが重要です。
カバレッジ
お客様がこの脅威を検出してブロックするための方法を以下に記載します。
Cisco Secure Endpoint(旧 AMP for Endpoints)は、この記事で説明したマルウェアの実行を阻止するのに最適です。Cisco Secure Endpoint の無料トライアルはこちらからお申し込みください。
Cisco Secure Web Appliance の Web スキャンは、悪意のある Web サイトへのアクセスを防止し、上述したような攻撃で使用されるマルウェアを検出します。
Cisco Secure Email(旧 E メールセキュリティ)は、攻撃の一環として攻撃者が送りつける不正な電子メールをブロックします。Cisco Secure Email の無料トライアルはこちらからお申し込みください。Threat Defense Virtual、適応型セキュリティアプライアンス、Meraki MX など、
Cisco Secure Firewall(旧次世代ファイアウォールおよび Firepower NGFW)アプライアンスは、この脅威に関連する悪意のあるアクティビティを検出できます。
Cisco Secure Malware Analytics(Threat Grid)は、悪意のあるバイナリを特定し、シスコのすべてのセキュリティ製品に保護機能を組み込みます。
Umbrella(シスコのセキュア インターネット ゲートウェイ(SIG))は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。Umbrella の無料トライアルはこちらからお申し込みください。
Cisco Secure Web Appliance(旧 Web セキュリティアプライアンス)は、危険性のあるサイトを自動的にブロックし、ユーザーがアクセスする前に疑わしいサイトをテストします。
特定の環境および脅威データに対する追加の保護機能は、Firewall Management Center から入手できます。
Cisco Duo は、ユーザーに多要素認証を提供し、承認されたユーザーのみがネットワークにアクセスできるようにします。
オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.org で購入可能な最新のルールパックをダウンロードすることで、最新状態を維持できます。
IOC(侵入の痕跡)
この調査の IOC は、こちらの GitHub リポジトリでも提供しています。
ハッシュ
不正ドキュメントおよび Cobalt Strike ビーコンのサンプル
58a212f4c53185993a8667afa0091b1acf6ed5ca4ff8efa8ce7dae784c276927
8e7c4df8264d33e5dc9a9d739ae11a0ee6135f5a4a9e79c354121b69ea901ba6
54830a7c10e9f1f439b7650607659cdbc89d02088e1ab7dd3e2afb93f86d4915
Rust のサンプル
8e9ecd282655f0afbdb6bd562832ae6db108166022eb43ede31c9d7aacbcc0d8
a8b8d237e71d4abe959aff4517863d9f570bba1646ec4e79209ec29dda64552f
3f3eb6fd0e844bc5dad38338b19b10851083d078feb2053ea3fe5e6651331bf2
0b03c0f3c137dacf8b093638b474f7e662f58fef37d82b835887aca2839f529b
C2 バイナリ
fb5835f42d5611804aaa044150a20b13dcf595d91314ebef8cf6810407d85c64
955e9bbcdf1cb230c5f079a08995f510a3b96224545e04c1b1f9889d57dd33c1
URL
https[://]39[.]104[.]90[.]45/2WYz
http[://]39[.]104[.]90[.]45/2WYz
http[://]39[.]104[.]90[.]45/IE9CompatViewList.xml
http[://]39[.]104[.]90[.]45/submit.php
User-Agent
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Mozilla/5.0 (Windows NT 8.0; WOW64; rv:58.0) Gecko/20120102 Firefox/58
Mozilla/5.0 (Windows NT 8.0; WOW64; rv:40.0) Gecko
IP
39[.]104[.]90[.]45
本稿は 2022 年 08 月 02 日に Talos Group のブログに投稿された「Manjusaka: A Chinese sibling of Sliver and Cobalt Strike」の抄訳です。