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ù
Quando un avversario ottiene accesso a un sistema Windows, una delle prime mosse è garantirsi la sopravvivenza al riavvio. La tecnica Logon Script (Windows) sfrutta un meccanismo nativo del sistema operativo: la chiave di registro HKCU\Environment\UserInitMprLogonScript, che consente di specificare uno script eseguito automaticamente ogni volta che l'utente associato effettua il login.
Questa tecnica si colloca in due tattiche della kill chain. La prima è Persistence (TA0003), perché lo script viene rieseguito a ogni accesso, garantendo al malware un punto di rientro stabile anche dopo un reboot. La seconda è Privilege Escalation (TA0004), poiché se l'utente compromesso dispone di privilegi elevati — o se l'attaccante riesce a scrivere la chiave nel profilo di un amministratore — lo script viene eseguito nel contesto di sicurezza di quell'utente, ereditandone i permessi.
Il meccanismo è insidioso per la sua semplicità: basta un singolo valore nel registro, nessuna DLL da iniettare, nessun servizio da creare. Questo spiega perché 2 gruppi APT documentati e 4 famiglie malware note abbiano adottato esattamente questa chiave di registro. La mitigazione principale ruota attorno alla restrizione dei permessi sul registro stesso, ma la detection richiede un monitoraggio attento sia delle modifiche alla chiave sia dell'esecuzione degli script nel contesto post-autenticazione.
Il bello di questa tecnica è che la si può riprodurre in laboratorio con un solo comando. Non servono framework complessi: basta l'accesso a un prompt con i permessi dell'utente target.
Il metodo più diretto utilizza reg.exe, il tool nativo di Windows per la manipolazione del registro. Per inserire un logon script che punti a un payload, il comando è:
reg add "HKCU\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Users\Public\payload.bat" /f
Il flag /f forza la scrittura senza richiedere conferma, utile per l'automazione in scenari red team. A questo punto, ogni login dell'utente corrente eseguirà payload.bat. In un esercizio realistico, quel batch potrebbe contenere una reverse shell o un loader che scarica il secondo stadio, esattamente come documentato per Cobalt Group, che registrava il file name del next-stage malware sotto questa chiave.
In alternativa, PowerShell offre lo stesso risultato con maggiore flessibilità:
Set-ItemProperty -Path "HKCU:\Environment" -Name "UserInitMprLogonScript" -Value "C:\Users\Public\payload.bat"
Per simulare un attacco più sofisticato — sulla scia di quanto osservato con APT28, che utilizzava un loader Trojan per scrivere la chiave — si può creare un dropper in PowerShell che prima deposita il payload, poi imposta la persistenza e infine pulisce le tracce della console:
$payloadPath = "C:\Users\Public\update.bat" Set-Content -Path $payloadPath -Value 'powershell -ep bypass -w hidden -f C:\Users\Public\stager.ps1' Set-ItemProperty -Path "HKCU:\Environment" -Name "UserInitMprLogonScript" -Value $payloadPath Clear-History
Per la validazione, si può usare Atomic Red Team (open source), che include un test atomico specifico per T1037.001. Il comando di esecuzione tramite il modulo PowerShell Invoke-AtomicRedTeam è:
Invoke-AtomicTest T1037.001
Questo imposta la chiave, simula il logon e poi offre la procedura di cleanup con Invoke-AtomicTest T1037.001 -Cleanup. È il modo più rapido per verificare che i controlli difensivi siano in grado di intercettare la modifica.
Al termine di ogni test, la verifica che la chiave sia stata correttamente rimossa è fondamentale:
reg query "HKCU\Environment" /v UserInitMprLogonScript
Se il comando restituisce un errore "impossibile trovare la chiave", il cleanup è andato a buon fine.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo