Fsquirt.exe エクスプロイト:Bluetoothを介した悪意のあるbthprops.cplの読み込み
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事は、正当なWindowsバイナリFsquirt.exeが現在の作業ディレクトリから悪意のあるコントロールパネルアプレット(bthprops.cpl)を読み込むよう強制される証明概念を示しています。もし不正なCPLが存在すれば、Fsquirt.exeはそれを読み込み、攻撃者が制御するコードを実行します。これは、DLLのDllMainエントリーポイントからトリガーされるMessageBoxによって示されています。この例は、攻撃者が正足されたCPLを正規の実行可能ファイルの隣に配置できる場合に、信頼されたバイナリが任意のコード実行に悪用される可能性を示しています。
調査
研究者たちは悪意のあるbthprops.cplのソースコードとそれをコンパイルするビルドスクリプトを含むリポジトリを公開しました。CPLは、Fsquirt.exeが両方のファイルが同じディレクトリにあるときにそれを発見し読み込むように設計されています。CPLがMessageBoxを表示することで、信頼されたバイナリが攻撃者提供のアプレットからコードを読み込み、実行したことが確認され、成功した実行が検証されます。このPoCは、最小限のネットワークテレメトリを残す典型的なLOLBinスタイルの悪用ケースとして位置付けられています。
緩和策
承認されたCPLファイルのみが予想されるシステム位置から実行できるようにアプリケーションの許可リストを使用し、Fsquirt.exeのようなバイナリが標準外のディレクトリで実行されるのを防ぐために実行パスを制限します。Fsquirt.exeが信頼されたシステムフォルダ以外のコントロールパネルアプレットの読み込みを試みる試みを監視し、ユーザーが書き込み可能なパスからの疑わしい起動をブロックします。異常なDllMain発起の動作や信頼されたWindows実行可能ファイルからのインタラクティブなUIアーティファクト(例:MessageBox呼び出し)に対するエンドポイント検出を追加します。ユーザーやアプリケーションが書き込み可能なディレクトリに存在する予期しない.cplファイルに対するエンドポイントを定期的に監査します。
対応
Fsquirt.exeが非標準のbthprops.cplを読み込む、または予期しないパスからCPLが実行される場合はすぐにアラートを出します。ホストを隔離し、悪意のあるCPLと関連する実行テレメトリを保持し、ディスクとメモリ全体で完全なマルウェアトリアージを行います。不正なCPLを削除し、ドロップに伴う持続メカニズムまたは後続ツールを確認します。最後に、類似のLOLBin実行パターンを環境全体で狩り、信頼されたバイナリのサイドローディングへの露出を減らすためにポリシーコントロールを強化します。
攻撃の流れ
この部分はまだ更新中です。通知を受け取るには登録してください
通知するシミュレーションの実行
前提条件: Telemetry & Baseline Pre‑flight Checkが合格している必要があります。
-
攻撃シナリオとコマンド:
攻撃者はまず悪意のある bthprops.cpl (画面をキャプチャするペイロードを実行するように作られた)を Fsquirt.exeと同じディレクトリに配置します。
bthprops.cplこれを引数としてFsquirt.exeを呼び出すことで、WindowsはCPLをコントロールパネルアプレットとして扱い、それを読み込み、埋め込まれた悪意のあるコードを実行します。これにより、 CommandLine に正確な文字列が含まれるプロセス作成イベントが生成され、Sigmaルールが満たされます。bthprops.cpl, satisfying the Sigma rule. -
リグレッションテストスクリプト:
# ------------------------------------------------------------- # Fsquirt CPL Load – 恐悪なシミュレーション # 前提条件: Sysmon & セキュリティ監査が有効(プレフライト参照) # ------------------------------------------------------------- $workDir = "C:TempFsquirtTest" $fsquirt = "$workDirFsquirt.exe" $cpl = "$workDirbthprops.cpl" $payload = "$workDirCaptureScreen.ps1" # 1. 作業ディレクトリの準備 New-Item -Path $workDir -ItemType Directory -Force | Out-Null # 2. 既知のFsquirtバイナリをダウンロード(公開利用可能) Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Fsquirt.exe" -OutFile $fsquirt # 3. 恐悪なCPLの作成(スタブ)– デモ用に簡単なスクリプトレットを使用 # 実際のテストではペイロードを実行するC++ CPLをコンパイルします。 $cplContent = @" [Version] Signature="$Windows NT$" [Control PanelDesktop] "@ Set-Content -Path $cpl -Value $cplContent -Encoding ASCII # 4. ダミーペイロードの作成(例: スクリーンショット取得) $payloadContent = @" Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $bounds = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds $bitmap = New-Object System.Drawing.Bitmap $bounds.Width, $bounds.Height $graphics = [System.Drawing.Graphics]::FromImage($bitmap) $graphics.CopyFromScreen($bounds.Location, [System.Drawing.Point]::Empty, $bounds.Size) $bitmap.Save('$workDirscreenshot.png') "@ Set-Content -Path $payload -Value $payloadContent -Encoding UTF8 # 5. 悪意CPLを読み込むFsquirt.exeの実行 Write-Host "悪意のあるCPLを使用してFsquirtを実行しています..." Start-Process -FilePath $fsquirt -ArgumentList "bthprops.cpl" -WorkingDirectory $workDir -NoNewWindow -Wait # 6. ペイロード実行の確認(スクリーンショット作成) if (Test-Path "$workDirscreenshot.png") { Write-Host "ペイロードが実行され、スクリーンショットがキャプチャされました。" } else { Write-Host "ペイロードは実行されませんでした。" } # ------------------------------------------------------------- -
クリーンアップコマンド:
# テストアーティファクトの削除 $workDir = "C:TempFsquirtTest" if (Test-Path $workDir) { Remove-Item -Path $workDir -Recurse -Force Write-Host "クリーンアップ完了。" } else { Write-Host "クリーンアップするアーティファクトはありません。" }