Rilevamento e blue team
Che cos'è un SIEM? Log, query e alert
Un SIEM raccoglie i log, li normalizza, applica regole di correlazione e genera alert per il triage. Segui la pipeline con un esempio che puoi eseguire.
Leggi il log Security di Windows: policy di audit, Event ID 4624, 4625, 4634, 4672, 4688 e 1102, cosa aggiunge Sysmon e un logon fallito da trovare da solo.
Windows tiene un registro continuo di quello che succede sulla macchina: servizi che partono, programmi che vanno in crash, persone che accedono. Ogni voce è un evento. Ogni evento ha un timestamp, un provider (il componente che l'ha scritto), un Event ID numerico, un livello e una serie di campi che dipendono dal tipo di evento. Gli eventi sono raggruppati in log, chiamati anche canali, e salvati come file .evtx in %SystemRoot%\System32\Winevt\Logs.
All'inizio contano soprattutto tre log:
La differenza di accesso si vede da PowerShell. Sulla macchina usata per questo articolo (Windows 11, Windows PowerShell 5.1), questo comando è stato eseguito in una shell senza diritti di amministratore:
Get-WinEvent -ListLog System,Application | Format-Table LogName,RecordCount,IsEnabled -AutoLogName RecordCount IsEnabled
------- ----------- ---------
System 36196 True
Application 19965 TrueAggiungendo Security allo stesso comando è comparso un errore per quel log: Windows non è riuscito a recuperarne le informazioni perché l'operazione non era autorizzata. I tuoi conteggi saranno diversi.
Molti rilevamenti su Windows si basano sul log Security. Una regola SIEM per i tentativi di indovinare le password conta gli eventi 4625. Una regola per una sessione amministrativa sospetta guarda insieme 4624 e 4672. Una regola per la manomissione dei log cerca gli eventi 1102. L'articolo sul SIEM del Manuale da campo ha spiegato come funzionano queste regole. Leggere gli eventi a mano su una macchina ti permette di controllare se le ipotesi di una regola valgono sui tuoi sistemi.
Il log Security contiene solo quello che la policy di audit dice a Windows di registrare. Se la policy non prevede l'audit dei logon falliti, Windows non scrive eventi 4625 e una regola che li conta non scatta mai. Dal SIEM non si distingue da una macchina tranquilla. Per questo si controlla la policy di audit prima di leggere il log.
Windows raggruppa le impostazioni di audit in categorie, e ogni categoria in sottocategorie. Ogni sottocategoria può registrare i successi, i fallimenti, entrambi o niente. Le categorie sono Account Logon, Account Management, Detailed Tracking, DS Access, Logon/Logoff, Object Access, Policy Change, Privilege Use e System.
La categoria Logon/Logoff contiene le sottocategorie da cui nasce la maggior parte degli eventi di questo articolo: Logon (4624 e 4625), Logoff (4634), Account Lockout (che Microsoft elenca anche per 4625) e Special Logon (4672). La creazione di processi, evento 4688, appartiene alla sottocategoria Process Creation sotto Detailed Tracking.
auditpol è lo strumento integrato per leggere la policy. auditpol /list stampa i nomi di categorie e sottocategorie e funziona in una shell normale. auditpol /get legge le impostazioni reali. La documentazione di riferimento di Microsoft dice che serve il permesso Read sulla policy oppure il diritto "Manage auditing and security log" (SeSecurityPrivilege), e una shell normale senza privilegi elevati non ha né l'uno né l'altro.
auditpol /list /category /vSulla macchina usata per questo articolo, con Windows in portoghese, il comando è andato a buon fine senza privilegi elevati e ha stampato ogni categoria con un nome tradotto e un GUID. Logon/Logoff aveva il GUID {69979849-797A-11D9-BED3-505054503030}. Il nome inglese lì funzionava ancora con auditpol /list /subcategory:"Logon/Logoff", che ha elencato dodici sottocategorie. Se il tuo sistema rifiuta un nome, passa il GUID.
| Event ID | Cosa registra Windows | Sottocategoria di audit |
|---|---|---|
| 4624 | Un account è riuscito ad accedere | Logon |
| 4625 | Un account non è riuscito ad accedere | Logon, Account Lockout |
| 4634 | Un account si è disconnesso | Logoff |
| 4672 | Privilegi speciali assegnati a un nuovo logon | Special Logon |
| 4688 | È stato creato un nuovo processo | Process Creation |
| 1102 | Il log di audit è stato cancellato | Other Events |
Entrambi gli eventi vengono scritti sul computer dove è avvenuto il logon. Se qualcuno digita una password sbagliata sul tuo portatile, il 4625 finisce nel log Security del tuo portatile. I due eventi hanno quasi tutti i campi in comune:
0xC000006A per una password errata, 0xC0000064 per un nome utente che non esiste, 0xC000006D per un nome utente errato o informazioni di autenticazione errate, 0xC0000072 per un account disabilitato. La stessa pagina indica 0xC0000234, "Account locked out", come stato tipico quando l'errore viene da un account bloccato. Diversi errori 0xC0000064 di seguito possono indicare che qualcuno sta enumerando i nomi utente.127.0.0.1 o ::1 significano localhost, e la porta è 0 per i logon interattivi.Da Windows 10 in poi, 4624 riporta anche Elevated Token, che dice se la sessione ha privilegi di amministratore.
4634 dice che una sessione di logon è terminata. Da solo racconta poco. Il suo valore sta nel Logon ID: lo stesso valore esadecimale compare nel 4624 che ha aperto la sessione, in ogni 4672 di quella sessione, negli eventi 4688 dei processi avviati dalla sessione e nel 4634 che l'ha chiusa. Seguendo un Logon ID attraverso il log ricostruisci una sessione dall'inizio alla fine. Microsoft precisa che i Logon ID sono univoci solo tra un riavvio e l'altro sullo stesso computer, quindi abbina sempre l'ID a un intervallo di tempo.
Windows scrive 4672 quando un nuovo logon riceve uno dei privilegi sensibili di un elenco, come SeDebugPrivilege (debug dei programmi), SeBackupPrivilege (backup di file e directory) o SeTcbPrivilege (agire come parte del sistema operativo).
Ogni logon di SYSTEM genera un 4672, quindi il log ne contiene molti. Microsoft consiglia di guardare quelli in cui l'account non è LOCAL SYSTEM, NETWORK SERVICE o LOCAL SERVICE, e non è un amministratore che ti aspetti abbia quei privilegi.
4688 viene scritto ogni volta che parte un nuovo processo, se la sottocategoria Process Creation è sotto audit. Registra il nome del nuovo processo, il nome del processo creatore (il padre), l'account, il Token Elevation Type (se il processo è stato eseguito con un token completo, elevato o limitato) e il livello di integrità.
Ha anche un campo Process Command Line, vuoto per impostazione predefinita. La pagina di Microsoft dice che viene riempito solo quando è attiva l'impostazione di Group Policy "Administrative Templates\System\Audit Process Creation\Include command line in process creation events". Senza, sai che powershell.exe è partito ma non cosa gli è stato chiesto di fare.
1102 significa che qualcuno ha cancellato il log Security. Lo scrive il provider Microsoft-Windows-Eventlog, e l'evento riporta l'account che l'ha cancellato. L'indicazione di Microsoft è breve: di norma questo evento non dovrebbe comparire, raramente c'è un motivo per cancellare a mano il log Security e ogni occorrenza merita un'indagine.
Sysmon (System Monitor) è uno strumento Sysinternals pubblicato da Microsoft. Si installa come servizio e driver, resta attivo anche dopo i riavvii e scrive i propri eventi in Applications and Services Logs/Microsoft/Windows/Sysmon/Operational. Va scaricato a parte, non fa parte di un'installazione predefinita di Windows, e Microsoft indica come supportati Windows 11 e Windows Server 2019 o successivi.
Rispetto al log Security integrato, Sysmon dà più dettagli su attività che altrimenti vedresti solo in parte:
ProcessGuid che resta univoco anche quando Windows riusa gli ID di processo.lsass.exe (10).Un file di configurazione XML decide quali eventi Sysmon include o esclude. Microsoft dichiara che Sysmon non analizza i propri eventi e non cerca di nascondersi agli attaccanti. A leggerli ci pensa un SIEM o un analista.
Installare Sysmon modifica il sistema, quindi il lab di questo articolo non lo fa.
Creerai un logon fallito sul tuo computer, con il tuo account, e lo troverai in tre modi. Non cambiare la policy di audit durante questo lab. Se risulta che la policy non registra i logon falliti, quel risultato è la lezione: annotalo e fermati lì.
Fai clic destro su Windows PowerShell o Terminal e scegli Run as administrator. Controlla che la shell abbia davvero i privilegi elevati:
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)True significa che puoi leggere il log Security. Sulla macchina usata per questo articolo, la shell disponibile ha restituito False. I comandi qui sotto sono stati eseguiti lì lo stesso e gli errori sono riportati così come sono comparsi, perché è utile conoscerli. Dove ci sarebbe l'output con privilegi elevati, l'articolo descrive i campi da cercare, in base alla documentazione di Microsoft.
auditpol /get /category:"Logon/Logoff"In una shell con privilegi elevati stampa ogni sottocategoria con la sua impostazione. Trova la riga Logon. Per questo lab deve includere Failure, quindi "Success and Failure" oppure "Failure". Se dice "No Auditing", Windows non scriverà 4625 e il resto del lab non troverà niente.
Senza privilegi elevati, sulla macchina usata per questo articolo, il comando ha stampato l'errore 0x00000522 con un messaggio secondo cui il client non possiede un privilegio richiesto, ed è uscito con codice 1314.
Premi Win+L per bloccare lo schermo. Digita una password sbagliata una volta, poi accedi con quella giusta. Annota l'ora.
Usa la password, non un PIN. Se di solito usi Windows Hello, scegli l'opzione password nella schermata di accesso. Questo articolo non ha provato cosa produce un PIN sbagliato.
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 5 | Format-List TimeCreated, Message-FilterHashtable applica il filtro mentre gli eventi vengono letti, cosa che la documentazione di Microsoft descrive come più efficiente del passare tutto a Where-Object. -MaxEvents 5 tiene le cinque corrispondenze più recenti, perché Get-WinEvent restituisce prima le più nuove.
In una shell con privilegi elevati, il primo risultato dovrebbe riportare l'ora che hai annotato. Nel suo Message, controlla:
C:\Windows\System32\winlogon.exe.0xC000006A in uno dei due.127.0.0.1 e la porta 0, come nell'esempio di Microsoft.Senza privilegi elevati, questo stesso comando ti inganna. Sulla macchina usata per questo articolo non ha segnalato un problema di permessi. Ha stampato l'errore secondo cui nessun evento corrispondeva ai criteri di selezione. Un semplice Get-WinEvent -LogName Security -MaxEvents 1 nella stessa shell ha riportato la causa reale, un'operazione non autorizzata. Se da una shell senza privilegi elevati vedi "no events found", controlla i privilegi prima di concludere che il log è vuoto.
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 5 | Select-Object TimeCreated, IdDovresti vedere un 4624 pochi secondi dopo il tuo 4625, con altri eventi 4624 attorno, perché i servizi e il sistema fanno logon di continuo. Apri il messaggio completo di quello più vicino alla tua ora e controlla il Logon Type e il nome dell'account. Aggiungendo StartTime=(Get-Date).AddMinutes(-15) alla hashtable limiti la ricerca agli ultimi quindici minuti.
Una password sbagliata seguita da quella giusta dallo stesso account, alla tastiera, a pochi secondi di distanza, è un errore di battitura. Lo stesso errore ripetuto su molti account da un solo indirizzo di rete fa pensare a tentativi di indovinare le password, e le regole di rilevamento sono scritte per distinguere questi due casi.
wevtutil qe Security /c:5 /rd:true /f:text /q:"*[System[(EventID=4625)]]"wevtutil è il vecchio strumento a riga di comando per i log degli eventi. qe interroga gli eventi, /c:5 limita il numero, /rd:true legge prima i più recenti, /f:text stampa testo invece di XML e /q accetta un filtro XPath. Con privilegi elevati ottieni gli stessi eventi del passo 4. Togli /f:text per vedere l'XML grezzo, con i nomi dei campi usati dalle regole di rilevamento, come TargetUserName, Status e LogonType. Su Windows in un'altra lingua il testo del messaggio è tradotto, mentre i nomi dei campi nell'XML restano in inglese.
Senza privilegi elevati, sulla macchina usata per questo articolo, ha stampato che non è riuscito ad aprire la query sugli eventi perché l'accesso è stato negato, ed è uscito con codice 5.
Esegui eventvwr.msc. Se ti viene chiesto, consenti l'esecuzione come amministratore. Vai in Windows Logs > Security, scegli Filter Current Log e inserisci 4625 nella casella degli Event ID. Apri l'evento. La scheda General mostra lo stesso messaggio che hai letto in PowerShell. La scheda Details, nella vista XML, mostra i nomi grezzi dei campi. Tieni aperto questo evento: l'articolo su Sigma lo confronta con una regola.
Get-WinEvent -FilterHashtable sul log Security senza privilegi elevati può riportare zero corrispondenze invece di accesso negato.Get-WinEvent -ListLog Application ha mostrato una dimensione massima di 20971520 byte in modalità Circular: quando il log si riempie, gli eventi vecchi vengono sovrascritti. Controlla il log Security allo stesso modo, con privilegi elevati, prima di contare sugli eventi del mese scorso.Rilevamento e blue team
Un SIEM raccoglie i log, li normalizza, applica regole di correlazione e genera alert per il triage. Segui la pipeline con un esempio che puoi eseguire.
Rilevamento e blue team
Scrivi una regola Sigma per i logon Windows falliti, validala, convertila per Splunk e provala su eventi known-good e known-bad.