Migrar las alertas de CBN a alertas de reglas de detección de YARA-L

En este documento se explica cómo puede migrar las alertas de normalización basada en la configuración (CBN) a las alertas de detección de YARA-L. Como analista de seguridad, con la ayuda de este documento, puedes seguir recibiendo notificaciones de alertas de sistemas de terceros mediante la página Alertas e indicadores de compromiso.

Migrar las alertas de CBN al motor de detección YARA-L

Para migrar las alertas de CBN, puedes asegurarte de que las alertas de CBN anteriores estén disponibles como alertas de reglas de detección mediante las siguientes opciones.

Con la opción de búsqueda de UDM, puede ver los eventos con el valor alert_state definido en los analizadores:

security_result.alert_state = "ALERTING"

En los resultados de búsqueda de UDM, puedes consultar los siguientes campos para saber qué fuentes generan alertas de CBN en tu entorno:

  • Metadata > Vendor Name

  • Metadata > Product Name

Descargar las alertas de CBN predeterminadas mediante la API Tools y revisarlas manualmente

El método anterior te ayuda a encontrar las alertas que se han activado, pero no cubre el caso de las alertas que no has visto antes. Puedes usar el método de analizadores backstory.googleapis.com/v1/tools/cbn para descargar todos los CBNs, algunos o los predeterminados, y revisar manualmente la lógica del analizador aplicada para encontrar alertas basadas en is_alert o alert_state.

Puedes migrar las alertas de CBN a las alertas de reglas del motor de detección de YARA-L que utilices de forma activa.

Migrar las alertas del antivirus Windows Defender que se mostraban anteriormente en Estadísticas empresariales como alertas de CBN

En el siguiente ejemplo se muestra cómo puede migrar las alertas del antivirus Windows Defender que se mostraban anteriormente en Estadísticas de la empresa como alertas de CBN.

  1. Busca una alerta de ejemplo con cualquiera de los métodos explicados anteriormente.

  2. Con el visor de registros sin procesar o de eventos de UDM, copia los campos de UDM que proporcionarán una detección fiable. Veamos un ejemplo:

    metadata.vendor_name = "Microsoft"
    metadata.product_name = "Windows Defender AV"
    metadata.product_event_type = "MALWAREPROTECTION_STATE_MALWARE_DETECTED"
    principal.asset.hostname = "client02.example.local"
    security_result.action = "BLOCK"
    security_result.severity = "MEDIUM"
    
  3. Crea una regla de motor de detección YARA-L.

    rule windows_defender_av_monitored_events {
        meta:
        author = "Chronicle"
        description = "Migration of CBN alerts to Google SecOps YARA-L detection engine rule alert."
        // Severity is set at the Outcome level via security_result.severity
        severity = "INFORMATIONAL"
        priority = "INFORMATIONAL"
    events:
            $windows_defender_av.metadata.vendor_name = "Microsoft"
            $windows_defender_av.metadata.product_name = "Windows Defender AV"
            $windows_defender_av.metadata.product_event_type = "MALWAREPROTECTION_STATE_MALWARE_DETECTED"
            $windows_defender_av.principal.asset.hostname = $host
            // optionally tune to only detection on ALLOW, i.e., failure to BLOCK
            //$windows_defender_av.security_result.action = "ALLOW"
            // optionally tune on severity of detection
            //$windows_defender_av.security_result.severity != "LOW"
    outcome:
            $risk_score = max(
            if ($windows_defender_av.security_result.severity = "UNKNOWN_SEVERITY", 0) +
            if ($windows_defender_av.security_result.severity = "LOW", 25) +
            if ($windows_defender_av.security_result.severity = "MEDIUM", 50) +
            if ($windows_defender_av.security_result.severity = "HIGH", 75) +
            if ($windows_defender_av.security_result.severity = "CRITICAL", 100)
            )
    $severity = array_distinct($windows_defender_av.security_result.severity)
        condition:
        $windows_defender_av
    }
    

Parece que la alerta de CBN usa un campo que no se ha analizado en UDM

Con la opción de extensiones del analizador, puedes abordar esta situación rápidamente.

Por ejemplo, la alerta de CBN de Corelight usa el campo notice y solo envía una alerta si es verdadero:

if [notice] == "true" {
  mutate {
    replace => {
      "is_significant" => "true"
      "is_alert"       => "true"
    }
  }
}

Como este valor no se normaliza en UDM de forma predeterminada, puede usar una extensión de analizador Grok de la siguiente manera para añadir ese valor como un campo de UDM de tipo Additional:

filter {
    mutate {
        replace => {
            "notice" => ""
        }
    }
    grok {
        match     => { "message" => [ "(?P<message>\{.*\})$" ] }
        on_error  => "_grok_not_syslog"
        overwrite => [ "message" ]
    }
    json {
        on_error       => "not_json" 
        source         => "message"
        array_function => "split_columns"
    }
    if ![not_json] {
        if [notice] != "" {
            mutate {
                convert => {
                    "notice" => "string"
                }
            }
            mutate {
                replace => {
                    "additional_notice.key" => "notice"
                    "additional_notice.value.string_value" => "%{notice}"
                }
            }
            mutate {
                merge => {
                    "event1.idm.read_only_udm.additional.fields" => "additional_notice"
                }
            }
            mutate {
                merge => {
                    "@output" => "event1"
                }
            }
        }
    }
}

Después, puedes utilizarlo en una regla del motor de detección de YARA-L de la siguiente manera y con la función Maps:

events:
    // Corelight : Weird Log
    (
        $corelight.metadata.vendor_name = "Corelight" and
        $corelight.metadata.product_name = "Zeek" and
        // this requires a custom parser extension to extract notice
        $corelight.metadata.product_event_type = "weird" and
        $corelight.additional.fields["notice"] = "true"
    )

Para recibir alertas, debe habilitar y activar las reglas creadas. Para obtener más información, consulta Ejecutar datos reales de reglas.