SOC Prime Bias: Moyen

05 Dec 2025 14:36 UTC

Le malware CoinMiner continue de se propager via les clés USB

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Suivre
Le malware CoinMiner continue de se propager via les clés USB
shield icon

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

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 :

    1. Étape 1 – Déposer un DLL malveillant: L’adversaire copie un printui.dll conçu dans le même répertoire que printui.exe (simulant une charge utile de pilote délivrée via un dispositif USB).
    2. Étape 2 – Exécuter printui.exe: En invoquant printui.exe avec 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.
    3. É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 pour svcinsty64.exe, satisfaisant la sélection de la règle sans déclencher le filtre, générant ainsi une alerte.
  • 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