TerminalFixキャンペーンが侵害されたホストを通じたネットワークピボットを可能に
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
TerminalFixは、攻撃者が偽のCloudflare検証プロンプトを使用してユーザーに悪意のあるPowerShellコマンドを実行させる、ClickFix技術の変異型です。この攻撃は、DLLサイドローディング、ステガノグラフィーに基づくペイロード配信、およびWebSocketベースのリバーストンネルを組み合わせています。これにより、侵害されたワークステーションがさらなる偵察と潜在的なランサムウェア展開のためのネットワークピボットとして機能できるようになります。
調査
調査では、最初のウェブベースのルアーから事後の悪用アクティビティまでの攻撃ライフサイクルを検討しました。アナリストは、LockScreenContentServer.exe がDLLサイドローディングに悪用され、PNGファイルがステガノグラフィックペイロード配信に使用されていることを特定しました。このキャンペーンはまた、ドイツのメディア報道とBSIが発表した勧告に基づき、Vice Spiderに関連付けられました。
緩和策
防御者は、PowerShellまたはWindowsターミナルの実行に続く疑わしいブラウザーベースのiframeを監視するべきです。特にC:ProgramDataのような予期しない場所からDLLをロードする正当なバイナリなど、異常なDLLロード動作を検出する必要があります。PowerShellの実行ポリシーを制限したり、許可されていないスケジュールされたタスクとレジストリRunキーの変更を監視することで、攻撃への露出をさらに減らすことができます。
対応
TerminalFixの活動が検出されたときは、影響を受けたワークステーションを隔離してネットワークピボットとしての運用を阻止します。未知のドメインへの外部WebSocket接続やLDAPクエリなどの内部偵察活動に対してネットワークトラフィックを分析します。許可されていないPythonスクリプトの実行やImpacketとCertipyを含むツールの使用についてエンドポイントのテレメトリを確認します。
攻撃フロー
この部分はまだ更新中です。
検出
NoWarningNoElevationOnInstallレジストリキーでの疑わしい操作 (via registry_event)
持続性の可能性のあるポイント [ASEPs – Software/NTUSER Hive] (via registry_event)
Impacketコマンドラインパターンの可能性 (via cmdline)
Impacketを使用したリモートコード実行の可能性 (via cmdline)
疑わしいフォルダーからのPython実行 (via cmdline)
管理者アカウントまたはグループ列挙の可能性 (via cmdline)
疑わしいドメイン信頼の発見 (via cmdline)
PsExecまたは類似手法による横移動の可能性 (via system)
PsExecまたは類似手法による横移動の可能性 (via audit)
PsExec使用の可能性 (via audit)
検出するためのIoC (SourceIP): TerminalFix: ワークステーションがネットワークピボットになるとき
検出するためのIoC (DestinationIP): TerminalFix: ワークステーションがネットワークピボットになるとき
TerminalFixネットワークピボット検出 [Windowsネットワーク接続]
TerminalFixの悪意のある実行を検出 [Windowsプロセス作成]
ZIPおよびPNG取得のための悪意のあるPowerShellコマンドの検出 [Windows PowerShell]
シミュレーション実行
-
攻撃のストーリー & コマンド: 敵対者は初期アクセスを得て、ワークステーションを通じてピボットするための持続的なC2チャンネルを確立しようとしています。標準のウェブトラフィックに溶け込むために、WebSocketプロトコルを利用します。攻撃者はPowerShellスクリプトを実行し、接続を開始します
gitnow.dev。これは、ワークステーションがリレーとして機能するTerminalFixの挙動を模倣します。目標は、selection_domainandselection_connection検出ルールの基準です。 -
リグレッションテストスクリプト:
# TerminalFix C2 WebSocket接続のシミュレーション # ターゲットドメイン: gitnow.dev $targetDomain = "gitnow.dev" $uri = "wss://$targetDomain/path/to/c2" Write-Host "TerminalFix C2接続を$targetDomainにシミュレーション中..." $ws = New-Object System.Net.WebSockets.ClientWebSocket $ct = New-Object System.Threading.CancellationTokenSource try { # ネットワーク接続のテレメトリを生成するために接続を試みます $connectTask = $ws.ConnectAsync($uri, $ct.Token) # ドメインが存在しない/応答しない可能性が高いため、タイムアウトを使用します if ($connectTask.Wait(10000)) { Write-Host "$targetDomainに正常に接続されました" $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Closing", $ct.Token).Wait() } } catch { Write-Host "接続が試みられました。テレメトリはSysmon/EDRログに生成されるはずです。" Write-Host "エラー詳細: $($_.Exception.Message)" } finally { $ws.Dispose() } -
クリーンアップコマンド:
# この特定のシミュレーションスクリプトでは、持続性やファイルは作成されませんでした。 # 一時ファイルが使用された場合は、ここで削除する必要があります。 Write-Host "シミュレーションクリーンアップ完了。このスクリプトによるアーティファクトは残っていません。"