AppInit DLL: Event Triggered Execution - AppInit DLLs (T1546.010)
Le AppInit DLL rappresentano un meccanismo di Windows che permette il caricamento automatico di librerie dinamiche in quasi tutti i processi del sistema. Questa funzionalità sfrutta le chiavi di registro AppInit_DLLs per specificare DLL che vengono caricate automaticamente da user32.dll, una libreria presente in praticamente ogni applicazione Windows.
L'abuso di questo meccanismo consente agli attaccanti di ottenere due obiettivi critici nella kill chain. Prima di tutto, garantisce la persistenza (TA0003), mantenendo l'accesso al sistema anche dopo riavvii o modifiche delle credenziali. In secondo luogo, permette il privilege escalation (TA0004), eseguendo codice malevolo nel contesto di processi con privilegi elevati.
Va notato che Windows 8 e versioni successive hanno introdotto una protezione importante: quando il secure boot è abilitato, la funzionalità AppInit viene automaticamente disabilitata. Nonostante questa mitigazione, 1 gruppo APT documentato e 3 famiglie di malware continuano a sfruttare questa tecnica sui sistemi vulnerabili.
Per comprendere come gli attaccanti sfruttano questa tecnica, iniziamo con l'analisi delle chiavi di registro critiche. Il meccanismo ruota attorno a due percorsi principali nel registro di Windows:
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs
reg query "HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs
La seconda chiave è particolarmente importante per i sistemi a 64 bit, dove gestisce le DLL per i processi a 32 bit. Per abilitare effettivamente il caricamento delle DLL specificate, è necessario impostare anche il valore LoadAppInit_DLLs a 1.
Vediamo come il malware T9000 implementa questa tecnica. Dopo aver verificato che la vittima soddisfi determinati criteri, crea la DLL malevola ResN32.dll nella cartella %APPDATA%\Intel\ e poi modifica il registro:
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d "%APPDATA%\Intel\ResN32.dll" /f
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /f
Un approccio simile è utilizzato da Cherry Picker, che posiziona la sua DLL pserver32.dll direttamente nel percorso di sistema. Per testare in laboratorio, puoi creare una DLL di test che logga semplicemente i processi in cui viene caricata:
msfvenom -p windows/x64/exec CMD=calc.exe -f dll > test.dll
*copy test.dll C:\Windows\System32*
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d "test.dll" /f
Il malware Ramsay dimostra una variante più sofisticata, utilizzando questa tecnica per l'injection in processi specifici. Prima enumera i processi target, poi sfrutta AppInit per garantire che la sua DLL venga caricata automaticamente quando questi processi vengono avviati.
Per verificare quali processi stanno caricando le AppInit DLL, puoi utilizzare Process Monitor con questi filtri: Operation is "Process and Thread Activity", Path contains "user32.dll". Questo ti mostrerà in tempo reale quali processi stanno importando user32.dll e quindi caricando le tue DLL di test.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo