Tramite il registro eventi di sistema è possibile monitorare i programmi eseguiti da un utente sulla macchina. Per permettere a Windows di tenere traccia di tali eventi nei log è necessario procedere all'attivazione dell'audit (si veda l'articolo Windows 10: Attivazione audit).
Dato che verranno tracciati un numero elevato di eventi è consigliabile incrementare le dimensioni del registro eventi come indicato nell'articolo Windows 10: Aumentare la dimensione dei registri eventi.
Visualizzare i processi mandati in esecuzione
Per analizzare i log ed individuare i programmi eseguiti è possibile procedere come indicato di seguito:
- Avviare il Visualizzatore eventi (WIN+R e digitare eventvwr.msc seguito da invio).
- Nel riquadro sinistro espandere Registri di Windows e selezionare il registro Sicurezza. Cliccare su Filtro registro corrente.
FIG 1 - Visualizzatore eventi - Nella casella contrassegnata dall'etichetta <Tutti gli ID evento> digitare l'ID 4688 (l'ID corrisponde all'evento: È stato creato un nuovo processo) e cliccare su OK.
FIG 2 - Filtro registro corrente - Verranno visualizzati tutti gli eventi relativi all'esecuzione di un processo.
FIG 3 - Eventi ID 4688
Ricerca per programma tramite PowerShell
Se si intende filtrare i risultati in base al programma avviato è possibile utilizzare PowerShell. Supponiamo di voler visualizzare tutti gli avvii del Prompt dei comandi (cmd.exe):
- Una volta avviato PowerShell come amministratore digitare il seguente comando
Get-WinEvent -FilterHashtable @{LogName='Security'; id=4688;data='C:\windows\system32\cmd.exe'}
verranno visualizzati tutti gli eventi relativi all'avvio del prompt dei comandi. Per maggiori dettagli possiamo aggiungere Format-List come indicato di seguito
Get-WinEvent -FilterHashtable @{LogName='Security'; id=4688;data='C:\windows\system32\cmd.exe'} |Format-List
Sostituendo la stringa in data= possiamo personalizzare la ricerca indicando altri processi di nostro interesse.FIG 4 - PowerShell, ricerca eventi avvio Prompt dei comandi FIG 5 - PowerShell, dettagli eventi avvio Prompt dei comandi - Per visualizzare quante volte un processo è stato eseguito, digitare il seguente comando nella finestra PowerShell
Get-WinEvent -FilterHashtable @{LogName='Security'; id=4688;data='C:\windows\system32\cmd.exe'} | Measure-ObjectFIG 6 - PowerShell, numero di avvii del Prompt dei comandi
Ricercare gli eventi tramite XPath
XPath è un linguaggio che permette di individuare i nodi all'interno di un documento XML. Un sottoinsieme della versione 1.0 è supportato dal sistema di log di Windows.
Gli eventi di Windows vengono conservati in formato XML. Per verificarlo, aprire un qualsiasi evento all'interno del registro tramite doppio click, selezionare la scheda Dettagli e quindi selezionare l'opzione XML. Viene riportata la rappresentazione XML nativa dell'evento, meno leggibile rispetto a quella a cui siamo abituati.
Per ricercare gli eventi tramite XPath:
- Da Visualizzatore eventi cliccare su Filtro registro corrente e nella casella <Tutti gli ID evento> digitare nuovamente l'ID 4688
- Spostarsi sulla scheda XML. Verrà visualizzata la query XPath con i criteri di filtro inseriti. Per modificare la query manualmente selezionare la casella Modifica query manualmente e rispondere affermativamente alla successiva finestra di dialogo.
FIG 8 - Filtro registro corrente, Query in XML FIG 9 - Visualizzatore eventi, modifica manuale query - Per ricercare solo le occorrenze relative ad un determinato utente, modificare la query come indicato di seguito in modo
<QueryList> <Query Id="0" Path="Security"> <Select Path="Security">*[System[(EventID=4688)]]and *[EventData[Data[@Name='SubjectUserName']='utente']] </Select> </Query> </QueryList>
Dove al posto di utente va specificato l'account utente per il quale si intende effettuare la ricerca. Cliccando su OK verrà eseguita la query con le condizioni specificate. - È possibile aggiungere ulteriori condizioni alla ricerca. Ad esempio, per ricercare tutti i processi cmd.exe eseguiti dall'utente Virtual la query sarà analoga a
<QueryList> <Query Id="0" Path="Security"> <Select Path="Security">*[System[(EventID=4688)]]and *[EventData[Data[@Name='SubjectUserName']='Virtual' and Data[@Name='NewProcessName']='C:\Windows\System32\cmd.exe']] </Select> </Query> </QueryList>
FIG 10 - Visualizzatore eventi, query XPath