AppCert DLLs: Abuso della chiave AppCertDLLs (T1546.009)

La tecnica T1546.009 sfrutta un meccanismo legittimo di Windows: la chiave di registro HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDLLs, il cui contenuto viene caricato automaticamente in ogni processo che invoca API di creazione processo come CreateProcess, CreateProcessAsUser, CreateProcessWithLoginW, CreateProcessWithTokenW o WinExec. Un attaccante che riesce a scrivere in quella chiave ottiene un vettore doppio: persistenza (TA0003), perché la DLL malevola viene ricaricata a ogni nuova creazione di processo, e privilege escalation (TA0004), perché la DLL eredita il contesto di sicurezza — spesso privilegiato — del processo ospitante.

Dal punto di vista della kill chain, la tecnica si colloca dopo un initial access e una prima esecuzione con diritti amministrativi (la scrittura sotto Session Manager richiede privilegi elevati). Da lì diventa un moltiplicatore silenzioso: ogni servizio, ogni scheduled task, ogni binario di amministrazione che parte carica il payload, garantendo esecuzione continua senza necessità di scheduled task visibili o servizi dedicati.

L'impatto operativo è significativo perché la tecnica è process-agnostic: colpisce indiscriminatamente qualunque processo user-mode. Il malware PUNCHBUGGY (S0196) è documentato come utilizzatore di questo vettore. La superficie di detection è però ristretta e ben definita: una singola chiave di registro e un pattern di caricamento DLL anomalo, elementi che rendono la tecnica relativamente semplice da individuare con la telemetria giusta.

In un esercizio red team, la simulazione di T1546.009 richiede sessione con privilegi amministrativi locali (SYSTEM o Administrators). L'operazione base consiste nel piazzare una DLL controllata in un percorso leggibile da tutti i processi (tipicamente *C:\Windows\System32* o una directory dedicata) e registrarne il path nella chiave.

Il comando PowerShell per la scrittura, in ambiente lab, è:

New-Item -Path "HKLM:\System\CurrentControlSet\Control\Session Manager\AppCertDLLs" -Force

New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Session Manager\AppCertDLLs" -Name "Test" -Value "C:\lab\payload.dll" -PropertyType String

In alternativa con reg.exe: reg add "HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDLLs" /v Test /t REG_SZ /d C:\lab\payload.dll

La DLL deve esportare DllMain con gestione minima di DLL_PROCESS_ATTACH, evitando codice bloccante o chiamate a LoadLibrary nella entry point (rischio di deadlock che rende instabile l'intero sistema — in laboratorio significa boot loop). Un template sicuro per esercitazioni è disponibile nei sample MSDN e nei progetti open source come PersistenceSniper (open source) usati per validare la persistenza, non per generarla.

Per generare il payload in fase di sviluppo si può usare MinGW-w64 (open source) o Visual Studio Community (gratuito) compilando con x86_64-w64-mingw32-gcc -shared -o payload.dll payload.c. Ricorda che la DLL viene caricata solo da processi che invocano le API elencate: un semplice notepad.exe lanciato dopo la modifica attiverà il caricamento, utile per validazione immediata.

Per la fase di validazione end-to-end, Atomic Red Team (open source) include il test T1546.009 con payload benigno che scrive una entry di log al caricamento — approccio consigliato perché evita falsi allarmi distruttivi e permette al blue team di misurare tempo di detection.

Per verificare il caricamento effettivo, Process Explorer (gratuito, Sysinternals) mostra le DLL caricate per processo tramite View → Lower Pane View → DLLs. In alternativa ListDLLs (gratuito) da riga di comando: listdlls.exe -v notepad.exe elenca ogni DLL con path e versione.

Regola di igiene lab: al termine del test rimuovere sempre la entry con Remove-ItemProperty e riavviare, per evitare che snapshot o cloni della VM propaghino la persistenza in ambienti non previsti. Documenta ogni modifica in un runbook condiviso con il blue team a fine esercizio.

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

Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo

TEST GRATUITO
2 minuti · 7 domande Che professionista cyber sei? Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.