Get-WinEvent 4625 password spray

Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625;StartTime=(Get-Date).AddHours(-1)} | Group-Object {$_.Properties[5].Value}

Agrupa los logons fallidos (Event 4625) de la última hora por usuario para detectar password spraying en el dominio.

Ejecútalo cuando quieras detectar password spraying: el atacante prueba una o dos contraseñas contra muchos usuarios para no bloquear cuentas. La firma es el patrón inverso del brute force: pocos fallos por usuario, muchos usuarios distintos, misma contraseña. Agrupar los 4625 por usuario (Properties[5] en el evento) y mirar el volumen total te da la foto: si en una hora hay fallos en 40 cuentas distintas desde la misma IP origen, es spray. Es la primera query que corre un analista de nivel 1 ante una alerta de logons fallidos masivos.

No la uses como detección definitiva: el 4625 no incluye la contraseña probada, así que agrupar por usuario solo te da el volumen, no la prueba de que sea la misma password. Para confirmar el spray necesitas la IP origen (Properties[13]) y la correlación temporal. Y ojo con el ruido: en redes con aplicaciones que usan credenciales caducadas (servicios con cuentas rotadas mal), hay fallos constantes que ensucian la señal. Filtra por tipo de logon (Properties[8]: 3 network, 8/10 para servicios) y por IP antes de alertar. También se te escapan los sprays contra Kerberos si el atacante usa AS-REP o fuerza bruta sobre 4768.