SOC Prime Bias: Medio

09 Apr 2026 18:30

ClickFix a MaaS: All’interno di un RAT modulare per Windows e del suo pannello di controllo

Author Photo
SOC Prime Team linkedin icon Segui
ClickFix a MaaS: All’interno di un RAT modulare per Windows e del suo pannello di controllo
shield icon

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

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:

    1. Obiettivo: L’attaccante vuole inizializzare un payload Node.js malevolo (bootstrap.js) senza destare sospetti.
    2. Metodo: Utilizzare un binario Windows firmato (conhost.exe) come proxy per lanciare node.exe in modalità senza testa, passando lo script bootstrap come argomento.
    3. Passaggi:
      • Inserire un bootstrap.js malevolo bootstrap.js in una directory scrivibile (ad esempio, %TEMP%).
      • Invocare conhost.exe con la stringa esatta di argomenti che la regola osserva.
      • Il comando viene eseguito nel contesto dell’utente corrente, imitando un legittimo avvio di processo.
    # 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
  • 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."