Obfuscation del codice malevolo

Indice dei contenuti

    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.

    Ultimo aggiornamento: