Codice Spazzatura nei Malware: Junk Code Insertion (T1027.016)

L'inserimento di codice spazzatura — noto come junk code o dead code — è una tecnica di offuscamento in cui l'avversario inietta nel binario malevolo istruzioni che non alterano la logica funzionale del programma. Il risultato è un eseguibile più grande, più rumoroso e più difficile da analizzare, sia per un reverse engineer sia per gli strumenti di analisi statica automatizzata.

La tecnica si colloca nella tattica Defense Evasion (TA0005), la fase della kill chain in cui l'attaccante cerca di sfuggire ai meccanismi di detection. L'esempio classico sono le istruzioni NOP (opcode 0x90 nell'architettura x86), che il disassemblatore mostra fedelmente costringendo l'analista a scorrerle una per una. Ma il panorama è ben più ampio: funzioni matematiche ridondanti, chiamate API fittizie, cicli infiniti che non raggiungono mai il codice reale, stringhe casuali usate come padding.

È importante distinguere questa tecnica dal Binary Padding (T1027.001): quest'ultimo modifica la firma del file aggiungendo byte in coda, mentre la junk code insertion mira specificamente a confondere la comprensione del flusso logico. Con 5 gruppi APT, 14 famiglie malware e 1 mitigazione documentati, si tratta di una pratica pervasiva che attraversa famiglie criminali finanziarie, gruppi state-sponsored e ransomware operator. La sua efficacia è proporzionale alla complessità: più il codice spazzatura assomiglia a codice legittimo, più tempo richiede l'analisi.


Simulare l'inserimento di junk code in laboratorio è essenziale per validare le capacità di detection del Blue Team. L'obiettivo non è creare malware, ma produrre binari che attivino — o, meglio ancora, non attivino — le regole di rilevamento, verificandone la robustezza.

Il punto di partenza più diretto è lavorare su assembly x86. Con NASM (open source), puoi compilare un sorgente in cui il payload reale è sepolto tra blocchi di NOP e istruzioni irrilevanti. Un semplice file .asm con centinaia di nop prima della syscall write produce un ELF che qualsiasi analista dovrebbe riconoscere, ma che molti tool statici ignoreranno. Compila con:

nasm -f elf64 junktest.asm -o junktest.o && ld junktest.o -o junktest

Per scenari più realistici in ambiente Windows, puoi usare msfvenom (open source, parte di Metasploit Framework) per generare shellcode e poi wrapparlo manualmente in un loader C che include funzioni vuote, chiamate API Windows dummy (come GetTickCount o IsDebuggerPresent senza utilizzarne il risultato) e variabili mai referenziate. Questo replica esattamente il pattern usato da Goopy, dove API legittime vengono intercalate tra le istruzioni reali per confondere il disassemblatore.

Per replicare il pattern di StrelaStealer — che inserisce funzioni matematiche eccessive — scrivi un loader in C/C++ che esegue calcoli trigonometrici in loop prima di decifrare il payload. Visual Studio compilerà queste funzioni come codice legittimo, aumentando l'entropia del binario senza modificare il flusso operativo.

Sul versante .NET, che rispecchia l'approccio di Gamaredon Group, lo strumento ConfuserEx (open source) consente di iniettare dead code in assembly .NET già compilati. Il modulo "Invalid Metadata" e il modulo "Control Flow" producono esattamente il tipo di offuscamento descritto nei dati di threat intelligence.

Per validare l'effetto del padding, analizza i tuoi campioni con Detect It Easy (open source): confronta l'entropia sezione per sezione tra il binario originale e quello offuscato. L'aumento di entropia nella sezione .text è l'indicatore che il Blue Team dovrebbe catturare. In alternativa, pe-bear (open source) offre una vista grafica delle sezioni PE che rende immediatamente visibili i blocchi di padding.

Un test efficace prevede di generare tre varianti dello stesso payload — senza junk code, con NOP padding, con dummy API call — e sottoporle tutte e tre al motore AV dell'ambiente di test. La differenza nei tassi di detection misura direttamente l'efficacia dell'offuscamento.


Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo