Una delle componenti più complesse quando si implementa un SIEM è la gestione dei falsi positivi, specialmente quando questi si celano dietro a meccanismi che si danno per conosciuti come l’autenticazione.
Da qualche tempo a questa parte avevo delle segnalazioni di questo tipo
A prima vista la gestione errori di Windows server ha segnalato che l’utente “guest” (di default disabilitato) ha tentato, fra le 9 e le 10:30, di accedere a qualche risorsa sulla VM per ben 1137 volte.
Ovviamente, un numero così ingente di “logon fail” attiva l’allarme e di conseguenza la presa in carico del problema. Ma cos’è successo?
Analisi
La macchina in questione è un Windows Server 2019 aggiornato alle ultime patch disponibili. La VM ospita un’applicazione di un fornitore che, per motivi agnostici all’analisi, andremo ad ignorare.
La prima cosa fatta è stata quella di controllare se l’utente “Guest” è realmente disabilitato, ed effettivamente lo è. Successivamente sono andato a controllare i registri evento inviati filtrando per il nome macchina e l’errore 4625. Questo è quanto trovato
Le parti salienti sono
TimeCreated-SystemTime="2021-12-14T07:50:01.849011000Z" EventRecordID="85419312" Execution-ProcessID="820" EventID="4625" SubjectUserName="utenteOK" SubjectDomainName="DOMINIO.LAN" TargetUserName="Guest" TargetDomainName="NOME_VM" Status="0xc000006e" FailureReason="%%2310" SubStatus="0xc0000072" LogonType="3" ProcessName="C:\Windows\explorer.exe" IpAddress="-" IpPort="-"
- Per prima cosa tutti gli eventi si discostano temporalmente (TimeCreated-SystemTime) di qualche millesimo di secondo pertanto il numeratore progressivo dell’evento (EventRecordID) è sempre diverso. Motivo per il quale vengono generati migliaia di eventi.
- L’Execution-ProcessID è sempre lo stesso, il che vuol dire che è solo un processo che ha generato l’errore
- EventID 4625 è il codice di errore Microsoft per il login fallito
- SubjectUserName e SubjectDomainName fanno riferimento ad un utente di dominio reale ed abilitato all’accesso delle risorse su quella macchina
- TargetDomainName è il nome della macchina che generato l’evento
- Status, FailureReson e SubStatus sono i sotto codici di errore che identificano la motivazione per la quale il sistema ha generato l’errore 4625. Qua troverete tutte le informazioni dettagliate.
- LogonType uguale a “3” indica che la tipologia di accesso che ha fatto generare l’evento è di tipo “network”, cioè proviene da un accesso di rete
- ProcessName ovviamente è il processo invocato che ha fallito l’accesso
- IpAddress e IpPort sono IP e porta coinvolti nella generazione dell’errore
Vista così è difficile comprendere cosa abbia generato un errore: se dovessimo leggere letteralmente la segnalazione sembrerebbe che il processo “explorer.exe”, invocato dall’utente di dominio “DOMINIO.LAN\utenteOK” da nessun ip/porta, abbia tentato una login sulla VM “NOME_VM” utilizzando l’utente “Guest”. Questa operazione non è andata a buon fine in quanto l’utente è disabilitato (SubStatus uguale a 0xc0000072).
Ipotizziamo che non possa essere un attacco brute force in quanto sono stati effettuati 1137 tentativi in circa 90 minuti, cioè circa 12 tentativi al minuto. Normalmente un attacco a forza bruta ne farebbe 12 al secondo. Inoltre il campionamento degli eventi mostra che le segnalazioni vanno a gruppi irregolari e compatti: 100 segnalazioni in un secondo, qualche minuto di attesa, 20 segnalazioni e via discorrendo.
Altri elementi di analisi sono: l’utente “Guest” che, ripeto, di default è disabilitato e l’utente di dominio che effettivamente ha permessi per accedere alla VM. Quindi cosa scatena l’evento?
Non può essere la connessione RDP dell’utente di dominio in quanto l’evento mostrerebbe nei campi IpAddress e IpPort i dettagli della macchina sorgente che ha tentato l’accesso, inoltre con l’utente “Guest” non ha nulla a che fare.
Quali sono pertanto gli altri accessi che un utente di dominio può fare ad una macchina e che possono generare un’errore 4625 di login failure?
SMB
Sono andato a controllare tutte le condivisioni di sistema e ho trovato che in una share applicativa il fornitore ha aggiunto, oltre al suo utente (il terzo della lista), anche il gruppo “Everyone”.
A parte temi quali la sicurezza delle informazioni e la gestione delle permission puntuali il gruppo “Everyone” è il motivo del nostro errore.
Un passo indietro
Qual’è la differenza fra il gruppo “Everyone” e il gruppo “Authenticated users”?
“Authenticated users” comprende tutti gli utenti che hanno fatto accesso tramite utente e password (locali o di dominio) mentre che “Everyone” comprende tutti gli utenti appartenti al gruppo “Authenticated users” e tutti gli account integrati non protetti da password come Guest, LOCAL_SERVICE, NETWORK_SERVICE e SERVICE.
Un account Guest è un account integrato che è disabilitato per impostazione predefinita. Se abilitato, consente a chiunque di accedere senza password. Contrariamente a quanto si possa immaginare, chiunque abbia effettuato l’accesso in modo anonimo, ovvero non si è autenticato, non sarà incluso nel gruppo Everyone.
Nota curiosa è quella che, se creiamo uno share e lo condividiamo con il gruppo "Everyone" il sistema, nel momento in cui deve validare l'accesso, controlla se tutte le risorse appartenenti al gruppo sono abilitate a farlo e, siccome l'utente Guest è disabilitato questo genera, appunto, l'evento 4625 di login failure sebbene l'utente autenticato possa accedere alla risorsa.
Soluzione
Una volta capito il motivo delle segnalazioni ho
- eliminato il gruppo “Everyone” da qualsiasi share/permission
- creato dei security group dove inserire solo le entità interessate che abbiano lo stesso livello di accesso
e tutte le segnalazioni di falsi positivi sono scomparse.
Best practice
Quando si tratta di permessi, una domanda fondamentale a cui dobbiamo essere in grado di rispondere è: quali esseri umani hanno accesso a una particolare risorsa?
La maggior parte delle volte quando stai ispezionando le autorizzazioni su una determinata risorsa in Windows non hai a che fare con gli umani; piuttosto, hai a che fare con gruppi, alcuni dei quali sono identità implicite incorporate con nomi ambigui.
EOF