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ù
I sistemi Windows offrono un meccanismo nativo per la validazione delle password chiamato password filter: una DLL registrata nel processo di autenticazione che riceve in chiaro ogni nuova credenziale prima che venga salvata nel Security Accounts Manager (SAM). È un meccanismo pensato per enforcement di policy — ma se un attaccante riesce a registrare una propria DLL malevola, ottiene un flusso continuo di credenziali in plaintext ogni volta che un utente cambia password.
La tecnica si colloca in tre tattiche distinte della kill chain. Come Credential Access (TA0006), intercetta password in chiaro direttamente dal Local Security Authority (LSA). Come Persistence (TA0003), la DLL resta registrata attraverso riavvii e sopravvive al cambio di credenziali — ironicamente, ogni reset password alimenta ulteriormente la raccolta. Come Defense Evasion (TA0005), il meccanismo si maschera dietro una funzionalità legittima dell'OS, rendendo la DLL malevola indistinguibile da un filtro di policy autentico senza un'analisi approfondita.
Il perimetro di impatto è critico: su un domain controller, un singolo filtro malevolo cattura le credenziali dell'intero dominio. L'ecosistema di threat documentato include 2 gruppi APT, 1 software dedicato e 1 mitigazione specifica, a conferma di una tecnica di nicchia ma ad altissimo valore operativo per gli avversari.
La catena d'attacco ruota attorno a due operazioni: depositare una DLL in C:\Windows\System32 e registrarla nella chiave di registry che LSA consulta al boot. Serve privilegi di amministratore locale — o, nel caso di un domain controller, Domain Admin.
Sviluppo del filtro malevolo. Il modo più istruttivo per comprendere la tecnica è scrivere un filtro password minimale. La DLL deve esportare tre funzioni: InitializeChangeNotify, PasswordChangeNotify e PasswordFilter. La terza riceve username e password in chiaro. In laboratorio, una DLL che scrive le credenziali su file è sufficiente per dimostrare l'impatto. Il repository PSBits di Grzegorz Tworek su GitHub (open source) contiene un esempio funzionante di password filter DLL pensato per scopi educativi.
Per la compilazione in ambiente lab si può usare Visual Studio Build Tools (gratuito) o MinGW-w64 (open source). La DLL risultante va copiata nella directory di sistema:
*copy PasswordFilterDLL.dll C:\Windows\System32*
Poi si registra il filtro aggiungendo il nome della DLL (senza estensione) alla chiave registry:
reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v "Notification Packages"
Questo comando mostra i filtri attualmente registrati. Per aggiungere il proprio:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v "Notification Packages" /t REG_MULTI_SZ /d "scecli\0PasswordFilterDLL" /f
Il valore scecli è il filtro Microsoft predefinito — va preservato, altrimenti la policy password nativa smette di funzionare. Dopo il riavvio della macchina, LSA carica la nuova DLL e ogni cambio password transita in chiaro attraverso PasswordFilter.
Mimikatz (open source) offre un modulo alternativo tramite il comando misc::memssp che inietta un password filter direttamente in memoria senza toccare il disco — approccio più evasivo ma non persistente al riavvio.
Per validare la riuscita, forzate un cambio password su un account di test:
net user testuser NewP@ssw0rd123
Poi verificate che il file di output della DLL contenga la credenziale catturata. In ambiente domain controller, ripetete il test con un account di dominio per confermare la cattura cross-domain.
Attenzione in laboratorio: un filtro che restituisce FALSE dalla funzione PasswordFilter blocca tutti i cambi password. Testate sempre in un ambiente isolato e assicuratevi che la DLL restituisca TRUE.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo