paint-brush
VEILDrive の正体を暴く: 脅威アクターがコマンド & コントロールに Microsoft サービスを悪用@rebeccaroyal
841 測定値
841 測定値

VEILDrive の正体を暴く: 脅威アクターがコマンド & コントロールに Microsoft サービスを悪用

Hunters30m2024/11/11
Read on Terminal Reader

長すぎる; 読むには

- ハンターズ チーム AXON は、「VEILDrive」と呼ばれる進行中の脅威キャンペーンを特定し、現在監視しています - このキャンペーンは、当初、AXON の取り組みの一環として、当社の顧客のインフラストラクチャの 1 つで特定された悪意のあるアクティビティに対処するために特定されました - 調査の一環として、当社は、攻撃者によって侵害され、使用された追加の被害者組織のさまざまな Microsoft インフラストラクチャ コンポーネントを特定しました - 攻撃者は、キャンペーンの一環として、Microsoft Teams、SharePoint、Quick Assist、OneDrive など、さまざまな Microsoft SaaS サービスとアプリケーションを活用しました - 攻撃者は、被害者のインフラストラクチャで見つかったマルウェアの一部として、独自の OneDrive ベースのコマンド アンド コントロール (C&C) 方式を使用しました - 当社の調査の結論に基づくと、このキャンペーンはロシアから発信されている可能性が高いです - チーム AXON は、攻撃者のインフラストラクチャのシャットダウンを支援するために、調査結果を Microsoft に報告しました - チームは、調査中に特定された複数の影響を受けた被害者にも連絡を取りました
featured image - VEILDrive の正体を暴く: 脅威アクターがコマンド & コントロールに Microsoft サービスを悪用
Hunters HackerNoon profile picture
0-item
1-item
2-item

ハンターズチームアクソン

要約

  • ハンターズ・チームAXONは、「 VEILDrive 」と呼ばれる進行中の脅威キャンペーンを特定し、現在監視している。
  • このキャンペーンは、当初、当社の顧客のインフラストラクチャの1つで特定された悪意のあるアクティビティに対処するためのAXONエンゲージメントの一環として特定されました。
  • 調査の一環として、攻撃者によって侵害され、使用された追加の被害者組織のさまざまなMicrosoftインフラストラクチャコンポーネントを特定しました。
  • 攻撃者は、キャンペーンの一環として、Microsoft Teams、SharePoint、Quick Assist、OneDrive など、さまざまな Microsoft SaaS サービスとアプリケーションを活用しました。
  • 攻撃者は、被害者のインフラストラクチャで見つかったマルウェアの一部として、独自のOneDriveベースのコマンド&コントロール(C&C)メソッドを使用しました。
  • 私たちの調査の結論によれば、このキャンペーンはロシアから発信された可能性が高い。
  • チームAXONは、攻撃者のインフラをシャットダウンするためにマイクロソフトに調査結果を報告した。
  • チームは調査中に特定された複数の被害者にも連絡を取った。


エグゼクティブサマリー

Hunters の Team AXON は、「VEILDrive」と呼ばれる進行中の脅威キャンペーンを発見し、積極的に監視しています。顧客のインフラストラクチャにおける悪意のあるアクティビティの調査中に最初に発見された VEILDrive は、Microsoft の SaaS スイート (特に Teams、SharePoint、Quick Assist、OneDrive) を活用して戦術を実行します。脅威アクターが独自の方法で OneDrive ベースのコマンド アンド コントロール (C&C) 方式を使用し、侵害された環境に展開されるカスタム マルウェアに埋め込まれます。当社の分析では、このキャンペーンの起源はロシアである可能性が高いことが示されており、Team AXON は Microsoft と影響を受けた組織の両方に警告を発し、さらなる悪用を緩和するよう求めています。


私たちの調査は、米国の重要なインフラストラクチャ エンティティへの攻撃への対応を受けて、2024 年 9 月に開始されました。VEILDrive の攻撃手法は、一般的な脅威の行動とは明らかに異なります。スピア フィッシング キャンペーンを配布し、悪意のあるソフトウェアを保存するために、Microsoft の SaaS インフラストラクチャに大きく依存しています。この SaaS に依存する戦略は、リアルタイム検出を複雑にし、従来の防御を回避します。


VEILDrive に関連するマルウェアは、Java ベースの .jar ファイルであり、難読化がほとんど行われていないため、非常に読みやすく、構造化されています。そのシンプルさにもかかわらず、このマルウェアはトップクラスのエンドポイント検出および対応 (EDR) ツールと VirusTotal のすべてのセキュリティ エンジンによる検出を回避しました。これは重大なリスクを浮き彫りにしています。難読化されていない単純なコードでも、最新の検出メカニズムを回避できるため、高リスク環境では検出戦略を幅広く見直す必要があることを示しています。


このレポートでは、進化する脅威に対してサイバーセキュリティ コミュニティをより適切に備えられるよう、VEILDrive の方法論と現在の検出アプローチの限界についての洞察を提供します。


背景

2024 年 9 月、Team AXON は米国の重要インフラ企業を狙ったインシデントに対応しました。この調査により、「VEILDrive」という独自の脅威キャンペーンが明らかになりました。このキャンペーンでは、同様のインシデントで通常見られるものとは大きく異なる、通常とは異なる戦術、技術、手順 (TTP) が使用されていました。


調査結果に基づき、VEILDrive キャンペーンは 2024 年 8 月初旬に始まり、本レポートの時点でも引き続き活動していると推定されます。攻撃者は、Teams、SharePoint、Quick Assist、OneDrive などの Microsoft SaaS サービスを活用して、以前に侵害を受けた組織の信頼できるインフラストラクチャを悪用し、スピアフィッシング攻撃を配布してマルウェアを保存しました。このクラウド中心の戦略により、脅威アクターは従来の監視システムによる検出を回避できました。


注目すべきは、VEILDrive が、侵害されたデバイスに展開された Java ベースのマルウェアに埋め込まれた、OneDrive ベースの新しいコマンド アンド コントロール (C&C) メソッドを導入したことです。マルウェア自体は .jar ファイルであり、次の 2 つの顕著な特徴があります。


  • コードの透明性:難読化がまったくなく、コードが適切に構造化されているため、このマルウェアは回避に重点を置いた設計の一般的な傾向に反し、非常に読みやすくわかりやすいものになっています。
  • ステルス効果:このマルウェアはシンプルであるにもかかわらず、被害者の環境に導入されたトップクラスのエンドポイント検出および対応 (EDR) ソリューションと VirusTotal のすべてのセキュリティ エンジンの両方で検出されませんでした (下の図 1 を参照)。

図 1: 検出数がゼロの Java マルウェアを表示する VirusTotal のスクリーンショット。すべての VirusTotal エンジンで検出されず、回避能力が強調されています。


これらの特徴は、高度な回避技術がなくても、巧妙に作成された難読化されていないマルウェアは最新の防御を回避できることを浮き彫りにしています。この調査は、現在の検出戦略のギャップを強調し、従来とは異なる攻撃アプローチに対する警戒の必要性を強調しています。


Team AXON は調査結果を Microsoft および影響を受けた組織と共有し、この進行中の脅威を軽減するための実用的な情報を提供しています。


VEILDrive 攻撃経路

2024 年 9 月初旬、Hunters の顧客の 1 社 (以下、「Org C」) が、アクティブなインシデントの処理について Team AXON にサポートを依頼しました。このケースは、ソーシャル エンジニアリングによって侵害された Org C 内の特定のデバイスに焦点が当てられていました。


組織 C の従業員のデバイス上で不審に作成されたスケジュールされたタスクによってアラートがトリガーされ、さらなる調査が促されました。ログを相関させ、影響を受けたユーザーと通信することで、チームは最初のアクセス方法を明らかにしました。


以下は、攻撃フローの概要を示す攻撃図です。


VIELdrive攻撃図


一連の出来事は次のように展開した。

ステップ1

悪意のある攻撃者は、Microsoft Teams を利用して、組織 C の選ばれた 4 人の従業員にメッセージを送信しました。これらの従業員は、役割に基づいて非技術者である以外には、他の明らかなつながりはありませんでした。攻撃者は IT チームのメンバーになりすまし、 Quick Assistリモート ユーティリティ ツールを使用して各従業員のデバイスへのアクセスを要求しました。


攻撃者は、なりすましのために新しく作成されたアカウントを使用するのではなく、以前の潜在的な被害者(ここでは「Org A」と呼ぶ)の侵害されたユーザー アカウントを利用しました。


M365 監査ログは、Microsoft Teams のスピアフィッシングを特定するために使用されました。

  • 複数の「 MessageSent 」および「 ChatCreated 」イベントが特定されましたが、これらはすべて、脅威アクターが所有する組織Aの以前に侵害されたユーザーから発信されたものです。

  • 4 人の従業員が標的となった一方で、組織Aの侵害を受けたユーザーを標的とした「 MemberAdded 」イベントは 1 件のみ特定されました。


図 2: Org C からの Microsoft 365 監査ログ エントリ - Org A の以前に侵害されたユーザー アカウントが Org C の被害者との 1 対 1 のチャットに追加された「MemberAdded」イベントを示しています。


  • この「 MemberAdded 」イベントは、脅威アクターのアクセス要求を受け入れた 4 人のターゲット ユーザーのうちの唯一のユーザー アカウントによって実行され、1 対 1 のチャットが作成されました。つまり、このユーザーだけが受信メッセージに積極的に反応したことになります。
  • この情報は、組織の EDR テレメトリのデータと一致し、ユーザーがリクエストを受け入れてメッセージを受信しただけでなく、ソーシャル エンジニアリングが成功したことで攻撃者が初期アクセスを取得できるようにしたことが確認されました。


上記の洞察は興味深く、価値があり、Microsoft Teams や同様のコミュニケーション ツールを介したフィッシングの増加を浮き彫りにしています。M365 監査ログを使用してフィッシングの成功と失敗を区別し、EDR ログと相関関係を調べることは、調査にとって非常に重要です。


組織 C の対象ユーザーが受信した Microsoft Teams メッセージは、Microsoft Teams の「 外部アクセス」機能によって可能になりました。この機能により、デフォルトで外部組織との 1 対 1 の通信が可能になります。

ステップ2

攻撃者は、組織 C の被害者を誘導して Microsoft の Quick Assist ツールを実行させ、Microsoft Teams 経由でアクセス コードを提供することに成功しました。これにより、脅威アクターは被害者のコンピューターにインタラクティブにアクセスできるようになりました。

ステップ3

その後、脅威アクターは別の組織の SharePoint へのダウンロード リンクを共有しました (被害者は、Microsoft Teams チャットを介したフィッシングに使用されたテナントとは別のテナントに属しており、ここでは「組織 B」と呼びます)。このリンクには、Client_v8.16L.zip という名前のパスワードで保護された .zip ファイルが含まれており、その中には追加の RMM ツールを含むさまざまなファイルが含まれていました。


このファイルは、すでにリモート アクセス機能を備えている攻撃者によって、explorer.exe のコンテキストで操作され、おそらく対話型の手段でダウンロードされ、リンクをクリックして必要に応じてツールをダウンロードできるようになりました。


調査中、Microsoft Teams メッセージ内の受信 URL に関する正確な情報を提供する M365 監査ログと被害者のホストの EDR テレメトリを相関させ、攻撃者の TTP を完全に理解できたことは特筆に値します。


図 3: 組織 C の Microsoft 365 監査ログ。組織 C のユーザー アカウント経由で攻撃者が送信した悪意のある URL を含む「MessageSent」エントリが表示されています。URL は組織 B の SharePoint にリダイレクトされ、そこでマルウェア ファイルがダウンロード用にホストされていました。

ステップ4

リモート アクセスを介して手動で悪意のある操作を実行しようとする試みが複数回行われました。これらのアクティビティは主に、攻撃者がダウンロードしたファイルの 1 つである LiteManager (「ROMServer.exe」) と呼ばれる RMM ツールを繰り返し実行するためのスケジュールされたタスクの作成などの永続的な取り組みに関係していました。

schtasks /Create /TN "Perfomance monitoring" /SC MINUTE /TR C:\ProgramData\500000003\ROMServer.exe

ステップ5

上記のアクティビティに続いて、攻撃者はCliento.zip.


以前と同様に、リンクは被害者ユーザーと脅威アクター間のチャットで共有されました。この .zip ファイルには、メインの .JAR マルウェアと、.JAR マルウェアを実行するための Java 開発キット全体が含まれていました。

ステップ6

脅威アクターは、以下を使用して .JAR マルウェアを実行しました: C:\\ProgramData\\Cliento\\jdk-22_windows-x64_bin\\jdk-22.0.2\\bin\\javaw.exe -jar C:\\ProgramData\\Cliento\\Cliento.jar

ステップ7

悪意のある .JAR ファイルのコンテキストでは、次のような複数のネットワーク アクティビティとコマンド実行が特定されました。


  • → safeshift390-my.sharepoint.com への複数の送信 DNS 要求/ネットワーク アクティビティ

  • → graph.microsoft.com への複数の送信 DNS 要求/ネットワーク アクティビティ

  • 複数の送信 DNS 要求/ネットワーク アクティビティ → login.microsoftonline.com

  • ローカル列挙コマンドの実行:

    • システム仕様を取得 - Systeminfo
    • マシンの時間情報を取得 - net time
    • マシンの UUID を取得します (これについては後で説明します) - Get-WmiObject -Class Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID
    • USB デバイスの列挙 - {$_.interfacetype -eq \"USB\"}"


次のスクリーンショットは、悪意のあるアクティビティに関連するプロセス ツリーの主要部分を示しています。

図4: ハンターの次世代SIEMからの要約プロセスツリー

ステップ8

攻撃者はまた、Java マルウェアを永続的に実行するために、レジストリに実行キーとして悪意のある JAR バイナリを追加しました。

コマンドライン:

Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" -Name \"current\" -Value \"C:\\ProgramData\\Cliento\\jdk-22_windows-x64_bin\\jdk-22.0.2\\bin\\javaw.exe -jar C:\\ProgramData\\Cliento\\Cliento.jar\" -ErrorAction Stop"


このインシデントの封じ込めと根絶は非常に迅速かつ効果的に行われ、私たちが入手した法医学的証拠によれば、攻撃者が被害者のホストと組織に重大な損害を与えた形跡はありませんでした。


上で詳述した攻撃フローから得られる重要な洞察の 1 つは、攻撃者が攻撃の一環として、よく知られ、一般的に使用されているさまざまな Microsoft サービスを使用したことです。これは、目に見えないようにするためと、おそらくは利便性のためでもありました。


次の表を使用して、脅威の攻撃者がこれまでに使用した Microsoft サービスを簡単にまとめてみましょう。

サービス

テナント

目的

マイクロソフトチーム

組織Aから組織Cへ

被害者を誘い出してリモート管理ツールをダウンロードさせ、実行させるためのスピアフィッシングメッセージ

クイックアシスト

組織C

脅威アクターは、Microsoft Teamsメッセージを使用してクイックアシストコードを送信し、最初のリモート制御を取得します。

シェアポイント

組織Bから組織Cへ

悪意のあるファイルは組織 B の SharePoint テナントに「ホスト」されています。ダウンロード リンクは SharePoint メッセージを介して組織 C と共有され、攻撃者がクイック アシストを使用して開きます。

グラフAPI

組織 C から N/A へ

悪意のある cliento.jar によって開始された Microsoft Graph (graph[.]microsoft[.]com) への悪意のあるアクセスの兆候がありました。


この段階で、私たちは上記の 4 つの Microsoft サービス/アプリを特定しました。最初の 3 つの目的は理解できましたが、Graph API に向けたアクティビティは不明のままでした。その潜在的な目的についてはいくつかの仮定がありましたが、インシデント対応では仮定だけでは不十分ですよね?


OneDrive/SharePoint の .JAR マルウェア「Cliento.jar」について、より多くの情報を収集し、より深く理解するために (攻撃者が実行する可能性のあるアクションを評価し、その意図を把握するために)、マルウェアの詳細な分析を進めました。


「ODC2」Java マルウェア - コマンド & コントロールとしての OneDrive

Client.jar マルウェア (「ODC2」と名付けました) を逆コンパイルするために、「JDGUI」という Java 逆コンパイラを使用しました。


マルウェアを最初に大まかに調べただけでも、インシデント調査で確認した PowerShell 実行とすぐに相関関係があることがわかりました。これは、Java 用の PowerShell ラッパーである「 jPowerShell 」Java パッケージが含まれていたためです。


さらに、「コマンド」、「接続」、「ランチャー」、「または接続」などの追加パッケージも確認できました。これにより、マルウェアの構造を高レベルで理解することができました。


図5: Javaデコンパイラのスクリーンショット


  1. 私たちは「launcher」パッケージの Main.class から始めて、マルウェアが使用するハードコードされた資格情報のセットを発見しました。これは私たちにとって少し意外でしたが、非常に興味深いものでした。


図 6: Cliente.jar ファイルの内容を表示し、'Main.class' ファイルに焦点を当てた Java デコンパイラのスクリーンショット


マルウェアをさらに分析すると (以下の詳細な分析で説明)、マルウェアがこれらの資格情報を使用して Entra ID への「代理」認証を実行していることがわかりました。この認証を実行するために、ハードコードされたリフレッシュ トークンがクライアント ID およびクライアント シークレットとともに使用され、アクセス トークンが要求されました。


この認証により、マルウェアは、攻撃者が所有しているとされるテナント内の特定の Entra ID ユーザーの OneDrive にアクセスし、このアクセスを C2 目的で悪用できるようになりました。


  1. Main.class のメイン関数では、複数のスレッドを含むエントリ ポイント自体を確認できます。これには、関数「odThread1」と「mainThread1」の実行が含まれます。


図 7: 複数のスレッド (odThread1、odThread2、mainThread1、mainThread2) がコントローラ オブジェクトを初期化している、デコンパイルされた Java クラスの main メソッドを示す Java コード スニペット


「odThread1」には、認証用のハードコードされた資格情報の最初のセット(リフレッシュ トークンなど)を取得するコントローラーの「odRun」関数の実行が含まれます。


  • 「odRun」接続設定には「40.90.196.221」 IPアドレスを使用します。

  • 「実行」のIPアドレス「40.90.196.228」は、攻撃者のC2へのHTTPSソケットを初期化します。このIPはAzureのIPでもあり、仮想マシンである可能性が非常に高いです。このC2チャネルは、以下に詳述するように、より「古典的」であり、PowerShellコマンドの実行につながります。

  • これらの IP アドレスに関する詳細情報を取得するために、以下のスクリーンショットに示すように、ipinfo.io などの既知のリソースと、Microsoft が公開している Azure IP アドレスのサービス タグを確認しました。



図 8: 右側の IP 検索では、VPN、プロキシ、Tor、リレー フラグが有効になっていない状態で、「ホスティング」タイプの「microsoft.com」に関連付けられた IP「40.90.196.228」の詳細が提供されます。


  • また、このマルウェアで見つかった追加のハードコードされた IP アドレス (38.180.136.85) は、別のサービス プロバイダーが所有しており、ホスティング サービスに関連付けられているようです。私たちの調査によると、この IP アドレスはマルウェアによって積極的に使用されていませんでした。これは、従来の理由 (以前の C2 インフラストラクチャ) で存在していたものと推測されます。


HTTPS ソケット C2

  1. 「ctrl.run()」関数を実行する「mainThread1()」をもう少し詳しく調べると、run() 関数が接続を作成しようとし、接続がアクティブかどうかを定期的にチェックしていることがわかります。次に、「parseCommand」を試みて、無関係な部分をトリミングします。


図 9: 逆コンパイルされた Java プログラムの Controller クラスの Java コード スニペット


  1. この「run」関数は、「connect()」を使用して接続を設定/リセットします。これは、上で見たリモート IP アドレス 40.90.196.228 へのソケットを作成します。

  2. この「実行」機能は「CommandManager」を使用します。これには、クライアントからサーバー、サーバーからクライアントへのファイル転送、ファイルの圧縮、スクリーンショット、ネットワーク接続の終了、そしてもちろんコマンドの実行など、このマルウェアが提供するさまざまな種類のコマンド/機能に対するさまざまな処理が含まれます。


受信したコマンドが空かどうか、または C2 サーバーから実際のコマンドが受信されたかどうかを確認します。


図 10: 逆コンパイルされた Java プログラムの CommandManager クラスの Java コード スニペットのスクリーンショット


  1. コマンドが見つかった場合は、それを解析して実行します。実行は基本的に PowerShell のコンテキストで行われます。


    受信コマンドを PowerShell コマンドとして実行することは、前述の jPowerShell ラッパーを使用して実行されます。

図 11: 逆コンパイルされた Java プログラムの CommandManager クラスの Java コード スニペット


OneDrive コマンド & コントロール

OneDrive C2 機能の核心に迫る前に、マルウェアのコードの重要な部分が OneDrive ファイルの 3 つの特定の「タイプ」、つまり UUID、cf_UUID、rf_UUID に大きく依存していることに注意することが重要です。調査で確認されたように、コマンドGet-WmiObject -Class Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUIDが実行され、デバイス ハードウェアの UUID が明らかになりました。この一意の識別子は、VEILDrive キャンペーンの各被害者を区別するために使用されます。


各ファイル タイプは、マルウェアの動作において異なる役割を果たします。次のスクリーンショットは、これらのファイルの例と、マルウェアの実行における主な役割を示しています。


図12: ディレクトリ内の3つのファイルを示すスクリーンショット。それぞれに固有のUUIDがあります。


OneDrive C2 機能のフローと、それらの UUID ファイルが実際にどのように使用されているかについて詳しく見てみましょう。


  1. PowerShell を介した従来のリモート実行機能に加えて、「odRun」関数は、通信チャネルとして「OneDrive」に基づく別のスレッドを担当します。これがこのマルウェアのユニークな部分です。


    「odRun」は、おそらく「OneDrive」(OneDriveRun) にちなんで名付けられており、最初のステップとして「Odconnect」関数を使用して OneDrive 接続を作成することが含まれます。


図 13: odRun メソッドを示す Java コード スニペット。このメソッドは、tenantId、clientId、clientSecret、grantType、accessToken、refreshToken などのパラメータを受け取ります。


  1. ご覧のとおり、最初に「machineUUID」文字列が空の文字列として設定されます。続いて「getMachineUUID()」関数が実行され、その名前が示すように、被害者のデバイスのマシン UUID を取得します。


図14:マシンのUUIDを取得するgetMachineUUIDメソッドを示すJavaコードスニペット。このメソッドはPowerShellコマンド「Get-WmiObject -Class Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID」を実行し、その結果をmachineUUID変数に割り当ててから返します。


  1. 次に、OneDrive 接続が「OdConnect」関数を使用して実行されていることがわかります。新しいアクセス トークンと更新トークンのセットの作成/更新のために、「login[.]microsoftonline[.]com」への接続が確立されています。


図15: OdconnectクラスのupdateTokensメソッドを示すJavaコードスニペット


  1. 「WriteFileToOneDrive」関数は、「checkFile」関数によって実行されたチェックに基づいて、ターゲット コンピューターに現在の被害者マシンの UUID と同じ名前のファイルがない限り、次に呼び出される関数です。
  • ”checkFile”: この関数は、現在のユーザーのOneDriveのホームフォルダに== machineUUIDという名前のファイルがあるかどうかを確認します。


図 16: Odconnect クラスの checkFile メソッドを示す Java コード スニペット。このメソッドは、Microsoft Graph API を使用してルート ディレクトリ内のファイルを一覧表示し、OneDrive 内のファイルの存在を確認します。


  1. そのようなファイルが存在しない場合は、「writeFileToOneDrive()」がゲームに入り、プレフィックスなしで現在の被害者のコンピュータ UUID という名前のファイルを作成します。


図 17: Odconnect クラスの writeFileToOneDrive メソッドを示す Java コード スニペット。このメソッドは、Microsoft Graph API に PUT 要求を送信して、ファイルを OneDrive にアップロードします。


  1. 「odRun」の次の部分は、UUID の内容を取得する「getFiles()」関数です。


デバイスの machineUUID (プレフィックスなし) で名前が付けられた OneDrive ファイル。

  • ファイルの内容が空でない場合は、「send」という単語で始まるかどうかを確認します。
    • コンテンツの正規化を行い、次のチェックに備えて、「send」という文字列を削除し、「\」を「」(何もない)に置き換えて、「 filenameForDownload 」という変数に保存します。
    • filenameForDownloadgetFileDownloadUrl関数に渡されます。これにより、攻撃者が選択したファイルが取得されます。攻撃者は、UUID ファイルの「send」という単語の後にファイル名を指定し、被害者のマシンの指定された宛先パスである「user.home」\downloads (ダウンロード フォルダ) に保存します。
    • 続いて、「 downloadFile 」関数が呼び出され、 getFileDownloadUrl関数の出力に基づいて、リモート ファイルがローカルの被害者デバイスにダウンロードされます。
    • 攻撃者は、直後に実行される「odRun」の一部として実行される「 writeFileToOneDrive 」を使用して、次の「rf_」+「send file」+「filenameForDownload」+「done」を書き込み、実行が行われたことを攻撃者に知らせます。その後、「writeFileToOneDrive」が再度実行され、「cf_」+ machineUUID という名前の別のファイルが、コンテンツなしで OneDrive に書き込まれます。
  • ファイルの内容が空ではないが、「send」で始まっていない場合:
    • cf_MachineUUID ファイルの内容が実行されます。

    • 続いて、「 writeFileToOneDrive 」、最初に「rf_」+ machineUUID、実行応答の内容を使用して、OneDrive にファイルを書き込みます。

    • また、「 writeFileToOneDrive 」の別の使用法として、「cf_」ファイルを書き込んで空にすることで、基本的に同じコマンドが再度実行されるのを防ぎます(マルウェアはループ内で実行されるため)。


簡単にまとめると、このマルウェアは、次の 2 つの異なる C2 チャネルを操作できるようです。


  • HTTPS ソケット C2 : より古典的なアプローチ。リモートAzure VMからコマンドを受信し、PowerShell のコンテキストで実行します。

  • OneDrive ベースの C2 : これはよりユニークで、動作方法が少し複雑で独創的です。3 つの異なるファイルが含まれており、そのすべてに被害者のデバイスの UUID が含まれており、一部にはプレフィックス (rf_ および cf_) が付いています。脅威アクターが Microsoft Graph を使用してコマンドを簡単に送受信できるようにするためです。


    : このマルウェアには、ファイル転送などの標準コマンド実行の他に、追加機能があることを言及することが重要です。ただし、上記の詳細情報は、コマンド実行の側面のみに焦点を当てています。


攻撃者のインフラストラクチャとしての Microsoft サービス/アプリ

この時点で、この攻撃は単純な手法と洗練された独自の戦術を巧みに組み合わせていることが明らかです。当社の初期調査で際立った特徴の 1 つは、キャンペーン全体を通じて統合された Microsoft インフラストラクチャとサービスの広範な使用でした。

マルウェアを分析し、新しい情報を調査の洞察と関連付けた結果、攻撃者がさまざまなサービスをどのように使用し、その目的があるのかをより明確に理解することができました。Microsoft のサービスとインフラストラクチャの利用は、当初考えられていたよりもさらに広範囲に及んでいることがわかりました。


簡単な概要については、以下の表をご覧ください。

サービス

テナント

目的

マイクロソフトチーム

組織Aから組織Cへ

被害者を誘い出してリモート管理ツールをダウンロードさせ、実行させるためのスピアフィッシングメッセージ

クイックアシスト

組織C

脅威アクターは、Microsoft Teamsメッセージを使用してクイックアシストコードを送信し、最初のリモート制御を取得します。

シェアポイント

組織Bから組織Cへ

悪意のあるファイルは、組織 B の SharePoint テナントに「ホスト」されています。ダウンロード リンクは SharePoint メッセージを介して組織 C と共有され、攻撃者がクイック アシストを使用して開きます。

Azure VM

攻撃者のインフラストラクチャ

マルウェアは、HTTPSソケットC2の目的で脅威アクターが所有するAzure仮想マシンと通信しました。

OneDrive (グラフ API)

攻撃者の OneDrive と Org C ホスト間

脅威アクターは、OneDrive を追加の C2 チャネルとして使用し、Org C ホストをターゲットにして、コマンドのリモート実行、スクリーンショットの撮影、ファイルのダウンロード/アップロードなどの機能を取得しました。

Azure AD アプリ登録

攻撃者のOneDriveとOrg Cホスト間

アプリケーションは、攻撃者が所有するAzure ADユーザーアカウントに代わって認証に使用され、OneDriveホームフォルダーにアクセスします。


侵害の兆候 (IOCS)

  • 攻撃者が所有する既知の Entra ID テナント:
    • C5f077f6-5f7e-41a3-8354-8e31d50ee4d
    • 893e5862-3e08-434b-9067-3289bec85f7d
  • 攻撃者のクライアント ID によって登録された既知のアプリケーション:
    • B686e964-b479-4ff5-bef6-e360321a9b65
    • 2c73cab1-a8ee-4073-96fd-38245d976882
  • 攻撃者が使用する Entra ID テナント (これらのドメインへの送信 DNS 要求を探します):
    • SafeShift390[.]onmicrosoft[.]com
    • GreenGuard036[.]onmicrosoft[.]com
  • 調査の一環として見つかったファイル IOC (SHA256):
    • ROMサーバー.exe a515634efa79685970e0930332233aee74ec95aed94271e674445712549dd254
    • フックDrv.dll 1040aede16d944be8831518c68edb14ccbf255feae3ea200c9401186f62d2cc4
    • ROMFUSクライアント.exe 7f61ff9dc6bea9dee11edfbc641550015270b2e8230b6196e3e9e354ff39da0e
    • AledensoftIpcServer.dll d6af24a340fe1a0c6265399bfb2823ac01782e17fc0f966554e01b6a1110473f
    • ROMwln.dll 7f33398b98e225f56cd287060beff6773abb92404afc21436b0a20124919fe05
  • IP アドレス:
    • 40.90.196[.]221
    • 40.90.196[.]228
    • 38.180.136[.]85
    • 213.87.86[.]192



脅威ハンティングクエリ

上記の特定のIOCに加えて、同じ攻撃者によって発信された攻撃、同じキャンペーンで実行された攻撃、または同様の特性(TTP)を共有する攻撃を検出するために使用できる複数の脅威ハンティングクエリを作成しました。

注: VEILDrive の推奨狩猟期間は 2024 年 7 月からとなります。


ハンティング クエリ 1 : Javaw が特定のフラグを使用して Powershell を生成する - 異常な動作

  • クエリ ロジック:分析中に、攻撃者のリモート アクセス ツール (RAT) が実行プロセスの一環として Powershell を使用してマシンの UUID を取得していることが判明しました。このクエリは、脅威アクターが使用する特定のコマンド ライン フラグを使用して javaw.exe によって生成される Powershell の異常なインスタンスを検出します。

  • クエリ:

     SELECT EVENT_TIME, AGENT_ID, PARENT_PROCESS_NAME, PARENT_PROCESS_COMMANDLINE, INITIATING_PROCESS_NAME, INITIATING_PROCESS_COMMANDLINE, TARGET_PROCESS_NAME, TARGET_PROCESS_COMMANDLINE, TARGET_PROCESS_OS_PID FROM INVESTIGATION.EDR_PROCESS_CREATION_EVENTS WHERE 1=1 AND PARENT_PROCESS_NAME ILIKE '%javaw%' AND INITIATING_PROCESS_NAME ILIKE '%cmd%' AND TARGET_PROCESS_NAME ILIKE '%powershell%' AND TARGET_PROCESS_COMMANDLINE ILIKE 'powershell.exe -ExecutionPolicy Bypass -NoExit -NoProfile %' AND EVENT_TIME > current_timestamp - interval '60d'


ハンティング クエリ 2: スケジュールされたタスクによる ROM ツールの永続化

  • クエリ ロジック:このクエリは、脅威アクターが永続化のために使用する ROM ツールの実行に登録するスケジュールされたタスクのインスタンスを検出します。

  • クエリ:

     SELECT EVENT_TIME AS EVENT_TIME, AID AS AGENT_ID, CID AS COMPUTER_ID, EVENT_SIMPLE_NAME AS EVENT_NAME, RAW:TaskName AS TASK_NAME, RAW:TaskExecCommand AS TASK_EXEC_COMMAND, RAW:TaskAuthor AS TASK_AUTHOR, RAW:UserName AS USER_NAME --- Adjust according to your EDR of choice FROM RAW.CROWDSTRIKE_RAW_EVENTS WHERE EVENT_SIMPLE_NAME = 'ScheduledTaskRegistered' AND TASK_EXEC_COMMAND ILIKE '%romserver%' AND EVENT_TIME > CURRENT_TIMESTAMP - interval '60d'


ハンティングクエリ3 : 組織外のユーザーがMicrosoft Teams経由でサードパーティのSharePointドメインへのリンクを共有している

  • クエリ ロジック:このクエリは、SharePoint リンクが Teams チャットで共有されているが、SharePoint リンクのドメインがどのチャット参加者にも属していないケースを検出します。これは、外部ドメインが組織内の無防備なユーザーとファイルや情報を共有するために使用されている、潜在的なフィッシング攻撃やデータ流出を示している可能性があります。
  • クエリ:
 SET YOUR_ORGANIZATION_NAME = 'hunters'; SELECT EVENT_TIME, ORGANIZATION_ID AS ORG_ID, OPERATION AS EVENT_TYPE, SPLIT_PART(LOWER(SPLIT_PART(USER_ID, '@', 2)), '.', 1) AS SENDER_ORG_DOMAIN, RECORD_SPECIFIC_DETAILS:message_ur_ls AS MESSAGE_URLS, WORKLOAD AS WORKLOAD, USER_ID AS USER_ID, RECORD_SPECIFIC_DETAILS:chat_thread_id AS CHAT_THREAD_ID, RECORD_SPECIFIC_DETAILS:communication_type AS COMMUNICATION_TYPE, RECORD_SPECIFIC_DETAILS:members[0].DisplayName AS MEMBER_DISPLAY_NAME, RECORD_SPECIFIC_DETAILS:members[0].UPN AS MEMBER_UPN, RECORD_SPECIFIC_DETAILS:members[0] AS MEMBERS, RECORD_SPECIFIC_DETAILS:resource_tenant_id AS RESOURCE_TENANT_ID, RECORD_SPECIFIC_DETAILS FROM RAW.O365_AUDIT_LOGS WHERE NOT USER_ID ILIKE '%' || $YOUR_ORGANIZATION_NAME || '%' AND (NOT (MESSAGE_URLS ILIKE '%' || SENDER_ORG_DOMAIN || '%') AND MESSAGE_URLS ILIKE '%sharepoint%') AND NOT MESSAGE_URLS ILIKE '%' || $YOUR_ORGANIZATION_NAME || '%' AND EVENT_TIME > CURRENT_TIMESTAMP - interval '60d'


ハンティング クエリ 4 : Microsoft Teams - フィッシング検出 - 共通でないドメインからの複数の DM

  • クエリ ロジック:次のクエリは、非共通ドメインの外部ユーザーによる 1 対 1 のチャットで送信されたメッセージを検出します。このクエリは、過去のアクティビティに基づいて頻繁に使用されるドメインを除外し、フィッシング攻撃を行っている可能性があるチャットに追加された外部メンバーを識別します。

  • クエリ:

     SET YOUR_DOMAIN_NAME = 'hunters'; --- GET EXTERNAL TEAMS AND ONEDRIVE USERS OF THE LAST 3 MONTHS - TO CLEAN EXTENSIVELY USED DOMAINS WITH COMMONLY_USED_DOMAINS AS ( SELECT LOWER(SPLIT_PART(USER_ID , '@', 2)) AS DOMAIN_COMMONLY_USED, MIN(EVENT_TIME) AS MIN_EVENT_TIME, MAX(EVENT_TIME) AS MAX_EVENT_TIME, ARRAY_AGG(DISTINCT OPERATION) AS OPERATIONS, COUNT(*) AS COUNTER FROM RAW.O365_AUDIT_LOGS WHERE WORKLOAD IN ('MicrosoftTeams', 'OneDrive') AND EVENT_TIME > CURRENT_TIMESTAMP - interval '90d' AND USER_ID ILIKE '%@%' GROUP BY DOMAIN_COMMONLY_USED HAVING COUNTER > 20 ), ---- Get List of External Domains that recently communicated with our organization using Microsoft Teams LATEST_EXTERNAL_DOMAINS AS ( SELECT USER_ID AS LATEST_EXT_USERS, LOWER(SPLIT_PART(USER_ID , '@', 2)) AS USER_DOMAIN, MIN(EVENT_TIME) AS MIN_EVENT_TIME, MAX(EVENT_TIME) AS MAX_EVENT_TIME, ARRAY_AGG(DISTINCT OPERATION) AS OPERATIONS, ARRAY_AGG(DISTINCT RECORD_SPECIFIC_DETAILS:communication_type) AS COMMUNICATION_TYPE, COUNT(*) AS COUNTER FROM RAW.O365_AUDIT_LOGS WHERE EVENT_TIME > CURRENT_TIMESTAMP - interval '50d' AND NOT USER_ID ILIKE '%' || $YOUR_DOMAIN_NAME || '%' AND NOT USER_ID IN ('app@sharepoint') AND USER_ID ILIKE '%@%' -- CLEAN-UP OF EXTENSIVELY USED DOMAINS AND USER_DOMAIN NOT IN (SELECT DISTINCT DOMAIN_COMMONLY_USED FROM COMMONLY_USED_DOMAINS) AND OPERATION IN ('MemberAdded', 'ChatCreated') AND RECORD_SPECIFIC_DETAILS:communication_type = 'OneOnOne' GROUP BY USER_ID HAVING COUNT(*) > 5 ) SELECT EVENT_TIME, ORGANIZATION_ID AS ORG_ID, WORKLOAD AS WORKLOAD, OPERATION AS OPERATION, USER_ID AS USER_ID, LOWER(SPLIT_PART(USER_ID , '@', 2)) AS USER_DOMAIN, RECORD_SPECIFIC_DETAILS:chat_thread_id AS CHAT_THREAD_ID, RECORD_SPECIFIC_DETAILS:communication_type AS COMMUNICATION_TYPE, RECORD_SPECIFIC_DETAILS:members[0].DisplayName AS MEMBER_DISPLAY_NAME_0, RECORD_SPECIFIC_DETAILS:members[0].UPN AS MEMBER_UPN_0, RECORD_SPECIFIC_DETAILS:members[0] AS MEMBERS_0, RECORD_SPECIFIC_DETAILS:members[1].DisplayName AS MEMBER_DISPLAY_NAME_2, RECORD_SPECIFIC_DETAILS:members[1].UPN AS MEMBER_UPN_2, RECORD_SPECIFIC_DETAILS:members[1] AS MEMBERS_2, RECORD_SPECIFIC_DETAILS:resource_tenant_id AS RESOURCE_TENANT_ID, RECORD_SPECIFIC_DETAILS, RAW:ClientIP AS CLIENT_IP FROM RAW.O365_AUDIT_LOGS WHERE 1=1 AND RECORD_SPECIFIC_DETAILS:communication_type = 'OneOnOne' AND ( RECORD_SPECIFIC_DETAILS:members[0].UPN IN (SELECT LATEST_EXT_USERS FROM LATEST_EXTERNAL_DOMAINS) OR RECORD_SPECIFIC_DETAILS:members[1].UPN IN (SELECT LATEST_EXT_USERS FROM LATEST_EXTERNAL_DOMAINS) ) AND USER_ID ILIKE '%' || $YOUR_DOMAIN_NAME || '%' AND OPERATION = 'MemberAdded' AND EVENT_TIME > CURRENT_TIMESTAMP - interval '50d';
  • 詳細なクエリ ロジック:このクエリは少し複雑なので、ここでロジックを説明します。まず、Snowflake の「CTE」機能を使用して 2 つのビューを構築します。

    1. よく使用されるドメイン:
      • 「@」の後の文字列を分割して、ユーザー ID からドメイン名を抽出します。
      • 過去90日間に各ドメインで生成されたすべてのイベントをカウントします
      • 20 件を超えるイベントがあるドメインは一般的なものとして保持します。必要に応じて調整できます。
    2. 最新の外部ドメイン:
      • 過去 50 日間のすべてのイベントから、前のビューで特定された内部ドメインとよく使用されるドメインを除外します。
      • ダイレクト メッセージの送信や Teams へのメンバーの追加を含むイベントが 5 件以上あるすべてのドメインをクエリします。

    最後に、LATEST_EXTERNAL_DOMAINS からフィルタリングされた結果を照会して、ユーザーとそれに関連付けられたドメインに関する詳細情報を取得します。


衛生ナゲット

私たちは、攻撃者が使用した複数の攻撃手法に関連するハンティングと調査の側面について取り上げました。これらの悪意のある方法と手法の一部は、さまざまなキャンペーンでも使用されていることが知られています。

これらの脅威から組織を保護することで、組織のインフラストラクチャのさまざまな部分を標的とした攻撃が成功する可能性を大幅に減らすことができます。

セキュリティ体制を強化するために使用できる Hygiene Nuggets をいくつか紹介します。


  1. Microsoft Teams を介したフィッシング攻撃が成功する可能性を減らすには、次のいくつかの手順を実行できます。
    • デフォルトでは、Microsoft Teams は「外部アクセス」を許可しており、外部の連絡先との 1 対 1 のチャットが可能です。これが組織にとって必須でない場合は、このオプションを無効にすることを検討してください。
    • 外部との通信が必要な場合は、信頼できるドメインのみに制限してください。
    • Microsoft Teams で外部の関係者と通信するもう 1 つの方法は、ゲストまたはメンバーとして追加することです。この機能を制限し、高い権限を持つ選ばれたユーザーのみが管理できるようにすることを強くお勧めします。
  2. リモート管理ツールを使用したサイバー攻撃の増加により、合法的に使用されるツールと脅威アクターによって悪用されるツールを明確に区別する必要が生じています。以下にいくつかの推奨事項を示します。
    • リモート管理ツールを、ビジネス目的に必要な特定の承認済みアプリケーションに制限します。Quick Assist は Microsoft Store から簡単にダウンロードできます。組織のホワイトリストにない場合は、使用をブロックすることを検討してください。AppLocker、Windows ファイアウォール ルール、MDM 管理などの対策を適用して、アクセスを制限できます。
    • よく使用されるリモート管理ツールを追跡し、異常なまたは許可されていないサードパーティ製ツールを監視します。たとえば、Quick Assist が使用されているが、IT チームがリモート サポートにそれに依存していない場合は、アラームがトリガーされるはずです。
  3. セキュリティ意識向上トレーニング - 決まり文句のように聞こえるかもしれませんが、サイバー攻撃が成功する主な理由の 1 つは、常に人為的ミスです。セキュリティ意識向上トレーニングは、この点で大きな効果を発揮し、次の侵害からあなたを守ります。
    • 実際に見られる脅威に焦点を絞り、関連性を持たせることをお勧めします。たとえば、Microsoft Teams、Slack、従来の電話通話などのコミュニケーション プラットフォームを介した IT なりすましの事例が増加しています。従業員がこれに対処する方法を知っていることを確認してください。


結論

  • VEILDrive はシンプルさと洗練さを兼ね備えています。OneDrive 経由の C2 と並行して従来の C2 特性が使用されていることや、従来のスケジュールされたタスク ベースの永続性と、一流の EDR では検出されないマルウェア実行が組み合わされていることは興味深いことです。

  • 調査と脅威研究の一環として特定された特性は興味深いものであり、これにより、この脅威アクターがどのように機能するか、どの既知のサービスを悪用しているか、どのように悪用しているか、そしてその目的は何かをより深く理解することができました。

  • VEILDrive で C2 通信に OneDrive が悪用された方法には、独特の特徴がありました。ただし、C2 目的で OneDrive を悪用するという一般的な概念は、ここ数か月で増加しており、留意しておく必要があります。

  • Microsoft Teams、Slack などのコミュニケーション プラットフォームや類似のサービスでのスピア フィッシングによる初期アクセスがますます一般的になっています。

  • 時間が経つにつれて、この傾向はさらに強くなると予想されます。したがって、この側面に関連する衛生と姿勢の対策(上記の「衛生ナゲット」で述べたように)が非常に重要です。

  • リモート管理ツールは、脅威アクターの間ですでに非常に人気があります。このようなツールを使用した不正アクセスの可能性を最小限に抑えるには、さまざまなアプローチを取ることができます。私たちの観点からすると、この分野で推奨されるアプローチは、ホワイトリスト (許可リスト) と堅牢な監視を組み合わせたものです。

  • 同様の手法と特徴を採用した、この種の攻撃が今後もさらに発生すると予想されます。そのため、この種の脅威に対する継続的な監視と積極的な脅威ハンティングを強くお勧めします。


脅威ハンティングの調査、活動、クエリに関する最新情報を入手するには、Team Axon の X/Twitter アカウント ( @team__axon ) をフォローしてください。