Environmental Keying: Environmental Keying (T1480.001)
L'Environmental Keying è una sotto-tecnica di evasione difensiva in cui l'attaccante lega l'esecuzione di un payload a valori crittografici derivati da caratteristiche specifiche dell'ambiente bersaglio. È un'implementazione degli Execution Guardrails che usa la crittografia: la chiave di decifratura viene calcolata a partire da elementi come il numero di serie del volume, il nome host, il dominio Active Directory joinato, condivisioni di rete, versioni software, orario di sistema o indirizzi IP locali ed esterni.
Collocata nella tattica TA0005 (Stealth), questa tecnica non altera i controlli di sicurezza ma rende il campione inerte fuori dal contesto previsto. Se il valore atteso non corrisponde, la decifratura fallisce e il codice malevolo resta illeggibile. Ciò distingue l'Environmental Keying dalla semplice evasione sandbox: qui non si cerca l'assenza di indicatori di virtualizzazione, ma la presenza di un valore-target che deve coincidere per procedere.
L'impatto operativo è significativo: sandbox detection, analisi antivirus, crowdsourcing di IOC e reverse engineering diventano estremamente difficili, perché l'analista non dispone dei valori ambientali per ricostruire la chiave. Questo rallenta l'incident response e protegge le TTP dell'attaccante, evitando l'esposizione delle capacità in ambienti non destinati alla compromissione. I dati raccolti indicano 2 gruppi, 8 software e 1 mitigazione associati alla tecnica, a conferma di un uso maturo tra attori sofisticati.
Dal punto di vista offensivo, l'Environmental Keying serve a costruire payload che si attivano solo sul bersaglio corretto. Il pattern tipico prevede una fase di discovery ambientale, la derivazione di una chiave dai valori raccolti e la decifratura del secondo stadio.
Su Windows il valore più sfruttato è il numero di serie del volume, come fanno PowerPunch (chiave XOR) e Ninja (chiave dinamica dal serial del disco per un payload cifrato nel Registry). Puoi enumerare il valore con:
vol C:
oppure via WMI con wmic path Win32_LogicalDisk get VolumeSerialNumber. Altri elementi utili sono il nome host (hostname), l'utente e il dominio (whoami /fqdn, systeminfo) e il tick count di sistema. PUBLOAD combina volume serial, computer name, username e machine tick count; TONESHELL usa il nome del computer più valori di configurazione e genera GUID per identificare la vittima.
Un approccio robusto è la DPAPI: InvisiMole e APT41 cifrano componenti con chiavi legate all'utente e alla macchina, così il payload si decifra solo su quel sistema. In un lab puoi replicare la logica con le API CryptProtectData/CryptUnprotectData (native Windows) senza portare chiavi con te.
Per derivazioni personalizzate, in laboratorio è utile combinare valori host con un KDF: openssl (open source) permette di generare chiavi da un seed ambientale, ad esempio dando in pasto il serial del volume come materiale segreto. Il dropper di Winnti for Windows mostra una variante minimalista: verifica la presenza di uno specifico parametro da riga di comando e lo usa come chiave di decifratura, terminando se assente.
Su Linux i valori si raccolgono con uname -a, hostname, id, ip addr e ispezione di cat /etc/machine-id o mount point specifici. Su macOS si usano system_profiler SPHardwareDataType per il serial number, sw_vers e scutil --get ComputerName. La logica di keying resta identica: nessun valore corretto, nessuna decifratura.
Per sviluppo e test controllati sono adatti framework di emulazione come Atomic Red Team (open source) per orchestrare le sequenze di discovery, e CyberChef (open source) per prototipare rapidamente le trasformazioni di derivazione chiave. Ricorda l'osservazione di ROKRAT, che decifra stringhe importanti solo su un hostname specifico, e di Pikabot, che interrompe l'esecuzione se la lingua del sistema rientra in un elenco (georgiano, kazako, russo, ucraino e altri): keying "al contrario" ma dello stesso spirito.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo