sleepwalker backdoor eset

Sleepwalker si nasconde in ESET e si attiva con un magic packet cifrato

🛡️ Executive Summary

  • Sleepwalker si carica come falsa dpapi.dll dentro ERAAgent.exe e resta dormiente finché non riceve un magic packet cifrato.
  • Il malware interpreta un bytecode proprietario con 23 istruzioni per scheduling, trasferimenti, movimento laterale ed esecuzione di shellcode in memoria.
  • La difesa richiede controlli su DLL, raw socket, named pipe, registro Windows e traffico anomalo generato dal processo ESET Management Agent.

Una nuova backdoor passiva per Windows denominata Sleepwalker sfrutta il DLL side-loading per operare all’interno di ERAAgent.exe, il processo di ESET Management Agent, senza contattare autonomamente alcun server di comando. Il malware rimane inattivo in memoria e si risveglia soltanto dopo la ricezione di un magic packet cifrato, contenente un programma scritto in un linguaggio di comando proprietario. Le sue 23 istruzioni permettono di pianificare attività, trasferire dati tramite diversi protocolli, assemblare payload a più stadi ed eseguire shellcode direttamente in memoria. L’assenza di beacon, domini e indirizzi IP incorporati rende Sleepwalker particolarmente difficile da individuare attraverso il solo monitoraggio del traffico in uscita.

Una falsa dpapi.dll si carica dentro ESET Management Agent

Annuncio

Il campione analizzato è una DLL Windows a 64 bit non firmata, grande 59.904 byte e compilata, secondo il timestamp presente nel file, il 10 giugno 2024. Per confondersi con i componenti legittimi installati sull’endpoint, la libreria utilizza il nome dpapi.dll, copia le informazioni di versione di ESET Management Agent e dichiara come produttore ESET. Il file indica inoltre ERAAgent come nome interno, la versione 11.2.2076.0 e una descrizione coerente con un modulo del prodotto. Questi metadati non rappresentano una firma digitale valida, ma possono ingannare controlli superficiali basati esclusivamente sulle proprietà mostrate da Esplora file. Sleepwalker esporta anche sette funzioni che imitano quelle della libreria DPAPI attesa dal processo, tra cui CryptProtectMemory, CryptUnprotectMemory e CryptUpdateProtectedState.

image 619
Sleepwalker si nasconde in ESET e si attiva con un magic packet cifrato 5

Le funzioni sono però semplici stub che tentano di inoltrare le chiamate a un secondo file denominato dpapisvc.dll. Quest’ultimo nome non appartiene a un componente standard di Windows e potrebbe indicare la presenza, nella catena completa, di una copia rinominata della DLL originale. Il campione esaminato non contiene tale libreria, quindi non è possibile confermare se il file venisse distribuito insieme a un componente legittimo rinominato o se alcune chiamate provocassero l’arresto del processo. L’esecuzione avviene attraverso DLL side-loading: collocando la falsa dpapi.dll nella stessa directory di ERAAgent.exe, gli aggressori sfruttano l’ordine di ricerca delle librerie di Windows per farla caricare dal processo fidato. Sleepwalker verifica soltanto che il processo ospitante si chiami ERAAgent.exe; non controlla firma digitale, percorso o autenticità del binario. Questa scelta riduce l’esecuzione accidentale nelle sandbox, ma permette anche agli analisti di riprodurre il comportamento rinominando opportunamente il processo di test. Non emergono prove di una vulnerabilità nel prodotto ESET né di una compromissione della sua infrastruttura di aggiornamento: il campione presuppone che un altro componente dell’attacco abbia già ottenuto privilegi sufficienti per scrivere nella directory protetta dell’applicazione. La documentazione ufficiale di ESET descrive Management Agent come il componente che collega endpoint e server alla piattaforma ESET PROTECT, conserva le policy e consente la gestione remota dei dispositivi. Proprio questa presenza continuativa rende ERAAgent.exe un contenitore interessante per un impianto persistente. La tecnica richiama altre operazioni nelle quali AnySign4PC è stato trasformato da software di sicurezza in vettore per backdoor, anche se nel caso Sleepwalker non è stato identificato il meccanismo utilizzato per depositare la DLL sul sistema.

La backdoor resta silente finché non arriva il pacchetto corretto

Dopo essere stata caricata, Sleepwalker avvia un thread in background, riserva un’area di memoria da 128 KB, decifra la configurazione incorporata e consegna l’unica istruzione presente al proprio interprete. Il comando iniziale ordina al malware di osservare indefinitamente tutte le interfacce di rete alla ricerca di un pacchetto costruito secondo un formato preciso. Non vengono aperte porte di ascolto evidenti e non parte alcuna connessione verso un dominio, un indirizzo IP o un URL preconfigurato. Il traffico normalmente prodotto da ESET Management Agent può proseguire regolarmente, offrendo ulteriore copertura all’attività dormiente. La scheda di rete viene portata in modalità promiscua attraverso raw socket, consentendo alla backdoor di esaminare i pacchetti che attraversano l’interfaccia prima che Windows li classifichi come TCP, UDP o altro protocollo. Ogni pacchetto deve superare una catena di verifiche: lunghezza minima di 48 byte, calcolo di una dimensione candidata tramite operazioni XOR sui valori finali, controllo di una coppia di byte collocata nella posizione prevista, verifica CRC-32 e infine decifratura autenticata. Se anche un solo controllo fallisce, il pacchetto viene ignorato senza generare una risposta. Un sistema infetto può quindi restare completamente silenzioso durante scansioni di rete, analisi NetFlow e controlli sui collegamenti verso infrastrutture malevole note. I comandi utilizzano AES-256-CCM, modalità che combina cifratura e autenticazione dell’integrità. Il campione contiene direttamente la chiave crittografica, mentre ogni messaggio presenta un nonce e un tag di autenticazione. Il ricercatore è riuscito a recuperare la chiave e a decifrare la configurazione incorporata, confermando che il bootstrap contiene soltanto l’istruzione SNIFF_MAGIC_PACKET: osservare tutte le interfacce senza scadenza. Il principio ricorda il funzionamento di BPFDoor nelle reti di telecomunicazione, dove un impianto passivo attende un magic packet senza aprire porte, ma Sleepwalker implementa il meccanismo su Windows e aggiunge un interprete capace di trasformare il pacchetto di attivazione in un programma operativo. L’assenza di beacon non rende il malware invisibile in assoluto: la modalità promiscua, l’uso di raw socket da parte di ERAAgent.exe, la presenza di una DLL non firmata nella directory dell’agente e gli eventuali trasporti attivati successivamente costituiscono segnali rilevabili. Cambia però la logica investigativa. Cercare esclusivamente connessioni periodiche verso un C2 produce un falso senso di sicurezza, perché Sleepwalker non ha alcuna infrastruttura statica da contattare fino a quando l’operatore non invia il comando.

Il bytecode proprietario trasforma ogni comando in un piccolo programma

Il magic packet non trasporta una shell testuale, un comando PowerShell o una semplice coppia composta da identificativo e parametri. Dopo la decifratura emerge un flusso di bytecode interpretabile soltanto dalla macchina virtuale integrata nel malware. Il linguaggio dispone di 23 istruzioni, ognuna identificata da un opcode di un byte e seguita da numeri, stringhe, blocchi binari o programmi annidati. Questa scelta aggiunge un secondo livello di ostacolo al reverse engineering: recuperare la chiave AES permette di leggere i byte, ma non spiega il loro significato senza ricostruire la grammatica, i tipi degli operandi e la tabella delle istruzioni. L’unico programma presente nella configurazione occupa appena cinque byte e comunica alla backdoor di controllare tutte le interfacce senza limite temporale.

sleepwalker backdoor eset infografica
Sleepwalker si nasconde in ESET e si attiva con un magic packet cifrato 6

Le funzioni disponibili consentono però di costruire attività molto più complesse. Sleepwalker può mettere in pausa l’esecuzione per un intervallo fisso o casuale, avviare script in thread separati, ripetere un programma per un numero determinato di volte oppure eseguirlo indefinitamente. L’istruzione CRON_SCHEDULE utilizza maschere per minuti, ore, giorni del mese e giorni della settimana, permettendo all’operatore di attivare attività soltanto in finestre temporali specifiche. Il programma annidato viene mantenuto offuscato in memoria con XOR, decifrato temporaneamente al momento dell’esecuzione e nuovamente protetto subito dopo. La backdoor può ricevere file o payload in frammenti attraverso STAGE_WRITE, assemblarli nel buffer da 128 KB e controllarne l’integrità con SHA-256 prima dell’esecuzione. Altre istruzioni permettono di decomprimere dati LZMA, leggere da disco un programma cifrato e interpretarlo oppure eseguire direttamente shellcode. RUN_SHELLCODE modifica la protezione della memoria da scrivibile a eseguibile tramite VirtualProtect e trasferisce il controllo al codice ricevuto. Il binario iniziale non contiene dunque una seconda fase pronta, uno stealer o un modulo di spionaggio: porta soltanto l’infrastruttura necessaria a ricevere e combinare capacità successive. Questo modello riduce gli elementi osservabili nell’analisi statica e lascia all’operatore la possibilità di configurare ogni vittima in modo differente. La stessa separazione tra loader, canale di comando e payload è emersa nella catena di HollowFrame e Matryoshka, costruita per eseguire moduli differenti e nascondere il C2 dietro servizi legittimi. Sleepwalker spinge però la modularità dentro un linguaggio compatto: un programma può contenere un altro programma, pianificarlo, ripeterlo e associarlo a un trasporto specifico. L’analisi originale pubblicata da Dominik Reichel sottolinea che le capacità implementate non equivalgono alle azioni effettivamente osservate. Senza traffico catturato, memoria di una vittima o payload successivi non è possibile stabilire quali istruzioni siano state realmente inviate, se siano stati sottratti dati o se il movimento laterale sia mai avvenuto.

TCP, DNS, ICMP, SMB e VMCI moltiplicano i canali disponibili

Una volta risvegliato, Sleepwalker può utilizzare sei famiglie di trasporto e scegliere destinazioni fornite dinamicamente dal bytecode. Le istruzioni TCP_SEND, UDP_SEND e ICMP_SEND permettono di inviare blocchi di dati attraverso connessioni TCP, datagrammi UDP o richieste ping. Il malware può inoltre collegarsi a un server per ricevere un programma successivo, aprire temporaneamente un listener TCP o UDP e usare named pipe SMB come client o server. Il supporto alle credenziali fornite dall’operatore permette di connettersi a pipe presenti su altri computer, creando un meccanismo potenziale per il movimento laterale. Nessuno di questi canali possiede un indirizzo incorporato: host, porta, pipe e dati arrivano nel task. Le difese non possono quindi costruire una blocklist permanente partendo dal campione. Una caratteristica meno comune riguarda VMware VMCI, canale interno che consente la comunicazione tra macchina virtuale e host oppure tra guest presenti sullo stesso sistema VMware. Se un indirizzo comincia con il prefisso vm:, alcune istruzioni abbandonano il normale stack IP e utilizzano \\.\VMCI per ottenere la famiglia di indirizzi necessaria. Questo traffico attraversa il livello di virtualizzazione e non compare in una cattura eseguita sulla scheda di rete fisica, rendendo possibile un canale guest-to-host o guest-to-guest invisibile ai normali sensori di rete. La presenza del codice VMCI non dimostra che il campione sia stato distribuito in un ambiente virtualizzato, ma suggerisce che gli sviluppatori abbiano considerato server e workload VMware fra gli scenari operativi. La ricerca di persistenza stealth negli ambienti virtualizzati è diventata centrale anche nelle operazioni che utilizzano Daxin e Stupig per mantenere accesso prima del login nei sistemi compromessi. Sleepwalker implementa inoltre un secondo trigger nascosto nelle query DNS. Il comando viene cifrato con AES-256-CCM, codificato in Base32 e distribuito attraverso le etichette del nome di dominio. Questo canale potrebbe attraversare reti che consentono le richieste DNS ma bloccano traffico in entrata non richiesto. Nel campione analizzato, tuttavia, il bootstrap abilita soltanto il trigger raw tramite opcode 0x87; il listener DNS corrisponde all’opcode 0x88 e non risulta attivo nella configurazione incorporata. Potrebbe essere utilizzato da una build differente o attivato da un task successivo. Anche VMCI, ICMP e named pipe rappresentano capacità presenti nel codice, non prove del loro impiego contro una vittima reale. Il trigger raw iniziale richiede normalmente che il pacchetto raggiunga direttamente un’interfaccia sorvegliata. Firewall perimetrali e NAT possono bloccarlo, indicando che l’operatore potrebbe aver già compromesso un altro sistema nella stessa rete, disporre di una posizione interna oppure prendere di mira un host di frontiera, un gateway o un server VPN attraversato dal traffico. Dopo l’attivazione, i trasporti avviati dall’endpoint verso l’esterno possono invece superare più facilmente queste limitazioni.

Sleepwalker indebolisce SMB ma non possiede un exploit di elevazione

Per rendere accessibili le named pipe senza autenticazione, Sleepwalker modifica due impostazioni sensibili del registro di Windows. Imposta EveryoneIncludesAnonymous a 1, estendendo agli accessi anonimi alcune autorizzazioni concesse al gruppo Everyone, e aggiunge il nome della propria pipe a NullSessionPipes. Le pipe vengono inoltre create con descrittori di sicurezza che concedono l’accesso a Everyone e Anonymous Logon. Queste modifiche permettono a un sistema presente nella rete raggiungibile di contattare il canale SMB senza fornire nome utente e password, aumentando la superficie disponibile per il controllo e il movimento laterale. La backdoor tenta successivamente di ripristinare la configurazione, ma il codice non conserva in modo affidabile lo stato originale. Il malware registra se l’aggiunta a NullSessionPipes è riuscita, non se la voce esistesse già prima dell’infezione; durante la pulizia potrebbe quindi rimuovere un valore legittimo preesistente. Questa debolezza si somma ad altri errori implementativi. Sleepwalker può avviare due volte i worker attraverso percorsi differenti, non gestisce correttamente l’attesa dei thread durante lo scaricamento della DLL e cerca una dpapisvc.dll che non esiste normalmente nei sistemi Windows. Le imperfezioni non eliminano la pericolosità del progetto, ma suggeriscono un prototipo, una versione iniziale oppure un componente dipendente da file esterni non disponibili nell’analisi. Il malware non contiene un exploit per l’elevazione dei privilegi, non aggira User Account Control e non installa autonomamente la DLL nella cartella di ESET. La modifica delle chiavi di registro e la scrittura accanto a ERAAgent.exe richiedono già un contesto amministrativo. Sleepwalker eredita quindi i privilegi del processo ospitante e presuppone una fase precedente dell’intrusione. Anche la persistenza è essenziale: finché la falsa dpapi.dll rimane accanto al binario dell’agente, può essere caricata nuovamente all’avvio del servizio. Non risultano servizi aggiuntivi, driver, attività pianificate o chiavi Run create dal campione. Questo rende il side-loading contemporaneamente il meccanismo di esecuzione, occultamento e persistenza. La catena completa potrebbe includere un dropper, credenziali amministrative compromesse, un exploit iniziale o un altro impianto capace di collocare i file, ma nessuno di questi elementi è presente nel binario esaminato. Le architetture modulari osservate con GoSerpent contro governi e diplomatici mostrano come loader e backdoor possano appartenere a catene più ampie, ma nel caso Sleepwalker non esistono elementi sufficienti per attribuire il codice a un gruppo, una nazione o una campagna conosciuta. L’uso del nome ESET deve quindi essere letto come abuso di un processo fidato e non come prova che il produttore abbia distribuito il malware.

IOC, YARA e hunting comportamentale sono decisivi per la risposta

L’indicatore più preciso disponibile è l’hash SHA-256 d347170752a28e2b8c4b8b9f3cab2e3a6541ba11682c94498d26eb9002779d60. Gli amministratori devono verificare la presenza di una dpapi.dll inattesa nella directory di ERAAgent.exe, controllarne firma Authenticode, dimensione, hash e metadati, e cercare l’eventuale file dpapisvc.dll nello stesso percorso. Devono essere esaminate anche le chiavi EveryoneIncludesAnonymous e NullSessionPipes, confrontando ogni valore con una baseline affidabile: una configurazione permissiva o una voce nella lista non costituisce, da sola, una prova di infezione. Sul piano comportamentale risultano rilevanti l’apertura di raw socket e l’uso della modalità promiscua da parte di ERAAgent.exe, caricamenti di librerie non firmate dalla cartella dell’applicazione, creazione di named pipe accessibili anonimamente, richieste a \\.\VMCI, traffico ICMP con payload insoliti e connessioni TCP o UDP incompatibili con la normale attività dell’agente. La regola YARA pubblicata dal ricercatore combina chiave AES incorporata, nonce della configurazione, sequenza di codice usata per validare il magic packet, riferimento a dpapisvc.dll, proprietà PE ed esportazioni imitate. Questo approccio offre maggiore robustezza rispetto al solo hash, ma una ricompilazione, una chiave differente o una variante progettata per imitare un’altra DLL potrebbero eludere alcune condizioni. È disponibile anche uno scanner PowerShell di sola lettura che cerca i file sospetti, verifica l’hash noto e segnala le configurazioni del registro da esaminare. Un risultato negativo non dimostra l’assenza di compromissione se alcune directory non sono accessibili, se il file è stato modificato o se una variante utilizza percorsi diversi. In presenza di una corrispondenza esatta, l’host deve essere considerato compromesso: isolamento, acquisizione della memoria, conservazione degli eventi e raccolta del traffico devono precedere la rimozione, perché il valore investigativo principale potrebbe trovarsi nei task ricevuti e nei payload eseguiti soltanto in RAM. La semplice cancellazione della DLL rischia di eliminare una prova senza identificare il vettore iniziale, le credenziali sottratte, i sistemi raggiunti lateralmente o gli altri componenti presenti nella rete. L’analisi pubblica riguarda un solo campione, privo di contesto di raccolta, vittime confermate e packet capture. Non è noto se Sleepwalker sia stato realmente distribuito, quanto sia diffuso, quali comandi abbia ricevuto e se esistano versioni successive. Non risultano inoltre indirizzi C2, domini o identificatori dell’operatore utilizzabili per l’attribuzione. Proprio questa assenza rende la minaccia rilevante: Sleepwalker sposta la difesa dalla ricerca dell’infrastruttura ostile alla verifica dell’integrità dei processi fidati, delle librerie caricate e delle configurazioni locali. Una backdoor che non chiama casa può rimanere dormiente per lunghi periodi e attivarsi soltanto quando l’operatore ha già raggiunto la rete bersaglio. Il segnale da cercare non è necessariamente una connessione sospetta, ma un componente legittimo che improvvisamente possiede capacità di sniffing, interpretazione di bytecode ed esecuzione in memoria che non dovrebbe avere.

Iscriviti alla Newsletter

Non perdere le analisi settimanali: Entra nella Matrice Digitale.

Matrice Digitale partecipa al Programma Affiliazione Amazon EU. In qualità di Affiliato Amazon, ricevo un guadagno dagli acquisti idonei. Questo non influenza i prezzi per te.

Torna in alto