Lancement de la Cryptominage en Mémoire par un PowerShell Enregistré dans le Registre
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Une chaîne d’infection à plusieurs étapes utilise des techniques de dissimulation sophistiquées pour déployer un mineur de cryptomonnaie. L’attaque stocke des charges utiles dans le Registre et exploite les enregistrements DNS TXT ainsi que la stéganographie dans les fichiers PNG et WAV pour livrer les étapes suivantes. La charge utile finale charge un assemblage .NET directement en mémoire pour effectuer le minage de cryptomonnaie via l’écosystème XMRig.
Enquête
Les analystes ont enquêté sur des alertes d’exécution répétées de PowerShell et ont découvert une stratégie de dissimulation des charges utiles stratifiée. La chaîne d’infection reconstitue le contenu malveillant à partir de conteneurs non conventionnels, y compris les données de pixels d’image et les nibbles de fichiers audio. L’exécution progresse à partir de scripts PowerShell stockés dans le Registre à travers plusieurs étapes avant de finalement charger un mineur de cryptomonnaie .NET directement en mémoire.
Atténuation
Les organisations devraient appliquer des politiques strictes d’exécution de PowerShell et surveiller les modifications suspectes du Registre associées au stockage des charges utiles. Les solutions EDR devraient détecter le chargement en mémoire d’assemblages .NET et les requêtes DNS TXT anormales. La liste blanche des applications devrait également être mise en œuvre pour empêcher le chargement de pilotes en mode noyau non autorisés tels que WinRing0.sys contre le chargement.
Réponse
Si une activité malveillante est détectée, les hôtes affectés doivent être isolés immédiatement pour arrêter la communication C2 et le minage de cryptomonnaie. Les intervenants doivent effectuer un balayage judiciaire pour les Tâches Planifiées non autorisées, les abonnements WMI et les exclusions de Microsoft Defender. Les journaux réseau doivent également être révisés pour les connexions à des domaines C2 connus et les requêtes DNS-over-HTTPS suspectes.
Flux d’attaque
Nous mettons encore à jour cette partie.
Détections
Chaînes PowerShell suspectes (via powershell)
Appeler des méthodes .NET suspectes depuis PowerShell (via powershell)
Un fichier image a été créé par un processus suspect (via file_event)
Canal de commande et de contrôle DoH et DNS (via proxy)
IOCs (HashMd5) à détecter : De PowerShell stocké dans le Registre au minage de cryptomonnaie en mémoire : Une chaîne d’infection à plusieurs étapes
IOCs (SourceIP) à détecter : De PowerShell stocké dans le Registre au minage de cryptomonnaie en mémoire : Une chaîne d’infection à plusieurs étapes
IOCs (DestinationIP) à détecter : De PowerShell stocké dans le Registre au minage de cryptomonnaie en mémoire : Une chaîne d’infection à plusieurs étapes
Détecter la communication DNS-over-HTTPS et HTTP/HTTPS POST C2 [Connexion réseau Windows]
Abonnement d’événements permanents WMI pour l’exécution de PowerShell basé sur le Registre [Événement du Registre Windows]
Obscurcissement de PowerShell et exécution secrète [Windows Powershell]
Exécution de simulation
-
Narration et commandes d’attaque : L’adversaire cherche à établir une persistance à long terme sur l’hôte compromis. Au lieu d’utiliser une clé ‘Run’ commune, ils optent pour un abonnement d’événement permanent WMI plus discret. L’attaquant crée un WMI
CommandLineEventConsumer. Ce consommateur est configuré pour exécuterpowershell.exe. Pour échapper à l’analyse statique de la ligne de commande, la charge utile ou la configuration malveillante réelle est stockée dans un chemin de registre non standard :HKLM:Softwareuf42a9660377vstdfehzr. Lorsque l’événement WMI se déclenche (simulé ici par un événement système), le processus PowerShell se lancera, référencera la clé de registre spécifique, déclenchant ainsi la règle de détection. -
Script de test de régression :
# Script de simulation : Exécution de PowerShell basée sur le Registre WMI # Ce script crée la clé de registre spécifique et l'abonnement WMI requis pour déclencher la règle. $regPath = "HKLM:Softwareuf42a9660377" $regValueName = "vstdfehzr" $regValueData = "Invoke-Expression (Get-ItemProperty -Path '$regPath$regValueName').Payload" # 1. Créer la clé de registre suspecte et la valeur if (-not (Test-Path $regPath)) { New-Item -Path $regPath -Force | Out-Null } New-ItemProperty -Path $regPath -Name $regValueName -Value "Write-Host 'Malicious Payload Triggered!'" -PropertyType String -Force | Out-Null # 2. Créer un abonnement d'événements permanents WMI # Nous utilisons un filtre pour déclencher un événement commun (par exemple, le temps de disponibilité/démarrage du système) ou simuler via la création de consommateur $filterName = "Win32_LocalTimeFilter" $consumerName = "Win32_CommandLineConsumer" $subscriptionName = "WmiPersistenceSubscription" # Créer un filtre (Déclenche toutes les minutes à des fins de simulation) $filterArgs = @{ Name = $filterName QueryLanguage = "WQL" Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" } $filter = Set-WmiInstance -Class __EventFilter -Arguments $filterArgs # Créer un consommateur (La commande PowerShell référencée au chemin de registre spécifique) $commandLine = "powershell.exe -Command `"$regValueData`"" $consumerArgs = @{ Name = $consumerName CommandLineTemplate = $commandLine } $consumer = Set-WmiInstance -Class CommandLineEventConsumer -Arguments $consumerArgs # Lier le filtre et le consommateur Set-WmiInstance -Class __FilterToConsumerBinding -Arguments @{ Filter = $filter Consumer = $consumer } Write-Host "[+] Simulation : Abonnement WMI et clé de registre créés avec succès." Write-Host "[+] En attente de l'événement WMI pour déclencher l'exécution de PowerShell..." # Remarque : Dans un environnement réel, nous attendons l'événement. # À des fins de test, la règle recherche souvent la *création* ou le *déclenchement d'événement*. -
Commandes de nettoyage :
# Script de nettoyage Write-Host "[!] Nettoyage des artefacts de simulation..." # 1. Supprimer l'abonnement WMI Get-WmiObject -Namespace rootsubscription -Class __EventFilter -Filter "Name='Win32_LocalTimeFilter'" | Remove-WmiObject Get-WmiObject -Namespace rootsubscription -Class CommandLineEventConsumer -Filter "Name='Win32_CommandLineConsumer'" | Remove-WmiObject Get-WmiObject -Namespace rootsubscription -Class __FilterToConsumerBinding | Where-Object { $_.Filter -match "Win32_LocalTimeFilter" } | Remove-WmiObject # 2. Supprimer la clé de registre Remove-Item -Path "HKLM:Softwareuf42a9660377" -Recurse -Force Write-Host "[+] Nettoyage terminé."