執筆者:Sarah Yoder、John Wolfram、Ashley Pearson、Doug Bienstock、Josh Madeley、Josh Murchie、Brad Slaybaugh、Matt Lin、Geoff Carstairs、Austin Larsen
はじめに
Google Threat Intelligence Group(GTIG)は、米国の被害組織に対して永続的なアクセスを維持するために使用されているBRICKSTORMマルウェアの活動を追跡しています。2025年3月以降、Mandiant Consultingは複数の業界分野にわたる侵害対応を行ってきました。特に、法務サービス、Software as a Service(SaaS)プロバイダー、ビジネス・プロセス・アウトソーサー(BPO)、およびテクノロジー分野が顕著です。これらの標的の価値は典型的な諜報任務にとどまらず、ゼロデイ開発を促進するためのデータ提供や、下流の被害者へのより広範なアクセスのためのピボットポイント確立につながる可能性があります。
私たちはこの活動をUNC5221および密接に関連する、中国に関連すると疑われる脅威クラスターに帰属させています これらは、ネットワークアプライアンスを標的としたゼロデイ脆弱性の悪用を含む高度な能力を用います。UNC5221は、Silk Typhoonとして公に報告されているアクターと同義に用いられてきましたが、GTIGは現時点で両クラスターが同一であるとは見なしていません。
これらの侵害は、従来のエンドポイント検知・対応(EDR)ツールをサポートしないアプライアンスにバックドアを展開することで、長期にわたるステルスなアクセスを維持することに特に重点を置いて実施されています。アクターは、セキュリティテレメトリを最小限、あるいはほとんど生成しない横展開およびデータ窃取の手法を用います。これに、BRICKSTORMバックドアの改変が組み合わさることで、平均393日間にわたり被害環境で未検知のまま活動できています。Mandiantは、組織がアプライアンスに関する脅威モデルを再評価し、この高度に回避的なアクターに対するハント演習を実施することを強く推奨します。本稿では、BRICKSTORM関連侵害における脅威アクターのライフサイクルを更新して共有するとともに、この活動をハントし防御するために組織が取るべき具体的かつ実行可能な手順を提示します。

図1:BRICKSTORMの標的
脅威アクターのライフサイクル
BRICKSTORMの背後にいるアクターは、永続性を維持し、従来のセキュリティツールからの可視性を最小化するために高度な手法を用います。本セクションでは、複数のMandiant調査で観測された手法を、顧客情報を匿名化したうえで概観します。
初期アクセス
BRICKSTORM侵害に関するMandiantの調査全体で一貫した課題は、初期侵入ベクターの特定です。多くの場合、平均滞在期間393日がログ保持期間を超えており、初期侵入の痕跡がすでに利用できませんでした。こうした課題にもかかわらず、入手可能な証拠のパターンは、アクターが境界およびリモートアクセス基盤の侵害に注力していることを示しています。
少なくとも1件の事例では、アクターはゼロデイ脆弱性を悪用してアクセスを獲得しました。Mandiantは、ライフサイクルの早期に複数の他のエッジアプライアンスからこのアクターが活動していた証拠を確認していますが、脆弱性悪用の決定的な証拠は見つけられませんでした。2025年4月の以前のブログ投稿 で述べたとおり、Mandiantは侵入経路を隠蔽することを目的とした幅広いアンチフォレンジック機能を含む、侵害後スクリプトの使用を確認しています。
足場の確立
このアクターが主に使用するバックドアはBRICKSTORMであり、Mandiantおよび他者により以前議論されています。BRICKSTORMにはSOCKSプロキシ機能が含まれ、Goで書かれているため幅広いクロスプラットフォーム対応があります。これは、従来のEDRツールをサポートしないアプライアンスプラットフォームにバックドアを展開するというアクターの嗜好を支えるうえで不可欠です。Mandiantは、複数メーカーのLinuxおよびBSDベースのアプライアンス上でBRICKSTORMの痕跡を確認しています。Windows向けBRICKSTORM亜種の証拠はあるものの、Mandiantは調査で観測していません。アプライアンスはしばしば資産管理が不十分で、セキュリティチームによる監視対象外となり、集中型セキュリティログ基盤から除外されています。BRICKSTORMは多様なアプライアンス種別で見つかっていますが、UNC5221は一貫してVMware vCenterおよびESXiホストを標的としています。複数の事例で、脅威アクターはVMwareシステムへピボットする前にネットワークアプライアンスへBRICKSTORMを展開しました。アクターは有効な認証情報を用いて環境内のvCenterサーバーへ横展開しており、これらの認証情報はネットワークアプライアンス上で動作するマルウェアにより取得された可能性が高いです。
異なる被害組織から回収したサンプルの分析により、BRICKSTORMが継続的に開発されている証拠が見つかりました。中核機能は維持されている一方で、一部のサンプルはGarbleで難読化されており、一部はカスタムwssoftライブラリの新バージョンを含んでいます。Mandiantは、ハードコードされた将来の特定日まで待機し、その後に設定されたC2ドメインへビーコンを開始する「遅延」タイマーを内蔵したBRICKSTORMサンプルを1件回収しました。注目すべき点として、このバックドアは被害組織がインシデント対応調査を開始した後に内部vCenterサーバーへ展開されており、脅威アクターが積極的に監視し、永続性維持のために戦術を迅速に適応できることを示しています。
既報のとおり、BRICKSTORMの展開は標的アプライアンスに溶け込むよう設計されていることが多く、命名規則だけでなくサンプルの機能自体も正当な活動を装うように作られています。MandiantはC2としてCloudflare WorkersやHerokuアプリケーションを使用するサンプル、ならびにsslip.ioやnip.ioを用いてC2のIPアドレスへ直接解決するサンプルを確認しています。回収したサンプル群では、被害者間でC2ドメインの再利用は確認されていません。
権限昇格
ある調査で、MandiantはvCenterサーバーを分析し、脅威アクターがvCenterのWebインターフェースを提供するApache Tomcatサーバー向けに悪意あるJava Servletフィルターをインストールしていたことを確認しました。Servletフィルターは、WebサーバーがHTTPリクエストを受信するたびに実行されるコードです。通常、フィルターのインストールには設定ファイルの変更とアプリケーションの再起動または再読み込みが必要ですが、アクターはカスタムドロッパーを使用して変更を完全にメモリ内で行い、非常にステルス性を高め、再起動の必要性をなくしました。MandiantがBRICKSTEALとして追跡しているこの悪意あるフィルターは、vCenterのWebログイン用Uniform Resource Indicator(URI)/web/saml2/sso/*へのHTTPリクエストで動作します。存在する場合、HTTP Basic認証ヘッダーをデコードし、そこにユーザー名とパスワードが含まれている可能性があります。多くの組織はvCenterにActive Directory認証を使用しているため、BRICKSTEALはそれらの認証情報を取得できる可能性があります。vCenterにログインするユーザーは、企業内の他システムでも高い権限を持つことがよくあります。以前共有したvSphereのハードニングガイダンスには、このシナリオでBRICKSTEALが利用可能な認証情報を取得する能力を軽減する手順(多要素認証(MFA)の強制など)が含まれています。
VMware vCenterは、vSphere仮想化プラットフォームの管理レイヤーとして機能し、VMの作成、スナップショット、クローンなどの操作が可能であるため、脅威アクターにとって魅力的な標的です。少なくとも2件の事例で、脅威アクターはvCenterへのアクセスを利用して、ドメインコントローラー、SSOアイデンティティプロバイダー、シークレットボルトなどの重要システム向けWindows Server VMをクローンしました。これは他の脅威アクターも使用してきた手法です。仮想マシンのクローンがあれば、脅威アクターはファイルシステムをマウントして、Active Directory Domain Servicesデータベース(ntds.dit)など関心のあるファイルを抽出できます。これらのWindows Serverにはセキュリティツールがインストールされている可能性が高いものの、脅威アクターはクローンを起動しないためツールは実行されません。以下の例は、ローカルのvSphere Administratorアカウントを使用してVMをクローンした脅威アクターのvCenter VPXDログを示しています。
2025-04-01 03:37:40 [vim.event.TaskEvent] [info] [VSPHERE.LOCAL\Administrator] [<vCenter inventory object>] [<unique identifier>] [Task: VirtualMachine.clone]
2025-04-01 03:37:49 [vim.event.VmBeingClonedEvent] [info] [VSPHERE.LOCAL\Administrator] [<vCenter inventory object>] [<same unique identifier>] [Cloning DC01 on esxi01, in <vCenter inventory object> to DC01-clone on esxi02, in <vCenter inventory object>]
2025-04-01 03:42:07 [vim.event.VmClonedEvent] [info] [VSPHERE.LOCAL\Administrator] [<vCenter inventory object>] [<unique identifier>] [DC01 cloned to DC01-clone on esxi02, in <vCenter inventory object>]
2025-04-01 04:05:40 [vim.event.TaskEvent] [info] [VSPHERE.LOCAL\Administrator] [<vCenter inventory object>] [<unique identifier>] [Task: VirtualMachine.destroy]
2025-04-01 04:05:47 [vim.event.VmRemovedEvent] [info] [VSPHERE.LOCAL\Administrator] [<vCenter inventory object>] [<unique identifier>] [Removed DC01-Clone on esxi02 from <vCenter inventory object>]
ある事例では、脅威アクターが正当なサーバー管理者認証情報を使用して、Delinea(旧Thycotic)Secret Serverを実行するシステムへ繰り返し横展開しました。システムから回収されたフォレンジック痕跡は、secret stealerのようなツールを実行し、Secret Serverアプリケーションに保存されているすべての認証情報を自動的に抽出・復号したことと整合していました。
横展開
通常、少なくとも1つのBRICKSTORMインスタンスが主たるハンズオンキーボード活動の起点となり、侵害された2台以上のアプライアンスがバックアップとして機能していました。BRICKSTORMをインストールするために、アクターは正当な認証情報を用いて(多くの場合SSHで)アプライアンスへ接続しました。ある事例では、以前アクセスしたパスワードボルトに保存されていたことが分かっている認証情報を使用しました。別の事例では、脅威アクターが以前閲覧していたPowerShellスクリプトに保存されていたことが分かっている認証情報を使用しました。複数の事例で、アクターはESXiのWebベースUIまたはvCenter Appliance Management Interface(VAMI)にログインしてSSHサービスを有効化し、接続してBRICKSTORMをインストールできるようにしました。以下は、脅威アクターがVAMIに接続し、vCenterのSSH設定を変更したことを示すVAMIアクセスイベントの例です。
::ffff:<Source IP> <vCenter IP>:5480 - [<timestamp>] "GET / HTTP/1.1" 200 1153 "-" "<User Agent>"
::ffff:<Source IP> <vCenter IP>:5480 - [<timestamp>] "POST /rest/com/vmware/cis/session HTTP/1.1" 200 60 "https://10.0.0.255:5480/" "<User Agent>"
::ffff:<Source IP> <vCenter IP>:5480 - [<timestamp>] "PUT /rest/appliance/access/ssh HTTP/1.1" 200 0 "https://10.0.0.255:5480/" "<User Agent>"
永続性の確立
被害環境へのアクセスを維持するため、脅威アクターはinit.d、rc.local、またはsystemdファイルを改変し、アプライアンス再起動時にBRICKSTORMが起動するようにしました。複数の事例で、アクターはsedコマンドラインユーティリティを使用して正当な起動スクリプトを改変し、BRICKSTORMを起動させました。以下は、アクターがvCenter上で実行したsedコマンドの例です。
sed -i s/export TEXTDOMAIN=vami-lighttp/export TEXTDOMAIN=vami-lighttp\n\/path/to/brickstorm/g /opt/vmware/etc/init.d/vami-lighttp
sed -i $a\SETCOLOR_WARNING="echo -en `/path/to/brickstorm`\\033[0;33m" /etc/sysconfig/init
脅威アクターはまた、vCenterサーバー上にMandiantがSLAYSTYLEとして追跡するWebシェルも作成しています。SLAYSTYLEは、MITREではBEEFLUSHとして追跡されている、バックドアとして機能するJavaServer Pages(JSP)Webシェルです。HTTPリクエストを介して渡された任意のOSコマンドを受信して実行するよう設計されています。これらのコマンドの出力はHTTPレスポンス本文として返されます。
任務の完遂
調査全体に共通するテーマは、脅威アクターが被害組織内の重要人物のメールに関心を示していることです。標的アカウントのメールボックスへアクセスするため、脅威アクターはmail.readまたはfull_access_as_appスコープを持つMicrosoft Entra ID Enterprise Applicationsを利用しました。どちらのスコープも、任意のメールボックス内のメールへアプリケーションがアクセスすることを可能にします。場合によっては開発者やシステム管理者のメールボックスを標的とし、別の場合にはPRCの経済的・諜報上の関心に合致する案件に関与する人物のメールボックスを標的としていました。
脅威アクターが被害環境からファイルを持ち出す際には、BRICKSTORMのSOCKSプロキシ機能を使用してワークステーションをトンネルし、関心のあるシステムやWebアプリケーションへ直接アクセスしました。複数の事例で、脅威アクターは正当な認証情報を用いて内部コードストアやダウンロードリポジトリのWebインターフェースへログインし、ZIPアーカイブとしてダウンロードしました。別の事例では、Windows Universal Naming Convention(UNC)パスを指定することで、リモートマシン上の特定ディレクトリやファイルを参照しました。
いくつかの事例では、脅威アクターが展開したBRICKSTORMサンプルが侵害システムから削除されていました。これらの事例では、バックアップイメージのフォレンジック分析を行い、BRICKSTORMマルウェアが配置されていたことを特定することで、その存在が確認されました。
ハンティングガイダンス
Mandiantは以前、原子的IOCの有用性が低下していることと、TTPベースのハンティングを採用する必要性について議論しました。BRICKSTORM調査全体を通じて、C2ドメインやマルウェアサンプルの再利用は観測されておらず、これに高いオペレーショナルセキュリティが相まって、これらの指標はすぐに陳腐化するか、そもそも観測されません。そのため、TTPベースのハンティング手法は理想的な実践であるだけでなく、従来のシグネチャベース防御では検知されにくい攻撃パターンを検出するための必須要件です。以下は、BRICKSTORMおよび関連活動を探索するために、Mandiantが組織に推奨する最小限のハント項目チェックリストです。
|
ステップ |
ハント |
データソース |
|
エッジデバイスやその他アプライアンスを含む資産インベントリを作成または更新する |
該当なし |
|
|
1 |
BRICKSTORMのファイルおよびバックアップスキャン |
アプライアンスのファイルシステム、バックアップ |
|
2 |
エッジデバイスおよびアプライアンスからのインターネット通信 |
ファイアウォール接続ログ、DNSログ、IDS/IPS、netflow |
|
3 |
アプライアンスからWindowsサーバーおよびデスクトップへのアクセス |
EDRテレメトリ、セキュリティイベントログ、ターミナルサービスログ、Windows UAL |
|
4 |
認証情報およびシークレットへのアクセス |
Windows Shellbags、EDRテレメトリ |
|
5 |
Enterprise Applicationを用いたM365メールボックスへのアクセス |
M365 UAL |
|
6 |
機微な仮想マシンのクローン作成 |
vSphere VPXDログ |
|
7 |
ローカルvCenterおよびESXiアカウントの作成 |
VMware監査イベント |
|
8 |
vSphereプラットフォームでのSSH有効化 |
VMware監査イベント、VAMIログ |
|
9 |
不正なVM |
VMware監査イベント、VMインベントリレポート |
資産インベントリの作成または更新
あらゆる脅威ハントの成功の基盤となるのは、エッジデバイスやその他アプライアンスなど、標準的なセキュリティツールスタックでカバーされないデバイスを含む資産インベントリです。これらのアプライアンスは従来のセキュリティツールをサポートしないため、効果的な代替コントロールと検知を設計するにはインベントリが不可欠です。特に重要なのは、これらアプライアンスの管理インターフェースのアドレスを追跡することです。これらは、マルウェアや脅威アクターのコマンドが外部へ出ていく際のデフォルトゲートウェイとして機能するためです。
Mandiantは、このインベントリを構築または更新するために、組織が複数ステップのアプローチを取ることを推奨します:
-
既知の既知:すべての組織が利用するアプライアンスのクラス(ファイアウォール、VPNコンセントレーター、仮想化プラットフォーム、会議システム、入退室管理、ファイルストレージ)から着手します。
-
既知の未知:チーム横断でブレインストーミングし、組織により特化している可能性がある一方で、セキュリティ組織が可視性を欠きがちなアプライアンスのクラスを洗い出します。
-
未知の未知:廃止予定だったが廃止されなかったアプライアンス、営業用POV、その他が該当します。ネットワーク可視化ツールや既存のEDRを用いて、EDRレポートに表示されない「稼働中」のIPアドレスをスキャンすることを検討してください。これは、EDRが必要なのに導入されていない未管理デバイスを特定できるという追加の利点もあります。

図2:資産インベントリ
BRICKSTORMのファイルおよびバックアップスキャン
YARAルールは、アプライアンス上のBRICKSTORMバイナリを検出する最も効果的な方法であることが実証されています。本稿の付録セクションで関連するYARAルールを共有します。Yaraは大規模に実行するのが難しい場合がありますが、一部のバックアップソリューションではバックアップデータストア全体に対してYARAを実行する機能を提供しています。Mandiantは、この方法でBRICKSTORMを特定した複数の顧客がいることを把握しています。
組織が自環境でBRICKSTORM活動をハントするのを支援するため、Mandiantはスキャナースクリプトを公開しました。これはアプライアンスやその他のLinux/BSDベースシステム上で実行できます。
エッジデバイスおよびアプライアンスからのインターネット通信
アプライアンス管理IPアドレスのインベントリを使用し、ネットワークログ内でマルウェアのビーコン通信の証拠をハントしてください。一般に、アプライアンスは、更新のダウンロードやメーカーへのクラッシュ分析送信を除き、管理IPアドレスからパブリックインターネットと通信すべきではありません。
アプライアンスメーカーが管理していないドメインやIPアドレスへの確立されたアウトバウンド通信は、非常に疑わしいものとして扱い、アプライアンスのフォレンジックレビューを行うべきです。BRICKSTORMはDNS over HTTP(DoH)を使用でき、アプライアンス管理IPアドレスを送信元とする場合、同様に稀であるべきです。
アプライアンスからWindowsシステムへのアクセス
脅威アクターは主にタイプ3(ネットワーク)ログインを使用してWindowsマシン(デスクトップおよびサーバー)へアクセスしましたが、場合によってはRDPセッションも確立しました。アプライアンスがWindowsデスクトップやサーバーへログインすることは稀であり、あらゆる接続は疑わしいものとして扱うべきです。誤検知の例としては、VPNアプライアンスが既知のサービスアカウントを使用してLDAPルックアップのためにドメインコントローラーへ接続するケースや、認証付き脆弱性スキャナーがよく知られたサービスアカウントを使用するケースが考えられます。
EDRテレメトリ、ターミナルサービスログ、セキュリティイベントログに加えて、防御側はWindows User Access Log(UAL)を取得して解析すべきです。UALはWindows Server上のWindows\System32\LogFiles\Sumディレクトリ内に保存され、SumECmdなどのオープンソースツールで解析できます。このログソースは、Windowsシステムへの認証付き接続の試行を記録し、一般的なWindowsイベントログよりもはるかに長期間の痕跡を保持していることが多いです。このログソースには成功・失敗の両方のログインが含まれますが、アプライアンスを送信元とする疑わしい活動を特定するうえで有用です。
認証情報およびシークレットへのアクセス
EDRツールのフォレンジック機能を使用して、WindowsワークステーションおよびサーバーからWindows Shellbagsのアーティファクトを取得してください。Shellbagsは、ユーザーがWindows Explorerアプリケーションで参照したフォルダーパスを記録します。オープンソースのパーサーを使用して関連データを抽出し、以下のような疑わしい活動パターンを探してください:
-
開始ユーザーがサービスアカウントであるフォルダーパスへのアクセス(特に、見慣れない、またはほとんど使用されないサービスアカウント)
-
Windows Universal Naming Convention(UNC)パスでワークステーションを指すものを含むサーバーを送信元としたファイル参照活動(例:
\\bobwin7.corp.local\browsing\path) -
次のような認証情報データを含むフォルダーパスへのファイル参照活動:
-
ブラウザープロファイルパス(例:
%appdata%\Mozilla\Firefox\Profiles) -
セッショントークンの保存に使用されるAppdataの場所(例:
Users\<username>\.azure\) -
Windows資格情報ボルト(
%appdatalocal%\Microsoft\Credentials) -
Data Protection API(DPAPI)キー(
%appdata%\Microsoft\Protect\<SID>\)
Enterprise Applicationを用いたM365メールボックスへのアクセス
Mandiantは、このアクターがMicrosoft 365 Exchange Onlineからの大量メールアクセスおよび持ち出しを行うために一般的な手法を使用していることを観測しています。組織は、APT29のホワイトペーパーで示したガイダンスに従い、これらの手法をハントしてください。ホワイトペーパーはAPT29に言及していますが、これらの手法は多くのグループにより広く使用されるようになっています。複数の調査で、脅威アクターはmail.readまたはfull_access_as_appスコープを持つMicrosoft Entra ID Enterprise Applicationを使用して、被害組織内の重要人物のメールボックスへアクセスしていました。
この活動をハントするため、段階的アプローチを推奨します:
-
すべてのメールを読み取れるGraph権限を持つEnterprise ApplicationsおよびApplication Registrationsを列挙する。
-
各アプリケーションについて、少なくとも1つのシークレットまたは証明書が設定されていることを検証する。Application(client)IDを記録する。
-
手順2のclient IDについて、Unified Audit LogまたはSentinelの
OfficeActivityテーブルに対してフリーテキスト検索を実施する。これにより、アプリケーションがメールへアクセスしたことを記録するmailitemsaccessedイベントが返されます。 -
各アプリケーションについて、送信元IPアドレスおよびユーザーエージェント文字列の不整合を分析する。正当な利用は明確に定義されたIPアドレスから発生するはずです。さらに、複数日にわたって重要人物のメールボックスに集中的な関心が向けられていないかを確認します。
アクターはM365やその他のインターネット公開サービスへアクセスする際、複数の商用VPNおよびプロキシプロバイダーを使用してきました。Mandiantは、PIA、NordVPN、Surfshark、VPN Unlimited、PrivadoVPNの使用証拠を確認していますが、これらに限られる理由はありません。また、このアクターが侵害されたSOHO(小規模オフィス/ホームオフィス)ルーターで構築された専用の難読化ネットワークへアクセスできることを示す証拠もあります。Mandiantは、これらのルーターがどのように侵害されているかについて知見を持っていません。商用VPNおよび難読化ネットワークの出口ノードは急速に変化するため、ハント目的で原子的指標を共有しても成果が得られない可能性が高いです。代わりに、組織の業種と脅威アクターの想定目標に照らして重要人物を特定してください。それらのメールボックスについて、過去1年分または保持が許す限りのmailitemsaccessedログを取得します。ログイベントのSessionID値を分析し、ユーザーの通常の地理的位置にないIPアドレスで、複数IPアドレスにまたがるIDがないかを探します。
機微な仮想マシンのクローン作成
VMware vCenterサーバーでは、VPXDログにクローンイベント、VMの電源オン/オフ、スナップショット作成など、VM管理関連タスクに関する有用な情報が含まれます。脅威アクターはVMのクローン作成時にVSPHERE.LOCAL\Administratorアカウントを使用することが多く、パスワードボルトやドメインコントローラーなど認証情報を含むVMを標的としていました。脅威アクターはクローン作成後まもなくクローンVMを削除し、主にUTCの01:00〜10:00の時間帯に活動していました。調査担当者は、前述の条件に合致する活動をvCenter VPXDログで検索し、そのクローン作成が意図されたものかどうかを確認すべきです。
ローカルvCenterおよびESXiアカウントの作成
Mandiantは、脅威アクターがBRICKSTORMをインストールするために新しいローカルアカウントを作成し、作業後にそのアカウントを削除した証拠を確認しました。以下のログは、脅威アクターがローカルAdministratorアカウントを使用して新しいローカルアカウントを作成し、BashShellAdministratorsグループに追加したことを示しています。脅威アクターは侵害されたアプライアンスから新規作成アカウントを用いてvCenterへSSH接続を確立し、vCenterにBRICKSTORMバックドアをインストールしました。その後まもなく、脅威アクターはアカウントを削除しました。調査担当者は/var/log/audit/sso-events/audit_events.log内の監査ログを確認し、ローカルアカウントの作成・削除をレビューして目的を検証すべきです。ある事例では、脅威アクターはvCenter上でバックアップに使用されるローカルサービスアカウントと類似した命名規則でアカウント名を付けていました。
2025-04-01T06:45:32 {"user":"[email protected]","client":"","timestamp":"04/01/2025 06:45:32 GMT","description":"Creating local person user '<account_name>' with details ('','','','','<account_name>@vsphere.local')","eventSeverity":"INFO","type":"com.vmware.sso.PrincipalManagement"}
2025-04-01T06:45:55 {"user":"[email protected]","client":"","timestamp":"04/01/2025 06:45:55 GMT","description":"Adding users '[{Name: <account_name>, Domain: vsphere.local}]' to local group 'Administrators'","eventSeverity":"INFO","type":"com.vmware.sso.PrincipalManagement"}
2025-04-01T06:46:23 {"user":"[email protected]","client":"","timestamp":"04/01/2025 06:46:23 GMT","description":"Updating local group 'SystemConfiguration.BashShellAdministrators' details ('Access bash shell and manage local users on nodes').","eventSeverity":"INFO","type":"com.vmware.sso.PrincipalManagement"}
2025-04-01T06:52:03 <vcenter_hostname> sshd[36952]: Postponed keyboard-interactive/pam for <account_name>@vsphere.local from <compromised_system>
2025-04-01T06:52:30 <vcenter_hostname> sudo: pam_unix(sudo:session): session opened for user root
2025-04-01T06:53:39 Creation of BRICKSTORM on vCenter
2025-04-01T06:56:18 <vcenter_hostname> sudo: pam_unix(sudo:session): session closed for user root
2025-04-01T06:56:25 <vcenter_hostname> sshd[36952]: pam_unix(sshd:session): session closed for user <account_name>@vsphere.local
2025-04-01T06:56:57 {"user":"[email protected]","client":"","timestamp":"04/01/2025 06:56:57 GMT","description":"Removing principals '[{Name: <account_name>, Domain: vsphere.local}]' from local group 'Administrators'","eventSeverity":"INFO","type":"com.vmware.sso.PrincipalManagement"}
2025-04-01T06:58:12 {"user":"[email protected]","client":"","timestamp":"04/01/2025 06:58:12 GMT","description":"Deleting principal '<account_name>'","eventSeverity":"INFO","type":"com.vmware.sso.PrincipalManagement"}
ESXiおよびvCenterでのSSH有効化
ESXiサーバーについては、ローカルアカウントを使用したSSHログインを監視する体制を整えるべきです。多くの組織では、SSH経由でESXiホストへ正当に直接アクセスすることは比較的稀です。多くの場合、SSHサーバーはデフォルトで無効化されています。vSphereプラットフォームアプライアンスでSSHが有効化された際にログイベントでアラートを出すルールを作成してください。
不正なVM
組織は、新規VMの作成・削除を追跡するVMWare監査イベントをレビューすべきです。特に、標準外のISOイメージやOSを使用しているケースに注意してください。監査イベントには、脅威アクターがアーカイブされたISOイメージをvSphereが使用するデータストアボリュームへダウンロードしたことが記録される場合もあります。
ハードニングガイダンス
標準的なセキュリティツールスタックをサポートしないネットワーク内のアプライアンスやその他デバイスについて、最新のインベントリを維持することが極めて重要です。そのインベントリに含まれるデバイスは、内部向けであれインターネット公開であれ、最小権限の原則に従うように設定すべきです。
-
インターネットアクセス:アプライアンスはインターネットへの無制限アクセスを持つべきではありません。ベンダーと協力するか、ファイアウォールログを監視して、アプライアンスが正常に機能するために必要なドメインまたはIPアドレスのみにインターネットアクセスを制限してください。
-
内部ネットワークアクセス:インターネットに公開されているアプライアンスは、内部IPアドレス空間への無制限アクセスを持つべきではありません。多くのアプライアンスの管理インターフェースは、内部IPアドレスへの接続を確立する必要がありません。ベンダーと協力して具体的な要件(VPNログインのためにユーザー属性を検証するLDAPクエリなど)を理解してください。
Mandiantは、脅威アクターからvSphereプラットフォームを保護するためのガイダンスを以前公開しています。特に、ログの中央SIEMへの転送、vSphereロックダウンモードの有効化、Webログインに対するMFAの強制、execInstalledOnlyポリシーの強制について、ガイダンスに従うことを推奨します。
組織は、あらゆる認証情報保管(ボルト)システムの分離を評価し改善すべきです。多くの場合、脅威アクターが基盤となるOSへアクセスできれば、保護されたシークレットが露出する可能性があります。認証情報ボルトアプリケーションをホストするサーバーはTier 0システムと見なし、厳格なアクセス制御を適用すべきです。Mandiantは、暗号鍵をサーバーのTrusted Platform Module(TPM)に保存するなどのセキュアなソフトウェア実装を採用するために、組織がベンダーと協力することを推奨します。
見通しと影響
BRICKSTORMに関連する最近の侵入作戦は、地政学的諜報、アクセス作戦、知的財産(IP)窃取、そしてエクスプロイト開発を可能にするための活動など、幅広い目的を反映している可能性があります。最近の調査から得られた証拠に基づき、米国の法務領域を標的とする主目的は、米国の国家安全保障および国際貿易に関連する情報の収集です。さらにGTIGは高い確信度で、SaaSプロバイダーを標的とするBRICKSTORMの目的が、下流の顧客環境、またはSaaSプロバイダーが顧客に代わってホストしているデータへのアクセス獲得であると評価しています。テクノロジー企業を標的とすることは、ゼロデイエクスプロイトのさらなる開発のために価値あるIPを窃取する機会を提供します。
謝辞
本分析は、Google Threat Intelligence Group、Mandiant Consulting、FLAREの各チームからの支援なしには実現しませんでした。特にGTIG Research and Discovery(RAD)のNick Simonianに感謝します。また、ネットワーク検知コンテンツの提供に貢献したMandiant Threat Defense(MTD)のRyan Tomcikにも感謝します。
侵害指標(IOC)
以下の侵害指標は、Google Threat Intelligence(GTI)コレクションで利用できます。なお、Mandiantは脅威アクターがマルウェアサンプルを再利用した事例を観測しておらず、完全一致の指標をハントしても結果が得られない可能性が高い点に留意してください。
|
SHA-256ハッシュ |
ファイル名 |
説明 |
|
|
pg_update |
BRICKSTORM |
|
|
spclisten |
BRICKSTORM |
|
|
vmp |
BRICKSTORM |
YARA検知
G_APT_Backdoor_BRICKSTORM_3
rule G_APT_Backdoor_BRICKSTORM_3 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$str1 = { 48 8B 05 ?? ?? ?? ?? 48 89 04 24 E8 ?? ?? ?? ?? 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 89 04 24 [0-5] E8 ?? ?? ?? ?? EB ?? }
$str2 = "regex" ascii wide nocase
$str3 = "mime" ascii wide nocase
$str4 = "decompress" ascii wide nocase
$str5 = "MIMEHeader" ascii wide nocase
$str6 = "ResolveReference" ascii wide nocase
$str7 = "115792089210356248762697446949407573529996955224135760342422259061068512044369115792089210356248762697446949407573530086143415290314195533631308867097853951" ascii wide nocase
condition:
uint16(0) == 0x457F and all of them
}
G_Backdoor_BRICKSTORM_2
rule G_Backdoor_BRICKSTORM_2 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$obf_func = /[a-z]{20}\/[a-z]{20}\/[a-z]{20}\/[a-z]{20}.go/
$decr1 = { 0F B6 4C 04 ?? 0F B6 54 04 ?? 31 D1 88 4C 04 ?? 48 FF C0 [0-4] 48 83 F8 ?? 7C }
$decr2 = { 40 88 7C 34 34 48 FF C3 48 FF C6 48 39 D6 7D 18 0F B6 3B 48 39 CE 73 63 44 0F B6 04 30 44 31 C7 48 83 FE 04 72 DA }
$decr3 = { 0F B6 54 0C ?? 0F B6 5C 0C ?? 31 DA 88 14 08 48 FF C1 48 83 F9 ?? 7C E8 }
$str1 = "main.selfWatcher"
$str2 = "main.copyFile"
$str3 = "main.startNew"
$str4 = "WRITE_LOG=true"
$str5 = "WRITE_LOGWednesday"
$str6 = "vami-httpdvideo/webm"
$str7 = "/opt/vmware/sbin/"
$str8 = "/home/vsphere-ui/"
$str9 = "/opt/vmware/sbin/vami-http"
$str10 = "main.getVFromEnv"
condition:
uint32(0) == 0x464c457f and ((any of ($decr*) and $obf_func) or (any of ($decr*) and any of ($str*)) or 5 of ($str*)) and filesize < 10MB
}
G_APT_Backdoor_BRICKSTORM_1
rule G_APT_Backdoor_BRICKSTORM_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$ = "WRITE_LOGWednesday"
$ = "/home/vsphere-ui/"
$ = "WRITE_LOG=true"
$ = "dns rcode: %v"
$ = "dns query not specified or too small"
$ = "/dev/pts: bad file descriptor"
$ = "/libs/doh.Query"
$ = "/libs/doh.createDnsMessage"
$ = "/libs/doh.unpackDnsMessage"
$ = "/core/protocol/websocket.(*WebSocketNetConfig).Dial"
$ = "/core/protocol/websocket.(*connection).Read"
$ = "/core/protocol/websocket.(*connection).getReader"
$ = "/core/protocol/websocket.(*connection).Write"
$ = "/core/protocol/websocket.(*connection).Close"
$ = "/core/protocol/websocket.(*connection).LocalAddr"
$ = "/core/protocol/websocket.(*connection).RemoteAddr"
$ = "/core/protocol/websocket.(*connection).SetDeadline"
$ = "/core/protocol/websocket.(*connection).SetReadDeadline"
$ = "/core/protocol/websocket.(*connection).SetWriteDeadline"
$ = "/core/protocol.UnPackHeaderData"
$ = "/core/protocol.NewWebSocketClient"
$ = "/libs/func1.(*Client).BackgroundRun"
$ = "/libs/func1.CreateClient"
$ = "/libs/func1.NewService"
$ = "/libs/func1.(*Service).Get"
$ = "/libs/func1.(*Service).DoTask"
$ = "/libs/func1.(*Service).Put"
$ = "/core/extends/command.Command"
$ = "/core/extends/command.CommandNoContext"
$ = "/core/extends/command.ExecuteCmd"
$ = "/core/extends/command.RunShell"
$ = "/core/extends/socks.UnPackHeaderData"
$ = "/core/extends/socks.handleRelay"
$ = "/libs/fs.(*RemoteDriver).realPath"
$ = "/libs/fs.(*RemoteDriver).ChangeDir"
$ = "/libs/fs.(*RemoteDriver).Stat"
$ = "/libs/fs.(*SimplePerm).GetMode"
$ = "/libs/fs.(*SimplePerm).GetOwner"
$ = "/libs/fs.(*SimplePerm).GetGroup"
$ = "/libs/fs.(*RemoteDriver).ListDir"
$ = "/libs/fs.(*RemoteDriver).DeleteDir"
$ = "/libs/fs.(*RemoteDriver).DeleteFile"
$ = "/libs/fs.(*RemoteDriver).Rename"
$ = "/libs/fs.(*RemoteDriver).MakeDir"
$ = "/libs/fs.(*RemoteDriver).GetFile"
$ = "/libs/fs.(*RemoteDriver).PutFile"
$ = "/libs/fs.(*RemoteDriver).UpFile"
$ = "/libs/fs.(*RemoteDriver).MD5"
$ = "/libs/doh/doh.go"
$ = "/core/protocol/websocket/config.go"
$ = "/core/extends/command/command.go"
$ = "/libs/fs/driver_unix.go"
$ = "/libs/fs/perm_linux.go"
condition:
uint32(0) == 0x464c457f and 8 of them
}
G_APT_Backdoor_BRICKSTORM_2
rule G_APT_Backdoor_BRICKSTORM_2 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$str1 = { 0F 57 C0 0F 11 84 ?? ?? ?? ?? ?? C6 44 ?? ?? 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 0F 57 C0 0F 11 84 ?? ?? ?? ?? ?? 0F 11 84 ?? ?? ?? ?? ?? 4? 8B 84 ?? ?? ?? ?? ?? 4? 89 04 ?? 4? 8B 8C ?? ?? ?? ?? ?? 4? 89 4C ?? ?? E8 ?? ?? ?? ?? 4? 83 7C ?? ?? 00 0F 84 ?? ?? ?? ?? 4? 8D 05 ?? ?? ?? ?? 4? 89 ?? ?? E8 ?? ?? ?? ?? 4? 8B 7C ?? ?? 4? 8B 84 ?? ?? ?? ?? ?? 4? 89 47 08 83 3D ?? ?? ?? ?? 00 75 ?? 4? 8B 84 ?? ?? ?? ?? ?? 4? 89 07 4? 89 BC ?? ?? ?? ?? ?? 4? C7 84 ?? ?? ?? ?? ?? 01 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 01 00 00 00 0F 57 C0 0F 11 84 ?? ?? ?? ?? ?? 4? 8B ?? ?? ?? ?? ?? ?? 4? 81 C4 ?? ?? ?? ?? C3 }
$str2 = { 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? 8B 84 ?? ?? ?? ?? ?? 4? 89 04 ?? 4? 8B 8C ?? ?? ?? ?? ?? 4? 89 4C ?? ?? E8 ?? ?? ?? ?? 4? 8B 44 ?? ?? 4? 85 C0 0F 84 ?? ?? ?? ?? 4? 8D 05 ?? ?? ?? ?? 4? 89 ?? ?? E8 ?? ?? ?? ?? 4? 8B 44 ?? ?? 4? 8B 8C ?? ?? ?? ?? ?? 4? 89 48 08 8B 0D ?? ?? ?? ?? 85 C9 75 ?? 4? 8B 8C ?? ?? ?? ?? ?? 4? 89 08 84 00 4? 89 84 ?? ?? ?? ?? ?? 4? C7 84 ?? ?? ?? ?? ?? 01 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 01 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 90 E8 ?? ?? ?? ?? 4? 8B ?? ?4 D8 00 00 00 4? 81 C4 E0 00 00 00 C3 }
condition:
uint32be(0) == 0x7F454C46 and any of them
}
G_APT_BackdoorWebshell_SLAYSTYLE_1
rule G_APT_BackdoorWebshell_SLAYSTYLE_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$str1 = /String \w{1,10}=request\.getParameter\(\"\w{1,15}\"\);/ ascii wide nocase
$str2 = "=new String(java.util.Base64.getDecoder().decode(" ascii wide nocase
$str21 = /String\[\]\s\w{1,10}=\{\"\/bin\/sh\",\"-c\",\w{1,10}\+\"\s2>&1\"\};/ ascii wide nocase
$str3 = "= Runtime.getRuntime().exec(" ascii wide nocase
$str4 = "java.io.InputStream" ascii wide nocase
$str5 = "java.util.Base64.getEncoder().encodeToString(org.apache.commons.io.IOUtils.toByteArray(" ascii wide nocase
condition:
filesize < 5MB and all of them
}
G_APT_BackdoorWebshell_SLAYSTYLE_2
rule G_APT_BackdoorWebshell_SLAYSTYLE_2 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$str1 = "request.getParameter" nocase
$str2 = "/bin/sh"
$str3 = "java.io.InputStream" nocase
$str4 = "Runtime.getRuntime().exec(" nocase
$str5 = "2>&1"
condition:
(uint16(0) != 0x5A4D and uint32(0) != 0x464C457F) and filesize < 7KB and all of them and @str4 > @str2
}
G_Backdoor_BRICKSTEAL_1
rule G_Backdoor_BRICKSTEAL_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$str1 = "comvmware"
$str2 = "abcdABCD1234!@#$"
$str3 = "ads.png"
$str4 = "User-Agent"
$str5 = "com/vmware/"
condition:
all of them and filesize < 10KB
}
G_Dropper_BRICKSTEAL_1
rule G_Dropper_BRICKSTEAL_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$str1 = "Base64.getDecoder().decode"
$str2 = "Thread.currentThread().getContextClassLoader()"
$str3 = ".class.getDeclaredMethod"
$str4 = "byte[].class"
$str5 = "method.invoke"
$str6 = "filterClass.newInstance()"
$str7 = "/websso/SAML2/SSO/*"
condition:
all of them
}
G_Dropper_BRICKSTEAL_2
rule G_Dropper_BRICKSTEAL_2 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$str1 = /\(Class<\?>\)\smethod\.invoke\(\w{1,20},\s\w{1,20},\s0,\s\w{1,20}\.length\);/i ascii wide
$str2 = "(\"yv66vg" ascii wide
$str3 = "request.getSession().getServletContext" ascii wide
$str4 = ".getClass().getDeclaredField(" ascii wide
$str5 = "new FilterDef();" ascii wide
$str6 = "new FilterMap();" ascii wide
condition:
all of them
}
ネットワーク検知
Google SecOpsの顧客は、Mandiant Front-Line Threatsルールパックの下で、これらの広範なカテゴリルールおよび追加ルールにアクセスできます。以下はGoogle Security Operationsで使用するYARA-L 2.0ルールですが、そのロジックは他のセキュリティ製品で使用するために別形式へ複製できます。
複数のDNS-over-HTTPSサービスへのクエリ
rule hunting_t1071_001_multiple_dns_over_https_services_queried {
meta:
rule_name = "Multiple DNS-over-HTTPS Services Queried"
severity = "Low"
tactic = "TA0011" // Command and Control
technique = "T1071.001" // Application Layer Protocol: Web Protocols
reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign"
description = "Detects on requests by a source IP address to DNS-over-HTTPS (DoH) resolver IP addresses associated with multiple services, such as Quad9, Google DNS, and CloudFlare DNS. DoH is a protocol that encrypts DNS queries and responses using the HTTPS protocol. Threat actors may use DoH to obfuscate domain names associated with their externally hosted infrastructure that would otherwise be visible in standard DNS queries."
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.target.ip = /^(8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9|9\.9\.9\.11|1\.1\.1\.1|1\.0\.0\.1|45\.90\.28\.160|45\.90\.30\.160|149\.112\.112\.112|149\.112\.112\.11)$/ nocase
(
$e.target.port = 443 or
$e.target.url = /dns-query|:443\/$|\d\.\d\.\d\.\d\/$/ nocase
)
$source_entity = strings.coalesce($e.principal.asset_id,$e.principal.ip)
match:
$source_entity over 2h
outcome:
$risk_score = max(35)
$unique_doh_ips_count = count_distinct($e.target.ip)
condition:
$e and $unique_doh_ips_count >= 5
options:
allow_zero_values = true
}
不明なエンドポイントによるDNS-over-HTTPSおよびWebアプリ開発サービス通信の生成
rule hunting_t1071_001_unknown_endpoint_generating_doh_and_web_development_services_communication {
meta:
rule_name = "Unknown Endpoint Generating DNS-over-HTTPS and Web Application Development Services Communication"
severity = "Medium"
tactic = "TA0011" // Command and Control
technique = "T1071.001" // Application Layer Protocol: Web Protocols
reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign"
description = "Detects on requests by an unknown source IP address to multiple DNS-over-HTTPS (DoH) resolver services and web application development services, such as Cloudflare Workers or Heroku hosted web applications. To investigate this activity further, determine the source of the network activity and verify if the communication is consistent with the device's intended use and standard allow-list domains."
events:
$c1.metadata.event_type = "NETWORK_CONNECTION"
$c1.target.ip = /^(8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9|9\.9\.9\.11|1\.1\.1\.1|1\.0\.0\.1|45\.90\.28\.160|45\.90\.30\.160|149\.112\.112\.112|149\.112\.112\.11)$/ nocase
$c1.principal.hostname = ""
$c1.principal.asset_id = ""
(
$c1.target.port = 443 or
$c1.target.url = /dns-query|:443\/$|\d\.\d\.\d\.\d\/$/ nocase
)
$c2.metadata.event_type = "NETWORK_CONNECTION"
$c2.target.hostname = /\.workers\.dev$|\.herokuapp\.com$/ nocase
$c2.principal.hostname = ""
$c2.principal.asset_id = ""
$c2.target.port = 443
$source_entity = $c1.principal.ip
$source_entity = $c2.principal.ip
match:
$source_entity over 24h
outcome:
$risk_score = max(65)
$unique_doh_ips_count = count_distinct($c1.target.ip)
condition:
$c1 and $c2 and $unique_doh_ips_count >= 3
options:
allow_zero_values = true
}
不明なエンドポイントによるGoogle DNS-over-HTTPSおよびCloudflareホストIPとの通信生成
rule hunting_t1071_001_unknown_endpoint_generating_google_doh_and_cloudflare_communication {
meta:
rule_name = "Unknown Endpoint Generating Google DNS-over-HTTPS and Cloudflare Hosted IP Communication"
severity = "Medium"
tactic = "TA0011" // Command and Control
technique = "T1071.001" // Application Layer Protocol: Web Protocols
reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign"
description = "Detects on requests by an unknown source IP address to Google DNS-over-HTTPS (DoH) resolver service and a Cloudflare hosted IP address. To investigate this activity further, determine the source of the network activity and verify if the communication is consistent with the device's intended use and standard allow-list domains."
events:
$c1.metadata.event_type = "NETWORK_CONNECTION"
$c1.target.ip = /^(8\.8\.8\.8|8\.8\.4\.4)$/ nocase
$c1.principal.hostname = ""
$c1.principal.asset_id = ""
(
$c1.target.port = 443 or
$c1.target.url = /dns-query|:443\/$|\d\.\d\.\d\.\d\/$/ nocase
)
$c2.metadata.event_type = "NETWORK_CONNECTION"
$c2.principal.hostname = ""
$c2.principal.asset_id = ""
$c2.target.ip_geo_artifact.network.carrier_name = /cloudflare/ nocase
$c2.target.port = 443
$source_entity = $c1.principal.ip
$source_entity = $c2.principal.ip
match:
$source_entity over 1h
outcome:
$risk_score = max(65)
$time_diff = math.abs(min($c1.metadata.event_timestamp.seconds) - min($c2.metadata.event_timestamp.seconds))
condition:
$c1 and $c2 and $time_diff <= 2
options:
allow_zero_values = true
}
不明なエンドポイントによるGoogle DNS-over-HTTPSおよびAmazonホストIPとの通信生成
rule hunting_t1071_001_unknown_endpoint_generating_google_doh_and_amazon_communication {
meta:
rule_name = "Unknown Endpoint Generating Google DNS-over-HTTPS and Amazon Hosted IP Communication"
severity = "Medium"
tactic = "TA0011" // Command and Control
technique = "T1071.001" // Application Layer Protocol: Web Protocols
reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign"
description = "Detects on requests by an unknown source IP address to Google DNS-over-HTTPS (DoH) resolver service and an Amazon hosted IP address. To investigate this activity further, determine the source of the network activity and verify if the communication is consistent with the device's intended use and standard allow-list domains."
events:
$c1.metadata.event_type = "NETWORK_CONNECTION"
$c1.target.ip = /^(8\.8\.8\.8|8\.8\.4\.4)$/ nocase
$c1.principal.hostname = ""
$c1.principal.asset_id = ""
(
$c1.target.port = 443 or
$c1.target.url = /dns-query|:443\/$|\d\.\d\.\d\.\d\/$/ nocase
)
$c2.metadata.event_type = "NETWORK_CONNECTION"
$c2.principal.hostname = ""
$c2.principal.asset_id = ""
$c2.target.ip_geo_artifact.network.carrier_name = /amazon/ nocase
$c2.target.port = 443
$source_entity = $c1.principal.ip
$source_entity = $c2.principal.ip
match:
$source_entity over 24h
outcome:
$risk_score = max(65)
$time_diff = math.abs(min($c1.metadata.event_timestamp.seconds) - min($c2.metadata.event_timestamp.seconds))
condition:
// As observed by Mandiant IR, the two connection events to DoH and Amazon occurred nearly simultaneously
$c1 and $c2 and $time_diff <= 2
options:
allow_zero_values = true
}
翻訳元: https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign/