Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Kontextangereicherte Daten in Regeln verwenden

Chronicle nimmt während einer Prüfung Sicherheitsanalysten auf und nimmt Kontextdaten aus verschiedenen Quellen auf, führt Analysen der aufgenommenen Daten durch und bietet zusätzlichen Kontext zu Artefakten in einer Kundenumgebung. Dieses Dokument enthält Beispiele dafür, wie Analysten kontextangereicherte Daten in Detection Engine-Regeln verwenden können.

Weitere Informationen dazu, wie Chronicle eingehende Daten anreichert, die durchgeführten Arten der Anreicherung und die angereicherten Felder, finden Sie unter Anreichern von UDM-Daten während der Logaufnahme.

Angereicherte Felder in Regeln verwenden

In den folgenden Beispielen wird gezeigt, wie Sie die angereicherten Felder in der Erkennungs Engine verwenden, Weitere Informationen

Domainzugriff mit geringer Verbreitung identifizieren

Diese Erkennungsregel generiert ein Erkennungsereignis, keine Erkennungsbenachrichtigung, wenn eine Übereinstimmung gefunden wird. Sie dient in erster Linie als sekundärer Indikator bei der Untersuchung eines Assets. Es gibt beispielsweise andere Benachrichtigungen mit höherem Schweregrad, die einen Vorfall ausgelöst haben.

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
}

Das folgende Beispiel zeigt die von dieser Regel generierten Erkennungen.

Domainzugriff mit niedriger Priorität Bild in neuem Fenster ansehen

Zugriff auf Domains mit niedriger Priorität ermitteln

Mit dieser Regel kann der Zugriff auf Domains mit einer niedrigen Häufigkeit ermittelt werden. Damit dies wirksam wird, muss eine Basis-Prävalenzbewertung für Artefakte vorhanden sein. Im folgenden Beispiel werden Referenzlisten verwendet, um das Ergebnis zu optimieren, und es wird ein Grenzwert für Schwellenwerte angewendet.

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
}

Im Folgenden sehen Sie einen Screenshot, der die von dieser Regel generierten Beispielerkennungen zeigt.

Domainzugriff mit niedriger Priorität Bild in neuem Fenster ansehen

Domains mit niedriger Priorität mit einer IOC-Übereinstimmung identifizieren

Diese Erkennungsregel generiert eine Erkennungsbenachrichtigung und ermöglicht eine High-Fidelity-Übereinstimmung mit einem Vergleich einer Domain mit niedriger Priorität, die auch ein bekanntes IOC ist.

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
}

Das folgende Beispiel zeigt die von dieser Regel generierten Erkennungen.

Domain mit niedriger Priorität und IOC-Übereinstimmung

Angereicherte Felder in Safe Browsing in Regeln verwenden

Chronicle nimmt Daten aus Bedrohungslisten im Zusammenhang mit Datei-Hashes auf. Diese angereicherten Informationen werden als Entitäten in Chronicle gespeichert.

Sie können Detect Engine-Regeln erstellen, um Übereinstimmungen mit Entitäten zu identifizieren, die aus Safe Browsing aufgenommen wurden. Im Folgenden finden Sie ein Beispiel für eine Detection Engine-Regel, mit der diese angereicherten Informationen abgefragt werden, um kontextsensitive Analysen zu erstellen.

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
}