Analyse de la campagne du paquet npm BigSquatRat
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.
Flux d’attaque
Détections
LOLBAS WScript / CScript (via process_creation)
Voir
Extension de fichier suspecte ajoutée aux clés Run [ASEPs] (via registry_event)
Voir
Processus enfants NodeJS suspects [Linux] (via cmdline)
Voir
Téléchargement possible de fichiers GitHub initié par un processus inhabituel (via network_connection)
Voir
IOC (Emails) à détecter : Analyse de la campagne de le paquet npm BigSquatRat
Voir
IOC (HashSha1) à détecter : Analyse de la campagne de le paquet npm BigSquatRat
Voir
IOC (HashSha256) à détecter : Analyse de la campagne de le paquet npm BigSquatRat
Voir
Détection de l’exécution de RAT Node.js via wscript.exe [Création de processus Windows]
Voir
Détection de logiciels malveillants Node.js utilisant des scripts obfusqués et systemctl pour la persistance [Création de processus Linux]
Voir
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 utilisentwscript.exe—un hôte de script natif Windows—pour lancernode.exeindirectement, créant une relation parent/enfant qui correspond à la règle de détection. Les étapes sont :- Déposer un script malveillant (
malicious.js) qui lance simplementnode.exeavec la charge utile. - Créer un JavaScript wrapper (
launcher.js) que l’hôte de script Windows exécutera ; ce wrapper utiliseWScript.Shellpour exécuternode.exeavec la charge utile. - Exécutez le wrapper via
wscript.exe //B //Nologo launcher.js. - L’arborescence de processus résultante est
wscript.exe → node.exe → malicious.js, générant la télémetrie cible.
- Déposer un script malveillant (
-
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