Network Provider DLL Malevole: Network Provider DLL (T1556.008)
La tecnica T1556.008 sfrutta un meccanismo legittimo dell'architettura di autenticazione Windows: le Network Provider DLL, librerie che consentono al sistema operativo di dialogare con protocolli di rete diversi e, opzionalmente, di gestire credenziali per conto di componenti terze parti.
Durante il logon interattivo, Winlogon invia le credenziali dell'utente al processo mpnotify.exe tramite RPC. Quest'ultimo, nella sua funzione di notificatore, propaga le credenziali in chiaro a tutti i credential manager registrati invocando la funzione esportata NPLogonNotify(). Un attaccante che riesca a registrare una DLL malevola come network provider ottiene quindi un canale privilegiato per intercettare username e password ad ogni logon, senza dover ricorrere a tecniche più rumorose come il dumping di LSASS.
La tecnica attraversa tre tattiche MITRE: TA0003 (Persistence) perché la registrazione sopravvive ai riavvii, TA0005 (Defense Evasion) grazie all'uso di un meccanismo firmato e legittimo del kernel di autenticazione, e TA0006 (Credential Access) come obiettivo finale. Il target preferenziale sono domain controller e server con alta densità di logon amministrativi, dove una singola DLL può raccogliere decine di credenziali privilegiate al giorno. La mitigazione nativa (EnableMPRNotifications) è disponibile solo da Windows 11 22H2 in poi, lasciando gran parte del parco server esposto al problema.
L'implementazione lab-safe della tecnica richiede tre passaggi: sviluppo della DLL che esporta NPLogonNotify(), NPGetCaps() e altre funzioni previste dall'interfaccia Network Provider, deposito del file in una directory di sistema, e registrazione nel registro come nuovo provider.
La DLL deve esportare almeno NPGetCaps (che restituisce le capability supportate) e NPLogonNotify, la funzione chiamata da mpnotify.exe con i parametri lpAuthentInfo contenenti dominio, username e password in chiaro. Un esempio didattico è disponibile nel progetto NPPSpy di Grzegorz Tworek (open source), che rappresenta il PoC pubblico di riferimento per questa tecnica ed è integrato in framework come Mimikatz (open source) sotto il modulo misc::nppspy.
La registrazione richiede due modifiche di registro. Prima si crea la chiave del servizio:
reg add "HKLM\SYSTEM\CurrentControlSet\Services\MyProvider\NetworkProvider" /v ProviderPath /t REG_EXPAND_SZ /d "%SystemRoot%\System32\myprovider.dll"
reg add "HKLM\SYSTEM\CurrentControlSet\Services\MyProvider\NetworkProvider" /v Name /t REG_SZ /d "MyProvider"
Poi si aggiunge il provider all'ordine di caricamento:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" /v ProviderOrder
reg add "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" /v ProviderOrder /t REG_SZ /d "RDPNP,LanmanWorkstation,webclient,MyProvider" /f
Dopo un riavvio o un semplice logoff/logon, mpnotify.exe caricherà la DLL e le passerà le credenziali di ogni utente che accede alla macchina. In un red team engagement, l'operatore tipicamente scrive le credenziali intercettate in un file locale offuscato o le esfiltra via canale C2 esistente.
Per la simulazione in laboratorio è consigliabile usare una VM isolata Windows Server 2019/2022 con Sysmon (gratuito, Microsoft) configurato con il ruleset di SwiftOnSecurity (open source) per osservare la telemetria generata. La sequenza tipica di un esercizio prevede: baseline dell'attività registro, deploy della DLL con privilegi SYSTEM (richiede compromissione preventiva o abuse di servizio SYSTEM), forced logon con account di test, verifica della cattura. Atomic Red Team (open source) include il test T1556.008 con script PowerShell pronti per validare la detection senza sviluppare la DLL da zero.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo