ESET/サイバーセキュリティ情報局

Cookieを悪用する新型ツールを解析! 中国系APTが使う新たなマルウェアとは

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はキヤノンマーケティングジャパンが提供する「サイバーセキュリティ情報局」に掲載された「APTグループEvasive Pandaがデータ窃取に使用しているCloudScoutツールセットを発見」を再編集したものです。

 ESET社は、中国とつながりのあるAPTグループEvasive Pandaがさまざまなクラウドサービスからデータを窃取するために使用しているツールセットを発見し分析しました。その詳細について解説します。

 このブログでは、2022年から2023年にかけて、Evasive Pandaが台湾の政府機関と宗教団体を侵害した後に使用していたツールセットであるCloudScoutを、ESET社が技術的に分析した結果をお伝えします。CloudScoutツールセットは、窃取したWebセッションCookieを悪用し、さまざまなクラウドサービスからデータを取得できます。CloudScoutはプラグインを通じて、Evasive Pandaの代表的なマルウェアフレームワークであるMgBotとシームレスに動作します。

本ブログの要点:
・CloudScoutツールセットは、2022年から2023年にかけて台湾の宗教団体と政府機関のネットワークで検出されました
・CloudScoutは、MgBotのプラグインによって提供される窃取されたCookieを利用し、さまざまなクラウドサービスに保存されているデータにアクセスし、データを外部に送信します
・ESET社は、Google Drive、Gmail、Outlookからデータを窃取することを目的とする3つのCloudScoutモジュールを分析しました。少なくともそのほかに7つのモジュールが存在していると考えられます
・Outlookメールのメッセージを窃取するためにCloudScoutのWebリクエストのハードコードされているフィールドは、攻撃で使用された検体が台湾のユーザーを標的として巧妙に作成されていることを示しています
・各CloudScoutモジュールはC#でプログラムされており、C++でプログラムされたMgBotプラグインによって展開されています。

Evasive Pandaのプロフィール

 Evasive Pandaは、少なくとも2012年から活動を開始している中国とつながりのあるAPTグループであり、BRONZE HIGHLANDDaggerfly、またはStormBambooとも呼ばれています。Evasive Pandaの目的は、チベットの独立運動、台湾や香港の宗教・学術機関、中国の民主化運動の支持者など、中国共産党政府の利益に反する国や組織に対してサイバースパイ活動を行うことです。ESET社は、Evasive Pandaがベトナム、ミャンマー、韓国などの国々に対してもサイバースパイ活動を行っていることも観察しています。
 
Evasive Pandaは、これまで新しい多くの攻撃手法を編み出しています。ESET社は、Evasive Pandaのオペレーターがサプライチェーン攻撃や水飲み場攻撃、DNSハイジャックなど、高度なTTP(戦術、技術、手順)を利用していることを確認しています。さらに、Microsoft Office、Confluence、Webサーバーアプリケーションに影響を与える最新の脆弱性(CVE)を悪用しています。このグループはまた、強力なマルウェア開発の能力を有しており、Windows、macOS、Androidに対応する多くのマルチプラットフォームバックドアを開発しており、その高度な能力を誇示しています。Windowsを攻撃するために最も使用されているのがMgBotツールです。MgBotは、2012年から利用されており、ESET社のブログで詳述しているように、メインのインプラントと現在までに特定されている8つのプラグインから構成される独自のマルウェアフレームワークです。また、最近ではNightdoorも開発されています。Nightdoorは、別のESET社のブログで説明しているように、C&Cとの通信にパブリッククラウドサービスを利用する、多機能なバックドアです。

概要

 2023年の初めにESET社は、台湾の政府機関において、Evasive Pandaが3つの未知の.NETモジュール(ESET社はそれぞれCGD、CGM、COLと命名)を展開していることを検出しました。これらのモジュールは、認証されたWebセッションを乗っ取り、Google Drive、Gmail、およびOutlookなどのパブリッククラウドサービスにアクセスするように設計されています。WebブラウザーデータベースからCookieを窃取し、特定のWebリクエストにおいて窃取したCookieを使用してクラウドサービスにアクセスする手法が取り入れられています。窃取された認証情報は、二要素認証(2FA)やIPアドレスの追跡などのセキュリティ機能によってブロックされる可能性がありますが、攻撃者がWebセッションクッキーを窃取して利用する場合、これらのセキュリティ機能を回避し、クラウドに保存されているデータを被害者のマシンから直接取得できます。2023年、GoogleはGitHubでデバイスバウンドセッション認証情報(Device Bound Session Credentials:DBSC)プロジェクトをリリースし、2024年にはChrome 127のアップデートでアプリケーションバウンド暗号化(App-Bound Encryption)機能をリリースしました。これらはCloudScoutのようなCookieを窃取するマルウェアへの防御策であり、このツールセットを無力化できる可能性があります。

 3つのモジュールのコードを詳細に分析したところ、開発者からCloudScoutというコードネームが付けられている、開発フレームワークの基盤が明らかになりました。このブログでは、C#でプログラムされたこのモジュラーフレームワークの詳細な分析結果をお伝えします。ESET社が知る限り、CloudScoutのツールセットはこれまで検出や文書化されていません。

標的となった国や組織

 ESET社のテレメトリ(監視データ)によると、CloudScoutは台湾を標的とする2つのインシデントで観測されました。

・2022年5月、台湾の宗教団体のネットワークがMgBotとNightdoorによって侵害されました。このインシデントでは、MgBotが使用され、CloudScoutモジュールを展開するプラグインがインストールされました
・2023年2月、CloudScoutモジュールとNightdoorインプラントが台湾政府に関連する機関と考えられる場所で検出されました

 さらに、いくつかのハードコードされたHTTPリクエストに、タイムゾーンとしてTaipei Standard Time、言語パックとしてzh-CNが含まれていました(図1を参照)。両方ともに、これらの検体が台湾のユーザーを標的に作成されたことを示しています。

図1. COLモジュールからOutlook Web AccessへのHTTPリクエスト

技術的な分析

 CloudScoutは.NETで開発されたマルウェアフレームワークで、さまざまなクラウドサービスを標的とする複数のモジュールで構成されています。CloudScoutという名前は、入手したモジュールのPDBパスから付けられています。

・E:\project\git_new\MProjects\Code\CLOUDSCOUT\GoogleDriver\CGD\obj\Debug\CGD.pdb
・E:\project\git_new\MProjects\Code\CloudScout\Gmail\CGM\obj\Debug\CGM.pdb
・E:\project\git_new\MProjects\Code\CloudScout\Outlook\COL\obj\Debug\COL.pdb

 また、フレームワークのほかの7つのモジュールに関する記載も見つかっています(「CommonUtilities:CloudScoutの中核」セクションを参照)。このブログの執筆時点では、ESET社はこれらのモジュールが侵害されたマシンに展開されているのを確認しておらず、攻撃者がこれらのモジュールを標的に応じて展開している可能性があります。すべてのCloudScoutモジュールを以下に示します。

・CGD
・CGM
・COL
・CTW
・CFB
・GMQ
・MEXC
・CEXC
・CZI
・CNE

 Google Driveを標的にするモジュールはCGD、Gmailを標的にするモジュールはCGM、Outlookを標的にするモジュールはCOLと呼ばれているように、命名に規則性があるため、CTWとCFBはそれぞれX(旧Twitter)とFacebookを標的にしている可能性があります。しかし、そのほかモジュールの目的は明らかになっていません。

開発時期

 図2に示すように、CloudScoutモジュールの.NETマニフェストのAssemblyCopyrightフィールドの値がCopyright © 2020となっており、CloudScoutツールセットが2020年頃に開発された可能性があります。.NETマニフェストには正しい情報が記載されていない可能性もありますが、ESET社が検出したすべての検体でこの値は同じになっています。さらに、CGDとCGMのAssemblyVersionには異なるバージョンが記載されており、これらのバージョンは、コードベースに追加された変更を反映しています。

図2. CGDモジュールのマニフェスト

 また、ESET社は、埋め込まれている内部のカスタムライブラリーパッケージCommonUtilitiesのバージョンが異なっていることも発見しました。表1に、CommonUtilitiesの異なるバージョンが含まれているCGD、CGM、COLの異なるバージョンを示します。

表1. CloudScoutモジュールのバージョン

 .NETマニフェストが正確であるならば、2020年だけでEvasive Pandaの3つの新しいツールセットが観測されていることになります。ほかの2つのバージョンは、初めて登場したNightdoorとMgBotの新しいUDPの亜種UDT亜種の後継)です。

古いモジュールへの新しい機能の追加

 3つのモジュールで共有されている共通のRC4暗号化キーから、過去に遡って調査したところ、CGMはGmck.dllというMgBotプラグインによってデプロイされ、C++でプログラムされていることがわかりました。このプラグインは、2022年に先に説明した台湾の宗教団体にある2台のマシンがEvasive Pandaによって侵害されたインシデントで検出されました。このインシデント(図3に図示)では、MgBotはCGMモジュールをインストールし、被害者のGmailアカウントにアクセスしてメールや個人情報をダウンロードしました。

図3. 台湾の宗教団体のネットワークで観察されたセキュリティ侵害チェーン

 Gmck.dll(このブログではGmckと呼びます)は、.NETモジュールのCGMをバイナリに入れて配信します。CGMを実行するために、Gmckは最初にハードコードされたパスにあるディスクにモジュールをドロップし、ICRMetaHostとICRRuntimeHostを使って共通言語ランタイム(CLR)を開始します。最後に、図4に示すように、CGMのエントリポイント関数(ModuleStart)を参照して、ExecuteInDefaultAppDomainを呼び出します。

図4. CGM DLLをロードするコード

 ESET社のテレメトリによると、CGDとCOLモジュールも同じステージングフォルダーに書き込まれています(表2を参照)。

表2. CloudScoutモジュールを展開するパス

 ステージングフォルダーNVIDlAは、単純なホモグラフを使用して意図的にスペルを変更しています。Dの後の文字は小文字のlですが、そのほかの文字はすべて大文字です。強調表示しているサブフォルダーは、MgBotプラグインにちなんで命名されていると考えられます。残念ながら、olckとdankdhプラグインは入手できていません。

 CGMモジュールが正常に展開された後に、Gmckプラグインは設定ファイルとしてCGMにブラウザーCookieを提供する必要があります。Gmckは、表3に示すWebブラウザーのデータベースファイルからこれらのCookieを抽出します。Chrome 127およびEdge 128でアプリケーションバウンド暗号化(App-Bound Encryption)がリリースされたことで、GmckはChromeおよびEdgeからCookiesデータベースファイルを復号できなくなりました。

表3. GmckがCookieを抽出するデータベースファイル

 この設定ファイルには、.dat拡張子が付けられ、CGMが認識できるように、0dda5a8d-e4c2-477d-85df-fcb611a62ffeキーを使用してRC4で暗号化されている必要があります。このRC4キーは3つすべてのCloudScoutモジュールで設定ファイルの復号に使用されており、MgBotプラグインも暗号化にこのキーを使用する必要があります。

 図5に、GmckとCGMの関係をまとめます。

図5. GmckとCGMのやり取り

設定の取得

 図5に示す設定ファイルcm_cke_ <yyyyymmdd> _<hhmmss>.datは、MgBotプラグインがWebブラウザーのデータベースからCookieを抽出した後に、このプラグインによって提供されます。CloudScoutモジュールは、作業ディレクトリを継続的に監視し、.dat拡張子があるファイルを検索して新しい設定を取得します。.datファイルが見つかると、CloudScoutモジュールはそのファイルを処理するために新しいスレッドを毎回生成します。つまり、同時に複数の設定ファイルを処理することが可能です。新しく生成されたスレッドは、設定の解析からすべてのターゲットデータのダウンロードまで、すべてのデータ収集サイクルの処理を行います。このサイクルが終了すると、同じサイクルを誤って繰り返さないように、設定ファイルはディスクから削除されます。

 設定ファイルはJSON形式になっています。この設定ファイルには、tokenとconfigの2つの主要なデータ構造が含まれます。token構造には、ドメイン名別に整理されたCookieが含まれます。configには、収集したデータをダウンロードし、外部に送信するためにステージングするための設定と、プログラムを実行し続けるか、データ収集サイクルの後に終了するかを決定する設定(dealoneフィールド)が含まれます。設定ファイルの例を図6に示します。

図6. CGMモジュールのGmckプラグインによって生成された設定の例

CommonUtilities:CloudScoutの中核

 CommonUtilitiesパッケージは、CloudScoutの中核であり、図7に示すように、モジュールを実行するために必要なすべての低レベルのライブラリーを提供します。このパッケージはCloudScoutモジュールのリソースセクションに格納され、ModuleStart関数を実行するときに最初にロードされます。

図7. CommonUtilitiesの設計の概要

 図8に示すように、CommonUtilitiesの.NETマニフェストには、すべてのクライアントモジュールが記載されています。

図8. CommonUtilitiesのマニフェスト

 同様のオープンソースライブラリーがオンラインで豊富に利用可能であるにもかかわらず、CommonUtilitiesには独自のライブラリーが多く実装されています。オープンソースのライブラリーと比較すると、開発者はこのような独自のライブラリーを柔軟に利用することができ、インプラントの内部的な動作を容易に制御できるようになります。また、独自のライブラリーは予測不能な挙動を示すことがあるため、ESET社はこれらの動作を理解するためにコードを詳細に分析しなければなりませんでした。これらの独自ライブラリーの例として、HTTPAccessとManagedCookieがあります。

 HTTPAccessは、CloudScoutモジュールのすべてのHTTP通信を処理するために必要な関数を提供します。図9に示すように、HTTPヘッダーを修正する機能があります。

図9. HTTPヘッダーを変更するHTTPAccessのコード

 このコードスニペットで強調表示しているManagedCookieクラスのインスタンスであるthis.mngCkオブジェクトは、巧妙に作成したHTTPヘッダーにCookieを統合するために使用されています。名前が示しているように、ManagedCookieはCloudScoutと標的のクラウドサービス間のWebリクエストのCookieを管理する関数を提供します。このクラスが特殊であるのは、多くのCookieをデフォルトの.NETのCookieオブジェクトに変換できるCookieパーサーの包括的なリストとなっていることです。図10には、Cookieの属性と値のペアの各組み合わせを一致させるために作成されたさまざまな正規表現を示します。

図10. Cookieの属性と値のペアの各組み合わせを処理するためのさまざまな正規表現

CloudScoutの構造

 すべてのCloudScoutモジュールは、図11に示すように、アーキテクチャーが共通しています。モジュールのコア機能はCloud名前空間にあり、各モジュールでほぼ同一になっています。実装が異なっているのは、認証とデータの取得に関する機能のみです。この理由は、各モジュールが、標的とするクラウドサービスに応じて、特定のWebリクエストを生成し、特定のWeb応答を解析する必要があるためです。

図11. 3つのCloudScoutモジュールで共通する設計

 CloudScoutの合理的な設計とCloud名前空間の重要なロジックを図12に示します。

図12. CloudScoutモジュール設計の概要

認証

 一般的にWebプラットフォームはCookieの詳細について詳しく文書化していません。認証クッキーは有効期限が短い傾向にあり、ユーザーがWebブラウザーを介してプラットフォームとやりとりするときに頻繁に更新されます。しかし、セッションが有効である限り、表4に記載されているCookieはCloudScoutによって悪用され、クラウドサービスから重要なデータにアクセスされダウンロードされる恐れがあります。

表4. CloudScoutモジュールによって処理される認証用Cookie

 X-OWA-CANARYは、クロスサイトリクエストフォージェリ攻撃を防ぐためにMicrosoft Outlook Web Access(OWA)が使用するセキュリティCookieです。このCookieは、ユーザーを認証するために各セッションが開始される時に割り当てられます。図13に示すように、CloudScoutのCOLモジュールは、RPSSecAuthとClientId Cookieを使用して新しいセッションを確立し、再認証することで、X-OWA-CANARY Cookieを利用できないときに取得する仕組みを実装しています。

図13. X-OWA-CANARY Cookieを取得するコード

データの取得

 CloudScoutモジュールは、認証が完了すると、一般のユーザーがWebブラウザーを使用するのと同じ方法で、侵害したクラウドサービスのアカウントを参照します。各CloudScoutモジュールは、この操作を行うために、複雑なHTMLパーサーと、実行するWebリクエストセットをハードコードして装備しており、Web応答から重要なデータを識別して抽出します。

 例えば、CGMモジュールとCOLモジュールは、それぞれGmailとOutlookを標的としており、メールフォルダーのリストとメールメッセージを取得します。Gmail Webサーバーが提供するHTMLコンテンツからメールヘッダー、メール本文、添付ファイルを抽出するためにCGMが実行する手順を、図14に示します。

図14. HTMLページを解析してメールメッセージのデータを抽出するコード

一方、CGDはGoogle Driveのユーザー情報、完全なディレクトリ階層、および拡張子が.doc、.docx、.xls、.xlsx、.ppt、.pptx、.pdf、.txtのファイルを取得します。ドキュメントのダウンロードURLを生成するCGDのコードスニペットを図15に示します。

図15. Google DriveのダウンロードURLを生成するコード

 このモジュールは、ファイルまたはメールであっても、ダウンロードした各アイテムに独自のヘッダーを追加します。この独自のヘッダーには、マルウェアによって割り当てられるクライアントID、メールの件名、ファイル名、クラウドサービスのユーザー名などの項目のメタデータが含まれます(表5)。ヘッダーを追加しているのは、自動化システムによって窃取したデータを大規模に処理し、インデックスをすばやく作成して分析している可能性が高いと考えられます。

表5. ダウンロードしたメールやファイルに追加される独自のヘッダー

 ヘッダーが追加されると、各項目は設定ファイルに使われたのと同じRC4キーで暗号化され、<pseudorandom_GUID>.<custom_extension>というファイル名で保存されます。 <custom_extension>は窃取したデータのタイプを示します(表6を参照)。

表6. 各データカテゴリーのファイル名に付けられる拡張子

 次に、すべての項目は<pseudorandom_GUID> .hxkz_zipという名前のZIPアーカイブに圧縮され、設定ファイルのdatapathフィールドで指定される外部に送信するためのディレクトリに保存されます。このアーカイブは後でMgBotかNightdoorのいずれかによって送信されます。最後のステップで、CloudScoutモジュールは、dealoneフラグをチェックして、終了するか、実行を継続して新しいデータ収集サイクルを開始する新しい設定ファイルを待機する前に、データ収集サイクルで生成された送信するファイル以外のすべてのアーティファクトを削除して、完全にクリーンアップします。

結論

 CloudScoutは、Evasive Pandaがクラウドサービスに保存されているデータを窃取するために使用している.NETのツールセットです。CloudScoutは、MgBotの拡張機能として実装され、Webブラウザーから認証セッションを乗っ取るためにパス・ザ・クッキーの手法を使用します。

 このブログでは、CloudScoutフレームワークの高度な設計について解説し、Evasive Pandaの高い技術力と、クラウドに保存されているドキュメント、ユーザープロファイル、メールがスパイ活動で重要な役割を果たしていることを説明しました。

IOC(セキュリティ侵害の痕跡)

 IoC(セキュリティ侵害の痕跡)の詳細なリストと検体は、ESETのGitHubリポジトリに掲載されています。

ファイル

ネットワーク

MITRE ATT&CKの技術

 この表は、MITRE ATT&CKフレームワークのバージョン15を使用して作成されています。

戦術 ID 名前 説明
リソース開発 T1583.004 インフラストラクチャの取得:サーバー vasive Pandaは、MgBotおよびNightdoorのC&Cインフラストラクチャのためにサーバーを取得しています。
T1587.001 能力の開発:マルウェア Evasive Pandaは、MgBot、CloudScout、Nightdoorなどの独自のインプラントを開発しています。
実行 T1569.002 システムサービス:サービスの実行 MgBotは、Windowsサービスとして実行されます。
T1106 APIによる実行 MgBotインストーラは、Windows APIを使用してプロセスを作成します。Gmckは、ExecuteInDefaultAppDomainを使用して、共通言語ランタイム(CLR)でCGMを実行します。
常駐化 T1543.003 システムプロセスの作成または修正:Windowsサービス MgBotは、既存のアプリケーション管理サービスのDLLパスを独自のパスに置き換えます。
権限昇格 T1548.002 権限制御機構の悪用:ユーザーアクセス制御のバイパス MgBotは、UACのバイパスを実行します。
防衛機能の回避 T1140 ファイルや情報の難読化解除と復号化 Gmckは、Chrome、Edge、Firefox Webブラウザのデータベースを解読し、Cookieを抽出します。
T1112 レジストリの変更 MgBotは、常駐するためにレジストリを変更します。
T1027 ファイルや情報の難読化 Gmckは、Cookieが含まれる設定を難読化します。
T1550.004 別の認証材料の使用:Webセッションクッキーの窃取 CloudScoutは、クラウドリソースにアクセスするために窃取したCookieを使用します。
T1036.005 なりすまし:正規のモジュールの名前や場所を模倣する CloudScoutモジュールは、NVIDIAディレクトリに似せている%ProgramData%%NVIDlAにインストールされます。
認証情報へのアクセス T1539 Webセッションクッキーの窃取 Gmckは、Cookieを窃取します。
探査 T1082 システム情報の検出 gBotは、システム情報を収集します。
収集 T1560.001 収集したデータのアーカイブ:ユーティリティを利用したアーカイブ CloudScoutモジュールは、SharpZipLibを使用して、外部に送信する前にデータを圧縮します。
T1530 クラウドストレージオブジェクトのデータ CGDは、Google Driveに保存されたファイルをダウンロードします。
T1114.002 メールの収集:リモートからのメールの収集 CGMとCOLは、それぞれGmailとOutlook Web Accessのメールにアクセスして収集します。
C&C(コマンド&コントロール) T1095 アプリケーションレイヤープロトコル以外の手法: MgBotは、C&CサーバーとUDPを介して通信します。
情報の外部への送信 T1041 C&Cチャネルからの送信 MgBotは、収集したデータをC&Cに送信します。