Man mano che le organizzazioni rafforzano le proprie difese contro gli attacchi brute force, le tracce di questi tentativi passano spesso inosservate, fino a quando una credenziale viene compromessa o un account viene bloccato.
Gli amministratori IT possono usare PowerShell per recuperare e analizzare i registri degli eventi di sicurezza e rafforzare così le difese dell’organizzazione. Questa guida illustra passo dopo passo come rilevare gli attacchi brute force e creare blacklist con PowerShell.
Per una rapida panoramica visiva, guarda la nostra video guida su Come usare PowerShell per analizzare i registri degli eventi di sicurezza e segnalare i tentativi brute force
Configurare i registri degli eventi di sicurezza con PowerShell
Prima di iniziare, assicurati di disporre dei seguenti prerequisiti:
📌 Prerequisiti:
- Accesso amministrativo ai sistemi locali o remoti
- PowerShell 5.1+
- Registro di controllo della sicurezza di Windows abilitato tramite GPO
- Accesso al Registro di sistema di Windows per contrassegnare lo stato di rilevamento
- Una piattaforma RMM (ad esempio NinjaOne) per distribuire script e avvisi
- Opzionale: inoltro degli eventi a un SIEM o a un sistema di logging centralizzato
Passaggio 1: abilita il controllo dei tentativi di accesso non riusciti tramite Criteri di gruppo
Il primo passo è assicurarsi che il controllo sia attivo su tutti gli endpoint. Puoi abilitarlo tramite Criteri di gruppo. Una volta abilitato, vengono registrati sia i tentativi di accesso riusciti sia quelli non riusciti, con ID evento come 4625 (accesso non riuscito) e 4624 (accesso riuscito).
Per abilitare il controllo dei tentativi di accesso non riusciti:
- Premi Win + R, digita gpmc.msc e premi Invio per aprire la Console Gestione Criteri di gruppo.
- Vai a Configurazione del computer > Criteri > Impostazioni di Windows > Impostazioni sicurezza > Configurazione avanzata criteri di controllo > Criteri di controllo > Accesso/Disconnessione.
- Modifica l’impostazione Controlla accesso – Operazioni riuscite, Operazioni non riuscite.
⚠️ Importante: impostazioni errate del controllo degli accessi possono causare problemi. Scopri di più nella sezione Aspetti a cui prestare attenzione.
Passaggio 2: usa PowerShell per analizzare gli eventi di accesso non riusciti
- Apri PowerShell come amministratore.
- Usa i seguenti comandi:
- Analizza l’ID evento 4625 relativo alle ultime 24 ore:
$events = Get-WinEvent -FilterHashtable @{LogName = 'Security'Id = 4625StartTime = (Get-Date).AddHours(-24)} | Select-Object TimeCreated, Message
Nota: se non viene trovato alcun evento corrispondente, il comando restituisce un set di risultati vuoto.
- Estrai le origini e i nomi utente degli accessi non riusciti:
$failedLogons = $events | ForEach-Object {
if ($_.Message -match "(?s)Account For Which Logon Failed:.*Account Name:\s+(\S+).*Source Network Address:\s+(\S+)") {
[PSCustomObject]@{
Time = $_.TimeCreated
Username = $matches[1]
SourceIP = $matches[2]
}
}
}
- Esporta in CSV:
$failedLogons | Export-Csv "C:\Reports\FailedLogons.csv" -NoTypeInformation
Passaggio 3: individua i modelli di attacco brute force in base a soglie
Una volta che riesci ad analizzare i registri degli eventi, puoi rilevare i modelli ricorrenti e applicare soglie per gli attacchi brute force, così da rafforzare la sicurezza. Per farlo con PowerShell, usa i seguenti comandi:
Raggruppa e conta per IP di origine o nome utente:
$grouped = $failedLogons | Group-Object SourceIP | Where-Object { $_.Count -ge 10 }$grouped | ForEach-Object {Write-Output "Potential brute-force from $($_.Name) with $($_.Count) attempts"}
Questo script analizza gli eventi di accesso non riusciti su un singolo computer, li raggruppa per IP di origine e segnala come potenziale attacco brute force qualsiasi IP con 10 o più tentativi non riusciti.
Nota: la soglia in questa riga è modificabile. Il numero dopo Count -ge può essere cambiato per impostare il numero di tentativi non riusciti in grado di generare un avviso di attacco brute force.
💡 Suggerimento: in alternativa, puoi raggruppare per nome utente per rilevare gli attacchi brute force mirati a un singolo account:
$groupedUsers = $failedLogons | Group-Object Username | Where-Object { $_.Count -ge 10 }
Le soglie possono essere adattate alla propensione al rischio (ad esempio, 5 o più tentativi in 10 minuti).
Passaggio 4: scrivi il rilevamento nel Registro di sistema e in log accessibili da CMD
Il passaggio 4 riguarda il collegamento degli eventi analizzati all’RMM e a log accessibili da CMD, per una maggiore visibilità e una correzione più semplice. Con le chiavi seguenti puoi generare avvisi in NinjaOne o disabilitare automaticamente l’accesso alla rete:
Tag nel Registro di sistema per l’RMM o per l’ispezione manuale:
New-Item -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -ForceSet-ItemProperty -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -Name "LastBruteForceDetected" -Value (Get-Date).ToString("u")Set-ItemProperty -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -Name "OffendingIP" -Value $grouped[0].Name
Verifica dello stato di rilevamento da CMD:
reg query HKLM\SOFTWARE\Org\SecurityAlerts
⚠️ Aspetti a cui prestare attenzione
| Rischi | Possibili conseguenze | Come rimediare |
| Impostazioni GPO errate per gli eventi di controllo degli accessi | PowerShell non restituisce alcun log quando tenta di analizzare gli eventi. | Verifica di nuovo le impostazioni GPO per gli eventi di controllo degli accessi e assicurati che il registro di sicurezza non venga sovrascritto a causa di una dimensione del log troppo ridotta. |
Passaggi successivi: blocco degli IP o invio di avvisi
Il blocco degli indirizzi IP, l’invio di avvisi e le altre azioni di riduzione del rischio vengono di solito eseguiti dopo aver analizzato i registri degli eventi di sicurezza. Questa sezione si concentra sulle azioni che puoi intraprendere con PowerShell in caso di più tentativi di accesso non riusciti o di rilevamento di un attacco brute force.
Scrivi l’evento nel registro degli eventi:
Write-EventLog -LogName Application -Source "BruteForceDetector" -EventId 1010 -EntryType Warning -Message "Brute-force detected from $($grouped[0].Name)"
Nota: se l’origine dell’evento non esiste, puoi crearla una volta sola (come Amministratore) con:
New-EventLog -LogName Application -Source ‘BruteForceDetector’
Inoltre, gli amministratori IT possono scegliere di bloccare l’IP in locale (se l’origine è esterna):
New-NetFirewallRule -DisplayName "Block Brute IP" -Direction Inbound -RemoteAddress $grouped[0].Name -Action Block
💡 Nota: documenta nel tuo RMM tutti i blocchi IP e le policy di pulizia, per garantire coerenza su tutti i dispositivi.
Altri aspetti da considerare nel rilevamento degli attacchi brute force e nella creazione di blacklist con PowerShell
Attacchi locali e attacchi via RDP
I log dei tentativi brute force hanno un aspetto diverso a seconda dell’origine. I tentativi brute force tramite Remote Desktop Protocol (RDP) mostrano di solito un indirizzo IP esterno in Source Network Address, mentre un attacco brute force locale mostra solo 127.0.0.1. Controllare il tipo di accesso (Logon type) può fornire ulteriore contesto.
Controller di dominio
Negli ambienti Active Directory (AD), i tentativi di accesso non riusciti vengono in genere registrati sui controller di dominio (DC) e non solo sulla workstation da cui è stato tentato l’accesso. È consigliabile eseguire gli script PowerShell in modo centralizzato o tramite l’inoltro degli eventi.
Falsi positivi
Non tutti gli accessi non riusciti ripetuti sono causati da attacchi brute force. Anche gli account di servizio o gli strumenti di sincronizzazione possono occasionalmente generare accessi non riusciti. Per mantenere l’efficienza, escludi gli account sicuri noti dalle regole di rilevamento brute force (puoi farlo aggiungendo una whitelist nello script, in modo che quegli account vengano saltati automaticamente)
Integrazioni SIEM
Per le organizzazioni che dispongono di un sistema Security Information and Event Management (SIEM), integrare i dati di rilevamento degli attacchi brute force può migliorare sensibilmente la visibilità. Se possibile, invia i dati a un raccoglitore di log centralizzato per intercettare gli attacchi in tutto l’ambiente.
Risoluzione dei problemi più comuni
Le regole del firewall non vengono applicate
Se lo script tenta di bloccare un IP sospetto con una regola firewall di PowerShell ma non funziona, il problema può riguardare i profili del firewall o i permessi dello script. I firewall di Windows hanno profili separati (Dominio, Privato, Pubblico) e la regola deve essere applicata a quello corretto. Inoltre, le policy di esecuzione di PowerShell o privilegi insufficienti possono impedire l’esecuzione del comando. Esegui sempre lo script con diritti amministrativi e verifica che il firewall di sistema sia attivo e configurato correttamente.
Le voci del Registro di sistema non vengono aggiornate
La scrittura dei risultati del rilevamento nel registro di sistema richiede permessi adeguati, in particolare quando il target è HKLM:\SOFTWARE. Se lo script viene eseguito da un utente standard, le scritture nel registro falliranno in modo silenzioso o genereranno un errore di accesso. Per evitarlo, assicurati che lo script venga eseguito nel contesto Amministratore o SYSTEM, condizione che può essere imposta durante la distribuzione tramite strumenti come NinjaOne. È inoltre consigliabile verificare che la chiave di registro esista e non sia bloccata da Criteri di gruppo o da un software di sicurezza degli endpoint.
Migliora il rilevamento degli attacchi brute force con i servizi NinjaOne
Con NinjaOne, gli amministratori IT e gli MSP possono applicare un rilevamento degli attacchi brute force scalabile e integrare la risposta agli incidenti grazie a:
- Distribuzione di script PowerShell di rilevamento su dispositivi o gruppi di clienti
- Monitoraggio dei valori di registro o dei file di output per segnalare i rilevamenti
- Attivazione di flussi di lavoro di correzione automatizzati (avvisi, blocco degli IP, notifiche agli utenti)
- Generazione di report multi-cliente che mostrano i tentativi brute force e gli IP di origine
- Invio di avvisi in caso di rilevamenti ripetuti o di account presi di mira
Usa PowerShell per recuperare il registro degli eventi di sicurezza
Usare PowerShell per analizzare i registri degli eventi di sicurezza alla ricerca di tentativi brute force offre agli MSP un metodo potente e scalabile per rilevare gli attacchi alle credenziali e rispondervi. Questa guida offre agli amministratori IT istruzioni passo dopo passo e indicazioni per risolvere i problemi più comuni.
Argomenti correlati:
- Come leggere i registri eventi di Windows: arresto e riavvio
- Come cancellare la cronologia di protezione di Sicurezza di Windows in Windows 11
- Comprendere i log di Linux: panoramica ed esempi
- Che cos’è un attacco brute force?
- Rilevare e prevenire gli attacchi brute force con PowerShell
Guida rapida
PowerShell e rilevamento degli attacchi brute force in NinjaOne
NinjaOne mette a disposizione uno script nativo pensato appositamente per aiutarti a rilevare i tentativi di accesso brute force. Si tratta di uno strumento basato su condizioni che aiuta a identificare potenziali minacce alla sicurezza legate ai tentativi di accesso.
Approccio consigliato:
1. Usa lo script integrato “Check for Brute Force login attempts” disponibile nella libreria di script di NinjaOne.
2. Per un’analisi più avanzata, puoi creare uno script PowerShell personalizzato che:
– Cerca nei registri degli eventi di sicurezza (ID evento 4625 per i tentativi di accesso non riusciti)
– Tiene traccia dei tentativi di accesso non riusciti in un intervallo di tempo specifico
– Imposta una soglia per i potenziali attacchi brute force
Esempio di logica PowerShell:
powershell
$failedAttempts = Get-WinEvent -FilterHashtable @{
LogName = ‘Security’
ID = 4625 # Failed Login Attempts
} | Where-Object { $_.TimeCreated -gt (Get-Date).AddHours(-1) }
$uniqueIPs = $failedAttempts | Group-Object { $_.Properties[19].Value } |
Where-Object { $_.Count -gt 10 } # Adjust threshold as needed
if ($uniqueIPs) {
# Alert or take action for potential brute force
Write-Output “Potential Brute Force Detected”
}
Best practice:
– Configura le soglie di avviso in base alle policy di sicurezza specifiche della tua organizzazione
– Integra il tutto con i meccanismi di avviso di NinjaOne
– Rivedi e adatta regolarmente i parametri di rilevamento
