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

Kontextangereicherte Daten in Regeln verwenden

Chronicle nimmt kontextbezogene Daten aus verschiedenen Quellen auf, um Sicherheitsanalysten während einer Untersuchung zu ermöglichen, analysiert die aufgenommenen Daten 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 zur Anreicherung von Ereignis- und Entitätsdaten mit Chronicle

Angereicherte Felder in Regeln verwenden

Die folgenden Beispiele zeigen, wie die in der Erkennungs-Engine angereicherten angereicherten Felder verwendet werden. Weitere Informationen finden Sie in der Liste der angereicherten Felder in der Vorgeschichte.

Domainzugriff mit niedriger Verbreitung identifizieren

Diese Erkennungsregel generiert bei Erkennung einer Übereinstimmung ein Erkennungsereignis und keine Erkennungswarnung. Er dient in erster Linie als sekundärer Indikator bei der Prüfung eines Assets. Es gibt beispielsweise andere Warnungen 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.

Niedriger Zugriff auf Domains Bild in neuem Fenster ansehen

Zugriff auf Domains mit niedriger Verbreitung ermitteln

Mit dieser Regel kann der Zugriff auf Domains mit einer niedrigen Häufigkeit ermittelt werden. Damit dies möglich ist, muss ein Baseline für die Prävalenzwerte für Artefakte vorhanden sein. Im folgenden Beispiel werden Referenzlisten zur Feinabstimmung des Ergebnisses verwendet und ein Grenzwert für die Grenzwertfunktion 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
}

Hier ist ein Screenshot mit den Beispielerkennungen, die durch diese Regel generiert werden.

Niedriger Zugriff auf Domains Bild in neuem Fenster ansehen

Domains mit niedriger Verbreitung mit einer IOC-Übereinstimmung identifizieren

Diese Erkennungsregel generiert eine Erkennungsbenachrichtigung und ermöglicht einen Abgleich mit hoher Genauigkeit, der eine untergeordnete IP-Adresse vergleicht, 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.

Niedrige Verbreitung mit einer IOC-Übereinstimmung

Angereicherte Felder in Safe Browsing in Regeln verwenden

Chronicle nimmt Daten aus Bedrohungslisten auf, die sich auf Datei-Hashes beziehen. Diese angereicherten Informationen werden in Chronicle als Entitäten gespeichert.

Sie können Regeln für die Erkennungs-Engine erstellen, um Übereinstimmungen mit von Safe Browsing aufgenommenen Entitäten zu identifizieren. Das folgende Beispiel zeigt eine Detection Engine-Regel, die eine Abfrage für diese angereicherten Informationen durchführt, 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"
        $sb.graph.metadata.product_name = "Google Safe Browsing"
        $sb.graph.metadata.source_type = "GLOBAL_CONTEXT"

    match:
        $hostname over 1h

    condition:
        $execution and $sb
}

Felder mit erhöhter Standortbestimmung in Regeln verwenden

UDM-Felder, die mit Daten angereicherte Daten speichern, können in Detection Engine-Regeln verwendet werden. Das folgende Beispiel zeigt, wie erkannt wird, ob sich eine Nutzerentität aus mehreren verschiedenen Zuständen authentifiziert.

rule geoip_user_login_multiple_states_within_1d {

  meta:
    author = "demo"
    description = "Detect multiple authentication attempts from multiple distinct locations using geolocation-enriched UDM fields."
    severity = "INFORMATIONAL"

  events:
    $geoip.metadata.event_type = "USER_LOGIN"
    (
      $geoip.metadata.vendor_name = "Google Workspace" or
      $geoip.metadata.vendor_name = "Google Cloud Platform"
    )
    /* optionally, detect distinct locations at a country */
    (
      $geoip.principal.ip_geo_artifact.location.country_or_region != "" and
      $geoip.principal.ip_geo_artifact.location.country_or_region = $country
    )
    (
      $geoip.principal.ip_geo_artifact.location.state != "" and
      $geoip.principal.ip_geo_artifact.location.state = $state
    )

    $geoip.target.user.email_addresses = $user

  match:
    $user over 1d

  condition:
    $geoip and #state > 1
}

Nächste Schritte

Informationen zur Verwendung von angereicherten Daten mit anderen Chronicle-Features finden Sie hier: