SOC Prime Bias: Moyen

05 Déc 2025 17:36

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 Follow
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.

graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#66cc66 classDef file fill:#ffcc66 classDef process fill:#c266ff classDef malware fill:#ff6666 classDef network fill:#cccccc %% Nodes action_usb_insert[« <b>Action</b> – <b>T1204.002 Exécution par l’utilisateur : Fichier malveillant</b> : L’utilisateur insère une clé USB compromise contenant un raccourci caché. »] class action_usb_insert action tool_shortcut[« <b>Outil</b> – <b>T1547.009 Modification de raccourci</b> : Raccourci LNK caché « USB Drive.lnk » visible par l’utilisateur. »] class tool_shortcut tool tool_vbscript[« <b>Outil</b> – <b>T1059.005 Visual Basic</b> : Le raccourci lance un script Visual Basic. »] class tool_vbscript tool tool_batch[« <b>Outil</b> – <b>T1059.003 Interpréteur de commandes Windows</b> : Le VBScript exécute un fichier batch. »] class tool_batch tool file_malicious_dll[« <b>Fichier</b> – <b>T1036.005 Masquage : Correspondance avec un nom légitime</b> & <b>T1036.008 Masquage : Double extension</b> : DLL malveillante « printui.dll » (renommée depuis .dat) déposée dans C:\\Windows\\System32 à l’aide de répertoires cachés. »] class file_malicious_dll file process_printui[« <b>Processus</b> – <b>T1055.001 Injection de processus</b> & <b>T1574.001 Détournement de DLL</b> : Le binaire légitime printui.exe charge la DLL malveillante. »] class process_printui process tool_dcom[« <b>Outil</b> – <b>T1546.015 Composant logiciel serveur</b> & <b>T1021.003 DCOM</b> : Enregistre la DLL auprès d’un service DCOM pour la persistance. »] class tool_dcom tool file_svcinsty[« <b>Fichier</b> : Exécutable « svcinsty64.exe » créé par le dropper pour installer la charge utile finale. »] class file_svcinsty file file_svctrl[« <b>Fichier</b> : Exécutable « svctrl64.exe » créé par le dropper comme composant auxiliaire. »] class file_svctrl file malware_printminer[« <b>Malware</b> – PrintMiner : Ajoute des exclusions Windows Defender, falsifie des alertes de sécurité et prépare le téléchargement du mineur. »] class malware_printminer malware tool_defender_exclusion[« <b>Outil</b> – <b>T1564.012 Usurpation du contenu du disque</b> & <b>T1562.011 Modification du registre</b> : Modifie la liste d’exclusions de Defender pour dissimuler l’activité. »] class tool_defender_exclusion tool network_c2[« <b>Réseau</b> – <b>T1071.001 Protocoles Web</b>, <b>T1102.002 Services Web</b>, <b>T1102.003 Transfert d’outils entrant</b> : Communication HTTPS avec le serveur de commande et de contrôle pour récupérer la configuration et télécharger le mineur. »] class network_c2 network malware_xmrig[« <b>Malware</b> – XMRig : Mineur Monero open source téléchargé et exécuté. »] class malware_xmrig malware action_compute_hijack[« <b>Action</b> – <b>T1496.001 Détournement de ressources</b> : Exécute XMRig pour miner de la cryptomonnaie tout en contournant les outils d’analyse. »] class action_compute_hijack action action_replication[« <b>Action</b> – <b>T1091 Réplication via supports amovibles</b> : Recrée le raccourci et les fichiers cachés sur d’autres clés USB. »] class action_replication action %% Connections action_usb_insert u002du002du003e|crée| tool_shortcut tool_shortcut u002du002du003e|lance| tool_vbscript tool_vbscript u002du002du003e|exécute| tool_batch tool_batch u002du002du003e|dépose| file_malicious_dll file_malicious_dll u002du002du003e|chargée par| process_printui process_printui u002du002du003e|établit la persistance via| tool_dcom tool_dcom u002du002du003e|crée| file_svcinsty tool_dcom u002du002du003e|crée| file_svctrl file_svcinsty u002du002du003e|installe| malware_printminer file_svctrl u002du002du003e|prend en charge| malware_printminer malware_printminer u002du002du003e|ajoute une exclusion via| tool_defender_exclusion malware_printminer u002du002du003e|communique avec| network_c2 network_c2 u002du002du003e|fournit| malware_xmrig malware_xmrig u002du002du003e|exécute| action_compute_hijack action_compute_hijack u002du002du003e|déclenche| action_replication action_replication u002du002du003e|place| tool_shortcut

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