Le malware CoinMiner continue de se propager via les clés USB
Detection stack
- AIDR
- Alert
- ETL
- Query
RÉSUMÉ
Le malware CoinMiner continue de se propager via des clés USB en Corée du Sud, exploitant un raccourci caché qui déclenche des scripts VBS et BAT, lesquels mettent en place plusieurs composants qui finissent par livrer une charge utile de minage de cryptomonnaie.
Enquête
Le rapport décrit la structure des répertoires sur l’USB infecté, la chaîne d’exécution du raccourci à travers plusieurs étapes de dropper, l’enregistrement sous le service DcomLaunch et le déploiement des mineurs de cryptomonnaie PrintMiner et XMRig.
Atténuation
Les utilisateurs doivent maintenir le système d’exploitation et les logiciels à jour, bloquer l’exécution de fichiers de raccourci non fiables, utiliser des outils antivirus à jour et refuser l’accès à des infrastructures connues comme malveillantes.
Réponse
Détecter le raccourci malveillant et ses scripts associés, surveiller la création de fichiers dropper et les enregistrements DCOM, et bloquer le trafic réseau vers les domaines et adresses IP de contrôle et commande identifiés pour le minage.
Flux d’attaque
Détections
Détection des activités de raccourci USB et de malware BAT [Événement de fichier Windows]
Voir
Détecter la communication XMRig avec le serveur C&C via un nom d’hôte spécifique [Connexion réseau Windows]
Voir
Exécution de fichiers malveillants via Printui.exe et Svcinsty64.exe [Création de processus Windows]
Voir
IOCs (HashMd5) pour détecter : Malware CoinMiner est en cours de distribution continue via USB
Voir
IOCs (DestinationIP) pour détecter : Malware CoinMiner est en cours de distribution continue via USB
Voir
Exécution de simulation
Prérequis : La vérification pré-vol des télémetries et des bases doit être réussie.
Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTP identifiés et viser à générer la télémétrie exacte attendue par la logique de détection. Les exemples abstraits ou non liés entraîneront un mauvais diagnostic.
-
Narration de l’attaque et commandes :
- Étape 1 – Déposer un DLL malveillant: L’adversaire copie un
printui.dllconçu dans le même répertoire queprintui.exe(simulant une charge utile de pilote délivrée via un dispositif USB). - Étape 2 – Exécuter
printui.exe: En invoquantprintui.exeavec le commutateur/ml(charge malveillante), le DLL malveillant est chargé, générant un événement de création de processus qui correspond à la sélection (Image se termine par printui.exe) tout en satisfaisant la condition filtre (Image contient printui.dll). La règle exclut ce cas, donc l’attaquant ajoute une deuxième étape pour le contourner. - Étape 3 – Exécuter
svcinsty64.exe: L’attaquant enregistre un nouveau service pointant vers un binaire de charge utile (payload.exe) stocké sur la clé USB. Cette action crée un événement de création de processus poursvcinsty64.exe, satisfaisant la sélection de la règle sans déclencher le filtre, générant ainsi une alerte.
- Étape 1 – Déposer un DLL malveillant: L’adversaire copie un
-
Script de test de régression : Le script ci-dessous automatise les trois étapes, garantissant la reproductibilité.
# ------------------------------------------------- # Test de régression – Déclencher la règle Sigma pour printui.exe / svcinsty64.exe # ------------------------------------------------- $dllPath = "$env:TEMPprintui.dll" $exePath = "$env:SystemRootSystem32printui.exe" $svcInstPath = "$env:SystemRootSystem32svcinsty64.exe" $payloadPath = "$env:TEMPpayload.exe" # 1️⃣ Déposer un DLL malveillant factice (contenu binaire non important pour la détection) Write-Host "[*] Création d'un DLL malveillant factice à $dllPath" Set-Content -Path $dllPath -Value ([byte[]](0..255)) -Encoding Byte # 2️⃣ Exécuter printui.exe (charge bénigne) – ne doit PAS déclencher en raison du filtre Write-Host "[*] Exécution de printui.exe bénin (sera filtré)" Start-Process -FilePath $exePath -ArgumentList "/p" -Wait # 3️⃣ Exécuter printui.exe avec chargement de DLL malveillant – cas filtré (attendu) Write-Host "[*] Exécution de printui.exe avec DLL malveillant (cas filtré)" Start-Process -FilePath $exePath -ArgumentList "/ml `$dllPath`" -Wait # 4️⃣ Préparer un exécutable de charge utile factice (script CMD simple compilé en exe) Write-Host "[*] Création d'un exécutable de charge utile factice" $payloadSource = @" @echo off echo Charge utile exécutée > $env:TEMPpayload_output.txt "@ $payloadScript = "$env:TEMPpayload.bat" $payloadSource | Set-Content -Path $payloadScript -Encoding ASCII # Convertir .bat en .exe à l'aide de iexpress (intégré) $iexpress = "$env:SystemRootSystem32iexpress.exe" $config = "$env:TEMPiexpress.sed" @" [Version] Version=3.0 [Options] ExtractTitle=Charge utile ExtractLocation=%TEMP% ShowProgress=0 HideExtractWindow=1 [SourceFiles] SourceFiles=0 %TEMP%payload.bat [Run] RunCommand="%TEMP%payload.bat" "@ | Set-Content -Path $config -Encoding ASCII & $iexpress /N /Q /M $config Move-Item -Path "$env:TEMPPayload.exe" -Destination $payloadPath -Force # 5️⃣ Enregistrer un service malveillant à l'aide de svcinsty64.exe – DOIT DÉCLENCHER Write-Host "[*] Enregistrement d'un service malveillant via svcinsty64.exe" $svcName = "ServiceMalveillant" $svcDisplay = "Service Malveillant" $svcCmd = "`"$payloadPath`"" $svcArgs = "/install `$svcName` `$svcDisplay` `$svcCmd`" Start-Process -FilePath $svcInstPath -ArgumentList $svcArgs -Wait # 6️⃣ Nettoyer le service Write-Host "[*] Suppression du service malveillant" $removeArgs = "/uninstall `$svcName`" Start-Process -FilePath $svcInstPath -ArgumentList $removeArgs -Wait # 7️⃣ Supprimer les artefacts temporaires Write-Host "[*] Nettoyage des fichiers temporaires" Remove-Item -Path $dllPath -Force -ErrorAction SilentlyContinue Remove-Item -Path $payloadPath -Force -ErrorAction SilentlyContinue Remove-Item -Path $payloadScript -Force -ErrorAction SilentlyContinue Write-Host "[+] Test terminé" -
Commandes de nettoyage : (Si le script ci-dessus échoue ou si vous préférez le nettoyage manuel)
# Supprimer le service malveillant s'il est encore présent $svcName = "ServiceMalveillant" $svcInstPath = "$env:SystemRootSystem32svcinsty64.exe" & $svcInstPath /uninstall $svcName # Supprimer le DLL temporaire et la charge utile Remove-Item -Path "$env:TEMPprintui.dll" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPpayload.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPpayload.bat" -Force -ErrorAction SilentlyContinue # (Optionnel) Vérifier qu'il ne reste aucun service Get-Service -Name $svcName -ErrorAction SilentlyContinue