Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
fixing-google-secops-detections — Ajuste y refactorización de las detecciones curadas de Google Chronicle para eliminar la fatiga de alertas y corregir brechas/errores de lógica. | Kitploit
Herramientas/GitHubGitHub/all3xj/fixing-google-secops-detections
Herramientas DefensivasSeguridad en la NubeInteligencia de AmenazasDetección de IntrusionesAprendizaje y EducaciónRespuesta a IncidentesSeguridad de Correo ElectrónicoDetección de AnomalíasAnálisis de Registros

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHuball3xj/fixing-google-secops-detections

fixing-google-secops-detections

Ajuste y refactorización de las detecciones curadas de Google Chronicle para eliminar la fatiga de alertas y corregir brechas/errores de lógica.

Ver Repositorio
31hace 8 díasAún no revisado

Google SecOps (Chronicle) Detecciones Curadas: Análisis de Fallos y Ajuste

Este repositorio documenta fallos de diseño arquitectónico, discrepancias de lógica y estrategias de ajuste para las Detecciones Curadas nativas de Google SecOps (Chronicle).

Si bien Google Threat Intelligence (GTIG) ofrece una cobertura conceptual excepcional de amenazas (como el seguimiento de las campañas APT29/BRICKSTORM), las implementaciones YARA-L sin procesar de las reglas curadas a veces adolecen de descuidos de implementación, como contradicciones en la lógica de agrupación y variables de umbral codificadas. En entornos empresariales reales, esto provoca con frecuencia una fatiga masiva de alertas.

Este proyecto analiza por qué las reglas nativas se rompen o inundan el SOC, y comparte Reglas Personalizadas optimizadas y parches para resolver estos problemas.


📑 Tabla de Contenidos

  1. Fallo de Alertas de la Suite O365 para BRICKSTORM / APT29
    • Fallo 1: Contradicción en la Lógica de Agrupación
    • Fallo 2: Descuido del Cliente Público Móvil de Outlook
    • Fallo 3: Colisión de Buzones Compartidos
    • Soluciones YARA-L Ajustadas
  2. UEBA: Total de Intentos de Autenticación Anómalos
    • Fallo de Codificación Rígida y Fatiga de Alertas
    • Recomendaciones de Ajuste para UEBA

1. Fallo de Alertas de la Suite O365 para BRICKSTORM / APT29

Google publicó un conjunto de reglas para detectar la exfiltración masiva de correo electrónico desde Microsoft 365 Exchange Online mediante Principales de Servicio comprometidos (técnicas muy utilizadas por APT29/Midnight Blizzard).

Las reglas curadas afectadas son:

  • O365 Mailbox Access by Service Principal with Multiple User Agents
  • O365 Multiple Mailboxes Accessed by Service Principal
  • O365 Mailbox Access by Service Principal from Multiple ASNs
  • O365 Multiple Mailboxes Accessed via Microsoft Graph API

❌ Fallos Principales en la Lógica de Google

Este conjunto de reglas contiene desajustes lógicos sistémicos entre el objetivo declarado y la implementación YARA-L, probablemente debido a la reutilización de código en todo el paquete de reglas. Las reglas no logran distinguir adecuadamente entre Principales de Servicio automatizados y la actividad humana estándar, lo que genera alertas que se activan ante el comportamiento normal de los empleados.

Fallo 1: Contradicción en la Lógica de Agrupación

A pesar de que la descripción de la regla establece explícitamente: "Detecta un Principal de Servicio con un único ID de sesión de O365...", la sección match de YARA-L de la regla "Multiple User Agents" agrupa por $application_id en lugar del ID de sesión ($session_id). Esto contradice por completo el objetivo declarado de la regla, agregando inicios de sesión humanos no relacionados en una ventana de 3 horas simplemente porque utilizan la misma aplicación.

Fallo 2: Descuido del Cliente Público Móvil de Outlook

Las reglas rastrean patrones de comportamiento anómalos (cambios de IP, ASN o User-Agents) vinculados a un ClientAppId específico. Si bien Google incluye una expresión regular de exclusión para varias aplicaciones nativas de Microsoft, omitieron inexplicablemente el cliente móvil humano más ubicuo: la Aplicación Móvil de Microsoft Outlook (27922004-5251-4030-b22d-91ecd9a37ea4).

  • Impacto: Sin filtrar este Cliente Público, los empleados legítimos que leen buzones compartidos desde sus teléfonos inteligentes y se mueven entre redes (por ejemplo, cambiando de Wi-Fi a 4G) activan inherentemente las alertas de Multiple ASNs y Multiple IPs. Diferentes empleados que usan iOS y Android para consultar el mismo buzón departamental activan la alerta de Multiple User Agents.

Fallo 3: Colisión de Buzones Compartidos

Para identificar cuentas de servicio backend, la lógica de Google se basa en esta condición: $e.principal.user.userid != $e.target.user.userid

  • Impacto: Esta condición simplemente verifica si el ID del actor es diferente del propietario del buzón de destino. Si bien es cierto para los principales de servicio automatizados, también es un comportamiento estándar para empleados humanos que acceden a buzones compartidos o departamentales (por ejemplo, un operador que abre [email protected]). Este fallo de diseño genera un ruido masivo sobre el tráfico operativo humano estándar.

✅ Soluciones YARA-L Ajustadas para Reglas O365

Para corregir estos fallos de diseño, tienes dos opciones según tus necesidades operativas:

Opción 1: Exclusiones Nativas del SIEM (Solución Rápida) No necesariamente tienes que deshabilitar las reglas ni escribir código personalizado. Simplemente puedes crear una Exclusión directamente en la interfaz del SIEM de Google SecOps. Solo agrega una exclusión dirigida al ClientAppId de Outlook Mobile (27922004-5251-4030-b22d-91ecd9a37ea4) y a tus aplicaciones de respaldo autorizadas (por ejemplo, Keepit). Esto detiene de inmediato la inundación de falsos positivos mientras mantiene activas las reglas curadas de Google.

Opción 2: Implementar Reglas Personalizadas (Solución Arquitectónica) Si deseas corregir por completo los fallos subyacentes de la lógica de agrupación (como el desajuste de $application_id), debes deshabilitar las Detecciones Curadas e implementar Reglas Personalizadas. Las correcciones implican:

  1. Incluir explícitamente en la lista blanca Outlook Mobile (27922004-...).
  2. Incluir en la lista blanca las aplicaciones de respaldo empresarial autorizadas conocidas (por ejemplo, Keepit).
  3. Corregir las secciones match para agregar adecuadamente por sesión.
Regla Ajustada 1: Múltiples User Agents
root@kitploit:~
rule custom_ttp_o365_mailbox_access_by_service_principal_with_multiple_uas {
  meta:
    rule_name = "[CUSTOM] O365 Mailbox Access by Service Principal with Multiple User Agents"
    description = "Detects a Service Principal with a single O365 session ID accessing O365 mailboxes with multiple user agents. Tuned to fix grouping logic and exclude Outlook Mobile (Public Client) human traffic."
    severity = "Low"
    tactic = "TA0009"
    technique = "T1114.002"

  events:
    $e.metadata.log_type = "OFFICE_365"
    $e.metadata.product_event_type = "MailItemsAccessed" nocase
    $e.target.application = "Exchange"
    $e.security_result.detection_fields["RecordType"] = /^(2|50)$/
    
    // Extract actual Session ID and App ID
    $session_id = $e.network.session_id
    $application_id = $e.additional.fields["ClientAppId"]
    
    $e.principal.user.userid !=$e.target.user.userid
    
    ( 
      $e.network.http.user_agent = /AppId/ nocase or $e.additional.fields["ClientAppId"] = /./
    )
    
    // EXCLUSIONS: Added Outlook Mobile + Standard Google Exclusions
    $e.additional.fields["ClientAppId"] != /^(27922004-5251-4030-b22d-91ecd9a37ea4|bea75f7a-2505-46e8-9bf6-d3f7da9c9da7|b52893c8-bc2e-47fc-918b-77022b299bbc|...)$/ nocase

  match:
    // Group by both App AND Session to isolate the specific token lifecycle
    $application_id,$session_id over 3h

  outcome:
    $vendor_name = "Microsoft"
    $product_name = "Office 365"
    $source_ua_dc = count_distinct($e.network.http.user_agent)
    $client_app_id = array_distinct($e.additional.fields["ClientAppId"])

  condition:
    // Triggers if the SAME session rotates 2+ User Agents
    $e and $source_ua_dc >= 2
}

Regla Ajustada 2: Múltiples Buzones Accedidos

(Misma lógica, pero en las exclusiones asegúrate de incluir en la lista blanca tus soluciones de respaldo autorizadas como Keepit (a7cd46df...) junto con Outlook Mobile).

Regla Ajustada 3: Múltiples ASN

(A diferencia de la regla de User Agents, Google en realidad logró agrupar por $session_id correctamente en esta. Sin embargo, aún carece de la exclusión de Outlook Mobile. Sigue la misma lógica de exclusión anterior, manteniendo la condición en $source_asn_dc >= 2).

Regla Ajustada 4: Múltiples Buzones Accedidos mediante Microsoft Graph API

(Misma lógica. Asegúrate de agregar aplicaciones de respaldo autorizadas como Keepit (a7cd46df...) a la expresión regular de exclusión al final del bloque events).


2. UEBA: Total de Intentos de Autenticación Anómalos

Regla: Anomalous Auth Attempts Total by Principal Hostname and Target User ID

(Nota: UEBA significa "User and Entity Behavior Analytics" (Analítica de Comportamiento de Usuarios y Entidades). Estas reglas no utilizan firmas estáticas, sino que se basan en algoritmos matemáticos para establecer una línea base del comportamiento "normal" y alertar sobre desviaciones estadísticas).

❌ Fallo de Codificación Rígida y Fatiga de Alertas

Esta regla UEBA intenta detectar picos de autenticación anómalos calculando el promedio histórico y las desviaciones estándar durante 30 días.

  • Fatiga de Alertas: En nuestro entorno de producción, esta regla curada generó una tasa de Verdaderos Positivos increíblemente baja (~0.08%, con 2 tickets accionables de 2324 alertas). Es esencialmente ruido puro.
  • Fallo de Código: Google declara una variable $num_stddevs_away = max(2) al comienzo del bloque outcome. Sin embargo, en el cálculo de $historical_threshold, el desarrollador de Google codificó el valor 2 en lugar de usar la variable. Este error de programación impide que los analistas puedan anular fácilmente la sensibilidad mediante la interfaz o variables heredadas, sin tener que clonar y reescribir completamente la lógica YARA-L.

✅ Recomendaciones de Ajuste para UEBA

Las pruebas en entornos reales muestran que simplemente modificar los umbrales estadísticos (por ejemplo, aumentar $num_stddevs_away a 3 o 4, reducir $coefficient_of_variation_threshold de 0.1 a 0.05, o incrementar $observation_threshold a 15) es insuficiente: reduce los conteos de 710 a 111 alertas semanales, lo que sigue siendo excesivamente ruidoso para un equipo de analistas.

  • Enfoque Recomendado: Para inquilinos empresariales de SecOps, deshabilita las alertas del conjunto de reglas Broad para "Failed Authentications by Device" y depende estrictamente del canal de alertas Precise. Esta mitigación estructural es la única forma efectiva de detener la inundación de alertas.
  • Enfoque Personalizado Alternativo: Si debes mantenerla activa, clona la regla en una Regla Personalizada, corrige el 2 codificado dentro de $historical_threshold para que coincida con tu variable personalizada $num_stddevs_away, y aplica coeficientes de línea base más estrictos.

Descargo de responsabilidad: Estos ajustes se basan en experiencia real de respuesta a incidentes e ingeniería de SIEM. Siempre prueba las reglas YARA-L en tu entorno específico antes de implementarlas en producción.

Descargar herramienta