L’obfuscation (offuscamento) è l’insieme delle tecniche che trasformano codice o dati in una forma difficile da analizzare e comprendere, senza alterarne il comportamento a runtime. In sicurezza offensiva è usata per eludere il rilevamento da parte di antivirus, sistemi EDR, sandbox automatizzate e analisti di malware. Il principio è semplice: i sistemi di rilevamento basati su firma confrontano il codice con pattern noti — modificare la rappresentazione del codice, pur mantenendone la funzionalità, invalida le firme esistenti.
Tecniche di obfuscation su payload binari
Packing: il payload originale viene compresso o cifrato e avvolto in un loader che lo decomprime/decifra in memoria a runtime prima di eseguirlo. L’antivirus vede solo il loader — il payload reale è cifrato su disco. UPX è il packer legittimo più abusato; i gruppi APT sviluppano packer custom per evitare le firme dei packer noti.
Encoding/Encryption: il payload viene codificato (XOR, Base64, RC4, AES) e decodificato da uno stub a runtime. La chiave di decifratura può essere hardcodata, derivata da caratteristiche del sistema target (environmental keying) — se eseguito su una macchina diversa (es. una sandbox), il payload non si decifra e non rivela il suo comportamento reale.
Polymorphism: il codice si modifica automaticamente a ogni esecuzione o propagazione, cambiando istruzioni equivalenti, riordinando blocchi, inserendo istruzioni NOP — ma mantenendo la stessa funzionalità. Le firme basate su sequenze di byte diventano inefficaci. I virus polimorfici usano un motore di mutazione (mutation engine) che riscrive il codice a ogni generazione.
Metamorphism: forma avanzata di polimorfismo in cui l’intero codice viene riscritto semanticamente (non solo i byte) a ogni generazione, usando tecniche come sostituzione di istruzioni equivalenti, riordino di blocchi indipendenti, inserimento di codice spazzatura.
Obfuscation di script
Negli attacchi che usano PowerShell, JavaScript o VBScript, l’obfuscation è particolarmente diffusa perché i motori di scripting interpretano il codice a runtime, permettendo costruzioni molto creative:
PowerShell: concatenazione di stringhe, inversione (-join), encoding Base64 (-EncodedCommand), sostituzione di caratteri, alias dei cmdlet, tick escaping (Invoke-Expression), variabili d’ambiente come fonte di caratteri.
String concatenation: "po"+"wer"+"shell" è identico a "powershell" per l’interprete ma diverso per una firma statica.
Invoke-Obfuscation è uno strumento open source che automatizza l’obfuscation di script PowerShell in modo sistematico — paradossalmente ha generato anche una firma per l’output di Invoke-Obfuscation stesso.
Evasione della sandbox
Le sandbox automatizzate eseguono il campione in un ambiente controllato e osservano il comportamento. Le tecniche di sandbox evasion cercano di rilevare l’ambiente di analisi per non rivelare il comportamento reale:
- Time checks: controllare se il sistema è stato avviato da poco (le sandbox spesso hanno uptime bassi). Dormire a lungo prima di agire.
- User interaction checks: verificare la presenza di movimenti del mouse, finestre attive, applicazioni installate — le sandbox sono spesso ambienti minimi senza interazione umana.
- VM/sandbox detection: cercare artefatti delle VM comuni (VMware Tools, VirtualBox Guest Additions, nomi di processi specifici, chiavi di registro di Hyper-V).
- Environmental keying: cifrare il payload con una chiave derivata da un attributo specifico del target (hostname, dominio AD, username) — funziona solo sulla macchina bersaglio.
Rilevamento dell’obfuscation
Entropia: il codice offuscato/cifrato ha entropia di Shannon molto più alta del codice normale. Sezioni PE con entropia > 7.0 sono un forte indicatore di packing o cifratura.
AMSI e script block logging: Windows AMSI deobfusca il contenuto degli script prima di passarli all’interprete. Il logging del script block (post-deobfuscation) registra il codice reale, indipendentemente dall’obfuscation applicata.
Analisi comportamentale: indipendentemente dall’obfuscation, il comportamento a runtime (connessioni di rete, accesso a file, creazione di processi) è osservabile e correla con pattern di attacco noti.