This post is also available in: English (英語)
概要
Unit 42 のリサーチャーは、2023 年 1 月から 2023 年 10 月まで続いた一連の破壊的サイバー攻撃を調査しました。この攻撃はイスラエルの教育・テクノロジー セクターを標的とするものでした。
この攻撃の特徴は、個人を特定可能な情報 (PII) や知的財産などの機微データの窃取を試みていた点です。この攻撃者は情報を盗んだ後、さまざまなワイパーを展開して自らの痕跡を消し、感染エンドポイントを使用不能にしていました。
私たちの調査により、この攻撃犯らは Unit 42 が「Agonizing Serpens (別名 Agrius、BlackShadow、Pink Sandstorm、DEV-0022) の名前で追跡している、イランの支援する APT グループと強いつながりがあることが明らかになりました。
Unit 42 のリサーチャーは、Agonizing Serpens が最近の攻撃で使った新しいワイパーとツールも特定できました。
- MultiLayer ワイパー
- PartialWasher ワイパー
- BFG Agonizer ワイパー
- Sqlextractor (データベース サーバーから情報を抽出するカスタム ツール)
フォレンジック的な証拠に基づくと、Agonizing Serpens APT グループは最近その機能をアップグレードし、EDR (エンドポイントでの検出・対応) などのセキュリティ対策を回避するために多大な努力とリソースを投資しているようです。そのために、彼らはさまざまな既知の概念実証 (PoC) ツールやペネトレーション テスト ツール、さらにはカスタム ツールをローテーションして使ってきました。
以下に説明する攻撃ではこの攻撃者は Cortex XDR を回避できませんでした。Cortex XDR および Cortex XSIAM は本稿に解説する実行フローを検出して防止します。また、これらの製品では機械学習によりユーザー アクティビティの経時的行動プロファイルを構築し、たとえばクレデンシャル ベースの攻撃を示唆するような異常なアクティビティを検出できるようにしています。
私たちは、この調査を共有し、検出・防止・ハントに関する推奨事項を提供することで、Agonizing Serpens に関連する脅威からの組織の保護に貢献できればと考えています。
関連する Unit 42 のトピック | APT, Education |
Agonizing Serpens APT グループとは
Agonizing Serpens (別名 Agrius) は、2020 年から活動しているイランとつながりのある APT グループです。このグループは破壊的なワイパー攻撃や偽ランサムウェア攻撃で知られており、主に複数のセクター・国におけるイスラエル系組織を標的としています。
これらの攻撃に関する以前の報告では、ランサムウェアや身代金メモについて触れられていましたが、これらは策略であることが判明しました (この傾向については 2023 年版 Unit 42 ランサムウェア & 脅迫レポートでも述べられています)。この攻撃者は最近の攻撃では身代金を要求していません。むしろこの攻撃が狙っていた結果は、膨大なデータの損失と事業継続の中断だったようです。
Agonizing Serpens からの攻撃では通常、主な目的が 2 つあります。1 つめは PII や知的財産を含む機微情報を盗み、脅威アクターがソーシャル メディアや Telegram チャネルに公開することです。ソーシャル メディアに公開する動機は、恐怖を植え付けたり、風評被害を与えたりすることであると考えられます。2 つめの動機は、できるだけ多くのエンドポイントをワイプすることで混乱を引き起こし、多大な損害を与えることです。
出現以来、このグループは新しいカスタム ツールを開発し、既知のハッキング ツールや技術も活用して、攻撃的活動を実行してきました。
技術的分析
以下のセクションで、Unit 42 のリサーチャーが分析した Agonizing Serpens による 2023 年 10 月のインシデントをその攻撃段階ごとに分けて詳しく解説します。
Entry Vector (侵入ベクトル)
攻撃者はインターネットに面した脆弱な Web サーバーをエクスプロイトし、対象環境への初期アクセスを得ていました。その後、Web シェルを複数展開し、ネットワーク内での足場を築きました。
脅威アクターが上記の攻撃で使った Web シェル (図 1 を参照) には、関数名は変更されていましたが、以前の Agonizing Serpens による攻撃で観測された Web シェルと同じコードが含まれていました。この Web シェルは ASPXSpy の一種のようです。
![画像 1 は、ASPXSpy の一種である Web シェルの一部を構成するコード スニペットのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-1.png)
この攻撃で使われた別の Web シェルの名前は Uploader.aspx です。図 2 は、Agonizing Serpens が使う 2 つの Web シェルで見つかったほぼ同一のコードを示しています。1 つは最近の攻撃からのもので、もう 1 つは過去の攻撃からのものです。
![画像 2 は、2 つのコード スニペットを組み合わせたものです。上のスニペットは Uploader.aspx からのもので、下のスニペットはイスラエル企業に対して攻撃者が使った Web シェルからのものです。2 つのスニペットは赤い線で区切ってあります。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-2.png)
図 3 は、攻撃者が Web シェルを展開した直後に、Web シェルを介して基本的な偵察コマンドの実行を開始したようすを示しています。
![画像 3 は、Cortex XDR のアラート システムのスクリーンショットです。これはツリー図で、最初の w3wp.exe アラートからのびる 4 本の独立したブランチが描かれています。3 つのファイル パスのほか、net user、net user/domain/ が表示されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-3.png)
Reconnaissance (偵察)
ネットワーク構成の把握のため、公開されていて誰でも入手できる既知のスキャナーが多数使われていました。
nbtscan
攻撃者は、nbtscan の名前を systems.txt に変え、これでネットワークをスキャンして既存ホストを探していました (図 4 参照)。
![画像 4 は Cortex XDR のスクリーンショットです。この図には 3 つのアラートが表示されています。ファイル パスも含まれています。一部の情報は伏せられています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-4.png)
WinEggDrop
図 5 は、攻撃者がオープンソースの SYN/TCP ポート スキャナー WinEggDrop を使って、関心を寄せた特定ホストをどのようにスキャンしたかを示したものです。
![画像 5 は Cortex XDR のスクリーンショットです。このツリー図にはアラートをもつ 4 つのブランチが描かれています。一部の情報は伏せられています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-5.png)
NimScan
NimScan は攻撃者が攻撃に使ったべつのポート スキャナーで、こちらも一般に公開されています (図 6)。
![画像 6 は、2 つの別個のファイル パスのスクリーンショットです。一部の情報は伏せられています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-6.png)
Credential Stealing (クレデンシャルの窃取)
攻撃の最重要フェーズは、管理者権限を持つユーザーのクレデンシャルを取得することで構成されていました。攻撃者はクレデンシャル取得のために複数の手法を試みていましたが、いずれも Cortex XDR プラットフォームによって阻止されていました。
- Mimikatz (ファイル名:Mimi.exe)
- SMB を使ったパスワード スプレー
- SMB を使ったパスワード総当たり攻撃 (図 7 参照)
![画像 7 は Cortex XDR のスクリーンショットです。ツリー図には 3 つのブランチがあります。3 つのアラートに赤い警告シンボルが付いています。一部の情報は伏せられています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-7.png)
- SAM ファイルのダンプ (図 8 参照)
![画像 8 は Cortex XDR のスクリーンショットです。この図には 3 つのアラートが表示されています。そのうち 2 つのアラートには赤い警告シンボルが付いています。一部の情報は伏せられています。ファイルパスが 1 つ含まれています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-8.png)
Lateral Movement (ラテラル ムーブ)
図 9 からは、攻撃者が環境内でラテラル ムーブを行うさい、主に Plink (systems.exe に名前を変更してある) を使ってリモート トンネルを作り、リモート マシンへの接続を確立していたことがわかります。
![画像 9 は Cortex XDR のスクリーンショットです。ツリー図には 3 つのブランチがあります。3 つのアラートに赤い警告シンボルが付いています。一部の情報は伏せられています。アラートの原因となったファイル パスもあります。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-9.png)
Stealing and Exfiltrating Data (データの窃取と漏出)
この攻撃者は、データベースなど重要サーバーからの情報窃取を図ったのち、ワイパーを実行して痕跡を隠していました。次に、WinSCP や Putty などのさまざまな公開ツールを使ってこの情報を攻撃者の C2 サーバーに漏出させようとしていました。
Sqlextractor を使ったデータベース情報の抽出
攻撃者は、sqlextractor (バイナリー名は SQL.net4.exe) という名前のカスタム ツールを使っていました。このツールの目的は、SQL データベースにクエリーを発行し、以下のような機微な個人識別情報 (PII) のデータを抽出することです。
- ID 番号
- パスポートのスキャン
- 電子メール
- 完全な住所
このデータは CSV ファイルに保存されていました (図 10、11)。このツールは、ハードコードされたステージング パスの C:\windows\temp\s\ にデータを書き込みます。
図 10 は、攻撃者が 7za.exe を使って、抽出したデータをアーカイブし、漏出の準備をしたようすを示したものです。
![画像 10 は、Cortex XDR のスクリーンショットです。ツリー図には 2 つのブランチがあります。アラートの 1 つには赤い警告シンボルが付いています。一部の情報は伏せられています。アラートの原因となったファイル パスもあります。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-10.png)
![画像 11 はある表のスクリーンショットです。3 つの列には、SRC_PROCESS_NAME、ACTION_TYPE、FILE_PATH というラベルが付いています。表には全部で 5 行あります。一部の情報は編集されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-11.png)
図 12 は、攻撃者が感染環境で関心を抱いたフォルダーを 7zG.exe も使ってアーカイブしていたことを示しています。
![画像 12 は、4 行ある表のスクリーンショットです。これらの行は、フォルダーをアーカイブするために使われた実行ファイルを示しています。一部の情報は編集されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-12.png)
WinSCP を使ったデータ漏出
攻撃者は WinSCP を使って環境からファイルを抽出しようとしました (図 13、14)。
![画像 13 は、Cortex XDR からのアラートです。ACTION_TYPE と FILE_NAME を含む表が含まれています。各行のアクションは File Read (ファイルの読み取り)です。一部の情報は編集されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-13.png)
![画像 14 は、Cortex XDR の表のスクリーンショットです。列名は、Alert Source、Action、Category、Alert Name、Description、Initiated By です。合計 2 行あります。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-14.png)
Pscp.exe (PuTTY Secure Copy Protocol) を使ったデータ漏出
図 15 は、攻撃者が漏出に使用したもう 1 つのツール、pscp.exe (PuTTY Secure Copy Protocol) を示しています。
攻撃者は C2 への接続を確立しようとしてから、盗んだデータを含めた .7z ファイルと .ezip ファイル、ProcDump で作成した .dmp ファイルを検索していました。
![画像 15 は、漏出に使われた pscp.exe のスクリーンショットです (一部の情報は伏せてあります)。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-15.png)
ワイパーのペイロード
このインシデントで攻撃者は破壊攻撃の一環として 3 つの異なるワイパーを使おうとしていました。一部のワイパーは、以前に Agonizing Serpens グループが使ったことが報告されているワイパーとコードに類似性がありますが、残りのワイパーは真新しいものと考えられます。次のセクションで詳しく説明しますが、これらは今回の攻撃で初めて使われました。
MultiLayer ワイパー
攻撃者が使った最初のワイパーは、MultiLayer と呼ばれる .NET マルウェアです。その名が示す通り、このワイパーには複数のレイヤーとステージとが含まれています。
コンパイル日は 2093 年 10 月 14 日になっています。将来の日付に設定されていることから、メタデータは明らかに改ざんされています。
図 16 は、リソース セクションに MultiList と MultiWip という名前のさらに 2 つのバイナリーが含まれていることを示しています。
![画像 16 は、ファイル ディレクトリーのスクリーンショットです。Resources フォルダーには、MultiList や MultiWip を含む MultiLayer のリソースがあります。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-16.png)
MultiLayer は、前述の各バイナリーをドロップして実行し、実行直後に削除します。
MultiList コンポーネント - ターゲット ファイルの設定
MultiList は、システム上の固定ドライブ上のすべてのファイルとそのパスのリストを生成します。これは、感染したオペレーティング システム上のすべてのファイルを列挙し、事前定義リスト (図 17 を参照) に定義した特定フォルダーを除外することによって行われます。攻撃者は、コマンド ラインを使い、このツールがリストを保存するパスを定義できます。
![画像 17 は、MultiList によって除外されるフォルダーの事前定義リストのコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-17.png)
MultiWip - コアとなるワイパー コンポーネント
MultiWip コンポーネントに実際のファイル消去機能が含まれています。このコンポーネントは、さきほどのコンポーネント (MultiList) に依存して、コマンドライン引数として渡されたワイプ対象ファイルの出力リストを読み取ります。
MultiWip のメインの関数は DoJob() と呼ばれるもので、この関数は図 18 に示す方法でのファイル消去アクティビティの実行を担っています。
![画像 18 は、MultiWip の DoJob() 関数を定義しているコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-18.png)
このマルウェアは、指定された順序で以下の手順を実行します。
- ネットワーク ドライブ上にあるファイルをただちに削除します。
- ローカルに保存されているファイルを破壊し、ランダム データで上書きすることで、ファイル復旧処理を妨げます (図 19)。
![画像 19 は、MultiWip のデータ破壊関数を定義しているコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-19.png)
- このマルウェアは、LastAccessTime、LastWriteTime、CreationTime の各 FileSystemInfo プロパティ内の元のタイムスタンプを変更します。これはよく知られたフォレンジック対策のタイムストンプ技術 (timestomp: 攻撃者が自身の攻撃の痕跡を消したり調査を妨害する目的でファイルやディレクトリーのタイムスタンプを改ざんする) です。このマルウェアはファイル システムにしたがってタイムストンプを行います。ファイル システムが NTFS であればこのマルウェアはタイムスタンプを 1601.1.1 に設定します。べつのファイル システムであれば、1980.1.1 に設定します (図 20 参照)。
![画像 20 は、MultiWip のタイムストンプ関数を定義するコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-20.png)
- このマルウェアは、Path.GetRandomFileName を使って削除されたファイルの元のパスを変更することで、復旧作業を非常に難しくしています。
- 最後に、マルウェアはこれらのファイルを削除します。
攻撃の痕跡を隠しシステムを使用不能にする
MultiLayer は、自身の実行の証拠を消して痕跡を隠すように設計されています。この処理は、失われたデータの復旧を防ぎ、ディスクを使用不能にするためにさまざまなコマンドを実行することによって行われます。
図 21 は、MultiLayer が DeleteLogs() 関数により、あるバッチ スクリプトを 1 度だけ起動するスケジュール タスクを作成することを示しています。次に、このスクリプトはすべての Windows イベント ログを削除します。
![画像 21 は、イベント ログを削除する MultiLayer の機能を定義するコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-21.png)
MultiLayer は検出を逃れるため、使われたファイル (自分自身を含む) をすべて実行後に削除します。MultiLayer は自身を削除するさい、SelfDelete() を使います。
この削除処理は、脅威アクターが %TEMP% に remover.bat というバッチ ファイルを書き込んで実行することによって実現しています。このバッチ ファイルはアセンブリー ファイルとこのバッチ ファイル自体を削除し、ファイル システムのキャッシュ メモリーをクリアします。このさいは、advapi32.dll からの ProcessIdleTasks のエクスポートが利用されます。
さらにデータ復旧を妨害するため、MultiLayer はシステム上のすべてのシャドウ コピーを削除 (図 22) してから、ボリューム シャドウ コピー (VSS) サービス自体を削除しようとします。
![画像 22 は、MultilLayer のシャドウ コピーを削除する機能を定義するコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-22.png)
図 23 に示すように、MultiLayer は、システムのブートを確実に妨害するために、\\\\.\\PhysicalDrive0 へのハンドルを開き、先頭の 512 バイト(つまりブート セクター) をワイプします。
![画像 23 は、ブート セクターを消去する MultiLayer の機能を定義するコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-23.png)
ブート セクターを破壊後、MultiLayer は仕上げとして自身の権限をSeShutdownPrivilege に設定し、EWX_REBOOT フラグを指定して Windows API の ExitWindowsEx を呼び出します。再起動後、システムは起動できなくなります。
以下の図 24 に示すように、MultiLayer 実行の試みは Cortex XDR によって阻止されていました。
![画像 24 は、Cortex XDR のアラートのスクリーンショットです。ユーザー情報は伏せてあります。アラートには赤い警告シンボルが付いています。Tags、Severity (Medium)、Action、Description の情報が含まれています。Module は WildFire です。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-24.png)
Apostle、IPsec Helper、Fantasyとの類似点
分析を行うなかで、MultiLayer のコードが Apostle や IPsec Helper、Fantasy と複数重複していることに気付きました。Apostle、IPsec Helper、Fantasy は、Agonizing Serpens が以前使っていたカスタム ツールです。この重複は、コード ベースが共有されているか、同じ開発者チームによって作成されている結果生じた可能性があります。前述のツールのコードを比較すると、MultiLayer は命名規則やコード ブロック全体においても、それらのツールと共通箇所があるように見えます。
重複の例 1: 自己削除メカニズム
MultiLayer の自己削除メカニズムは、IPsec Helper、Apostle、Fantasy と同様の方法で実装されています。これらのツールの関数名はいずれも同じで SelfDelete() と名づけられています。また、図 25 と図 26 に示した機能を使い、%TEMP% に remover.bat というバッチファイルを書き込んで実行することで、自分自身を削除している点も共通しています。
![画像 25 は、MultiLayer の SelfDelete 関数を定義するコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-25.png)
![画像 26 は、IPsec Helperのコード スニペットのスクリーンショットです。コードの 3 つの異なるセクションが強調表示されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-26.png)
重複の例 2: ディレクトリー リストの実装
MultiList の再帰的ディレクトリー一覧メカニズムは、Fantasy および Apostle と同様の方法で実装されています。これらのツールは同じ GetSubDirectoryFileListRecusrive という名前の関数を使っています。
またいずれのツールも GetSubDirectoryFileListRecusrive() と GetDirectoryFileList()を呼び出しますが、この GetSubDirectoryFileListRecusrive() は、図 27、28 のコード スニペットが示す通り、再帰的に呼び出されます。
![画像 27 は、MultilLists の再帰的ディレクトリー リストを定義するコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-27.png)
![画像 28 は、Fantasy の再帰的ディレクトリー リストを定義するコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-28.png)
PartialWasher ワイパー
この攻撃中、攻撃者は PartialWasher または PW と呼ばれる 2 つめのワイパーを使おうとしました。図 29 は、これが 10 月 8 日にコンパイルされたことを示しています。またこれは本稿で説明したほかの .NET ワイパーとは違い、C++ で書かれています。
![画像 29 は、PartialWasher のタイムスタンプのスクリーンショットです。Compiler-stamp. 0x652218A2. Sun Oct 8 02:29:06 2023 | UTC.](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-29.png)
PartialWasher は NtSetInformationProcess を呼び出すことで自身を重要プロセスと定義します。PartialWasher はコマンドライン引数をサポートしています。引数が指定されていない場合、デフォルトの機能はワイパー機能です。
引数として 1 を渡した場合、攻撃者は CLI (対話型のコマンドライン インターフェイス) を利用できます。このインターフェイスのテキストにはいくつかのタイプミスがあり、作者が英語のネイティブ スピーカーではない可能性が高いことを示しています。
図 30 は渡される引数 S /p の例を示しています。これらはマルウェアを起動し、感染マシン上で利用可能なドライブに関する情報を収集します。
![画像 30 は、タイプミスを強調表示した PartialWasher コードのスクリーンショットです。タイプミスには、「Operation」と「successy」が含まれます。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-30.png)
ここでサポートされているコマンドは、オペレーターの要求に応じて個別のワイプ タスクを実行するこのワイパーのさらなる機能を示すものです。これらのコマンドには次のものが含まれます。
- S - 指定された 2 番目の引数に応じて、ドライブをスキャンし、ドライブに関する情報を取得します
- /a - すべてのドライブ情報とパーティションの詳細を取得します
- /p - ドライブ情報のみを取得します
- /v - パーティションの詳細のみを取得します
- D - 提供されたデバイス番号に約 420 MB のバイナリー データを書き込みます。おそらくドライブを使用不能にするためと考えられます
- F - 指定フォルダーとそのサブフォルダー内のファイルを消去します (対象ファイルが空でない場合)
- I- 指定したファイルを消去します (対象ファイルが空でない場合)
- W - ファイル属性を変更してファイルを消去します
PartialWiper 実行の試みは Cortex XDR によって阻止されました (図 31)。
![画像 31 は、Cortex XDR のアラートのスクリーンショットです。ユーザー情報は伏せてあります。アラートには赤い警告シンボルが付いています。Severity (High)、Action、Description の情報も含まれています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-31.png)
BFG Agonizer ワイパー
BFG Agonizer
攻撃者が使った 3 つめのワイパーは、その PDB パス (E:\tools2\BFG agonizer\INFECTOR\Dropper\Dropper\Release\Dropper.pdb) によれば、BFG Agonizer (bfg.exe) と呼ばれるものです。このファイルのメタデータは、図 32 に示すように、このファイルが 10 月 8 日にコンパイルされたことを示しています。
![画像 32 は、BGF Agonizer のコンパイル タイムスタンプのスクリーンショットです。2 行はスタンプとファイル名です。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-32.png)
BFG Agonizer と、GitHub にホストされている CRYLINE-v5.0 と呼ばれるオープンソース プロジェクトとの間に、コードの類似点が多数存在することは注目に値します。私たちは、BFG の作者がこの公開コードをコピーしたか、少なくともそれに大きく依存していたものと評価しています。
このワイパーは、感染エンドポイント上に存在しうるセキュリティ対策を回避してからワイプのアクティビティを開始しようとします。そのためにフック対策技術が複数実装されていましたが、それらの技術は同グループではこれまで報告がないものでした。ここからは、彼らの能力のさらなら向上が示唆されます。
次のセクションでは、BFG がメイン ペイロードの実行前に実行するフック対策関数をリストします。
DLL のフック解除
さまざまなセキュリティ ソリューションは、ユーザー モードのインライン フックを実装しています。DLL のフック解除とは、このインライン フックの削除を試みるフック対策技術です。この技術は、フックされた関数のバイトを元のディスクの値に戻すことにより機能します。この技術はよく知られており、このワイパーの作者は以下のような一般公開されたコードを主に採用したものと考えられます。
インポート アドレス テーブル (IAT) のフック解除
さまざまなセキュリティ ソリューションは、ユーザー モードの IAT フックを実装しています。IAT のフック解除とは、このフックの削除を試みるフック対策技術です。ワイパーのコードからすると、この作者は一般公開されている IAT フック解除コードのスニペットを主に採用していたようです。
ブート セクターの消去
ブート セクターを消去するため、このワイパーは \\.\PhysicalDrive0 へのデバイス ハンドルを取得します (図 33)。次に、ワイパーは DeviceIoControl を呼び出します。この呼び出しのさい、IOCTL_DISK_GET_PARTITION_INFOという制御コードを指定することで、パーティションのスタイルを取得しています。
![画像 33 は、BFG がデバイス ハンドルを取得できるようにするコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-33.png)
このとき、パーティション スタイルがマスター ブート レコード (MBR) または GUID パーティション テーブル (GPT)である場合は、先頭の 6 セクターに感染します (図 34)。
![画像 34 は、BFG がブート セクターを上書きできるようにしているコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-34.png)
最後に、それらのセクターの感染後、ワイパーは自身の特権を SeShutdownPrivilege に設定し、ネイティブ API の NtRaiseHardError を呼び出します。この呼び出しにより、システム内でエラー コード 0xC0000420 の「死のブルー スクリーン (BSOD)」がトリガーされます。システムはクラッシュし、再起動できなくなります (図 35 参照)。
![画像 35 は、BFG がシステム上でブルー スクリーン (BSOD) をトリガーするコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-35.png)
BFG Agonizer ワイパー実行の試みは Cortex XDR によって阻止されました (下図 36)。
![画像 36 は、Cortex XDR のアラートのスクリーンショットです。ユーザー情報は伏せてあります。アラートには赤い警告シンボルが付いています。Tags、Severity (Medium)、Action、Description の情報も含まれています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-36.png)
EDR 回避の試み
この攻撃中、同グループはとりわけ EDR ソリューションの回避を試みていました。攻撃を中断させず、ステルス性を高めようとしてのことですが、こうした試みは Cortex XDR プラットフォームにブロックされていました。ひとつ興味深いのが、同グループは複数のツールや技術を試し、1つがダメならさらにべつのツールや技術を使おうとしていた点です。
これらの技術はほとんどが既知のもので、文書化も十分されていますが、同グループがこれまで公けに報告された攻撃でそれらを使ったことはありませんでした。このことは、当該グループのアプローチがより高度に、より強引になってきたことを示唆している可能性があります。
以下のセクションで、同グループが使った EDR 回避ツール・技術の一部を利用順に記載します。
EDR のサービス依存関係の操作による回避
この脅威アクターは 10 月 6 日に 1 つめの EDR 回避技術を試みていました。このときは Cortex XDR サービスの自動起動機能を操作しようとしていました。取得済みの管理者権限を使い、Cortex XDR が依存するサービスを変更することで、システム起動時に自動起動できないようにしようとしました。
図 37 は、これらの試みが阻止されたようすを示しています。攻撃者は次に、カスタム ツールを使った「(BYOVD: Bring Your Own Vulnerable Driver、脆弱な自前のドライバーを自持ち込む)」技術の悪用に移りました。
![画像 37 は、Cortex XDR のアラートのスクリーンショットです。ユーザー情報は伏せてあります。アラートには赤い警告シンボルが付いています。Tags、Severity (Medium)、Action、Description の情報も含まれています。ファイルパスも含まれます。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-37.png)
DrvIX: カスタム BYOVD ローダー
攻撃者が使った最初のカスタム ツールは、agmt.exe という名前のバイナリーで、これは 10 月 7 日にコンパイルされていました。PDB パス (C:\Users\dude\source\repos\drvix\x64\Release\drvix.pdb) によると、このツールの元の名前は drvIX であるようです (図 38 参照)。
![画像 38 は、agmt.exe の PDB パスとコンパイル タイムスタンプのスクリーンショットです。2 行はスタンプとファイル名です。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-38.png)
ただし、図 39 に示すバイナリー ヘルプ関数によれば、この名前は Drvtopia になっています。
![画像 39 は、DRVtopia について言及しているヘルプ セクションを含むコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-39.png)
agmt.exe は、GMER のドライバーである gmer64.sys (AGMT.sys に名前が変更されている) 用のカスタム ローダー/オペレーターです。GMER の本来の目的は、ルートキットの検出と削除ですが、攻撃者はこれを使ってセキュリティ製品を削除することもできます。攻撃者は、agmt.exe を使って、コマンド ライン経由で終了させたいプロセスの PID を指定できます。
agmt.exe はまず、新しいカーネル ドライバー (agmt.sys) を AGMT という名前のサービスとして GMER に登録し、このサービスを起動します。次にこのサービスが、オペレーティング システムのカーネルに当該ドライバーをロードさせます。
GMER のもつプロセス終了機能と通信し、この機能を悪用するために、agmt.exe は GMER のデバイス オブジェクトへのデバイス ハンドルを取得します (図 40)。
![画像 40 は、GMER デバイス オブジェクトへのハンドルをオープンするコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-40.png)
次に agmt.exe は、制御コード 0x9876C094 を指定して DeviceIoControl Windows API を使用します。また呼び出し時に対象となる PID を Input_Buffer パラメーターに指定します (図 41 参照)。
![画像 41 は、プロセスを終了するために GMER ドライバーと通信するコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-41.png)
DeviceIoControl を使うと、ユーザー モード プロセスがカーネル ドライバーと直接通信できるようになります。これにより、それらのプロセスは、カーネル ドライバーに特定のオペレーションを提供するよう要求できます。
agmt.exe の場合、DeviceIoControl API の呼び出しは、GMER ドライバーに、プロセス終了のオペレーションをトリガーさせます。GMER ドライバーを調べてみると、0x9876C094 という制御コードの機能は、PID で提供した対象プロセスの終了であることがわかります (図 44)。
![画像 42 は、制御コードの機能を表すコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-42.png)
この関数は、ZwOpenProcess を使って対象プロセスの PID へのハンドルをオープンし、その後 ZwTerminateProcess を呼び出して、対象プロセスを終了します。
この GMER ドライバー利用の試みは失敗しています (図 43)。
![画像 43 は Cortex XDR による情報のスクリーンショットです。この図には、Source (XDR Agent)、Category (Malware)、Tags、Module (Behavioral Threat Protection)、Severity (High)、Description、Action が含まれています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-43.png)
2 つめの脆弱なドライバーを試す (Rentdrv2 ドライバー)
GMER ドライバー悪用の試みが失敗したため、攻撃者は drvIX ツールでの武装を試みました。彼らは、新しく一般公開された BadRentdrv2という名前の Poc ツールから、またべつの脆弱なドライバーを使っていました。これは 2023 年 10 月上旬に初めて公開されたものです。
図 44 に示したように、この攻撃者はこのプロジェクトを使い、改変バージョンのツールを翌日 10 月 8 日にコンパイルしていました。今回は、バイナリーの元の名前である drvIX.exe は変更されませんでした。
![画像 44 は、この PDB パスと drvIX.exe のコンパイルのスクリーンショットです。ここにはタイムスタンプとファイル名が含まれています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-44.png)
ドライバーのロードするコードは、前述の drvIX バージョンとほぼ同じです。同様に、drvIX.exe は、攻撃者がコマンドライン経由で終了させたいプロセスの PID を受け取ります。
DrvIX は、デバイス オブジェクトへのデバイス ハンドルを取得し、DeviceIoControl 経由で Rentdrv2 ドライバーと通信します。次に DrvIX は、対象 PID を構造体内に指定してInput_Buffer として送信し、制御コードには 0x22E010 を指定します (図 45 参照)。
![画像 45 は、DRVIX が Rentdrv2 と通信できるようにするコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-45.png)
GMER ドライバーのときと同様に、0x220E010 という制御コードは、PID によって提供された対象プロセスを終了します (図 46)。
![画像 46 は、Rentdrv2 の制御コード機能を可能にするコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-46.png)
この関数は、ZwOpenProcess を使って対象プロセスの PID へのハンドルをオープンし、ZwTerminateProcess を呼び出して対象プロセスを終了します。
図 47 は、この試みが Cortex XDR プラットフォームによってブロックされ、阻止されたことを示しています。
![画像 47 は、Cortex XDR からの情報のスクリーンショットです。これには、Tags、Module (Behavioral Threat Protection)、Severity (High)、Description、Action が含まれています。一部の情報は伏せられています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/11/word-image-131008-47.png)
帰属
Unit 42 の帰属モデルに基づいて、私たちは本稿で説明した攻撃はイランとつながりのある Agonizing Serpens APT グループによって実行されたものであると高い確度で評価しています。
この評価は、次の理由と証拠に基づいています。
- ワイパー内の複数のコードの類似点: 本稿の MultiLayer ワイパーの分析では、過去に文書化されている既知の Agonizing Serpens のワイパー (Apostleとその後継となる Fantasy、および IPsec Helper バックドア) との間で、コードや命名規則における複数の類似点を確認しています。
- Web シェルのコードの類似性: この攻撃者は、サンプルごとに置き換えられる変数名と関数名を除き、同じコードからなる Web シェルの亜種を使っていました。
- 攻撃の破壊的性質: 攻撃の最終ステップでは、カスタム ワイパーを使ってエンドポイントを使用不能にし、攻撃者の痕跡を隠す「焦土」ポリシーが実装されています。これは、同グループの活動に関するこれまでのすべての報告と一致しています。
- イスラエルの組織をターゲットにする: 私たちのテレメトリーでは、攻撃の影響を受けたイスラエル以外の組織は検出していません。この APT グループはとくにイスラエルの組織をターゲットにしているようです。
結論
本稿は、イランとつながりのある Agonizing Serpens APT グループによって実行された最近の破壊的ワイパー攻撃の詳細な分析を提供しました。この攻撃は、イスラエル組織を標的とした広範な攻撃キャンペーンの一環です。弊社のテレメトリーによると、最も標的にされている組織は教育セクターとテクノロジーセクターに属しています。
私たちの調査からは、グループの兵器庫に新たに追加された、これまで文書化されていなかった 3 つのワイパー セットとデータベース抽出ツールが発見されました。これらの新しいワイパーを分析すると、同グループがその能力を高め、ステルス技術や回避技術に重点を置いて、EDR 技術などのセキュリティ ソリューションの回避を図っていたことが明らかになりました。
また今回の調査では、Cortex XDR プラットフォームが攻撃ライフサイクルのさまざまな段階を検出・防止可能であることも示されました。
保護と緩和策
パロアルトネットワークスのお客様は、最近の Agonizing Serpens キャンペーン中に観測されたさまざまなツールからの保護を受けています。Cortex XDR と Cortex XSIAM プラットフォームは、前セクションに含まれるスクリーンショットで説明した実行フローを検出・阻止します。
パロアルトネットワークス製品をご利用のお客様は、弊社の製品・サービスにより、本グループに関連する以下の対策が提供されています。
Cortex XDR と XSIAM は以下を含む複数のデータ ソースからユーザー アクティビティを分析することで、ユーザーやクレデンシャルに基づく脅威を検出します。
- エンドポイント
- ネットワーク ファイアウォール
- Active Directory
- ID およびアクセス管理 (IAM) ソリューション
- クラウド ワークロード
Cortex XDR と XSIAM は機械学習を使って長期にわたるユーザー アクティビティ行動プロファイルを構築します。Cortex XDR と XSIAM は、過去のアクティビティやピアー アクティビティ、期待される同者の行動と新しいアクティビティとを比較することにより、クレデンシャル ベースの攻撃を示唆する異常なアクティビティを検出します。
さらに Cortex XDR と XSIAM は、本稿で取り上げた攻撃に関連し、以下の保護も提供しています。
- 既知の悪意のあるマルウェアの実行を防止するほか、Local Analysis Module (ローカル分析モジュール) にもとづく機械学習と Behavioral Threat Protection によって未知のマルウェアの実行も防止します。
- Cortex XDR 3.4 から利用可能な新しい Credential Gathering Protection を使って、クレデンシャル収集ツール・技術から保護します。
- Anti-Exploitation モジュールと Behavioral Threat Protection を使い、 ProxyShell や ProxyLogon 含む、さまざまな脆弱性のエクスプロイトから保護します。
Cortex XDR Pro は振る舞い分析によりクレデンシャル ベース攻撃を含む、エクスプロイト後のアクティビティを検出します。
侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらのフォームからご連絡いただくか、infojapan@paloaltonetworks.comまでメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。
- 北米フリーダイヤル:866.486.4842 (866.4.UNIT42)
- EMEA: +31.20.299.3130
- APAC: +65.6983.8730
- 日本: (+81) 50-1790-0200
パロアルトネットワークスは、これらの調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。
IoC (侵害指標)
Web シェル
- 1ea4d26a31dad637d697f9fb70b6ed4d75a13d101e02e02bc00200b42353985c
- 62e36675ed7267536bd980c07570829fe61136e53de3336eebadeca56ab060c2
- abfde7c29a4a703daa2b8ad2637819147de3a890fdd12da8279de51a3cc0d96d
nbtscan
- 63d51bc3e5cf4068ff04bd3d665c101a003f1d6f52de7366f5a2d9ef5cc041a7
WinEggDrop
- 49c3df62c4b62ce8960558daea4a8cf41b11c8f445e218cd257970cf939a3c25
NimScan
- dacdb4976fd75ab2fd7bb22f1b2f9d986f5d92c29555ce2b165c020e2816a200
- e43d66b7a4fa09a0714c573fbe4996770d9d85e31912480e73344124017098f9
Mimikatz
- 2a6e3b6e42be2f55f7ab9db9d5790b0cc3f52bee9a1272fc4d79c7c0a3b6abda
ProcDump
- 5d1660a53aaf824739d82f703ed580004980d377bdc2834f1041d512e4305d07
- f4c8369e4de1f12cc5a71eb5586b38fc78a9d8db2b189b8c25ef17a572d4d6b7
Plink
- 13d8d4f4fa483111e4372a6925d24e28f3be082a2ea8f44304384982bd692ec9
Sqlextractor
- a8e63550b56178ae5198c9cc5b704a8be4c8505fea887792b6d911e488592a7c
Pscp.exe
- a112e78e4f8b99b1ceddae44f34692be20ef971944b98e2def995c87d5ae89ee
MultiLayer ワイパー
- 38e406b17715b1b52ed8d8e4defdb5b79a4ddea9a3381a9f2276b00449ec8835
- f65880ef9fec17da4142850e5e7d40ebfc58671f5d66395809977dd5027a6a3e
PartialWasher ワイパー
- ec7dc5bfadce28b8a8944fb267642c6f713e5b19a9983d7c6f011ebe0f663097
BFG Agonizer ワイパー
- c52525cd7d05bddb3ee17eb1ad6b5d6670254252b28b18a1451f604dfff932a4
GMER ドライバーローダー - agmt.exe
- 8967c83411cd96b514252df092d8d3eda3f7f2c01b3eef1394901e27465ff981
- a2d8704b5073cdc059e746d2016afbaecf8546daad3dbfe4833cd3d41ab63898
GMER ドライバー
- 18c909a2b8c5e16821d6ef908f56881aa0ecceeaccb5fa1e54995935fcfd12f7
Rentdrv2 ローダー - drvIX.exe
- 2fb88793f8571209c2fcf1be528ca1d59e7ac62e81e73ebb5a0d77b9d5a09cb8
Rentdrv2 ドライバー
- 9165d4f3036919a96b86d24b64d75d692802c7513f2b3054b20be40c212240a5
インフラ
- 185.105.46[.]34
- 185.105.46[.]19
- 93.188.207[.]110
- 109.237.107[.]212
- 217.29.62[.]166
- 81.177.22[.]182
付録
ファイル名 | SHA256 |
Uploader.aspx | 1ea4d26a31dad637d697f9fb70b6ed4d75a13d101e02e02bc00200b42353985c |
xcopy.aspx | 62e36675ed7267536bd980c07570829fe61136e53de3336eebadeca56ab060c2 |
css.aspx | abfde7c29a4a703daa2b8ad2637819147de3a890fdd12da8279de51a3cc0d96d |
表 1. Web シェルのハッシュ
追加リソース
- From Wiper To Ransomware: The Evolution Of Agrius – Amitai Ben Shushan Ehrlich, SentinelLABS Research Team
- Fantasy – a new Agrius wiper deployed through a supply-chain attack – WeLiveSecurity, ESET
- Agrius Deploys Moneybird in Targeted Attacks Against Israeli Organizations – cp<r>, Check Point