VIPERTUNNEL Pythonバックドア:徹底分析
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
このレポートは、スケジュールされたタスクを介して永続性を達成し、難読化されたDLLをロードする悪意のあるsitecustomize.pyを利用するPythonベースのバックドアVIPERTUNNELの分析を詳細に述べています。このDLLは暗号化されたマルチステージペイロードを復号して実行し、ポート443を介してハードコーディングされたC2サーバーへのSOCKS5プロキシを確立します。このインフラストラクチャはUNC2165とEvilCorpに関連付けられ、ShadowCoilクレデンシャルスティーラーと難読化技術を共有しています。
調査
研究者はAutoruns出力を調査し、スケジュールされたタスク523135538を特定し、その実行をC:ProgramDatacp49spythonw.exeおよびそのsitecustomize.pyモジュールに追跡しました。b5yogiiy3c.dllのリバースエンジニアリングにより、階層化された難読化、復号化ルーチン、ハードコーディングされた認証情報を使用してSOCKS5トンネルを作成する最終ステージが明らかになりました。インフラストラクチャ分析により、複数のドメインとIPがキャンペーンにリンクされ、Pyramid C2フレームワークの使用が明らかになりました。
緩和策
引数なしでpythonw.exeの実行、数字の名前付きスケジュールドタスクの作成、予期しない場所でのsitecustomize.pyの存在を監視するエンドポイント検出を展開します。既知のC2ドメインおよび異常なHTTP 401応答を伴うポート443/8000への送信トラフィックをブロックします。許可されていないPythonモジュールの読み込みを防ぐために、厳格なアプリケーション制御を実装します。
応答
疑わしいスケジュールドタスクの作成とスクリプトなしでpythonw.exeの実行をアラートします。影響を受けたホストを隔離し、メモリダンプを収集し、特徴的なクラス名とハードコーディングされた認証情報を探します。報告書で特定されたC2インフラストラクチャを無効にし、妨害します。
graph TB %% Class definitions classDef technique fill:#ffcc99 classDef process fill:#c2f0c2 classDef tool fill:#ffeb99 classDef file fill:#d9d9d9 classDef component fill:#cce5ff classDef c2 fill:#f4b084 classDef credential fill:#ffe6e6 %% Technique nodes tech_persistence[“<b>技術</b> – T1053.005 スケジュールタスク : 永続化<br/><b>説明</b>: システム起動またはスケジュールで実行されるタスクを作成/変更する。”] class tech_persistence technique tech_obfuscation[“<b>技術</b> – T1027 難読化されたファイル/情報<br/><b>説明</b>: エンコード・圧縮・暗号技術でコードを隠蔽する。”] class tech_obfuscation technique tech_deobfuscate[“<b>技術</b> – T1140 復号/デコード<br/><b>説明</b>: Base85などをデコードして次段階コードを復元する。”] class tech_deobfuscate technique tech_compile[“<b>技術</b> – T1027.004 実行後コンパイル<br/><b>説明</b>: compile() / exec()でメモリ内コンパイル。”] class tech_compile technique tech_reflect[“<b>技術</b> – T1620 リフレクティブコード実行<br/><b>説明</b>: ディスク書き込みなしでメモリ実行。”] class tech_reflect technique tech_proxy_ext[“<b>技術</b> – T1090.002 外部プロキシ<br/><b>説明</b>: SOCKS5外部プロキシ構築。”] class tech_proxy_ext technique tech_proxy_int[“<b>技術</b> – T1090.001 内部プロキシ<br/><b>説明</b>: 内部プロキシで通信中継。”] class tech_proxy_int technique tech_tunnel[“<b>技術</b> – T1572 プロトコルトンネリング<br/><b>説明</b>: SOCKS5トンネルで通信をカプセル化。”] class tech_tunnel technique tech_encrypted[“<b>技術</b> – T1573 暗号化通信<br/><b>説明</b>: ChaCha20/XORでC2通信暗号化。”] class tech_encrypted technique tech_webc2[“<b>技術</b> – T1102 Webサービス<br/><b>説明</b>: Pyramidサービス経由でHTTPS通信。”] class tech_webc2 technique tech_nonstd[“<b>技術</b> – T1571 非標準ポート<br/><b>説明</b>: ポート443でHTTPS偽装。”] class tech_nonstd technique %% Process and tool nodes process_task[“<b>プロセス</b> – スケジュールタスク 523135538<br/><b>コマンド</b>: C:\\ProgramData\\cp49s\\pythonw.exe”] class process_task process tool_pythonw[“<b>ツール</b> – pythonw.exe<br/><b>役割</b>: コンソールなしPython実行”] class tool_pythonw tool %% File nodes file_sitecustomize[“<b>ファイル</b> – sitecustomize.py<br/><b>目的</b>: 自動インポートとDLL実行”] class file_sitecustomize file file_dll[“<b>ファイル</b> – b5yogiiy3c.dll<br/><b>種類</b>: 難読化Pythonペイロード”] class file_dll file %% Component nodes component_wire[“<b>コンポーネント</b> – Wireクラス<br/><b>機能</b>: SOCKS5クライアント”] class component_wire component component_relay[“<b>コンポーネント</b> – Relayクラス<br/><b>機能</b>: トラフィック転送”] class component_relay component component_commander[“<b>コンポーネント</b> – Commanderクラス<br/><b>機能</b>: C2制御”] class component_commander component %% C2 and credential nodes c2_server[“<b>C2サーバー</b> – Pyramidサービス<br/><b>応答</b>: HTTP 401 Basic realm=Proxy”] class c2_server c2 credentials[“<b>認証情報</b> – AnyUser / AnyPassword<br/><b>用途</b>: プロキシ認証”] class credentials credential %% Connections tech_persistence –>|creates| process_task process_task –>|launches| tool_pythonw tool_pythonw –>|imports| file_sitecustomize file_sitecustomize –>|loads| file_dll file_dll –>|uses| tech_obfuscation file_dll –>|triggers| tech_deobfuscate tech_deobfuscate –>|leads to| tech_compile tech_compile –>|leads to| tech_reflect tech_reflect –>|executes| component_wire component_wire –>|works with| component_relay component_relay –>|controls| component_commander component_commander –>|contacts| c2_server c2_server –>|uses| tech_proxy_ext c2_server –>|uses| tech_proxy_int c2_server –>|tunnels via| tech_tunnel c2_server –>|encrypts channel| tech_encrypted c2_server –>|communicates over| tech_webc2 c2_server –>|uses port| tech_nonstd component_commander –>|auth with| credentials %% Apply classes class tech_persistence,tech_obfuscation,tech_deobfuscate,tech_compile,tech_reflect,tech_proxy_ext,tech_proxy_int,tech_tunnel,tech_encrypted,tech_webc2,tech_nonstd technique class process_task process class tool_pythonw tool class file_sitecustomize,file_dll file class component_wire,component_relay,component_commander component class c2_server c2 class credentials credential
攻撃フロー
検出
疑わしいフォルダからのPython実行(cmdline経由)
表示
疑わしいスケジュールドタスク(監査経由)
表示
IOC(ソースIP)検出: VIPERTUNNEL Pythonバックドアの内幕に迫る – パート2
表示
IOC(ソースIP)検出: VIPERTUNNEL Pythonバックドアの内幕に迫る – パート1
表示
IOC(宛先IP)検出: VIPERTUNNEL Pythonバックドアの内幕に迫る – パート2
表示
IOC(宛先IP)検出: VIPERTUNNEL Pythonバックドアの内幕に迫る – パート1
表示
sitecustomize.py を介した持続性のためのPythonの疑わしい実行 [Windowsプロセス作成]
表示
シミュレーション実行
前提条件: テレメトリーとベースラインの事前チェックが合格している必要があります。
根拠: このセクションでは、検出ルールをトリガーするように設計された敵の技術(TTP)の正確な実行を詳述しています。コマンドと説明は、特定されたTTPを直接反映し、検出ロジックが期待する正確なテレメトリーを生成することを目指しています。
-
攻撃の説明 & コマンド:
攻撃者はまず悪意のある
sitecustomize.pyをpythonw.exeと同じディレクトリに配置します。Pythonはインタプリタの起動時に自動的にsitecustomize.pyをインポートするため、攻撃者はコマンドライン上にスクリプトパスを渡すことなく任意のコードを実行できます。pythonw.exeを引数なしで起動することで、プロセス作成イベントには空のフィールドが含まれ、Sigmaルールの条件が満たされます。ペイロードは永続性のためにスケジュールドタスクを確立し、インタプリタがシステムの起動時に実行されることを保証し、長期的な足掛かりを維持します。フィールドが含まれ、Sigmaルールの条件が満たされます。ペイロードは永続性のためにスケジュールドタスクを確立し、インタプリタがシステムの起動時に実行されることを保証し、長期的な足掛かりを維持します。field, satisfying the Sigma rule’s conditions. The payload establishes a scheduled task for persistence, ensuring the interpreter runs at system startup, thereby maintaining long‑term foothold. -
リグレッションテストスクリプト:
# ------------------------------------------------- # 悪意のあるsitecustomize.pyをセットアップ # ------------------------------------------------- $payloadPath = 'C:ProgramDatacp49ssitecustomize.py' $exePath = 'C:ProgramDatacp49spythonw.exe' # ターゲットフォルダーが存在することを確認 New-Item -ItemType Directory -Path (Split-Path $exePath) -Force | Out-Null # テスト用に無害なコピーのpythonw.exeをデプロイする(既に存在しない場合) # 実際のRed Teamシナリオでは、これは正当なインタプリタになる if (-Not (Test-Path $exePath)) { # システムPythonインストールからコピー(必要に応じてパスを調整) Copy-Item 'C:Python39pythonw.exe' $exePath } # 悪意のあるsitecustomize.pyを作成(証明用にスケジュールドタスクを作成) @" import subprocess, sys # pythonw.exeを毎分実行するスケジュールドタスクを作成(永続性) subprocess.run(['schtasks', '/Create', '/SC', 'MINUTE', '/MO', '1', '/TN', 'UpdateTask', '/TR', sys.executable]) "@ | Set-Content -Path $payloadPath -Encoding UTF8 # ------------------------------------------------- # 検出をトリガーする(悪意のある実行) # ------------------------------------------------- Write-Host '[+] 引数なしでpythonw.exeを起動...' Start-Process -FilePath $exePath -ArgumentList '' -WindowStyle Hidden # スケジュールドタスクが作成されるまでの短い待機(オプション) Start-Sleep -Seconds 5 Write-Host '[+] ペイロードが実行されました。 SIEMのアラートを確認してください。' # ------------------------------------------------- # スクリプトの終了 # ------------------------------------------------- -
クリーンアップコマンド:
# 悪意のあるsitecustomize.pyを削除 Remove-Item -Path 'C:ProgramDatacp49ssitecustomize.py' -Force -ErrorAction SilentlyContinue # ペイロードによって作成されたスケジュールドタスクを削除 schtasks /Delete /TN UpdateTask /F # テストコピーであったpythonw.exeをオプションで削除 # Remove-Item -Path 'C:ProgramDatacp49spythonw.exe' -Force Write-Host '[+] クリーンアップ完了。'