SOC Prime Bias: Critique

22 Jan 2026 19:09

Analyse de la campagne du paquet npm BigSquatRat

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Analyse de la campagne du paquet npm BigSquatRat
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Le rapport profile un paquet npm malveillant, bigmathix, qui installe un cheval de Troie d’accès à distance Node.js. Il utilise du code multistade obfusqué pour récupérer des charges utiles supplémentaires depuis du contenu GitHub contrôlé par l’attaquant et aurevian.cloud. La détection est entravée par des clés de décryptage dynamiques et un argument initialisateur requis qui bloque l’exécution, conforme à une attaque ciblée sur la chaîne d’approvisionnement visant les développeurs JavaScript.

Enquête

Les chercheurs ont désobfusqué le paquet pour reconstituer une chaîne qui engendre un processus enfant, réalise une résolution DNS et décrypte les URLs intégrées à l’aide de clés dérivées. En forçant brutalement la valeur initialisatrice, ils ont récupéré une charge utile de deuxième stade depuis aurevian.cloud, qui a introduit une obfuscation supplémentaire dans la logique finale du RAT. Les analystes ont également corrélé des dépôts GitHub liés et d’autres paquets npm publiés à des intervalles horaires similaires pour cartographier l’étendue de la campagne.

Atténuation

Évitez les dépendances npm non fiables, surtout celles nouvellement publiées, avec peu de téléchargements, ou des modules avec des changements de version abrupts, et validez l’intégrité via des contrôles de hash/provenance. Surveillez les processus enfants suspects engendrés par node.exe et les recherches sortantes inattendues vers des domaines inconnus. Appliquez un filtrage de sortie pour aurevian.cloud, et signalez la persistance telle que les clés Run de Windows ou les services systemd Linux créés par des processus Node.js.

Réponse

Si bigmathix est identifié, isolez le point de terminaison, supprimez le paquet, et terminez les processus Node.js engendrés. Supprimez les clés Run créées ou les unités systemd, bloquez les domaines/IP associés, et collectez les journaux montrant les DNS, l’ascendance des processus et la sortie réseau. Réalisez une analyse forensique pour identifier les charges utiles téléchargées et la persistance telle que les lanceurs wscript.exe ou les services planifiés, puis recherchez dans l’environnement les artefacts correspondants.

« graph TB %% Class Definitions Section classDef action fill:#99ccff classDef process fill:#ffcc99 classDef persistence fill:#ccffcc classDef c2 fill:#ccccff classDef cleanup fill:#ffccff %% Nodes Definitions node_supply_chain[« <b>Technique</b> – T1195.001 Compromission de la chaîne d’approvisionnement<br /><b>Description</b>: Compromettre la chaîne d’approvisionnement du logiciel pour distribuer du code malveillant.<br /><b>Détail</b>: Paquet npm malveillant ‘bigmathix’ publié. »] class node_supply_chain action node_obfuscation[« <b>Technique</b> – T1027 Fichiers ou informations obfusqués<br /><b>Sub-techniques</b>: T1027.009 (Stéganographie), T1027.004 (Compilation après livraison)<br /><b>Description</b>: Le paquet contient du JavaScript fortement obfusqué qui est désobfusqué à l’exécution. »] class node_obfuscation action node_process_creation[« <b>Technique</b> – T1543 Créer ou modifier un processus système<br /><b>Sub-technique</b>: T1543.001 (Agent de lancement)<br /><b>Description</b>: Le chargeur génère un processus enfant Node.js et brise l’arborescence des processus pour masquer l’exécution (T1036.009). »] class node_process_creation process node_dns_key_derivation[« <b>Technique</b> – T1071.004 Protocole de couche d’application DNS<br /><b>Supplémentaire</b>: T1590.002 (Domaine/IP), T1596.001 (Obtenir du matériel cryptographique)<br /><b>Description</b>: Génère un argument numérique, effectue une recherche DNS pour IP, combine l’IP avec le hash SHA-256 d’un README distant pour dériver des clés de décryptage. »] class node_dns_key_derivation action node_encrypted_download[« <b>Technique</b> – T1573.001 Canal crypté cryptographie asymétrique<br /><b>Description</b>: Utilise un canal AES-GCM crypté pour récupérer une charge utile de deuxième stade depuis aurevian.cloud. »] class node_encrypted_download action node_persistence_linux[« <b>Technique</b> – T1543.002 Service systemd<br /><b>Description</b>: Crée un service systemd et le démarre via systemctl pour la persistance sur Linux. »] class node_persistence_linux persistence node_persistence_windows[« <b>Technique</b> – T1547.014 Clés Run du registre / Dossier de démarrage<br /><b>Description</b>: Crée une clé Run ASEP qui lance wscript.exe → node.exe pour la persistance sous Windows. »] class node_persistence_windows persistence node_c2[« <b>Technique</b> – T1104 Transfert d’outil d’entrée (C2)<br /><b>Description</b>: Le RAT interroge le C2, exécute les commandes reçues et vérifie si l’extension Chrome MetaMask est présente. »] class node_c2 c2 node_cleanup[« <b>Technique</b> – T1070.004 Suppression de fichier, T1070.009 Nettoyage du registre<br /><b>Description</b>: L’étape finale supprime ses fichiers et enlève les entrées de registre/run-key pour effacer les preuves. »] class node_cleanup cleanup %% Connections Showing Attack Flow node_supply_chain u002du002d>|conduit à| node_obfuscation node_obfuscation u002du002d>|conduit à| node_process_creation node_process_creation u002du002d>|utilise| node_dns_key_derivation node_dns_key_derivation u002du002d>|utilise| node_encrypted_download node_encrypted_download u002du002d>|active| node_persistence_linux node_encrypted_download u002du002d>|active| node_persistence_windows node_persistence_linux u002du002d>|soutient| node_c2 node_persistence_windows u002du002d>|soutient| node_c2 node_c2 u002du002d>|déclenche| node_cleanup « 

Flux d’attaque

Exécution de simulation

Prérequis : Le contrôle préalable des télémetries & de la ligne de base doit avoir réussi.

Justification : Cette section détaille l’exécution précise de la technique adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémetrie exacte attendue par la logique de détection. Des exemples abstraits ou non connexes mèneront à un mauvais diagnostic.

  • Narration & amp; Commandes d’attaque :
    L’attaquant possède une charge utile JavaScript malveillante qui nécessite le runtime Node.js pour s’exécuter. Pour échapper au classement blanc des applications standard, ils utilisent wscript.exe—un hôte de script natif Windows—pour lancer node.exe indirectement, créant une relation parent/enfant qui correspond à la règle de détection. Les étapes sont :

    1. Déposer un script malveillant (malicious.js) qui lance simplement node.exe avec la charge utile.
    2. Créer un JavaScript wrapper (launcher.js) que l’hôte de script Windows exécutera ; ce wrapper utilise WScript.Shell pour exécuter node.exe avec la charge utile.
    3. Exécutez le wrapper via wscript.exe //B //Nologo launcher.js.
    4. L’arborescence de processus résultante est wscript.exe → node.exe → malicious.js, générant la télémetrie cible.
  • Script de Test de Régression :
    Le script PowerShell suivant automatise toute la chaîne sur un hôte de test Windows.

    # -------------------------------------------------
    # Test de Régression – Exécution de RAT Node.js via wscript
    # -------------------------------------------------
    
    # Variables
    $tempPath = "$env:TEMP"
    $launcherPath = Join-Path $tempPath "launcher.js"
    $payloadPath  = Join-Path $tempPath "malicious.js"
    $nodePath     = "C:Program Filesnodejsnode.exe"   # Ajustez si installé ailleurs
    
    # 1. Écrivez la charge utile malveillante (simple console.log pour démo)
    $payloadContent = @"
    console.log('Charge utile malveillante exécutée');
    // Le code RAT réel serait ici
    "@
    $payloadContent | Out-File -FilePath $payloadPath -Encoding ASCII
    
    # 2. Écrivez le launcher que wscript exécutera
    $launcherContent = @"
    var shell = WScript.CreateObject("WScript.Shell");
    // Exécute node.exe avec le script malveillant
    var cmd = "`"$nodePath`" `"$payloadPath`"";
    shell.Run(cmd, 0, false);
    "@
    $launcherContent | Out-File -FilePath $launcherPath -Encoding ASCII
    
    # 3. Exécutez la chaîne via wscript
    Write-Host "Lancement de la chaîne malveillante..."
    wscript.exe //B //Nologo $launcherPath
    
    # Pause pour permettre à la télémetrie d'être capturée
    Start-Sleep -Seconds 5
    
    # 4. Optionnel : vérifier que le processus node fonctionne (pour observation manuelle)
    Get-Process -Name node -ErrorAction SilentlyContinue
    
    # -------------------------------------------------
    # Fin du test de régression
    # -------------------------------------------------
  • Commandes de nettoyage : Supprimez les artefacts et terminez les processus persistants.

    # Script de nettoyage – exécuter après validation
    $tempPath = "$env:TEMP"
    Remove-Item -Path (Join-Path $tempPath "launcher.js") -ErrorAction SilentlyContinue
    Remove-Item -Path (Join-Path $tempPath "malicious.js") -ErrorAction SilentlyContinue
    
    # Tuez tous les processus node.exe errants engendrés par le test
    Get-Process -Name node -ErrorAction SilentlyContinue | Stop-Process -Force