SOC Prime Bias: Critique

22 Jan 2026 16:09 UTC

Analyse de la campagne du paquet npm BigSquatRat

Author Photo
Ruslan Mikhalov Chief of Threat Research at 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.

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