Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Aprile! Scopri di più
La tecnica AppInit DLLs sfrutta un meccanismo legacy di Windows per iniettare una DLL malevola in ogni processo che carica user32.dll — e questo, in pratica, significa quasi ogni applicazione con interfaccia grafica del sistema operativo. Il trucco è elegante nella sua semplicità: l'attaccante scrive il percorso della propria DLL nella chiave di registro AppInit_DLLs sotto HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows (o nell'equivalente WoW6432Node per processi a 32 bit), e da quel momento in poi il sistema operativo si occupa del caricamento automatico.
Questa tecnica si colloca a cavallo di due tattiche fondamentali della kill chain. In ottica Persistence (TA0003), garantisce che la DLL venga ricaricata ad ogni avvio di processo — sopravvivendo a riavvii e logout senza richiedere ulteriori interazioni. In ottica Privilege Escalation (TA0004), la DLL viene eseguita nel contesto di sicurezza del processo ospite: se quel processo gira come SYSTEM o come amministratore locale, il codice malevolo eredita quei privilegi.
Un elemento cruciale: a partire da Windows 8, con Secure Boot abilitato, la funzionalità AppInit DLLs è disabilitata a livello kernel. Questo riduce drasticamente la superficie d'attacco sugli ambienti moderni, ma non la elimina del tutto — i sistemi legacy, le VM senza Secure Boot e le configurazioni UEFI alterate restano vulnerabili. I dati mostrano 1 gruppo APT, 3 famiglie malware e 2 mitigazioni associati a questa tecnica.
Per simulare questa tecnica in ambiente lab è sufficiente un sistema Windows 7 o un Windows 10 con Secure Boot disabilitato. L'obiettivo dell'esercizio è dimostrare come una singola modifica al registro possa trasformare ogni processo GUI in un vettore di esecuzione. Ti servono privilegi amministrativi locali — senza quelli, la chiave HKLM non è scrivibile.
Inizia preparando una DLL di test. Con msfvenom (open source, parte di Metasploit Framework) puoi generare un payload che si limiti a scrivere un marker su disco, senza comportamento distruttivo:
msfvenom -p windows/exec CMD="cmd.exe /c echo APPINIT_TEST > C:\Windows\Temp\appinit_proof.txt" -f dll -o C:\test\appinit_test.dll
In un contesto più controllato, puoi compilare una DLL minima in C che scrive un log in DLL_PROCESS_ATTACH. L'importante è che la DLL non faccia crashare i processi ospite — un errore frequente nei lab è generare payload che terminano il processo, causando instabilità a cascata.
Per impostare la persistenza, usa questi due comandi da un prompt amministrativo:
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "C:\test\appinit_test.dll" /f
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /f
Il primo comando registra il percorso della DLL, il secondo attiva il meccanismo di caricamento. Da questo momento, apri un qualunque programma che importa user32.dll — Notepad, Calculator, Explorer — e la tua DLL verrà caricata nel suo spazio di indirizzamento.
Per verificare l'avvenuto caricamento, Process Explorer (gratuito, Sysinternals) è lo strumento ideale: apri il processo target, vai alla vista DLL e cerca la tua libreria nella lista. In alternativa, con PowerShell:
Get-Process | ForEach-Object { $.Modules } | Where-Object { $.FileName -like "appinit_test" }
Per l'equivalente WoW6432Node (processi a 32 bit su OS a 64 bit), ripeti la stessa operazione sulla chiave:
reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "C:\test\appinit_test.dll" /f
Al termine del test, rimuovi le chiavi e riavvia. Il framework Atomic Red Team (open source) include un test atomico per T1546.010 che automatizza setup e cleanup — usalo se vuoi integrare la simulazione in una pipeline di validazione continua.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo