Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Usa datos enriquecidos en contexto en las reglas

Para habilitar a los analistas de seguridad durante una investigación, Chronicle transfiere datos contextuales de diferentes fuentes, realiza análisis de los datos transferidos y proporciona contexto adicional sobre artefactos en el entorno de un cliente. En este documento, se proporcionan ejemplos de cómo los analistas pueden usar datos enriquecidos de manera contextual en las reglas del motor de detección.

Para obtener más información sobre cómo Chronicle enriquece los datos entrantes, los tipos de enriquecimiento realizados y los campos enriquecidos, consulta Enriquece los datos de UDM durante la transferencia de registros.

Campos de prevalencia enriquecidos en reglas

En los siguientes ejemplos, se muestra cómo usar los campos enriquecidos prevalenciados en el motor de detección. A modo de referencia, consulta la lista de campos enriquecidos relacionados con la prevalencia.

Cómo identificar el acceso de dominio de baja prevalencia

Esta regla de detección genera un evento de detección, no una alerta de detección, cuando se encuentra una coincidencia. Se usa principalmente como un indicador secundario cuando se investiga un elemento. Por ejemplo, hay otras alertas de gravedad más alta que activaron un incidente.

rule network_prevalence_low_prevalence_domain_access {

  meta:
    author = "Chronicle Security"
    description = "Detects access to a low prevalence domain. Requires baseline of prevalence be in place for effective deployment."
    severity = "LOW"

  events:
        $e.metadata.event_type = "NETWORK_HTTP"
        $e.principal.ip = $ip

        // filter out URLs with RFC 1918 IP addresses, i.e., internal assets
        not re.regex($e.target.hostname, `(127(?:\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$)|(10(?:\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$)|(192\.168(?:\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){2}$)|(172\.(?:1[6-9]|2\d|3[0-1])(?:\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){2})`)

        // only match valid FQDN, filter out background non-routable noise
        re.regex($e.target.hostname, `(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]`)
        $domainName = $e.target.hostname

        //join event ($e) to entity graph ($d)
        $e.target.hostname = $d.graph.entity.domain.name

        $d.graph.metadata.entity_type = "DOMAIN_NAME"
        // tune prevalence as fits your results
        $d.graph.entity.domain.prevalence.rolling_max <= 10

    match:
        $ip over 1h

    outcome:
      $risk_score = max(
          // increment risk score based upon rolling_max prevalence
          if ( $d.graph.entity.domain.prevalence.rolling_max >= 10, 10) +
          if ( $d.graph.entity.domain.prevalence.rolling_max >= 2 and $d.graph.entity.domain.prevalence.rolling_max <= 9 , 20) +
          if ( $d.graph.entity.domain.prevalence.rolling_max = 1, 30)
    )
    $domain_list = array_distinct($domainName)
    $domain_count = count_distinct($domainName)

  condition:
    $e and $d
}

Este es un ejemplo que muestra las detecciones generadas por esta regla.

Dominio de baja prevalencia de acceso Ver la imagen en una ventana nueva

Identificar el acceso a dominios con una puntuación de prevalencia baja

Esta regla se puede usar para detectar el acceso a dominios con una puntuación de prevalencia baja. Para que sean eficaces, debe existir un modelo de referencia de las puntuaciones de prevalencia de los artefactos. En el siguiente ejemplo, se usan listas de referencia para ajustar el resultado y se aplica un valor de prevalencia de umbral.

rule network_prevalence_low_prevalence_domain_access {
  meta:
    author = "Chronicle Security"
    description = "Detects access to a low prevalence domain. Requires baseline of prevalence be in place for effective deployment."
    severity = "LOW"

  events:
        $e.metadata.event_type = "NETWORK_HTTP"
        $e.principal.ip = $ip

        // filter out URLs with RFC 1918 IP addresses, i.e., internal assets
        not re.regex($e.target.hostname, `(127(?:\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$)|(10(?:\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$)|(192\.168(?:\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){2}$)|(172\.(?:1[6-9]|2\d|3[0-1])(?:\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){2})`)

        // used an explicit exclusion reference list
        not $e.target.hostname in %exclusion_network_prevalence_low_prevalence_domain_access

        // only match valid FQDN, filter out background non-routable noise
        re.regex($e.target.hostname, `(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]`)

        $domainName = $e.target.hostname

        //join event ($e) to entity graph ($d)
        $e.target.hostname = $d.graph.entity.domain.name

        $d.graph.metadata.entity_type = "DOMAIN_NAME"

        // tune prevalence as fits your results
        $d.graph.entity.domain.prevalence.rolling_max <= 10

  match:
        $ip over 1h

  outcome:
    $risk_score = max(
        // increment risk score based upon rolling_max prevalence
        if ( $d.graph.entity.domain.prevalence.rolling_max >= 10, 10) +
        if ( $d.graph.entity.domain.prevalence.rolling_max >= 2 and $d.graph.entity.domain.prevalence.rolling_max <= 9 , 20) +
        if ( $d.graph.entity.domain.prevalence.rolling_max = 1, 30)
    )

    $domain_list = array_distinct($domainName)
    $domain_count = count_distinct($domainName)

  condition:
    $e and #d > 10
}

A continuación, se muestra una captura de pantalla que muestra las detecciones de ejemplo que generó esta regla.

Dominio de baja prevalencia de acceso Ver la imagen en una ventana nueva

Identificación de dominios de baja prevalencia con una coincidencia de IOC

Esta regla de detección genera una alerta de detección y proporciona una coincidencia de alta fidelidad que compara un dominio de prevalencia bajo que también es un IOC conocido.

rule network_prevalence_uncommon_domain_ioc_match {

  meta:
    author = "Chronicle Security"
    description = "Lookup Network DNS queries against Entity Graph for low prevalence domains with a matching IOC entry."
    severity = "MEDIUM"

  events:
    $e.metadata.event_type = "NETWORK_DNS"
    $e.network.dns.questions.name = $hostname

    //only match FQDNs, e.g., exclude chrome dns access tests and other internal hosts
    $e.network.dns.questions.name = /(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/

    //prevalence entity graph lookup
    $p.graph.metadata.entity_type = "DOMAIN_NAME"
    $p.graph.entity.domain.prevalence.rolling_max <= 3
    $p.graph.entity.domain.name = $hostname

    //ioc entity graph lookup
    $i.graph.metadata.vendor_name = "ET_PRO_IOC"
    $i.graph.metadata.entity_type = "DOMAIN_NAME"
    $i.graph.entity.hostname = $hostname

  match:
    $hostname over 10m

  outcome:
    $risk_score = max(
        //increment risk score based upon rolling_max prevalence
        if ( $p.graph.entity.domain.prevalence.rolling_max = 3, 50) +
        if ( $p.graph.entity.domain.prevalence.rolling_max = 2, 70) +
        if ( $p.graph.entity.domain.prevalence.rolling_max = 1, 90)
    )

  condition:
    $e and $p and $i
}

Este es un ejemplo que muestra las detecciones generadas por esta regla.

Dominio de prevalencia baja con una coincidencia de IOC

Cómo usar los campos enriquecidos de la Navegación segura en las reglas

Chronicle transfiere datos de listas de amenazas relacionadas con hash de archivos. Esta información enriquecida se almacena como entidades en Chronicle.

Puedes crear reglas de detección de motores de búsqueda para identificar coincidencias con entidades transferidas desde Navegación segura. La siguiente es una regla de ejemplo del motor de detección que realiza consultas a esta información enriquecida para compilar estadísticas contextuales.

rule safe_browsing_file_execution {
    meta:
        author = "Chronicle Security"
        description = "Example usage of Safe Browsing data, to detect execution of a file that's been deemed malicious"
        severity = "LOW"

    events:
        // find a process launch event, match on hostname
        $execution.metadata.event_type = "PROCESS_LAUNCH"
        $execution.principal.hostname = $hostname

        // join execution event with Safe Browsing graph
        $sb.graph.entity.file.sha256 = $execution.target.process.file.sha256

        // look for files deemed malicious
        $sb.graph.metadata.entity_type = "FILE"
        $sb.graph.metadata.threat.severity = "CRITICAL"

    match:
        $hostname over 1h

    condition:
        $execution and $sb
}