Descripción general de las reglas de detección
Lenguaje de reglas de YARA-L
YARA-L es un lenguaje de reglas de detección desarrollado por Google. El objetivo de YARA-L es dejar de usar las detecciones como simples consultas de datos y pasar a investigaciones reales basadas en eventos. YARA-L se deriva del lenguaje YARA que se usa de uso frecuente en el análisis de software malicioso. La L significa registros. YARA-L te permite aprovechar toda la información de varias fuentes dentro de las detecciones y correlacionar esos eventos en alertas prácticas. Para obtener más información, consulta la Descripción general de l lenguaje YARA-L 2.0.
Ejemplo de reglas de detección de Google Security Operations
Para ayudar a acelerar la adopción del motor de detección de Google SecOps, hay un repositorio de GitHub con reglas de ejemplo. Este repositorio contiene varias categorías diferentes de reglas de detección, incluidas las siguientes:
- Google Cloud CloudAudit
- Google Workspace
- Advertencias informativas
- Software malicioso
- MITRE ATT&CK
- Reglas principales del SOC
- Eventos sospechosos
Cada categoría adopta un enfoque específico en la forma en que ve las fuentes de datos y especifica qué eventos y qué instrucciones coincidentes se deben usar.
Ejemplo de reglas y ajuste
La siguiente regla crea una variable de evento $e1 que se usa para hacer un seguimiento del tipo de evento. La variable de evento puede ser cualquier valor que tenga significado para los datos que se evalúan. El campo UDM que se evalúa en este evento es metadata.eventype, por lo que tiene sentido llamarlo e1. Las siguientes líneas buscan ocurrencias específicas de coincidencias de expresiones regulares dentro de e1. La condición que crea una detección en Google SecOps es cada vez que se produce el evento $e1. Para fines de ajuste, se proporciona una condición not para excluir ciertas rutas no maliciosas para el argumento de la línea de comandos. Se podrían agregar más condiciones not a esta regla si identificas falsos positivos frecuentes que provienen de otras rutas de acceso de archivos conocidas.
rule suspicious_unusual_location_svchost_execution
{
meta:
author = "Google Cloud Security"
description = "Windows 'svchost' executed from an unusual location"
yara_version = "YL2.0"
rule_version = "1.0"
events:
$e1.metadata.event_type = "PROCESS_LAUNCH"
re.regex($e1.principal.process.command_line, `\bsvchost(\.exe)?\b`) nocase
not re.regex($e1.principal.process.command_line, `\\Windows\\System32\\`) nocase
condition:
$e1
}
Especifica más de una variable de evento
YARA-L te permite tener más de una variable de evento en una regla. En el siguiente ejemplo, la regla tiene eventos $e1 y $e2. La condición establece la condición lógica que activa la detección.
rule ExcludeZeroValues {
meta:
author = "noone@google.com"
events:
$e1.metadata.event_type = "NETWORK_DNS"
$e1.principal.hostname = $hostname
// $e1.principal.user.userid may be empty string.
$e1.principal.user.userid != "Guest"
$e2.metadata.event_type = "NETWORK_HTTP"
$e2.principal.hostname = $hostname
// $e2.target.asset_id cannot be empty string as explicitly specified.
$e2.target.asset_id != ""
match:
// $hostname cannot be empty string.
$hostname over 1h
condition:
$e1 and $e2
}
Sección de resultados de las reglas
Usa la sección de resultados para establecer variables de retención dentro de la detección de reglas para proporcionar enriquecimiento para el consumo descendente. Por ejemplo, puedes agregar información de puntuación de gravedad que se basa en datos de los eventos que se analizan. La siguiente detección examina dos eventos para atribuir el valor $hostname. Si el valor $hostnames coincide durante un período de 5 minutos, se aplica una puntuación de gravedad. Cuando se usan períodos, el motor de detección de Google SecOps solo examina los bloques de tiempo discretos que especificas.
rule OutcomeRuleMultiEvent {
meta:
author = "noone@google.com"
events:
$u.udm.principal.hostname = $hostname
$asset_context.graph.entity.hostname = $hostname
$severity = $asset_context.graph.entity.asset.vulnerabilities.severity
match:
$hostname over 5m
outcome:
$risk_score =
max(
100
+ if($hostname = "my-hostname", 100, 50)
+ if($severity = "HIGH", 10)
+ if($severity = "MEDIUM", 5)
+ if($severity = "LOW", 1)
)
$asset_id_list =
array(
if($u.principal.asset_id = "",
"Empty asset id",
$u.principal.asset_id
)
)
$asset_id_distinct_list = array_distinct($u.principal.asset_id)
$asset_id_count = count($u.principal.asset_id)
$asset_id_distinct_count = count_distinct($u.principal.asset_id)
condition:
$u and $asset_context and $risk_score > 50 and not arrays.contains($asset_id_list, "id_1234")
}
Conclusión
YARA-L es un lenguaje de detección flexible que te permite examinar eventos de seguridad y no solo mostrar una consulta de datos. La variable de evento se usa para hacer un seguimiento de qué valores de campo se usan en la sección de condición de la regla. Puedes usar un solo evento, varios eventos a lo largo del tiempo, correlacionar fuentes para un solo valor (como $hostname de diferentes fuentes de datos) e incluso usar herramientas como expresiones regulares para proporcionar coincidencias. Es fundamental ajustar las reglas a tu propio entorno, y esto se puede hacer especificando exclusiones dentro de la lógica. También puedes usar listas de referencia para agrupar elementos y, luego, hacer referencia a esa lista en la regla. No olvides que Google SecOps no necesita que se generen alertas para todas las detecciones. Puedes hacer un seguimiento de las detecciones para varios propósitos y solo generar alertas sobre aquellas que consideres más importantes en tu entorno.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.