Reglas de detección predeterminadas
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 considerar las detecciones como simples consultas de datos y utilizarlas para realizar investigaciones basadas en eventos. YARA-L se deriva del lenguaje YARA que se usa comúnmente en el análisis de malware. La letra 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 procesables. Para obtener más información, consulta la descripción general del lenguaje YARA-L 2.0.
Reglas de detección de muestra de Google Security Operations
Para acelerar tu adopción del motor de detección de SecOps de Google, hay un repositorio de GitHub con reglas de muestra. 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 sobre cómo visualiza las fuentes de datos y especifica qué eventos y declaraciones de coincidencia se deben usar.
Ejemplos de reglas y ajustes
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 de UDM que se evalúa en este evento es metadata.eventype
, por lo que tiene sentido llamarlo e1
. Las siguientes líneas buscan coincidencias específicas de expresiones regulares dentro de e1
. La condición que genera 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 del argumento de la línea de comandos. Se podrían agregar más condiciones not
a esta regla si identificas falsos positivos frecuentes provenientes 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
}
Cómo especificar 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 indica 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 resultado de las reglas
Usa la sección de resultados para establecer variables de retención dentro de la detección de reglas y proporcionar enriquecimiento para el consumo posterior. Por ejemplo, puedes agregar información de puntuación de gravedad que se basa en los datos de los eventos que se analizan. La siguiente detección examina dos eventos para atribuir el valor de $hostname
. Si el valor $hostnames
coincide durante un período de 5 minutos, se aplica una puntuación de gravedad. Cuando usas 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 devolver una consulta de datos. La variable de evento se usa para hacer un seguimiento de los valores de campo que se utilizan 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) y hasta 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 sobre cada detección. Puedes hacer un seguimiento de las detecciones para varios propósitos y solo generar alertas sobre aquellas que consideres más críticas en tu entorno.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.