SOC Prime Bias: High

21 Sep 2026 20:13 UTC

ChainScript : Tracer un RAT Node.js à travers la Blockchain

Author Photo
SOC Prime Team linkedin icon Suivre
ChainScript : Tracer un RAT Node.js à travers la Blockchain
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

ChainScript est un cheval de Troie d’accès à distance (RAT) nouvellement découvert basé sur Node.js qui utilise une infrastructure blockchain décentralisée pour la découverte de commandes et de contrôles (C2). Le malware s’appuie sur une technique EtherHiding, interrogeant un contrat intelligent Polygon pour résoudre dynamiquement des points de terminaison WebSocket actifs et faire pivoter rapidement l’infrastructure. Ses capacités incluent des shells interactifs, la manipulation de fichiers et la reconnaissance de portefeuilles de cryptomonnaie.

Enquête

L’Adversary Pursuit Group (APG) de Blackpoint a identifié ChainScript lors de l’enquête sur une activité ClickFix impliquant des packages Windows Installer malveillants. Les analystes ont observé des composants de malware mis en scène dans plusieurs répertoires à thème Microsoft et un contrat intelligent Polygon utilisé comme résolveur. L’enquête a montré que l’acteur de la menace automatise le déploiement des contrats résolveurs avec les constructions de malware pour permettre des transitions C2 transparentes.

Atténuation

Les organisations devraient réduire les chemins d’exécution de ClickFix en désactivant le dialogue d’exécution Windows là où il n’est pas requis et en restreignant l’installation MSI à partir de répertoires accessibles en écriture par les utilisateurs. Les équipes de sécurité devraient surveiller les relations de processus inhabituelles, en particulier msiexec.exe engendrant wscript.exe ou PowerShell. Les utilisateurs devraient également être formés à reconnaître les invites d’ingénierie sociale demandant l’exécution manuelle des commandes via Win+R.

Réponse

Si une activité ChainScript est détectée, le système affecté doit être immédiatement isolé pour empêcher les mouvements latéraux ou l’exfiltration de données via le shell interactif. Les intervenants doivent effectuer un examen médico-légal complet pour des charges utiles secondaires et une persistance non autorisée dans les tâches planifiées ou les clés d’exécution du registre. Les éventuels identifiants exposés doivent également être changés, en particulier ceux associés aux extensions de navigateur ou aux portefeuilles de cryptomonnaie locaux.

Flux d’attaque

Nous mettons encore à jour cette partie.

Détections

Points de persistance possibles [ASEPs – Ruche Software/NTUSER] (via registry_event)

Équipe SOC Prime
21 sept. 2026

Possibilité d’exécution par lignes de commande PowerShell cachées (via cmdline)

Équipe SOC Prime
21 sept. 2026

Exécution de binaire NodeJS depuis un emplacement inhabituel (via cmdline)

Équipe SOC Prime
21 sept. 2026

Processus enfants NodeJS suspects [Windows] (via cmdline)

Équipe SOC Prime
21 sept. 2026

WScript / CScript LOLBAS (via process_creation)

Équipe SOC Prime
21 sept. 2026

Création de tâche planifiée possible (via powershell)

Équipe SOC Prime
21 sept. 2026

Tâche planifiée suspecte (via audit)

Équipe SOC Prime
21 sept. 2026

IOCs (HashSha256) à détecter : ChainScript : Traquer un RAT Node.js à travers la Blockchain

Règles AI de SOC Prime
21 sept. 2026

Détecter la découverte d’infrastructure C2 basée sur la blockchain ChainScript [Connexion Réseau Windows]

Règles AI de SOC Prime
21 sept. 2026

Détection de l’exécution de ChainScript RAT via PowerShell [PowerShell Windows]

Règles AI de SOC Prime
21 sept. 2026

Détection de l’exécution de ChainScript Node.js RAT via Msiexec et Wscript [Création de Processus Windows]

Règles AI de SOC Prime
21 sept. 2026

Exécution de Simulation

  • Narration de l’attaque & Commandes : L’attaquant déploie une charge utile basée sur Node.js conçue pour imiter ChainScript. L’objectif est de découvrir l’infrastructure C2 en interrogeant un point de terminaison publique RPC Ethereum. Le script initie une connexion WebSocket et envoie un JSON-RPC eth_call requête. Critiquement, la requête inclut le sélecteur de fonction spécifique 0x4ab7874e dans la charge utile. Cette action est destinée à simuler la phase de « découverte » du cycle de vie du malware, où l’adresse C2 est extraite d’un contrat intelligent sur la blockchain.

  • Script de Test de Régression :

    # Script de simulation pour imiter la découverte blockchain de ChainScript via WebSocket
    # Cela nécessite un environnement Node.js ou un outil capable d'envoyer des charges utiles JSON-RPC spécifiques par WebSocket.
    # Pour cette simulation, nous utilisons un script PowerShell pour envoyer la charge utile brute.
    
    $wsUri = "wss://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY" # Utilisation d'un point de terminaison RPC de remplacement
    $ws = New-Object System.Net.WebSockets.ClientWebSocket
    $ct = New-Object System.Threading.CancellationToken
    
    try {
        Write-Host "[+] Connexion au RPC WebSocket..."
        $connectTask = $ws.ConnectAsync($wsUri, $ct)
        $connectTask.Wait()
        Write-Host "[+] Connexion établie."
    
        # La charge utile spécifique contenant le sélecteur de fonction ChainScript
        $payload = '{
            "jsonrpc":"2.0",
            "method":"eth_call",
            "params":[{
                "to":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
                "data":"0x4ab7874e0000000000000000000000000000000000000000000000000000000000000000"
            }],
            "id":1
        }'
        $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
        $segment = New-Object ArraySegment[Byte] -ArgumentList @(,$bytes)
    
        Write-Host "[+] Envoi de la charge utile de découverte ChainScript (eth_call + 0x4ab7874e)..."
        $sendTask = $ws.SendAsync($segment, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $ct)
        $sendTask.Wait()
        Write-Host "[+] Charge utile envoyée."
    
    } catch {
        Write-Error "[-] Échec de la simulation : $($_.Exception.Message)"
    } finally {
        if ($ws.State -eq 'Open') {
            $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Fermeture", $ct).Wait()
        }
        $ws.Dispose()
        Write-Host "[+] Nettoyage complet."
    }
  • Commandes de Nettoyage :

    # Aucune modification persistante n'est effectuée par le script. 
    # Assurez-vous que tous les processus temporaires Node.js ou les fichiers de l'auditeur local sont supprimés.
    Stop-Process -Name "node" -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPchainscript_sim.tmp" -ErrorAction SilentlyContinue