¿Qué hay en este cuaderno?
- Sección 1: Resumen del ataque - Qué es realmente un Password spray
- Sección 2: Llega la alerta - Ejemplo de alerta, logs e indicadores
- Sección 3: El flujo de trabajo de la investigación - Del triaje a la contención
- Sección 4: Recolección de evidencia - Fuentes de logs, Status Codes, preguntas
- Sección 5: Tomando la decisión - True Positive, False Positive, Benigno
- Sección 6: Recorrido completo de la investigación - De principio a fin
- Sección 7: Notas del analista - Tus páginas de investigación rellenables
- Sección 8: Referencia rápida - La versión de una sola página
- Bonus: Cómo aparece el Password Spray en tu entrevista
CÓMO USAR ESTE CUADERNO: Lee las Secciones 1 a la 6 una vez, de principio a fin. Mantén la Sección 8 abierta durante tu turno y usa la Sección 7 para documentar tus primeras investigaciones reales de spray.
El Password spray es un juego de números para el atacante, lo que significa que tu investigación también es un juego de números. La estructura aquí te evita ahogarte en el volumen.
Una palabra antes de empezar
Estoy en el lado de la contratación para roles de SOC e ingeniería. El Password spray es la otra alerta (junto con el impossible travel) que consulto en casi todas las entrevistas de analistas, porque pone a prueba si un candidato puede pensar en escala.
Un sign-in fallido es un evento. Cuatrocientos sign-ins fallidos en noventa cuentas es una campaña, y trabajarla requiere un músculo completamente diferente al de las alertas de cuentas individuales.
Para quién es esto
- Aspirantes y analistas junior de SOC que quieran entrar en su primer turno ya sabiendo cómo trabajar está alerta.
- Personal de help desk y sysadmin que pivotan hacía la seguridad y han visto las tormentas de lockout pero nunca al atacante detrás de ellas.
- Estudiantes de ciberseguridad e internos que conocen la definición pero nunca han visto el patrón real de logs.
- Cualquier persona con una entrevista de SOC en el calendario. La sección bonus al final es para ti.
Los ejemplos se inclinan hacía Microsoft porque es donde la mayoría de ustedes terminará trabajando, con una variante de Okta incluida, y cada concepto se transfiere a cualquier stack que use tu empresa.
Sección 1 - Resumen del ataque
Qué es realmente un Password spray
Buenas tardes, colegas. El Brute force recibe toda la atención, pero el Password spray es lo que realmente funciona contra los entornos modernos, así que establezcamos la distinción primero porque a los entrevistadores les encanta preguntar sobre esto y a los analistas les encanta confundirlos.
Un Brute force intenta muchas contraseñas contra una cuenta. Un Password spray lo invierte: una contraseña (o un puñado pequeño) probada contra muchas cuentas.
El atacante toma una lista de tus usuarios, elige algo como Spring2026! o CompanyName1!, y la intenta una vez contra cada cuenta en la lista. Luego espera, elige la siguiente contraseña y vuelve a intentarlo.
¿Por qué invertirlo?
Account lockout. La mayoría de las organizaciones bloquean una cuenta después de cinco o diez intentos fallidos, lo que mata el Brute force. Pero un intento fallido por cuenta por hora nunca toca el umbral de bloqueo. El atacante intercambia velocidad por sigilo, y debido a que algún porcentaje de cualquier base de usuarios siempre está usando una contraseña estacional, la matemática juega a su favor. Lanza un spray a mil cuentas con doce contraseñas comunes y el atacante suele quedarse con al menos una credencial válida.
Por qué los atacantes ejecutan sprays
- Está diseñado para evadir el lockout por diseño. El ritmo bajo y lento a través de muchas cuentas mantiene cada cuenta individual por debajo del umbral de fallos. Muchos sprays se ejecutan durante semanas sin un solo lockout.
- Ataca la contraseña más débil del edificio, no la más fuerte. El atacante no necesita vencer las contraseñas de tu equipo de seguridad. Necesita a un pasante, una cuenta de servicio, o a una persona que configuró
Summer2026!la semana pasada. - La autenticación legacy es un pase libre. Los protocolos más antiguos como IMAP, POP y SMTP auth no pueden realizar MFA. Un spray que aterriza en un endpoint de autenticación legacy convierte una contraseña adivinada directamente en una sesión activa, sin un segundo factor en el camino.
- Las listas de usuarios son baratas. Los formatos de correo son predecibles, los scrapes de LinkedIn son triviales, y los dumps de brechas previas entregan la mitad del directorio. Construir la lista de objetivos es la parte fácil.
- Escala. Un operador con infraestructura en la nube puede lanzar sprays a cientos de organizaciones simultáneamente. Rara vez eres el único objetivo, eres una fila en una hoja de cálculo.
La matemática de la detección
Las detecciones de spray funcionan como la inversa del impossible travel. En lugar de un usuario desde dos lugares, buscan muchas cuentas fallando desde un mismo lugar (o una huella de infraestructura) dentro de una ventana de tiempo.
El analítico clásico: más de N cuentas distintas con sign-ins fallidos desde la misma IP dentro de una hora, donde el motivo del fallo es una contraseña incorrecta en lugar de un nombre de usuario incorrecto.
Las detecciones más inteligentes agrupan por User Agent, Autonomous System (ASN) y patrones de tiempo en lugar de IPs únicas, porque los sprays modernos rotan a través de redes de proxies residenciales específicamente para romper la suposición de una sola IP.
Saber esto te dice lo que la detección pierde: un spray lento distribuido a través de miles de IPs de proxy puede nunca cruzar un umbral de una sola IP. Por eso la Sección 3 tiene que hacerte buscar el patrón, no solo leer la alerta.
NOTA DEL GERENTE DE CONTRATACIÓN: La forma más rápida de impresionarme en una entrevista es definir spray vs brute force sin dudarlo, y luego mencionar inmediatamente la autenticación legacy como la cosa que convierte una contraseña adivinada en una brecha real. Los candidatos que saben por qué IMAP importa han trabajado colas o han estudiado adecuadamente. Los candidatos que dicen “activen MFA y listo” solo han leído un blog.
Dónde se ubica esto en MITRE ATT&CK
| Fase que observas | Técnica | ID |
|---|---|---|
| El spray mismo | Brute Force: Password Spraying | T1110.003 |
| De dónde vino la lista de usuarios | Gather Victim Identity Information: Email Addresses | T1589.002 |
| El sign-in exitoso | Valid Accounts: Cloud Accounts | T1078.004 |
| Abuso de protocolo legacy | Use Alternate Authentication Material / legacy auth bypass of MFA | T1550, T1078 |
| Qué hacen después | Email Collection, Internal Spearphishing | T1114, T1534 |
Forma real del ataque
Un patrón que he trabajado personalmente: durante tres noches, un actor lanzó un spray a aproximadamente 700 de nuestras cuentas con cuatro contraseñas, regulado para mantenerse bajo el lockout, todo dirigido a un endpoint de autenticación SMTP legacy que precedía a nuestra limpieza de conditional access.
Fallos totales: alrededor de 2,800, distribuidos lo suficientemente delgados como para que ninguna cuenta se bloqueara. Éxitos totales: uno, un buzón compartido con una contraseña establecida hace años y sin MFA porque la autenticación legacy no puede solicitarlo. El actor usó ese buzón para enviar phishing interno a la mañana siguiente.
La alerta de spray se disparó en la noche uno. Se cerró como ruido porque el analista vio fallos, vio que no hubo bloqueos y siguió adelante sin ejecutar la única query que importa: ¿algo tuvo éxito? Esa query es la columna vertebral de este cuaderno.
Grupos patrocinados por estados, afiliados de ransomware y criminales comunes ejecutan sprays porque la técnica no cuesta nada y sigue funcionando. Si tu organización tiene un solo endpoint de autenticación legacy expuesto, estás siendo atacado por spray en este momento, ya sea que se haya disparado una alerta o no.
Sección 2 - Llega la alerta
Lo que realmente ves en la cola
A continuación se presenta una alerta representativa en el formato que Microsoft Sentinel produce a partir de un analítico de spray, con la detección de riesgo de Password Spray de Entra ID Protection alimentando la alerta. La estética del proveedor varía, los campos no.
ALERT: Password spray attack detected
Severity: Medium
Tactic: Credential Access (TA0006)
Detection window: 2026-06-10 01:00 to 02:00 UTC
Source IP: 45.155.204.18 (hosting ASN, prior abuse reports)
Distinct accounts targeted: 94
Failed sign-ins: 94
Successful sign-ins in window: 1
Common user agent: BAV2ROPC
Error code distribution: 50126 x 91, 50053 x 2, 50057 x 1
Detection source: Sentinel analytic + Entra ID ProtectionLeyendo el patrón de logs de sign-in
Los eventos individuales no significan nada en un spray. El patrón a través de los eventos es la evidencia. Aquí está la forma, recortada a los campos que importan:
01:02 aaron.b@contoso.com 45.155.204.18 FAIL 50126 BAV2ROPC
01:03 adam.c@contoso.com 45.155.204.18 FAIL 50126 BAV2ROPC
01:03 alice.d@contoso.com 45.155.204.18 FAIL 50126 BAV2ROPC
01:04 amir.f@contoso.com 45.155.204.18 FAIL 50126 BAV2ROPC
... 89 more, one attempt per account, alphabetical ...
01:41 svc-scanner@contoso.com 45.155.204.18 SUCCESS 0 BAV2ROPC
01:58 zoe.w@contoso.com 45.155.204.18 FAIL 50126 BAV2ROPCIndicadores que vale la pena extraer inmediatamente
- Un intento por cuenta, nunca un segundo. Los usuarios reales reintentan. Una contraseña incorrecta de un humano es seguida por otro intento segundos después. Uno y listo en docenas de cuentas es automatización.
- Targeting en orden alfabético o por lista. Los humanos no inician sesión alfabéticamente. El orden delata la lista de objetivos.
- User agent BAV2ROPC. Ese string significa un flujo de autenticación legacy (resource owner password credential contra endpoints antiguos de Exchange). Es una de las señales de spray más ruidosas en un entorno de Microsoft porque no puede realizar MFA.
- Dominio del código de error 50126. Nombre de usuario o contraseña inválidos, lo que significa que las cuentas existen y la contraseña fue incorrecta. Un spray contra una lista de usuarios obsoleta muestra 50034 (la cuenta no existe) en su lugar, lo que te dice qué tan buena es la lista del atacante.
- El único éxito enterrado en el ruido.
svc-scannera las 01:41. Un éxito en una pared de fallos es el incidente completo. Todo lo demás es envoltorio.
PATRÓN A MEMORIZAR: Muchas cuentas, una huella de infraestructura, un intento por cuenta, agente de autenticación legacy, y una pared de 50126. Tu primera pregunta nunca es cuántos fallaron. Es siempre: ¿alguno tuvo éxito.
La misma alerta en un entorno Okta
Misma idea de detección, diferente estética. El System Log de Okta muestra un spray como una ráfaga de estos:
eventType: user.session.start
outcome.result: FAILURE
outcome.reason: INVALID_CREDENTIALS
actor.alternateId: (rotating through your directory)
client.ipAddress: 45.155.204.18
securityContext.asOrg: hostking ltd
isProxy: true
debugContext: threatSuspected=true(Okta ThreatInsight marca la infraestructura de spray conocida.)
La investigación es idéntica en espíritu. Encuentra el cluster (IP, ASN o User Agent), cuenta las cuentas distintas atacadas y busca cualquier éxito dentro del mismo cluster. Sea cual sea la plataforma en la que aterrices, esos tres movimientos son todo el juego.
Sección 3 - El flujo de trabajo de la investigación
Cinco fases, en orden, cada vez. Las investigaciones de spray castigan a los analistas que se adelantan, porque el volumen oculta el único evento que importa.
Fase 1 - Triaje inicial (primeros 5 minutos)
- Confirma el patrón en los logs brutos. Extrae la ventana de detección y verifica: conteo de cuentas distintas, intentos por cuenta, orden, agentes de usuario y distribución de códigos de error. Las detecciones ocasionalmente se disparan por tormentas de restablecimiento de contraseñas del helpdesk, así que verifica la forma por ti mismo.
- Enriquece la fuente. Tipo de ASN, flags de proxy, historial de abuso. E inmediatamente verifica si el mismo User Agent o ASN aparece desde otras IPs en la misma ventana, porque los sprays modernos rotan la infraestructura.
- Ejecuta el success check. Filtra el cluster del spray por cualquier sign-in exitoso. Está única query decide si estás ajustando una detección o trabajando en una brecha. Hazlo en los primeros cinco minutos, no al final.
- Nota los objetivos. ¿Son aleatorios, alfabéticos o curados (ejecutivos, finanzas, cuentas de servicio)? Una lista curada significa que el actor hizo su tarea, lo que eleva la severidad.
Fase 2 - Validación (¿es realmente un spray y tuvo éxito?)
- Descarta los gemelos de falsos positivos: una ola de expiración de contraseñas (muchos usuarios fallando tras un reset forzado, pero desde sus dispositivos y ubicaciones normales, con múltiples reintentos), una cuenta de servicio mal configurada martilleando una credencial, o una tormenta de reintentos de una app móvil. La pista son los intentos por cuenta: los humanos y las apps rotas reintentan, los sprays no.
- Si existe un éxito, valídalo como una cuenta comprometida: registro de dispositivos, detalles de MFA, ubicación frente a la línea base del usuario. Un éxito en autenticación legacy (
BAV2ROPCy amigos) omite el MFA por completo, así que trátalo como comprometido hasta que se demuestre lo contrario. - Verifica bloqueos y fallos de MFA alrededor de la ventana. Un pico de bloqueos 50053 o una ola de denegaciones de MFA significa que el spray está teniendo éxito parcial en contraseñas correctas incluso donde el MFA sostuvo la puerta.
Fase 3 - Alcance (mide la campaña, luego el daño)
- Amplía la ventana de tiempo. Los sprays se ejecutan durante días o semanas. Toma la huella de infraestructura (ASN, User Agent, rangos de IP) y búscala hacía atrás 30 días. La ventana de la alerta rara vez es la campaña completa.
- Amplía la infraestructura. Busca el mismo User Agent y patrón de tiempo desde otras IPs. La rotación de proxies rompe la detección basada en IP, pero el User Agent y el ritmo de un intento por cuenta suelen persistir.
- Para cada sign-in exitoso: extrae la actividad posterior al sign-in desde el unified audit log. Acceso al buzón, reglas de bandeja de entrada, acceso a archivos, correo interno enviado. Una cuenta de servicio lanzada por un spray que inmediatamente comienza a enviar correos es tu brecha en progreso.
- Inventaría la contraseña que funcionó. Si la misma contraseña funcionó en múltiples cuentas, cada cuenta que comparte ese patrón (estacional, basada en el nombre de la empresa) está en riesgo incluso si aún no ha sido golpeada.
- Verifica la cobertura de MFA en cada cuenta objetivo. El atacante ahora sabe qué cuentas existen. Cualquier cuenta objetivo sin MFA, o alcanzable mediante autenticación legacy, permanece en riesgo después de que cierres este ticket.
Fase 4 - Escalación
Escala cuando exista cualquier éxito, cuando las cuentas objetivo incluyan identidades privilegiadas o de finanzas, cuando la campaña abarque múltiples días o infraestructura rotativa, o cuando la actividad posterior al sign-in muestre que el actor está haciendo algo.
Entrega al IR un paquete, no un número de ticket: el cronograma de la campaña, la lista completa de objetivos, los eventos de éxito con actividad posterior al sign-in, los indicadores de infraestructura y las acciones que ya tomaste con sus marcas de tiempo. La Sección 7 produce exactamente ese paquete.
Fase 5 - Consideraciones de contención
- Para cuentas confirmadas como comprometidas: revoca sesiones y refresca tokens primero, luego restablece las contraseñas, luego busca persistencia (reglas de buzón, registros de MFA, consentimientos de app). El mismo orden que cualquier toma de cuenta, sesiones antes de contraseñas, siempre.
- Bloquea la infraestructura: IPs, luego el ASN mediante conditional access si es puramente hosting. Espera que el actor rote, por lo que el bloqueo es contención, no resolución.
- Elimina el punto de entrada: si la autenticación legacy fue la puerta, este incidente es tu caso de negocio para deshabilitarla en toda la organización, o al menos para cada cuenta que no tenga una excepción documentada.
- Cuentas objetivo pero no comprometidas: no es necesario un reset masivo si el MFA sostuvo, pero marca cualquier cuenta objetivo sin MFA para inscripción inmediata, y considera un restablecimiento de contraseña para cuentas que coincidan con el patrón de la contraseña lanzada.
- Preserva la evidencia antes de la limpieza. Exporta el slice de sign-in y la actividad del audit log antes de eliminar reglas o restablecer cualquier cosa.
PUNTO CLAVE: El orden importa. Sesiones primero, luego contraseña, luego búsqueda de persistencia. Y no te detengas en la única cuenta que se bloqueó o alertó. El spray tocó a todos en la lista, y el actor conserva la lista.
El Paquete de Queries - Búsquedas que hacen el trabajo
Escritos en KQL para Microsoft Sentinel porque es el stack más común en el que veo a los analistas de nivel inicial. La lógica se traduce directamente a Splunk SPL o cualquier otro lenguaje de consultas: mismos campos, diferente sintaxis. Cambia los valores y ejecútalos en orden durante una investigación en vivo.
1. Confirmar el patrón de spray en la ventana
SigninLogs
| where TimeGenerated between (datetime(2026-06-10 00:00) .. datetime(2026-06-10 03:00))
| where IPAddress == "45.155.204.18"
| summarize Attempts=count(), Accounts=dcount(UserPrincipalName),
Errors=make_set(ResultType), Agents=make_set(UserAgent)
| extend PerAccount = todouble(Attempts) / Accounts2. El success check (ejecutar primero, ejecutar último)
SigninLogs
| where TimeGenerated > ago(7d)
| where IPAddress == "45.155.204.18" or UserAgent == "BAV2ROPC"
| where ResultType == 0
| project TimeGenerated, UserPrincipalName, IPAddress, AppDisplayName,
ClientAppUsed, AuthenticationRequirement, UserAgent3. Encontrar el resto de la campaña a través de IPs rotativas
SigninLogs
| where TimeGenerated > ago(30d)
| where UserAgent == "BAV2ROPC" and ResultType == 50126
| summarize Attempts=count(), Accounts=dcount(UserPrincipalName),
FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated) by IPAddress
| where Accounts > 10
| sort by FirstSeen asc4. Obtener la lista completa de objetivos con exposición de MFA
SigninLogs
| where TimeGenerated > ago(7d)
| where IPAddress == "45.155.204.18"
| distinct UserPrincipalName
| join kind=leftouter (SigninLogs | where TimeGenerated > ago(30d)
| where ClientAppUsed !in ("Browser","Mobile Apps and Desktop clients")
| distinct UserPrincipalName, ClientAppUsed)
on UserPrincipalName5. Actividad posterior al sign-in para cualquier éxito
OfficeActivity
| where TimeGenerated > ago(3d)
| where UserId =~ "svc-scanner@contoso.com"
| project TimeGenerated, Operation, OfficeWorkload, ClientIP, Parameters
| sort by TimeGenerated ascEjecuta uno por uno del uno al cinco en orden y habrás confirmado el patrón, respondido la única pregunta que importa, mapeado la campaña, medido tu exposición y acotado el daño. Esa es una investigación de spray defendible en cinco queries.
Sección 4 - Recolección de evidencia
Dónde reside la evidencia
| Fuente | Qué proporciona | Plataforma típica |
|---|---|---|
| Sign-in logs | El patrón del spray mismo: cuentas, IPs, códigos de error, agentes de usuario, éxitos | Entra ID, Okta syslog, Google Workspace login audit |
| Detecciones de riesgo | Flags de spray nativos de la plataforma y eventos de riesgo por usuario en cualquier éxito | Entra ID Protection, Okta ThreatInsight |
| Unified audit log | Actividad posterior al sign-in para cuentas comprometidas: buzón, archivos, reglas | Microsoft Purview UAL, Google admin audit |
| Reportes de autenticación legacy | Qué cuentas y apps todavía se autentican mediante protocolos ciegos de MFA | Entra sign-in logs filtrados por client app, CA insights |
| Logs de Firewall / edge | Tráfico de spray que nunca llegó a la plataforma de identidad, más la rotación de infraestructura | Firewall perimetral, WAF, SASE |
| Eventos de seguridad de AD | Sprays en premisas: 4625 fallos, 4740 bloqueos, 4624 éxitos tipo 3 | Logs de seguridad del controlador de dominio |
| Logs de correo | Qué envió un buzón comprometido después, phishing interno en vuelo | Exchange message trace, secure email gateway |
Tabla de códigos de error
Los códigos de resultado de Entra ID conllevan la mitad de la investigación. Estos son los que leerás constantemente durante un spray:
| Código | Significado | Qué te dice en un spray |
|---|---|---|
| 50126 | Nombre de usuario o contraseña inválidos | La cuenta existe, la adivinanza fue incorrecta. El ruido de fondo del spray. |
| 0 | Éxito | El incidente. Todo pivota sobre estos. |
| 50053 | Cuenta bloqueada | El spray cruzó el umbral de bloqueo, o está reutilizando intentos previos. |
| 50034 | La cuenta no existe | Lista de objetivos obsoleta. Una alta proporción de 50034 indica un actor perezoso o datos de brechas antiguos. |
| 50057 | Cuenta deshabilitada | Están lanzando sprays a cuentas de personas que ya no están. Confirma una lista extraída o vulnerada. |
| 50055 | Contraseña expirada | La adivinanza fue CORRECTA pero la contraseña expiró. Trata la cuenta como conocida comprometida. |
| 50076 / 50074 | MFA requerido | La adivinanza fue CORRECTA y el MFA sostuvo la puerta. Fuerza un reset, la contraseña está quemada. |
| 53003 | Bloqueado por conditional access | La política sostuvo la puerta. Verifica cuál política para saber qué está funcionando. |
Los dos códigos que todos pasan por alto
50055 y 50076 son éxitos disfrazados de fallos. Ambos significan que el atacante adivinó la contraseña correcta y solo la expiración o el MFA se interpusieron. Cualquier cuenta que muestre estos dentro de un cluster de spray necesita un restablecimiento de contraseña hoy mismo, porque el actor intentará esa credencial en cualquier otro lugar donde el usuario la haya reutilizado.
Preguntas que impulsan la búsqueda de evidencia
- ¿Tuvo éxito algún intento dentro del cluster, en cualquier protocolo, en cualquier momento en los últimos 30 días?
- ¿Cuántos intentos por cuenta? Uno significa spray. Muchos significan Brute force o una app rota.
- ¿Qué User Agents y ASNs definen el cluster, y aparecen desde otras IPs?
- ¿Qué cuentas objetivo carecen de MFA o son alcanzables mediante autenticación legacy?
- ¿Alguna cuenta devolvió 50055 o 50076, significando que la contraseña fue adivinada correctamente?
- ¿De dónde vino la lista de objetivos? ¿Incluye leavers, listas de distribución o solo usuarios reales?
- ¿La misma huella está golpeando otros tenants, subsidiarias o el AD on-prem?
Artefactos a capturar sobre la marcha
- El slice de sign-in del ciclo completo de la campaña, exportado, no capturado en pantalla.
- La lista completa de objetivos con el MFA por cuenta y la exposición a la autenticación legacy anotada.
- Todos los eventos de éxito, incluyendo los eventos 50055 y 50076 con todo el detalle.
- Indicadores de infraestructura: IPs, ASNs, User Agents, patrones de tiempo.
- Actividad de auditoría posterior al sign-in para cada cuenta comprometida, capturada antes de la limpieza.
Sección 5 - Tomando la decisión
Cada investigación de spray termina en uno de tres veredictos. El veredicto surge del montón de evidencia, no de tu instinto.
Veredicto 1 - True Positive (spray real, y posiblemente una brecha)
- Muchas cuentas distintas, un intento cada una, desde una huella de infraestructura compartida.
- Orden de objetivos alfabético o curado, agentes de usuario de autenticación legacy, ASNs de hosting o proxy, IPs rotativas.
- Mezcla de errores dominada por 50126 con el ocasional 50053, 50057 o los peligrosos 50055 y 50076.
- Cualquier éxito dentro del cluster eleva esto de spray real a incidente activo.
Veredicto 2 - False Positive (la lógica de detección falló)
- Ola de expiración de contraseñas: un reset forzado o una política de expiración acaba de activarse, y docenas de usuarios están fallando desde sus propios dispositivos registrados, ubicaciones normales, con múltiples reintentos. El conteo de intentos por cuenta lo delata instantáneamente.
- Servicio o app mal configurada: una identidad (o la credencial almacenada de una app) fallando repetidamente en muchos endpoints después de un cambio de contraseña que nadie propagó. Misma cuenta una y otra vez no es un spray.
- Actividad de helpdesk o migración: operaciones masivas de cuentas, herramientas de sincronización o tráfico de pruebas de penetración que nadie le dijo al SOC. Confirma con el equipo y documenta la fuente.
Veredicto 3 - Benigno True Positive (spray real, totalmente repelido)
- El patrón es un spray genuino, pero el success check sale vacío a través de la ventana completa de la campaña, no aparecen 50055 o 50076, y el MFA o el conditional access sostuvo en todas partes.
- Esto todavía no es un “cerrar y olvidar”. Bloquea la infraestructura, registra los indicadores, marca las cuentas objetivo sin MFA y escribe la nota de cierre como si un analista futuro la leyera durante la próxima campaña, porque lo hará. El actor conserva la lista y usualmente vuelve.
Matriz de decisión
| Señal | Se inclina hacia spray real | Se inclina hacia falso positivo |
|---|---|---|
| Intentos por cuenta | Exactamente uno, tal vez dos | Muchos reintentos por cuenta |
| Fuente | Hosting, redes de proxy, IPs rotativas, User Agent compartido extraño | Dispositivos propios de usuarios, rangos corporativos, clientes normales |
| Orden de objetivos | Alfabético, con forma de lista, incluye leavers | Tiempos aleatorios que coinciden con patrones humanos de trabajo |
| Protocolo | Autenticación legacy, clientes scripteados | Autenticación moderna desde apps conocidas |
| Contexto de Trigger | Ningún cambio interno explica el evento | Expiración de contraseña, migración o evento de reset el mismo día |
NINGUNA SEÑAL INDIVIDUAL DECIDE. Una tormenta de bloqueos la mañana después de un cambio en la política de contraseñas es probablemente culpa de IT. Una tormenta de bloqueos a las 2 AM desde un ASN de hosting con un intento por cuenta no lo es. Apila las señales y toma la decisión.
Drill - Tres alertas, tú tomas la decisión
Lee cada escenario, decide tu veredicto y luego verifica la respuesta. Estos son compuestos de investigaciones reales y mapean directamente a las preguntas de escenario en las entrevistas.
Escenario A
Lunes 9:05 AM, se dispara la alerta: 60 cuentas con sign-ins fallidos en 30 minutos. Extraes los logs: los fallos provienen de docenas de IPs residenciales y corporativas diferentes que coinciden con la ubicación normal de cada usuario, la mayoría de las cuentas muestran de tres a cinco reintentos, código de error 50126, clientes de autenticación moderna. El calendario de cambios de IT muestra que un reset forzado de contraseñas se completó el domingo por la noche.
Veredicto: False Positive. Ola de expiración, texto de libro. Reintentos por cuenta, infraestructura propia de los usuarios, y un cambio interno que explica el tiempo. Ciérralo citando el registro de cambio y sugiere que la detección excluya ventanas que sigan resets programados.
Escenario B
Martes 2:40 AM, se dispara la alerta: 130 cuentas, un intento cada una, alfabético, desde seis IPs a través de dos ASNs de hosting, User Agent BAV2ROPC en todo, 50126 en toda la tabla. Success check a través del cluster completo y una revisión de 30 días: cero éxitos, cero 50055, cero 50076. El conditional access muestra bloqueos 53003 en el endpoint legacy, que fue deshabilitado en toda la organización el trimestre pasado.
Veredicto: Benigno True Positive. Spray real, totalmente repelido por el bloqueo de autenticación legacy. Bloquea la infraestructura, registra los indicadores, confirma que cada cuenta objetivo tiene MFA y cierra con una nota que los analistas futuros puedan reutilizar. Esto también es evidencia gratuita para el liderazgo de que el proyecto de autenticación legacy valió la pena.
Escenario C
Mismo martes, 3:15 AM: mientras documentas el Escenario B, vuelves a ejecutar el success check con el pivot del User Agent en lugar de las IPs. Una séptima IP, con el mismo agente BAV2ROPC, muestra un éxito a las 2:58 AM en hr-onboarding@contoso.com, un buzón compartido. El audit log muestra que la sesión leyó el correo en cuatro minutos y creó una regla de bandeja de entrada llamada ; que elimina mensajes entrantes que contengan la palabra “suspicious”.
Veredicto: True Positive, incidente activo. El pivot de rotación captó lo que el filtro de IP omitió, que es exactamente por lo que la query tres del paquete caza la huella, no la dirección. Revoca sesiones, restablece, elimina la regla después de exportar, bloquea la nueva infraestructura y escala con el cronograma. Los buzones compartidos sin MFA son “spray candy”. Espera que el postmortem pregunte por qué este uno tenía autenticación legacy habilitada.
Sección 6 - Recorrido completo de la investigación
Trabajemos la alerta de la Sección 2 de principio a fin, exactamente como yo esperaría que un analista sólido la ejecute. Los tiempos son el tiempo transcurrido en la investigación.
00:00 a 00:05 - Triaje
Extrae la ventana de detección. Patrón confirmado: 94 cuentas distintas, un intento cada una, alfabético, todo desde 45.155.204.18, un ASN de hosting con historial de abuso, User Agent BAV2ROPC en cada evento. Mezcla de errores: 91 x 50126, 2 x 50053, 1 éxito.
El success check ya respondió por sí mismo dentro de la alerta: svc-scanner@contoso.com tuvo éxito a las 01:41. Este es un incidente activo, no un ejercicio de ajuste. Establece la prioridad en consecuencia.
00:05 a 00:15 - Validación
El evento de éxito: autenticación SMTP legacy, sin prompt de MFA (la autenticación legacy no puede hacerlo), la fuente es la misma IP del spray. svc-scanner es una cuenta de servicio creada hace años para un escáner de red, contraseña nunca rotada, sin excepción de conditional access documentada. Nada sobre está sesión puede ser el servicio legítimo, que se autentica desde una dirección interna.
Confirmado el compromiso a los 12 minutos transcurridos.
Los dos bloqueos 50053 reciben una nota para seguimiento, y un escaneo por 50055 y 50076 a través de la ventana sale vacío.
00:15 a 00:40 - Alcance
La query tres del paquete, pivotando en el User Agent a través de 30 días, revela la campaña: la misma huella desde 14 IPs a través de tres ASNs de hosting durante nueve noches, aproximadamente 2,600 intentos contra 700 cuentas distintas, regulados a un intento por cuenta por noche.
La lista de objetivos incluye 38 cuentas de leavers deshabilitadas, confirmando datos extraídos o vulnerados. El audit log de svc-scanner muestra que la sesión enumeró el GAL y accedió al buzón pero no envió nada todavía. Query de exposición de MFA: 11 de las 700 cuentas objetivo se autentican mediante protocolos legacy, todas cuentas de servicio o buzones compartidos. Todo se exporta antes de tocar nada.
00:40 a 00:55 - Escalación y Contención
Escalado al IR con el paquete: cronograma de campaña de nueve noches, lista de objetivos con Análisis de exposición, la cuenta comprometida, actividad de auditoría, indicadores de infraestructura.
Con aprobación:
- sesiones revocadas para
svc-scannera los 00:42 transcurridos - restablecimiento de contraseña
- la cuenta se mueve detrás de conditional access pendiente de reconstrucción
- las 14 IPs y los tres ASNs bloqueados
- cambio de emergencia solicitado para deshabilitar la autenticación legacy para las 10 cuentas expuestas restantes
- las dos cuentas bloqueadas reciben reseteos proactivos
- feedback de detección enviado: el analítico alertó en la noche nueve de una campaña de nueve noches porque el volumen por noche estuvo bajo el umbral, así que una versión de 7 días rodantes de la query tres se envía como un nuevo analítico
Causa raíz y cierre
Cadena de causa raíz: una contraseña de cuenta de servicio nunca rotada que coincide con un patrón común, expuesta mediante autenticación SMTP legacy, encontrada por un actor paciente con un directorio extraído. La nota de cierre documenta la cadena, el alcance de la campaña y la solución sistémica en curso.
El verdadero éxito no es el ticket cerrado, es el apagado de la autenticación legacy que hace que la próxima campaña de nueve noches produzca un Escenario B limpio en lugar de este.
LO QUE HIZO QUE Está INVESTIGACIÓN FUERA BUENA: El analista ejecutó el success check primero, pivotó en la huella en lugar de confiar en una IP, amplió la ventana para encontrar la campaña real, midió la exposición en lugar de solo el daño, y convirtió el incidente en una solución sistémica. Cada uno de estos hábitos es una pregunta que hago en las entrevistas.
Sección 7 - Notas del analista
Imprime estás o recréalas en tu herramienta de tickets. Rellénalas durante tu próxima investigación real de spray. La estructura a continuación es el paquete de escalación de la Sección 3, fase 4.
Checklist de Triaje (ejecuta antes de cualquier otra cosa)
- Ventana de detección extraída y patrón verificado en logs brutos
- Conteo de cuentas distintas / intentos por cuenta / orden anotado
- Fuente enriquecida: IPs, tipos de ASN, flags de proxy, historial de abuso
- Cluster de User Agent identificado y pivotado a través de otras IPs
- SUCCESS CHECK ejecutado a través de todo el cluster y revisión de 30 días
- Escaneo de 50055 / 50076 (adivinanzas correctas bloqueadas por expiración o MFA)
- Bloqueos (50053) dentro de la ventana listados para seguimiento
- Lista de objetivos caracterizada: aleatorio / alfabético / curado / leavers
- Exposición de MFA y autenticación legacy mapeada para todas las cuentas objetivo
- Explicaciones internas descartadas: ola de expiración, migración, prueba de penetración
- Evidencia exportada antes de cualquier acción de contención
- Privilegios de la cuenta revisados para cualquier éxito: admin / finanzas / servicio
CONSEJO DE CAMPO: En un spray, anota la definición del cluster (IPs, ASNs, User Agent, ventana) en el momento en que te decidas por él, porque cada query que ejecutes después dependerá de ello. Cuando la campaña resulte más grande que la alerta, tus notas deben mostrar exactamente cuándo y por qué amplias la red. Los revisores lo comprueban.
Qué contiene un Paquete de Escalación Completo
- Cronograma de la campaña con la definición del cluster y cómo evolucionó a medida que ampliaste la búsqueda.
- Lista completa de objetivos con exposición de MFA y autenticación legacy anotada por cuenta.
- Cada evento de éxito, incluyendo eventos 50055 y 50076 con todo el detalle de sign-in y actividad posterior al sign-in.
- Indicadores de infraestructura listos para bloqueo: IPs, ASNs, User Agents, patrones de tiempo.
- Acciones ya tomadas con marcas de tiempo, y las exportaciones de evidencia que prueban el estado antes de la limpieza.
Investigación 1
| Campo | Valor |
|---|---|
| Encabezado de investigación | Alert ID: ____________ Fecha/hora de apertura: ____________ |
| Definición del cluster | IPs / ASNs / user agent / ventana |
| Cuentas objetivo | ____________ |
| Éxitos | ____________ |
| 50055 / 50076 | ____________ |
Hallazgos
| Campo | Valor |
|---|---|
| Cronograma de la campaña (UTC) | |
| Indicadores observados | IPs / ASNs / user agents / cuentas |
| Causa raíz | |
| Acciones tomadas | Con marcas de tiempo |
| Recomendaciones y feedback de detección |
Investigación 2
| Campo | Valor |
|---|---|
| Encabezado de investigación | Alert ID: ____________ Fecha/hora de apertura: ____________ |
| Definición del cluster | IPs / ASNs / user agent / ventana |
| Cuentas objetivo | ____________ |
| Éxitos | ____________ |
| 50055 / 50076 | ____________ |
Hallazgos
| Campo | Valor |
|---|---|
| Cronograma de la campaña (UTC) | |
| Indicadores observados | IPs / ASNs / user agents / cuentas |
| Causa raíz | |
| Acciones tomadas | Con marcas de tiempo |
| Recomendaciones y feedback de detección |
Glosario - Términos que encontrarás en el turno
| Término | Definición |
|---|---|
| Password spray | Una contraseña probada una vez contra muchas cuentas, diseñada para mantenerse bajo los umbrales de bloqueo. Es lo inverso al Brute force. |
| Brute force | Muchas contraseñas contra una cuenta. Muere contra las políticas de lockout, por lo que los sprays lo reemplazaron. |
| Low and slow | Ritmo de intentos (por cuenta, por hora, por noche) para mantenerse bajo los umbrales de detección y lockout. |
| Autenticación legacy | Protocolos antiguos (IMAP, POP, SMTP auth, clientes antiguos de Office) que no pueden realizar MFA. Una contraseña adivinada sobre autenticación legacy es un compromiso completo. |
| BAV2ROPC | Un string de User Agent que indica un flujo de password de owner de recursos en entornos de Microsoft. Una de las señales de spray más fuertes en los logs de sign-in. |
| Código de resultado 50126 | Nombre de usuario o contraseña inválidos en Entra ID. El ruido de fondo de cada spray. |
| Códigos de resultado 50055 / 50076 | Contraseña expirada y MFA requerido. Ambos significan que la adivinanza fue CORRECTA. Trata esas contraseñas como quemadas. |
| Bloqueo de cuenta (lockout) | Política que desactiva el sign-in después de N fallos. Protege contra el Brute force, mayormente ciego a los sprays por diseño. |
| Red de proxies residenciales | Infraestructura del atacante que enruta el tráfico a través de conexiones domésticas reales, rompiendo la detección basada en IP y ASN. Caza el User Agent y el ritmo en lugar de la dirección. |
| Conditional access | Motor de políticas que bloquea sign-ins basados en ubicación, dispositivo, protocolo y riesgo. Tu defensa estructural más fuerte y tu palanca de contención. |
| Cuenta de servicio | Identidad no humana utilizada por sistemas. Frecuentemente con contraseñas viejas, sin MFA, con autenticación legacy, y nadie las vigila. |
| Spray candy | Enumeración del GAL (Global Address List). Extraer la lista de direcciones globales tras un compromiso es el primer movimiento común dentro de un buzón lanzado por spray. |
Sección 8 - Referencia rápida
La versión de una sola página. Manténla abierta en el turno.
Primeros cinco minutos
- Verifica el patrón: cuentas distintas, un intento cada una, orden, User Agent, mezcla de errores.
- Ejecuta el success check a través de todo el cluster. Está es la investigación.
- Escanea por 50055 y 50076: adivinanzas correctas que la expiración o el MFA detuvieron. Esas contraseñas están quemadas.
Decidiendo
- Spray real: un intento por cuenta, infraestructura de hosting o proxy, agentes de autenticación legacy, objetivos con forma de lista, sin explicación interna.
- Falso positivo: múltiples reintentos por cuenta, dispositivos propios de usuarios, ola de expiración o migración.
- Spray repelido es todavía un hallazgo: bloquea, registra indicadores, corrige brechas de MFA, escribe una nota de cierre reutilizable.
Si algo tuvo éxito
- Revoca sesiones y tokens PRIMERO, luego restablece la contraseña.
- Extrae la actividad posterior al sign-in. Busca persistencia: reglas de buzón, registros de MFA, consentimientos.
- Pivota en la huella (User Agent, ritmo), no solo en la IP. Los sprays rotan.
- Amplía a 30 días. La ventana de la alerta rara vez es la campaña completa.
- Mapea la exposición de MFA y autenticación legacy en cada cuenta objetivo.
SIEMPRE: Preserva la evidencia antes de la limpieza. Exporta logs, captura pantallas de reglas. Convierte el incidente en una solución sistémica: elimina la autenticación legacy, rota las cuentas de servicio obsoletas.
Bonus - Cómo aparece el Password Spray en tu entrevista
Yo realizo entrevistas técnicas para roles de analista e ingeniería, y el Password spray es una constante en ellas porque pone a prueba si piensas en patrones en lugar de eventos individuales. Aquí hay cinco preguntas en el formato exacto en que las hago, con lo que una respuesta sólida cubre. Cada respuesta es una sección de este cuaderno dicha en voz alta.
Preguntas de la entrevista
Pregunta 1: ¿Cuál es la diferencia entre un ataque de Brute force y un Password spray?
Una cuenta muchas contraseñas versus muchas cuentas una contraseña, y la razón: evasión de lockout. Las respuestas sólidas añaden que los sprays explotan la contraseña más débil en el directorio y que las políticas de bloqueo son estructuralmente ciegas a ellos. Está pregunta es un filtro. Sé preciso.
Pregunta 2: Se dispara una alerta de spray que muestra 200 sign-ins fallidos. ¿Cuál es tu primer movimiento?
El success check. Los candidatos sólidos dicen esto casi antes de que termine la pregunta: filtra el cluster para cualquier éxito, además de los códigos de contraseñas expiradas y MFA requerido que significan una adivinanza correcta. Los candidatos débiles empiezan a hablar de bloquear la IP, lo que trata el síntoma mientras una posible brecha permanece sin examinar.
Pregunta 3: ¿Por qué la autenticación legacy es importante en un spray?
Porque los protocolos legacy no pueden realizar MFA, una adivinanza correcta sobre autenticación IMAP o SMTP auth se convierte directamente en una sesión activa. Puntos extra por nombrar BAV2ROPC como la pista en los logs y por decir que la solución a largo plazo es deshabilitar la autenticación legacy en toda la organización, no solo bloquear las IPs de está semana.
Pregunta 4: El spray vino de 40 IPs residenciales diferentes. ¿Y ahora qué?
Pivota fuera de la dirección hacía la huella: User Agent compartido, ritmo de un intento por cuenta, ventanas de tiempo, orden de objetivos. La rotación de proxies residenciales derrota el bloqueo de IP, así que la caza y el bloqueo se mueven hacía un nivel superior. Está es la pregunta que separa el pensamiento de Nivel 2 del Nivel 1.
Pregunta 5: ¿Cómo evitarías que esto vuelva a funcionar la próxima vez?
Las respuestas estructurales ganan: deshabilitar la autenticación legacy, imponer MFA en todas partes incluyendo cuentas de servicio y compartidas, conditional access en protocolo y ubicación, listas de contraseñas prohibidas que maten los patrones estacionales, y un analítico de spray rodante de múltiples días en lugar de un umbral de ventana única. Estás demostrando que piensas en el entorno, no solo en el ticket.
Ese es el cuaderno, colegas. Trabaja los próximos sprays con está estructura y el success check se convertirá en memoria muscular. Otros volúmenes de está serie cubren las otras alertas con las que vivirás en el turno. ---
Jbird, jbirdcyber.gumroad.com