Reglas de detección predeterminadas

Disponible en:

Lenguaje de reglas 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 basadas en eventos. YARA-L se deriva del lenguaje YARA, que se usa habitualmente en el análisis de malware. La L significa registros. YARA-L te permite aprovechar toda la información de varias fuentes en las detecciones y correlacionar esos eventos en alertas útiles. Para obtener más información, consulta la descripción general del lenguaje YARA-L 2.0.

Reglas de detección de ejemplo de Google Security Operations

Para ayudarte a adoptar el motor de detección de SecOps de Google más rápido, hemos creado un repositorio de GitHub con reglas de ejemplo. Este repositorio contiene varias categorías de reglas de detección, entre las que se incluyen las siguientes:

  • CloudAudit de Google Cloud
  • Google Workspace
  • Advertencias informativas
  • Malware
  • MITRE ATT&CK
  • Reglas principales de SOC
  • Eventos sospechosos

Cada categoría adopta un enfoque específico en cuanto a cómo ve 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 registrar el tipo de evento. La variable de evento puede ser cualquier valor que tenga sentido para los datos que se están evaluando. El campo de UDM que se evalúa en este evento es metadata.eventype, por lo que tiene sentido llamarlo e1. Las líneas siguientes buscan ocurrencias específicas de coincidencias de expresiones regulares en e1. La condición que crea una detección en Google SecOps es cuando se produce el evento $e1. Para optimizar el rendimiento, se proporciona una condición not para excluir determinadas rutas no maliciosas del argumento de la línea de comandos. Se pueden añadir más condiciones not a esta regla si detecta falsos positivos frecuentes procedentes de otras rutas 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
}

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 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 definir variables de retención en la detección de reglas y proporcionar información adicional para el consumo posterior. Por ejemplo, puede añadir información de puntuación de gravedad que se base en los 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 periodo de 5 minutos, se aplica una puntuación de gravedad. Cuando se usan periodos, el motor de detección de Google SecOps solo examina los bloques de tiempo discretos que especifiques.

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 registrar qué valores de campo se están usando en la sección de condiciones de la regla. Puede usar un solo evento, varios eventos a lo largo del tiempo, correlacionar fuentes para obtener 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 entorno, y puedes hacerlo especificando exclusiones en la lógica. También puedes usar listas de referencia para agrupar elementos y, a continuación, hacer referencia a esa lista en la regla. No olvides que Google SecOps no necesita que se te avise de todas las detecciones. Puedes hacer un seguimiento de las detecciones con varios fines y solo recibir alertas de las que consideres más importantes en tu entorno.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.