SOC Prime Bias: High

21 Sep 2026 20:13 UTC

ChainScript: Verfolgung eines Node.js RATs durch die Blockchain

Author Photo
SOC Prime Team linkedin icon Folgen
ChainScript: Verfolgung eines Node.js RATs durch die Blockchain
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

ChainScript ist ein neu entdeckter Remote Access Trojaner (RAT) auf Node.js-Basis, der eine dezentralisierte Blockchain-Infrastruktur für die Entdeckung der Command-and-Control (C2)-Server nutzt. Die Malware setzt auf eine EtherHiding-Technik, bei der ein Polygon-Smart-Contract abgefragt wird, um dynamisch aktive WebSocket-Endpunkte zu ermitteln und die Infrastruktur schnell zu wechseln. Zu ihren Fähigkeiten gehören interaktive Shells, Datei-Manipulationen und die Erkundung von Kryptowährungs-Wallets.

Untersuchung

Die Adversary Pursuit Group (APG) von Blackpoint identifizierte ChainScript während der Untersuchung von ClickFix-Aktivitäten, die bösartige Windows Installer-Pakete beinhalteten. Die Analysten beobachteten Malware-Komponenten, die über mehrere Microsoft-ähnliche Verzeichnisse verteilt waren, sowie einen Polygon-Smart-Contract, der als Resolver diente. Die Untersuchung ergab, dass der Bedrohungsakteur die Bereitstellung von Resolver-Verträgen zusammen mit Malware-Builds automatisiert, um nahtlose C2-Übergänge zu ermöglichen.

Abmilderung

Organisationen sollten die Ausführungspfade von ClickFix reduzieren, indem sie den Windows-Ausführen-Dialog dort deaktivieren, wo er nicht benötigt wird, und die MSI-Installation von benutzerbeschreibbaren Verzeichnissen einschränken. Sicherheitsteams sollten ungewöhnliche Prozessbeziehungen überwachen, insbesondere msiexec.exe spawning wscript.exe oder PowerShell. Benutzer sollten auch darin geschult werden, soziale Ingenieurangriffe zu erkennen, die zu einer manuellen Befehlsausführung über Win+R.

Reaktion

Wird ChainScript-Aktivität erkannt, sollte das betroffene System sofort isoliert werden, um laterale Bewegungen oder Datenausfuhr durch die interaktive Shell zu verhindern. Einsatzkräfte sollten eine vollständige forensische Überprüfung auf sekundäre Nutzlasten und unautorisierte Persistenz in geplanten Aufgaben oder Registry-Run-Schlüsseln durchführen. Potenziell exponierte Anmeldedaten sollten ebenfalls geändert werden, insbesondere solche, die mit Browser-Erweiterungen oder lokalen Kryptowährungs-Wallets verbunden sind.

Angriffsverlauf

Wir aktualisieren diesen Teil noch.

Erkennungen

Mögliche Persistenzpunkte [ASEPs – Software/NTUSER Hive] (via registry_event)

SOC Prime Team
21. September 2026

Die Möglichkeit der Ausführung durch versteckte PowerShell-Befehlszeilen (via cmdline)

SOC Prime Team
21. September 2026

NodeJS-Binärdatei wird von ungewöhnlichem Ort ausgeführt (via cmdline)

SOC Prime Team
21. September 2026

Verdächtige NodeJS-Kindprozesse [Windows] (via cmdline)

SOC Prime Team
21. September 2026

LOLBAS WScript / CScript (via process_creation)

SOC Prime Team
21. September 2026

Mögliche Erzeugung von geplanten Aufgaben (via powershell)

SOC Prime Team
21. September 2026

Verdächtige geplante Aufgabe (via audit)

SOC Prime Team
21. September 2026

IOCs (HashSha256) zur Erkennung: ChainScript: Einen Node.js RAT über die Blockchain verfolgen

SOC Prime AI-Regeln
21. September 2026

Erkennung der ChainScript Blockchain-basierten C2-Infrastruktur-Entdeckung [Windows-Netzwerkverbindung]

SOC Prime AI-Regeln
21. September 2026

Erkennung der Ausführung von ChainScript-RAT über PowerShell [Windows PowerShell]

SOC Prime AI-Regeln
21. September 2026

Erkennung der Ausführung des ChainScript Node.js RAT über Msiexec und Wscript [Windows Prozess Erstellung]

SOC Prime AI-Regeln
21. September 2026

Simulation Ausführung

  • Angriffserzählung & Befehle: Der Angreifer setzt eine auf Node.js basierende Nutzlast ein, die darauf ausgelegt ist, ChainScript zu imitieren. Das Ziel ist es, die C2-Infrastruktur zu entdecken, indem ein öffentliches Ethereum-RPC-Endpunkt abgefragt wird. Das Skript initiiert eine WebSocket-Verbindung und sendet eine JSON-RPC eth_call Anfrage. Entscheidend ist, dass die Anfrage den spezifischen Funktionsselektor 0x4ab7874e innerhalb der Nutzlast enthält. Diese Aktion soll die „Entdeckungs“-Phase des Malware-Lebenszyklus simulieren, bei der die C2-Adresse aus einem Smart Contract auf der Blockchain abgerufen wird.

  • Regressionstest-Skript:

    # Simulationsskript, um die Blockchain-Erkennung von ChainScript über WebSocket zu imitieren
    # Dies erfordert eine Node.js-Umgebung oder ein Tool, das in der Lage ist, bestimmte WebSocket JSON-RPC-Nutzlasten zu senden.
    # Für diese Simulation verwenden wir ein PowerShell-Skript, um die Roh-Nutzlast zu senden.
    
    $wsUri = "wss://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY" # Verwenden eines Platzhalter-RPC-Endpunkts
    $ws = New-Object System.Net.WebSockets.ClientWebSocket
    $ct = New-Object System.Threading.CancellationToken
    
    try {
        Write-Host "[+] Verbindung zu WebSocket RPC herstellen..."
        $connectTask = $ws.ConnectAsync($wsUri, $ct)
        $connectTask.Wait()
        Write-Host "[+] Verbindung hergestellt."
    
        # Die spezifische Nutzlast, die den ChainScript-Funktionsselektor enthält
        $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 "[+] Senden der ChainScript-Erkennungsnutzlast (eth_call + 0x4ab7874e)..."
        $sendTask = $ws.SendAsync($segment, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $ct)
        $sendTask.Wait()
        Write-Host "[+] Nutzlast gesendet."
    
    } catch {
        Write-Error "[-] Simulation fehlgeschlagen: $($_.Exception.Message)"
    } finally {
        if ($ws.State -eq 'Open') {
            $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Closing", $ct).Wait()
        }
        $ws.Dispose()
        Write-Host "[+] Aufräumen abgeschlossen."
    }
  • Aufräumkommandos:

    # Vom Skript werden keine dauerhaften Änderungen vorgenommen. 
    # Stellen Sie sicher, dass alle temporären Node.js-Prozesse oder lokalen Listener-Dateien entfernt werden.
    Stop-Process -Name "node" -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPchainscript_sim.tmp" -ErrorAction SilentlyContinue