I log dei blocchi script di PowerShell risiedono in Registri Applicazioni e Servizi → Microsoft → Windows → PowerShell → Operativo, come evento 4104. Sono completi solo se la registrazione dei blocchi 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 la sua propria impostazione di policy.
Se un attaccante ha toccato una macchina Windows, è probabile che PowerShell sia stato coinvolto. La registrazione dei blocchi script registra il codice che è realmente stato eseguito, spesso dopo che i livelli di offuscamento sono stati rimossi. Prime Core ha 663 regole di rilevamento per i log di PowerShell, mappate a 417 tecniche di MITRE ATT&CK. Coprono l’uso malevolo di PowerShell (T1059.001), l’offuscamento (T1027) e i cradle di download che scaricano strumenti (T1105).
Prima di iniziare
La registrazione dei blocchi 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 script che considera sospetti, come eventi 4104 a livello di Avviso. Quindi potresti trovare alcuni eventi. Basta non scambiarli per il quadro completo.
Attivarlo aiuta da ora in poi, non per ciò che è già accaduto. Usa l’impostazione di Criteri di Gruppo Modelli Amministrativi → Componenti di Windows → Windows PowerShell → Attiva la registrazione dei blocchi script di PowerShell, oppure imposta direttamente il valore di registro:
reg add “HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging” /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
PowerShell 7 legge la propria chiave di policy sotto HKLMSOFTWAREPoliciesMicrosoftPowerShellCore. Se è stato installato da uno zip piuttosto che dall’MSI, il suo canale eventi potrebbe non essere registrato finché non esegui RegisterManifest.ps1 da $PSHOME.
Aspettati un alto volume. Ogni script e modulo che viene eseguito finisce nel log. Aumenta la dimensione massima del canale, altrimenti conserverai solo poche ore.
Aspettati segreti. Gli script amministrativi a volte contengono password e chiavi API in testo semplice, e la registrazione dei blocchi script li registra fedelmente. Tienilo a mente prima che questo file venga inviato ovunque, e leggi la sezione LogTotal qui sotto.
Esporta i log
In Visualizzatore Eventi, fai clic con il pulsante destro su Operativo sotto PowerShell e scegli Salva tutti gli eventi come… Dalla linea di comando:
:: solo blocchi 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 log “Windows PowerShell”: eventi di avvio del motore con la linea di comando dell’host
wevtutil epl “Windows PowerShell” C:logswindows_powershell.evtx
Quest’ultimo è facile da dimenticare, ma vale la pena di 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 fatto il downgrade intenzionalmente per evitare la registrazione dei blocchi script.
Carica e rivedi in LogTotal
LogTotal legge EVTX nativamente. Una cosa da sapere prima: LogTotal non sanifica ancora i file EVTX. [PROOF: confirm which formats the sanitize step covers today.] With PowerShell logs, that matters more than usual, because of the secrets mentioned above. Use EVTX uploads freely for test machines. For production hosts, get a yes from whoever owns data handling first.
- Carica. Apri logtotal.com e carica il file. [PROVA: schermata di caricamento, limite di dimensione]
- Revisiona. [PROOF: what the results screen shows for PowerShell data]
Cosa appare sui dati reali. Abbiamo usato [PROVA: fonte del campione, per esempio una VM di test con la registrazione dei blocchi script attiva, dopo aver eseguito un cradle di download codificato e una stringa di test innocua per alterazione AMSI]. LogTotal ha segnalato [PROVA: risultati effettivi]. [PROVA: link al file di esempio]
Quando qualcosa va storto
| Sintomo | Probabile causa | Fix |
|---|---|---|
| Nessun evento 4104 | La registrazione dei blocchi script è disattivata e niente sembrava sospetto | Attivala per il futuro; controlla il log di Windows PowerShell per vedere cosa 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 |
| 4104 testo è una cifratura illeggibile | Il logging degli eventi protetto è attivo | 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 script cattura il codice offuscato?
In larga misura, sì. Registra i blocchi script man mano che vengono compilati. Quando il codice offuscato costruisce ed esegue il prossimo stadio, quel stadio viene registrato come blocco suo proprio, spesso in forma leggibile.
Qual è la differenza rispetto alla trascrizione?
La trascrizione scrive file di testo di input e output di sessione in una cartella. La registrazione dei blocchi script registra il codice stesso nel registro eventi. Si completano a vicenda, e vale la pena averli entrambi.