SOC Prime Bias: Alto

29 Jun 2026 06:42 UTC

Campagna Photo ZIP che prende di mira il settore dell’ospitalità fornisce un implant Node.js per accesso persistente

Author Photo
SOC Prime Team linkedin icon Segui
Campagna Photo ZIP che prende di mira il settore dell’ospitalità fornisce un implant Node.js per accesso persistente
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

Una campagna di intrusione attiva a più stadi sta prendendo di mira il settore dell’ospitalità tramite archivi ZIP a tema fotografico che contengono file LNK dannosi. La catena di infezione utilizza decodificatori PowerShell offuscati, la compilazione di DLL .NET dinamica e un impianto basato su Node.js per la persistenza e la comunicazione di comando e controllo. L’attore della minaccia ricorre anche al riciclaggio dell’autenticazione tramite servizi legittimi come Calendly e Google per ridurre la possibilità di rilevamento basato su email.

Indagine

Microsoft ha identificato due ondate separate della campagna e ha osservato una progressione da semplici loader PowerShell a fasi di compilazione .NET più complesse. L’indagine ha anche scoperto una strategia di doppia persistenza che si basava sia su HKCURun and HKCURunOnce chiavi di registro. I ricercatori hanno inoltre osservato l’uso di domini con front-end Cloudflare e porte di comando e controllo non standard per oscurare l’infrastruttura di supporto.

Mitigazione

Le organizzazioni dovrebbero dare priorità ai rilevamenti a strati per l’esecuzione dei collegamenti, la compilazione .NET imprevista e i processi Node.js avviati da directory scrivibili dall’utente. È fortemente consigliato abilitare le regole di riduzione della superficie di attacco e monitorare i cambiamenti non autorizzati alle esclusioni di Microsoft Defender. Bloccare i modelli di dominio sospetti .cfd e osservare il traffico in uscita su porte insolite può anche aiutare a ridurre l’esposizione.

Risposta

Se viene rilevata questa attività, la bonifica dovrebbe includere la rimozione sia dell’elemento ProgramData RunOnce che della chiave Node.js per impedire all’impianto di ripristinarsi. I team di sicurezza dovrebbero anche eliminare il runtime Node.js e i relativi Run key to stop the implant from restoring itself. Security teams should also delete the Node.js runtime and related .js payload dalla directory AppDataLocalNodejs . La pulizia completa richiede di affrontare sia il payload attivo che i meccanismi di persistenza lasciati.

"flowchart TD step_phishing["T1566.002 u2013 Phishing: Link di spearphishing: Utilizza il riciclaggio dell’autenticazione tramite reindirizzamenti di Calendly e Google per fornire un archivio ZIP a tema fotografico."] step_user_execution["T1204.002 u2013 Esecuzione Utente: File Dannoso: La vittima apre un collegamento immagine falso (.lnk) che innesca un downloader PowerShell offuscato."] rules_for_user_execution("<b>Nome Regola</b>: File LNK Dannoso Possibile con Estensione Doppia<br/><b>ID Regola</b>: 13f9a3c1-b2fe-4268-8052-bf6fe353e952") step_obfuscation["T1027 u2013 File o Informazioni Offuscati: PowerShell utilizza la decodifica aritmetica (XOR, modulo) per recuperare le fasi successive."] rules_for_obfuscation("<b>Nome Regola</b>: Indicatori di Offuscamento PowerShell Possibili<br/><b>ID Regola</b>: a11f179d-8248-4d34-905c-e61735a72688") step_compilation["T1027.004 u2013 Compila Dopo la Consegna: PowerShell innesca la compilazione .NET utilizzando csc.exe e cvtres.exe per creare DLL."] step_implant_execution["Esecuzione dell’impianto basata su Node.js: Distribuzione di payload dannosi .js tramite node.exe."] rules_for_implant_execution("<b>Nome Regola</b>: Possibile Node Eseguito da Processo Abusato Noto<br/><b>ID Regola</b>: b36fbdaf-1bab-45c2-a15b-f0c25c696d72") step_persistence["T1547.014 u2013 Esecuzione Autostart di Avvio o Accesso: Active Setup: Modello duale utilizzando chiavi di registro 'Run' e 'RunOnce' per il componente Node.js e l’eseguibile ProgramData."] rules_for_persistence("<b>Nome Regola</b>: Punti di Persistenza Possibili [ASEPs – Hive Software/NTUSER]<br/><b>ID Regola</b>: 4cb3ac97-0fab-4447-9054-6f2d6ca102a1") step_command_and_control["TA0011 u2013 Comando e Controllo: Segnalazioni a infrastrutture IP fisse su porte non standard (8443, 56001) e automazione del browser senza testa."] rules_for_c2("<b>Nome Regola</b>: Comando e Controllo Sospetto per Richiesta DNS di Dominio di Primo Livello (TLD) Insolito (via dns)<br/><b>ID Regola</b>: 63f3e8bc-0241-4f00-b9db-d4c309e61036") rules_for_c2_network("<b>Nome Regola</b>: Runtimes di Script che Avviano Connessioni TLS in Uscita (via network_connection)<br/><b>ID Regola</b>: 1ac66e9b-fd10-4c8c-af41-8c3d901ba03d") step_phishing –>|porta a| step_user_execution step_user_execution –>|innesca| step_obfuscation step_user_execution -.->|rilevato da| rules_for_user_execution step_obfuscation –>|porta a| step_compilation step_obfuscation -.->|rilevato da| rules_for_obfuscation step_compilation –>|abilita| step_implant_execution step_implant_execution –>|stabilisce| step_persistence step_implant_execution -.->|rilevato da| rules_for_implant_execution step_persistence –>|porta a| step_command_and_control step_persistence -.->|rilevato da| rules_for_persistence step_command_and_control -.->|rilevato da| rules_for_c2 step_command_and_control -.->|rilevato da| rules_for_c2_network "

Flusso di attacco

Esecuzione della Simulazione

Prerequisito: Il Check-Preflight di Telemetria e Baseline deve essere superato.

Razionale: Questa sezione illustra l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta aspettata dalla logica di rilevamento. Esempi astratti o non correlati porteranno a errori di diagnosi.

  • Narrazione e Comandi dell’Attacco: Un avversario ha ottenuto l’accesso iniziale tramite un link di spearphishing (T1566.002). Per stabilire persistenza e Comando e Controllo (C2), l’avversario distribuisce un impianto leggero basato su PowerShell. Per evitare il rilevamento dalle regole firewall di base che monitorano solo le porte standard, l’attaccante decide di utilizzare una porta non standard (8443) per il battito cardiaco primario. Inoltre, l’impianto è configurato per eseguire un secondo “call home” a un dominio di backup ospitato su un .cfd TLD per garantire la resilienza se l’IP principale viene bloccato. Questo imita il comportamento della campagna Photo-Zip menzionata nei riferimenti della regola.

  • Script di Test di Regressione:

    # Script di Simulazione: Emulazione C2 per la Validazione della Regola
    # Questo script simula connessioni di rete a porte non standard e domini .cfd.
    
    Write-Host "[+] Avviando Simulazione C2..." -ForegroundColor Cyan
    
    # 1. Simula la connessione a una porta C2 non standard (8443)
    # Usiamo un IP pubblico che ascolta sulla 8443 (o un listener locale se disponibile)
    Write-Host "[+] Tentativo di connessione a porta non standard 8443..." -ForegroundColor Yellow
    try {
        $tcpClient = New-Object System.Net.Sockets.TcpClient
        $tcpClient.Connect("8.8.8.8", 8443) # Utilizzando Google DNS come target fittizio per testare la porta
    } catch {
        Write-Host "[!] Connessione a porta 8443 fallita (Aspettato se la porta è chiusa), ma la telemetria dovrebbe ancora essere generata." -ForegroundColor Gray
    } finally {
        $tcpClient.Close()
    }
    
    # 2. Simula la connessione a un dominio .cfd
    # Tentiamo di risolvere e connetterci a un dominio fittizio .cfd
    Write-Host "[+] Tentativo di connessione a dominio .cfd..." -ForegroundColor Yellow
    $cfdDomain = "malicious-c2-test.cfd"
    try {
        # Utilizzando Resolve-DnsName per innescare la telemetria DNS, seguito da una richiesta web
        Resolve-DnsName -Name $cfdDomain -ErrorAction SilentlyContinue
        Invoke-WebRequest -Uri "http://$cfdDomain" -TimeoutSec 2 -ErrorAction SilentlyContinue
    } catch {
        Write-Host "[!] Connessione a dominio .cfd fallita (Aspettato per dominio fittizio), ma la telemetria dovrebbe essere generata." -ForegroundColor Gray
    }
    
    Write-Host "[+] Simulazione Completa." -ForegroundColor Cyan
  • Comandi di Pulizia:

    # Pulizia: Nessun artefatto persistente è stato creato da questo specifico script.
    # Se un listener è stato avviato, dovrebbe essere fermato.
    Write-Host "[+] Nessuna pulizia richiesta per questa simulazione senza stato." -ForegroundColor Green