ClickFix a MaaS: All’interno di un RAT modulare per Windows e del suo pannello di controllo
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
I Netskope Threat Labs hanno osservato una campagna ClickFix che distribuisce un RAT Windows personalizzato costruito su Node.js tramite installatori MSI dannosi. Il payload mantiene i moduli chiave in memoria e utilizza lo streaming gRPC su Tor per il C2. Un errore OPSEC ha esposto il protocollo dell’admin-panel, indicando un modello di malware-as-a-service con tracciamento dei portafogli. La persistenza è impostata tramite un valore HKCU Run a livello utente.
Indagine
I ricercatori hanno catturato l’MSI, decodificato il bootstrap PowerShell e tracciato il caricamento dinamico dei moduli Node.js. Hanno estratto e decrittato il blob di configurazione per recuperare un indirizzo C2 .onion. Un file admin.proto trapelato ha rivelato funzioni MaaS come la gestione multi-operatore e il monitoraggio dei portafogli, e gli analisti hanno notato un watchdog che si autoripara oltre all’uso di Tor per il traffico anonimo.
Mitigazione
Bloccare l’esecuzione di MSI non firmati da fonti non attendibili e monitorare HKCU…Run per nuove voci sospette. Rilevare PowerShell che scarica payload MSI da domini come cloud-verificate.com. Allertare su conhost.exe o node.exe lanciati con argomenti nascosti e su tor.exe che appare negli endpoint che non lo richiedono.
Risposta
Isolare gli host affetti, raccogliere memoria per l’analisi dei moduli in memoria, e rimuovere la persistenza HKCU Run. Controllare %LOCALAPPDATA%LogicOptimizer per artefatti di staging e qualsiasi attività programmata di tor.exe, quindi bloccare l’endpoint onion e i domini/IP correlati. Cacciare l’intera azienda per cercare gli stessi artefatti di installazione e catene di processi.
graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ccffcc %% Nodes action_user_exec[“<b>Azione</b> – <b>T1204.001 Esecuzione utente: Link malevolo</b><br/>L’utente clicca un link malevolo e avvia PowerShell”] class action_user_exec action process_powershell_cmd[“<b>Processo</b> – <b>T1059.001 PowerShell</b><br/>Comando Base64 scarica installer MSI”] class process_powershell_cmd process action_msi_install[“<b>Azione</b> – <b>T1546.016 Pacchetti di installazione</b><br/>Installazione MSI silenziosa di Node.js”] class action_msi_install action tool_msiexec[“<b>Strumento</b> – msiexec.exe<br/>Esecuzione proxy binario di sistema”] class tool_msiexec tool action_persistence[“<b>Persistenza</b> – Chiave Run<br/>Scrive in HKCU Run”] class action_persistence action tool_tor[“<b>Strumento</b> – tor.exe<br/>Proxy esterno”] class tool_tor tool action_tor_proxy[“<b>Azione</b> – Proxy multi-hop<br/>Traffico C2 via Tor SOCKS5”] class action_tor_proxy action action_grpc_comm[“<b>Azione</b> – Servizio gRPC<br/>Comunicazione con C2 .onion”] class action_grpc_comm action action_encrypted_channel[“<b>Azione</b> – Canale cifrato<br/>AES-256-CBC o XOR”] class action_encrypted_channel action action_collection[“<b>Azione</b> – Raccolta host<br/>Raccoglie dati di sistema”] class action_collection action action_archive[“<b>Azione</b> – Archivio personalizzato<br/>Cifratura multi-strato”] class action_archive action action_config_repo[“<b>Azione</b> – Configurazione<br/>Estrae dati C2”] class action_config_repo action action_dynamic_resolution[“<b>Azione</b> – Risoluzione dinamica<br/>Risoluzione .onion runtime”] class action_dynamic_resolution action action_ip_discovery[“<b>Azione</b> – Scoperta IP<br/>Ottiene IP esterno”] class action_ip_discovery action %% Edges action_user_exec –>|triggers| process_powershell_cmd process_powershell_cmd –>|downloads| action_msi_install action_msi_install –>|uses| tool_msiexec action_msi_install –>|enables| action_persistence action_persistence –>|downloads| tool_tor tool_tor –>|enables| action_tor_proxy action_tor_proxy –>|routes| action_grpc_comm action_grpc_comm –>|encrypted via| action_encrypted_channel action_encrypted_channel –>|carries| action_collection action_collection –>|archives| action_archive action_archive –>|stores config in| action_config_repo action_config_repo –>|provides| action_dynamic_resolution action_dynamic_resolution –>|connects to| action_ip_discovery action_collection –>|discovers| action_ip_discovery
Flusso di Attacco
Rilevamenti
Esecuzione Binaria NodeJS da Posizione Insolita (tramite cmdline)
Visualizza
Possibili Punti di Persistenza [ASEPs – Hive Software/NTUSER] (tramite evento_di_registro)
Visualizza
Download o Upload tramite Powershell (tramite cmdline)
Visualizza
LOLBAS Conhost (tramite cmdline)
Visualizza
MsiExec Generato da Processo Shell (tramite cmdline)
Visualizza
Possibili Tentativi di Comunicazione Dominio Ricerca IP (tramite dns)
Visualizza
Possibili Strumenti di Rete Tor (tramite cmdline)
Visualizza
Rilevamento dell’Esecuzione di Conhost per Avviare Node per Bootstrap Script [Windows Process Creation]
Visualizza
Esecuzione di Comando PowerShell Malevolo per Scaricare e Installare MSI [Windows Powershell]
Visualizza
Esecuzione della Simulazione
Prerequisito: Il Controllo Prerequisito di Telemetria & Baseline deve essere superato.
Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare l’esatta telemetria prevista dalla logica di rilevamento.
-
Narrazione & Comandi di Attacco:
- Obiettivo: L’attaccante vuole inizializzare un payload Node.js malevolo (
bootstrap.js) senza destare sospetti. - Metodo: Utilizzare un binario Windows firmato (
conhost.exe) come proxy per lanciarenode.exein modalità senza testa, passando lo script bootstrap come argomento. - Passaggi:
- Inserire un bootstrap.js malevolo
bootstrap.jsin una directory scrivibile (ad esempio,%TEMP%). - Invocare
conhost.execon la stringa esatta di argomenti che la regola osserva. - Il comando viene eseguito nel contesto dell’utente corrente, imitando un legittimo avvio di processo.
- Inserire un bootstrap.js malevolo
# 1. Inserire bootstrap.js malevolo (contenuto inoffensivo simulato per il test) $bootstrapPath = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrapPath -Value "// segnaposto bootstrap malevolo" # 2. Eseguire conhost.exe per avviare node.exe con le bandiere richieste $conhost = "$env:windirsystem32conhost.exe" $args = '--headless "node.exe" "bootstrap.js"' Start-Process -FilePath $conhost -ArgumentList $args -WorkingDirectory $env:TEMP - Obiettivo: L’attaccante vuole inizializzare un payload Node.js malevolo (
-
Script di Test di Regresso:
# ------------------------------------------------- # Test di Regressione: Trigger Conhost → Bootstrap Node # ------------------------------------------------- # Assicurarsi che Sysmon stia eseguendo e registrando eventi ProcessCreate. # Inserire uno script bootstrap fittizio $bootstrap = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrap -Value "// contenuto bootstrap di test" # Definire la linea di comando esatta che la regola di rilevamento cerca $conhostPath = "$env:windirsystem32conhost.exe" $cmdLine = '--headless "node.exe" "bootstrap.js"' # Avviare conhost con gli argomenti dall'aspetto malevolo Start-Process -FilePath $conhostPath -ArgumentList $cmdLine -WorkingDirectory $env:TEMP Write-Host "Simulazione completata – controllare SIEM per l'allerta." -
Comandi di Pulizia:
# Arrestare eventuali processi node o conhost rimanenti avviati dal test Get-Process -Name node, conhost -ErrorAction SilentlyContinue | Stop-Process -Force # Rimuovere lo script bootstrap temporaneo Remove-Item -Path "$env:TEMPbootstrap.js" -Force -ErrorAction SilentlyContinue Write-Host "Pulizia terminata."