Reglas de detección predeterminadas

Lenguaje de reglas YARA-L

YARA-L es un lenguaje de reglas de detección desarrollado por Google. El propósito de YARA-L es pasar de las detecciones como solo consultas de datos a las investigaciones reales basadas en eventos. YARA-L se deriva del lenguaje YARA de uso general 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 ayudarte a acelerar la adopción del motor de detección de Google Security Operations, existe 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 del SOC
  • Eventos sospechosos

Cada categoría adopta un enfoque específico en cuanto a la forma en que ve las fuentes de datos y especifica qué eventos y declaraciones coincidentes usar.

Ejemplos de reglas y ajustes

La siguiente regla crea una variable de evento $e1 que se usa para realizar un seguimiento del tipo de evento. La variable del 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. En las siguientes líneas, se buscan casos específicos 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 fines de ajuste, se proporciona una condición not para excluir ciertas rutas de acceso 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 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 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 conservación dentro de la detección de reglas a fin de proporcionar enriquecimiento para el consumo posterior. Por ejemplo, puedes agregar 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 período de 5 minutos, se aplica una puntuación de gravedad. Cuando usas períodos, el motor de detección de operaciones de seguridad de Google 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 mostrar una consulta de datos. La variable del evento se usa para hacer un seguimiento de los valores de campo que 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 de un solo valor (como $hostname de diferentes fuentes de datos) y también 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 todas las alertas para recibir alertas. Puedes realizar un seguimiento de las detecciones para varios fines y solo alertar sobre aquellas que consideres más críticas en tu entorno.