I log dei blocchi di script di PowerShell si trovano in Registri delle Applicazioni e Servizi → Microsoft → Windows → PowerShell → Operational, come evento 4104. Sono completi solo se la registrazione dei blocchi di script è attivata. Per esportarli:
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logspowershell.evtx
PowerShell 7 è un prodotto separato con un canale separato, PowerShellCore/Operational, e una propria impostazione di criterio.
Se un attaccante ha avuto accesso a un computer Windows, è probabile che PowerShell fosse coinvolto. La registrazione dei blocchi di script registra il codice effettivamente eseguito, spesso dopo che sono stati rimossi i livelli di offuscamento. Prime Core ha 663 regole di rilevamento per i log di PowerShell, mappate a 417 tecniche MITRE ATT&CK. Coprono l’uso dannoso di PowerShell (T1059.001), l’offuscamento (T1027) e i supporti di download che scaricano strumenti (T1105).
Prima di iniziare
La registrazione dei blocchi di script è attiva?
reg query "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging"
EnableScriptBlockLogging impostato su 0x1 significa sì. Se la chiave non esiste, è disattivata. Anche in quel caso, Windows PowerShell 5.1 registra ancora i blocchi di script che considera sospetti, come eventi 4104 a livello di Avviso. Quindi potresti trovare alcuni eventi. Basta non scambiarli per il quadro completo.
Attivarla aiuta da ora in avanti, non per ciò che è già successo. Utilizzare l’impostazione dei criteri di gruppo Modelli Amministrativi → Componenti di Windows → Windows PowerShell → Attiva la registrazione dei blocchi di script di PowerShell, o impostare direttamente il valore del registro:
reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
PowerShell 7 legge la propria chiave di criterio sotto HKLMSOFTWAREPoliciesMicrosoftPowerShellCore. Se è stato installato da un zip anziché dall’MSI, il suo canale eventi potrebbe non essere registrato finché non esegui RegisterManifest.ps1 da $PSHOME.
Aspettati volume. Ogni script e modulo che viene eseguito finisce nel registro. Aumenta la dimensione massima del canale, altrimenti manterrai solo poche ore.
Aspettati segreti. Gli script amministrativi a volte trasportano password e chiavi API in chiaro, e la registrazione dei blocchi di script li registra fedelmente. Tienilo a mente prima che questo file vada in qualsiasi posto, e leggi la sezione LogTotal qui sotto.
Esporta i log
In Event Viewer, fai clic con il tasto destro su Operational sotto PowerShell e scegli Salva Tutti gli Eventi Come… Dalla riga di comando:
:: solo blocchi di script
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logsps_4104.evtx /q:"*[System[(EventID=4104)]]"
:: PowerShell 7
wevtutil epl "PowerShellCore/Operational" C:logspwsh.evtx
:: il classico registro "Windows PowerShell": eventi di avvio motore con la riga di comando dell'host
wevtutil epl "Windows PowerShell" C:logswindows_powershell.evtx
Quest’ultimo è facile da dimenticare, e vale la pena prenderlo. L’evento 400 registra ogni avvio del motore, inclusa la versione del motore. Una EngineVersion di 2.0 su un sistema moderno di solito significa che qualcuno ha deliberatamente fatto un downgrade per aggirare la registrazione dei blocchi di script.
Carica e rivedi con LogTotal
LogTotal legge nativamente gli EVTX. Una cosa da sapere prima: LogTotal non sanifica ancora i file EVTX. Con i log di PowerShell, importa più del solito, a causa dei segreti menzionati sopra. Usa upload di EVTX liberamente per macchine di test. Per host di produzione, ottieni un sì da chi gestisce i dati prima.
- Carica. Apri logtotal.com e inserisci il file.
- Revisiona.
Quando va male
| Sintomo | Causa probabile | Fix |
|---|---|---|
| Nessun evento 4104 | La registrazione dei blocchi di script è disattivata, e nulla sembrava sospetto | Attivala per il futuro; controlla il registro di Windows PowerShell per ciò che puoi ancora ottenere |
| Solo pochi eventi 4104, tutti Avviso | La registrazione è disattivata; stai vedendo la registrazione automatica dei blocchi sospetti | Come sopra |
| PowerShellCore/Operational non trovato | PowerShell 7 non è installato, o il suo manifesto non è registrato | Esegui RegisterManifest.ps1 da $PSHOME |
| Il testo 4104 è crittografia illeggibile | La Registrazione degli Eventi Protetti è attiva | Hai bisogno del certificato di decrittazione |
| Il log copre solo poche ore | Dimensione predefinita, alto volume | Aumenta la dimensione massima del canale |
FAQ
La registrazione dei blocchi di script cattura il codice offuscato?
In gran parte, sì. Registra i blocchi di script come vengono compilati. Quando il codice offuscato costruisce ed esegue la fase successiva, quella fase viene registrata come un suo blocco, spesso in forma leggibile.
Qual è la differenza rispetto alla trascrizione?
La trascrizione scrive file di testo di input e output della sessione in una cartella. La registrazione dei blocchi di script registra il codice stesso nel registro eventi. Si completano a vicenda, e vale la pena avere entrambi.