Reglas de detección predeterminadas

Compatible con:

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 alejarse de las detecciones como solo consultas de datos a investigaciones reales basadas en eventos. YARA-L se deriva del lenguaje YARA que se usa comúnmente 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 del lenguaje YARA-L 2.0.

Reglas de detección de muestra de Google Security Operations

Para acelerar la adopción del motor de detección de operaciones de seguridad 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:

  • CloudAudit de Google Cloud
  • Google Workspace
  • Advertencias informativas
  • Software malicioso
  • MITRE ATT&CK
  • Reglas principales de 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 sentencias de coincidencia usar.

Ejemplo 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 la AUA que se evalúa en este evento es metadata.eventype, por lo que tiene sentido llamarlo e1. En las siguientes líneas, se buscan ocurrencias específicas de coincidencias de expresiones regulares dentro de e1. La condición que crea una detección en Google Security Operations es cada vez que se produce el evento $e1. Para realizar ajustes, se proporciona una condición not para excluir ciertas rutas no maliciosas del argumento de línea de comandos. Se pueden agregar más condiciones not a esta regla si identificas falsos positivos frecuentes provenientes de otras rutas de acceso a 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 los 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 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 downstream. Por ejemplo, puedes agregar información de puntuación de gravedad que se base 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 usas períodos, el motor de detección de Google Security Operations 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 los valores de campo que se utilizan en la sección de condiciones de la regla. Puedes usar un solo evento, varios eventos a lo largo del tiempo, correlacionar fuentes para un valor único (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. Para ello, especifica 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 Security Operations no necesita que se envíen alertas por cada detección. Puedes hacer un seguimiento de las detecciones para varios fines y solo alertar sobre aquellas que determines que son más importantes en tu entorno.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.