Claudeインストーラーに偽装したClickFixフィッシングキャンペーン
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
フィッシングキャンペーンは、ClickFix技術を使用して、Claude AIインストーラーを装った悪意のあるMSIXバンドルを配信しました。初回の実行は次に依存していました mshta 特別に作成されたURLを使用してWindows実行ユーティリティ経由で起動されました。ダウンロードされたペイロードには、難読化されたPowerShellステージを作成し、AMSIをバイパスし、追加のPowerShellコンテンツを取得し、暗号化されたシェルコードを使用してプロセスインジェクションルーチンを実行するHTAファイルが含まれていました。この活動は、ヨーロッパおよびアメリカ合衆国の顧客環境で観察され、Rapid7 InsightIDRカバレッジにより検出されました。
調査
Rapid7のアナリストは次を特定しました mshta RunMRUレジストリキーに関連付けられた実行とURLをキャプチャしました download-version.1-5-8.com/claude.msixbundle。分析により、MSIXアーカイブには難読化された文字列をデコードし、PowerShellコマンドを組み立て、AMSIコンテキストを上書きし、最終的にネイティブWindows API呼び出しを通じてシェルコードを注入するHTAファイルが含まれていることが示されました。研究者たちは、犠牲者のコンピュータ名とユーザー名から生成されたハッシュに由来する動的に生成されたURLから、いくつかの後続のPowerShellステージがダウンロードされたことも発見しました。
緩和策
ディフェンダーは、RunMRUレジストリキーを監視して疑わしい mshta エントリを特定し、 mshta 信頼できないソースから発生する場合に実行をブロックする必要があります。組織はまた、未知のドメインからのMSIXパッケージのダウンロードを制限し、PowerShell実行のアプリケーション許可リストを実施する必要があります。AMSI保護は有効なままとし、エンコードされたまたは難読化されたコマンド活動を調査のためにキャプチャするPowerShellログを設定する必要があります。
対応
この活動が検出された場合、セキュリティチームは影響を受けたエンドポイントを隔離し、コマンドラインアーティファクトを保存し、ダウンロードされたPowerShellステージと注入されたすべてのプロセスのフォレンジック解析を実施する必要があります。影響を受けたシステムで使用された資格情報をリセットし、最初の誘惑を追跡するためにブラウザ履歴を確認する必要があります。検出ロジックもまた、観察されたドメイン、ハッシュ、および関連する実行パターンを含むように更新する必要があります。
graph TB classDef action fill:#99ccff step_phishing[“<b>アクション</b> – T1566.002 フィッシング: 標的型リンク<br/><b>説明</b>: ユーザーがmshtaを起動する悪意あるリンクをクリックする。”] class step_phishing action step_mshta[“<b>アクション</b> – T1218.005 Mshta<br/><b>説明</b>: .msixbundleペイロードを指すURLでmshtaを実行する。”] class step_mshta action step_hta_deobfuscation[“<b>アクション</b> – T1027.010, T1027.013, T1140 難読化解除/デコード<br/><b>説明</b>: HTAがVBSを実行し、埋め込まれたコードを復号する。”] class step_hta_deobfuscation action step_ps_encoded[“<b>アクション</b> – T1059.001 PowerShell<br/><b>説明</b>: エンコードされたPowerShellコマンドを生成する。”] class step_ps_encoded action step_stage1[“<b>アクション</b> – T1059.001 PowerShell (ステージ1)<br/><b>説明</b>: COMPUTERNAME+USERNAMEのMD5を計算しURLを生成してステージ2をダウンロードする。”] class step_stage1 action step_stage2[“<b>アクション</b> – T1562.001 防御回避 (AMSIバイパス)<br/><b>説明</b>: AMSIコンテキストを書き換えステージ3を取得する。”] class step_stage2 action step_stage3[“<b>アクション</b> – T1059.001 PowerShell (ステージ3)<br/><b>説明</b>: バイト配列をデコードしScriptBlockを作成する。”] class step_stage3 action step_process_injection[“<b>アクション</b> – T1055 プロセスインジェクション<br/><b>説明</b>: .NETおよびネイティブAPIを使用してコードを注入する。”] class step_process_injection action step_persistence[“<b>アクション</b> – T1547.014 Runキー / スタートアップ (RunMRU)<br/><b>説明</b>: RunMRUレジストリを作成して永続化する。”] class step_persistence action step_phishing –>|開始| step_mshta step_mshta –>|実行| step_hta_deobfuscation step_hta_deobfuscation –>|使用| step_ps_encoded step_ps_encoded –>|生成| step_stage1 step_stage1 –>|ダウンロード| step_stage2 step_stage2 –>|ダウンロード| step_stage3 step_stage3 –>|作成| step_process_injection step_mshta –>|永続化| step_persistence
攻撃フロー
検出
LOLBinセマンティクスを持つ疑わしいRunMRUエントリ(レジストリエベント経由)
表示
疑わしいPowerShell文字列(PowerShell経由)
表示
PowerShellからの疑わしい.NETメソッドの呼び出し(PowerShell経由)
表示
IOCs(HashSha256)を検出して、Claudeインストーラーを装ったClickFixフィッシングキャンペーンを識別する
表示
難読化されたPowerShellスクリプトと.NETを経由したプロセスインジェクションを検出する [Windows PowerShell]
表示
シミュレーション実行
前提条件: テレメトリ&ベースラインのプレフライトチェックが合格している必要があります。
理由: このセクションは、検出ルールをトリガーするように設計された敵の技術(TTP)の正確な実行について詳述します。コマンドと解説は、特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。
-
攻撃の物語とコマンド:
- 目的: プロセスインジェクションを実行するために、.NETアセンブリコールを埋め込んだbase-64エンコードされた悪意のあるPowerShellペイロードを実行し、一般的な「リージョンを活用した」攻撃の模倣を行います。
- ステップ:
- 呼び出す小さな.NETアセンブリ(C#)を作成します
OpenProcessandWriteProcessMemory(PowerShellの[System.Runtime.InteropServices.Marshal]). - を通じてシミュレート)
Invoke-Expression,FromBase64String、そしてへの参照System.Management.Automation.AmsiUtils(AMSIをバイパスするために使用)。 - ダミーマーカーを追加
0x41414141難読化でよく見られる「パディング」の擬似を表現します。 - を使用し、スクリプトを起動します
powershell.exeフルコマンドラインを表示して(そうすれば検出ルールが文字列を見ることができます)。
- 呼び出す小さな.NETアセンブリ(C#)を作成します
-
回帰テストスクリプト:
# ============================================================== # シグマルールをトリガーするためのシミュレートされた悪意のあるPowerShell実行 # ============================================================== # 1. シンプルな.NETペイロードを構築(デモ目的でインライン) $cs = @' using System; using System.Runtime.InteropServices; public class Injector { [DllImport("kernel32.dll", SetLastError = true)] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int nSize, out IntPtr lpNumberOfBytesWritten); } '@ Add-Type -TypeDefinition $cs -Language CSharp # 2. 悪意のあるPowerShellスニペットを作成 $malicious = @' $b64 = "aW1wb3J0IHN5c3RlbS5JTy5TY3JpcHQgJ1Rlc3QnLCBJVkU=" $decoded = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($b64)) Invoke-Expression $decoded $dummy = 0x41414141 '@ # 3. スニペットをエンコード(Base64、UTF-16LEとしてPowerShellが期待) $bytes = [System.Text.Encoding]::Unicode.GetBytes($malicious) $encoded = [Convert]::ToBase64String($bytes) # 4. エンコードされたコマンドと共にPowerShellを起動 $cmd = "powershell.exe -NoProfile -WindowStyle Hidden -EncodedCommand $encoded" Write-Host "Launching malicious PowerShell..." Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -EncodedCommand $encoded" -WindowStyle Hidden # 注: 上記のコマンドラインには次の文字列が含まれます: # Invoke-Expression, FromBase64String, System.Management.Automation.AmsiUtils, 0x41414141 # これはシグマ検出条件を満たします。 -
クリーンアップコマンド:
# テストによって起動された残りのPowerShellインスタンスを終了します Get-Process -Name powershell | Where-Object {$_.StartInfo.Arguments -match "EncodedCommand"} | Stop-Process -Force # 一時モジュールまたは変数を削除します(存在した場合) Remove-Variable -Name b64, decoded, dummy -ErrorAction SilentlyContinue
レポートの終了