Utilizzare un filtro XPath (con query WQL) per ricercare eventi di accesso a file e cartelle

Nei sistemi operativi Windows è possibile configurare la registrazione di eventi di accesso (ad esempio lettura, modifica, cancellazione) a file e cartelle: questo permette in pratica di monitorare ogni azione eseguita da un utente su una cartella o un file specifico, mediante la lettura del contenuto di appositi eventi archiviati nel registro “Sicurezza” di Windows.

Per ulteriori informazioni su come implementare questo sistema è possibile seguire le indicazioni presenti in queste pagine (applicabili da Windows Server 2008 fino alle versioni più recenti di Windows):

Windows IT Center – Apply a basic audit policy on a file or folder

Microsoft TechNet – Controllo di cartelle o file basato sulle operazioni

TechNet Blogs – Auditing File Access on File Servers

Ricordo che per consentire la visualizzazione degli eventi nel registro deve essere abilitato, oltre alle impostazioni di sicurezza su file e cartelle, anche il criterio di sicurezza “Audit object Access”:

Solitamente si consiglia di abilitare la registrazione degli eventi di accesso solo su un numero contenuto di file e cartelle in modo da limitare la mole di dati prodotta, ma in ogni caso per poter ricostruire un’azione eseguita da un utente è quasi sempre necessario l’utilizzo di un filtro per il registro.

Nel nostro caso vedremo come utilizzare un filtro avanzato del registro eventi compilato in formato XPath.
Per utilizzare questo tipo di filtro è sufficiente:

1) Aprire il “Visualizzatore eventi di Windows” (eventvwr.msc), spostarsi sul registro eventi da filtrare (nel nostro caso “Sicurezza”) e selezionare “Filtro registro corrente…”

filtroregistro

2) Nella finestra di impostazioni del filtro spostarsi nella scheda “XML”, selezionare la spunta “Modifica query manualmente”, quindi confermare l’abilitazione della modalità manuale.

wqlregistro

La parte di codice XPath evidenziata è la query WQL, ovvero le istruzioni che eseguono effettivamente il filtraggio degli eventi.

Gli eventi che ci interessano vengono registrati con l’ID evento 4663, quindi questo sarà il primo filtro da inserire, poi è possibile fare una selezione più accurata per: azione eseguita, percorso file o nome utente. Questi dati, a differenza degli altri, sono presenti nella sezione “EventData” dell’evento per questo motivo vanno interrogati con un sistema specifico.

Con questo codice di esempio è possibile eseguire la ricerca dell’azione di un determinato tipo (ad esempio la modifica) su un determinato file eseguita da un determinato utente:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and (EventID=4663)]] and  *[EventData[Data[@Name='AccessMask'] and (Data='0x2')]]  and *[EventData[Data[@Name='SubjectUserName'] and (Data='nomeutente')]] and *[EventData[Data[@Name='ObjectName'] and (Data='C:\percorsofile')]]</Select>
  </Query>
</QueryList>

In questo esempio l’AccessMask è 0x2, che corrisponde all’aggiunta di dati (WriteData o AddFile).
Per vedere il valore corrispondente per le altre azioni è possibile trovare una lista completa in questa pagina:
Microsoft Dev Center – File and Directory Access Rights Constants
NB: Nella lista il valore dell’AccessMask è quello specificato tra parentesi tonde.

ObjectName e SubjectUserName sono ovviamente il percorso del file/cartella e il nome utente dell’account che ha eseguito l’operazione.

Sulla base di questo esempio è possibile eseguire anche un filtro meno selettivo, omettendo parti della query precedente.
Ad esempio per avere tutte le operazioni di un determinato tipo eseguite da un utente è sufficiente omettere la sezione ObjectName:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and (EventID=4663)]] and  *[EventData[Data[@Name='AccessMask'] and (Data='0x2')]]  and *[EventData[Data[@Name='SubjectUserName'] and (Data='nomeutente')]]</Select>
  </Query>
</QueryList>

Volendo è possibile anche automatizzare il filtro tramite script ed esportare le informazioni richieste automaticamente.
Per fare questo utilizzare le informazioni presenti nel precedente articolo:
Utilizzare PowerShell per esportare eventi da Windows Server 2008 e successivi

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *