Menggunakan data yang diperkaya konteks dalam aturan

Untuk memungkinkan analis keamanan selama penyelidikan, Chronicle menyerap data kontekstual dari berbagai sumber, melakukan analisis pada data yang diserap, dan memberikan konteks tambahan tentang artefak di lingkungan pelanggan. Dokumen ini memberikan contoh bagaimana analis dapat menggunakan data yang diperkaya secara kontekstual dalam aturan Detection Engine.

Untuk mengetahui informasi selengkapnya tentang pengayaan data, lihat Cara Chronicle memperkaya data peristiwa dan entitas.

Menggunakan kolom yang diperkaya prevalensi dalam aturan

Contoh berikut menunjukkan cara menggunakan kolom yang diperkaya terkait prevalensi di Detection Engine. Untuk referensi, lihat daftar kolom yang diperkaya terkait prevalensi.

Mengidentifikasi akses domain dengan prevalensi rendah

Aturan deteksi ini akan menghasilkan peristiwa deteksi, bukan pemberitahuan pendeteksian, jika ditemukan kecocokan. Hal ini terutama dimaksudkan sebagai indikator sekunder saat menyelidiki aset. Misalnya, ada notifikasi tingkat keseriusan lain yang lebih tinggi yang memicu insiden.

$enrichment.graph.metadata.entity_type = "FILE"
$enrichment.graph.metadata.product_name = "VirusTotal Relationships"
$enrichment.graph.metadata.vendor_name = "VirusTotal"

Baca artikel Menambahkan filter jenis peristiwa untuk mengetahui informasi selengkapnya tentang menambahkan filter guna meningkatkan performa aturan.

Untuk mengetahui informasi tentang setiap jenis pengayaan, lihat Cara Chronicle memperkaya data entitas dan peristiwa.

Menggunakan kolom yang diperkaya prevalensi dalam aturan

Contoh berikut menunjukkan cara menggunakan kolom yang diperkaya terkait prevalensi di Detection Engine. Untuk referensi, lihat daftar kolom yang diperkaya terkait prevalensi.

Mengidentifikasi akses ke domain yang skor prevalensinya rendah

Aturan ini dapat digunakan untuk mendeteksi akses ke domain dengan skor prevalensi rendah. Agar efektif, dasar skor prevalensi untuk artefak harus ada. Contoh berikut menggunakan daftar referensi untuk menyesuaikan hasil dan menerapkan nilai prevalensi batas.

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 > 0
        $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
}

Berikut screenshot yang menunjukkan contoh deteksi yang dihasilkan oleh aturan ini.

Akses domain prevalensi rendah Lihat gambar di jendela baru

Mengidentifikasi domain dengan prevalensi rendah dengan kecocokan IOC

Aturan deteksi ini menghasilkan pemberitahuan deteksi dan memberikan pencocokan fidelitas tinggi yang membandingkan domain prevalensi rendah yang juga merupakan IOC yang dikenal.

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 > 0
    $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
}

Berikut adalah contoh yang menunjukkan deteksi yang dihasilkan oleh aturan ini.

Domain prevalensi rendah dengan kecocokan IOC

Menggunakan waktu terlihat pertama entitas dalam aturan

Anda dapat menulis aturan yang menyertakan kolom first_seen_time atau last_seen_time dari data entity.

Kolom first_seen_time dan last_seen_time diisi dengan entity yang mendeskripsikan domain, alamat IP, dan file (hash). Untuk entity yang mendeskripsikan pengguna atau aset, hanya kolom first_seen_time yang akan diisi. Nilai ini tidak dihitung untuk entity yang mendeskripsikan jenis lain, seperti grup atau resource.

Untuk daftar kolom UDM yang terisi, lihat Menghitung waktu entitas pertama kali terlihat dan terakhir terlihat.

Berikut adalah contoh yang menunjukkan cara menggunakan first_seen_time dalam aturan:

rule first_seen_data_exfil {
    meta:
        author = "Chronicle Security"
        description = "Example usage first_seen data"
        severity = "LOW"

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

        // Join first_access event with entity graph to use first/last seen data.
        $ip = $first_last_seen.graph.entity.ip
        $first_last_seen.graph.metadata.entity_type = "IP_ADDRESS"

        // Check that the first_access UDM event is the first_seen occurrence in the enterprise.
        $first_last_seen.graph.entity.artifact.first_seen_time.seconds = $first_access.metadata.event_timestamp.seconds
        $first_last_seen.graph.entity.artifact.first_seen_time.nanos   = $first_access.metadata.event_timestamp.nanos

        // Check for another access event that appears shortly after the first_seen event,
        // where lots of data is being sent.
        $next_access_data_exfil.metadata.event_type = "NETWORK_CONNECTION"
        // Next access event goes to the same IP as the first.
        $next_access_data_exfil.principal.ip = $ip

        // Next access occurs within 60 seconds after first access.
        $next_access_data_exfil.metadata.event_timestamp.seconds > $first_access.metadata.event_timestamp.seconds
        60 > $next_access_data_exfil.metadata.event_timestamp.seconds  - $first_access.metadata.event_timestamp.seconds

        // Lots of data is being sent over the next access event.
        $next_access_data_exfil.network.sent_bytes > 10 * 1024 * 1024 * 1024 // 10GB

        // Extract hostname of next access event, for match section.
        $hostname = $next_access_data_exfil.principal.hostname

    match:
        $hostname over 1h

    condition:
        $first_access and $next_access_data_exfil and $first_last_seen
}

Menggunakan kolom yang diperkaya geolokasi dalam aturan

Kolom UDM yang menyimpan data yang diperkaya geolokasi dapat digunakan dalam aturan Detection Engine. Untuk mengetahui daftar kolom UDM yang terisi, lihat Memperkaya peristiwa dengan data geolokasi.

Contoh berikut menggambarkan cara mendeteksi apakah suatu entity pengguna melakukan autentikasi dari beberapa status yang berbeda.

rule geoip_user_login_multiple_states_within_1d {

  meta:
    author = "Chronicle Security"
    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
}

Menggunakan kolom yang diperkaya Safe Browsing dalam aturan

Chronicle menyerap data dari daftar ancaman yang terkait dengan hash file. Informasi yang diperkaya ini disimpan sebagai Entitas di Chronicle.

Untuk daftar kolom UDM yang terisi, lihat Memperkaya entity dengan informasi dari daftar ancaman Safe Browsing.

Anda dapat membuat aturan Detection Engine untuk mengidentifikasi kecocokan dengan entity yang diserap dari Safe Browsing. Berikut adalah contoh aturan Detection Engine yang melakukan kueri terhadap informasi yang diperkaya ini untuk membuat analisis kontekstual.

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
}

Menggunakan kolom yang diperkaya WHOIS dalam aturan

Anda dapat menulis aturan yang menelusuri kolom yang diperkaya WHOIS dalam entitas yang mewakili domain. Entitas ini memiliki kolom entity.metadata.entity_type yang ditetapkan ke DOMAIN_NAME. Untuk mengetahui daftar kolom UDM yang terisi, lihat Memperkaya entitas dengan data WHOIS.

Berikut adalah contoh aturan yang menunjukkan cara melakukannya. Aturan ini menyertakan kolom filter berikut di bagian events untuk membantu mengoptimalkan performa aturan.

$whois.graph.metadata.entity_type = "DOMAIN_NAME"
$whois.graph.metadata.product_name = "WHOISXMLAPI Simple Whois"
$whois.graph.metadata.vendor_name = "WHOIS"
rule whois_expired_domain_executable_download {
 meta:
   author = "Chronicle Security"
   description = "Example usage of WHOIS data, detecting an executable file download from a domain that's recently expired"
   severity = "LOW"

 events:
        $access.metadata.event_type = "NETWORK_HTTP"
        $hostname = $access.principal.hostname

        // join access event to entity graph to use WHOIS data
        $whois.graph.entity.domain.name = $access.target.hostname

        // use WHOIS data to look for expired domains
        $whois.graph.metadata.entity_type = "DOMAIN_NAME"
        $whois.graph.metadata.product_name = "WHOISXMLAPI Simple Whois"
        $whois.graph.metadata.vendor_name = "WHOIS"
        $whois.graph.entity.domain.expiration_time.seconds < $access.metadata.event_timestamp.seconds

        // join access event with executable file creation event by principal hostname
        $creation.principal.hostname = $access.principal.hostname
        $creation.metadata.event_type = "FILE_CREATION"
        $creation.target.file.full_path = /exe/ nocase

        // file creation comes after expired domain access
        $creation.metadata.event_timestamp.seconds >
           $access.metadata.event_timestamp.seconds

   match:
       $hostname over 1h

 condition:
        $access and $whois and $creation
}

Membuat kueri data Google Cloud Threat Intelligence

Chronicle menyerap data dari sumber data Google Cloud Threat Intelligence (GCTI) yang memberi Anda informasi kontekstual yang dapat digunakan saat menyelidiki aktivitas di lingkungan Anda. Anda dapat membuat kueri untuk sumber data berikut:

  • Node Keluar Tor GCTI
  • Biner Benign GCTI
  • Alat Akses Jarak Jauh GCTI

Untuk deskripsi tentang feed ancaman ini dan semua kolom yang diisi, lihat Menyerap dan menyimpan data Threat Intelligence Google Cloud.

Dalam dokumen ini, placeholder <variable_name> mewakili nama variabel unik yang digunakan dalam aturan untuk mengidentifikasi data UDM.

Alamat IP node keluar Tor Kueri

Contoh aturan berikut menampilkan deteksi saat peristiwa NETWORK_CONNECTION berisi alamat IP yang disimpan di kolom target.ip, yang juga ditemukan di sumber data Tor Exit Nodes GCTI. Pastikan untuk menyertakan kolom <variable_name>.graph.metadata.threat.threat_feed_name, <variable_name>.graph.metadata.vendor_name, dan <variable_name>.graph.metadata.product_name dalam aturan.

Ini adalah sumber data dengan waktu. Peristiwa akan cocok dengan snapshot sumber data pada saat itu.

rule gcti_tor_exit_nodes {
  meta:
    author = "Google Cloud Threat Intelligence"
    description = "Alert on known Tor exit nodes."
    severity = "High"

  events:
    // Event
    $e.metadata.event_type = "NETWORK_CONNECTION"
    $e.target.ip = $tor_ip

    // Tor IP search in GCTI Feed
    $tor.graph.entity.artifact.ip = $tor_ip
    $tor.graph.metadata.entity_type = "IP_ADDRESS"
    $tor.graph.metadata.threat.threat_feed_name = "Tor Exit Nodes"
    $tor.graph.metadata.source_type = "GLOBAL_CONTEXT"
    $tor.graph.metadata.vendor_name = "Google Cloud Threat Intelligence"
    $tor.graph.metadata.product_name = "GCTI Feed"

  match:
    $tor_ip over 1h

  outcome:
    $tor_ips = array_distinct($tor_ip)
    $tor_geoip_country = array_distinct($e.target.ip_geo_artifact.location.country_or_region)
    $tor_geoip_state = array_distinct($e.target.ip_geo_artifact.location.state)

  condition:
    $e and $tor
}

Kueri untuk file sistem operasi yang tidak berbahaya

Contoh aturan berikut menggabungkan sumber data Benign Binaries dan Tor Exit Nodes untuk menampilkan notifikasi saat biner yang tidak berbahaya menghubungi node keluar Tor. Aturan ini menghitung skor risiko menggunakan data geolokasi yang diperkaya Chronicle menggunakan alamat IP target. Pastikan untuk menyertakan <variable_name>.graph.metadata.vendor_name, <variable_name>.graph.metadata.product_name, dan <variable_name>.graph.metadata.threat.threat_feed_name untuk sumber data Benign Binaries dan Tor Exit Nodes dalam aturan.

Ini adalah sumber data yang abadi. Peristiwa akan selalu cocok dengan ringkasan sumber data terbaru, kapan pun.

rule gcti_benign_binaries_contacts_tor_exit_node {
 meta:
   author = "Google Cloud Threat Intelligence"
   description = "Alert on Benign Binary contacting a Tor IP address."
   severity = "High"

 events:
   // Event
   $e.metadata.event_type = "NETWORK_CONNECTION"
   $e.principal.process.file.sha256 = $benign_hash
   $e.target.ip = $ip
   $e.principal.hostname = $hostname

   // Benign File search in GCTI Feed
   $benign.graph.entity.file.sha256 = $benign_hash
   $benign.graph.metadata.entity_type = "FILE"
   $benign.graph.metadata.threat.threat_feed_name = "Benign Binaries"
   $benign.graph.metadata.source_type = "GLOBAL_CONTEXT"
   $benign.graph.metadata.vendor_name = "Google Cloud Threat Intelligence"
   $benign.graph.metadata.product_name = "GCTI Feed"

   // Tor IP search in GCTI Feed
   $tor.graph.entity.artifact.ip = $ip
   $tor.graph.metadata.entity_type = "IP_ADDRESS"
   $tor.graph.metadata.threat.threat_feed_name = "Tor Exit Nodes"
   $tor.graph.metadata.source_type = "GLOBAL_CONTEXT"
   $tor.graph.metadata.vendor_name = "Google Cloud Threat Intelligence"
   $tor.graph.metadata.product_name = "GCTI Feed"

 match:
   $hostname over 1h

 outcome:
   $risk_score = max(
       if($tor.graph.metadata.threat.confidence = "HIGH_CONFIDENCE", 70) +
       // Unauthorized target geographies
       if($e.target.ip_geo_artifact.location.country_or_region = "Cuba", 20) +
       if($e.target.ip_geo_artifact.location.country_or_region = "Iran", 20) +
       if($e.target.ip_geo_artifact.location.country_or_region = "North Korea", 20) +
       if($e.target.ip_geo_artifact.location.country_or_region = "Russia", 20) +
       if($e.target.ip_geo_artifact.location.country_or_region = "Syria", 20)
   )
   $benign_hashes = array_distinct($benign_hash)
   $benign_files = array_distinct($e.principal.process.file.full_path)
   $tor_ips = array_distinct($ip)
   $tor_geoip_country = array_distinct($e.target.ip_geo_artifact.location.country_or_region)
   $tor_geoip_state = array_distinct($e.target.ip_geo_artifact.location.state)

 condition:
   $e and $benign and $tor
}

Membuat kueri data tentang alat akses jarak jauh

Contoh aturan berikut menampilkan deteksi saat jenis peristiwa PROCESS_LAUNCH berisi hash yang juga ditemukan di sumber data Google Cloud Threat Intelligence Remote Access Tools.

Ini adalah sumber data yang abadi. Peristiwa akan selalu cocok dengan ringkasan terbaru dari sumber data, kapan pun.

rule gcti_remote_access_tools {
 meta:
   author = "Google Cloud Threat Intelligence"
   description = "Alert on Remote Access Tools."
   severity = "High"

 events:
    // find a process launch event
    $e.metadata.event_type = "PROCESS_LAUNCH"
    $e.target.process.file.sha256 != ""
    $rat_hash = $e.target.process.file.sha256

    // join graph and event hashes
    $gcti.graph.entity.file.sha256 = $rat_hash

    // look for files identified as likely remote access tools
    $gcti.graph.metadata.entity_type = "FILE"
    $gcti.graph.metadata.vendor_name = "Google Cloud Threat Intelligence"
    $gcti.graph.metadata.product_name = "GCTI Feed"
    $gcti.graph.metadata.threat.threat_feed_name = "Remote Access Tools"

  match:
    $rat_hash over 5m

 outcome:
   $remote_hash = array_distinct($e.target.process.file.sha256)

  condition:
    $e and $gcti

}

Menggunakan kolom metadata yang diperkaya VirusTotal dalam aturan

Aturan berikut mendeteksi pembuatan file atau proses peluncuran jenis file tertentu, yang menunjukkan bahwa beberapa hash dalam daftar tontonan ada di sistem. Skor risiko ditetapkan saat file diberi tag sebagai exploit menggunakan pengayaan metadata file VirusTotal.

Untuk mengetahui daftar semua kolom UDM yang terisi, lihat Memperkaya peristiwa dengan metadata file VirusTotal.

rule vt_filemetadata_hash_match_ioc {
 meta:
   author = "Google Cloud Threat Intelligence"
   description = "Detect file/process events that indicate watchlisted hashes are on a system"
   severity = "High"

 events:
   // Process launch or file creation events
   $process.metadata.event_type = "PROCESS_LAUNCH" or $process.metadata.event_type ="FILE_CREATION"
   $process.principal.hostname = $hostname
   $process.target.file.sha256 != ""
   $process.target.file.sha256 = $sha256
   $process.target.file.file_type = "FILE_TYPE_DOCX"

   // IOC matching
   $ioc.graph.metadata.product_name = "MISP"
   $ioc.graph.metadata.entity_type = "FILE"
   $ioc.graph.metadata.source_type = "ENTITY_CONTEXT"
   $ioc.graph.entity.file.sha256 = $sha256

 match:
   $hostname over 15m

 outcome:
   $risk_score = max(
       // Tag enrichment from VirusTotal file metadata
       if($process.target.file.tags = "exploit", 90)
   )
   $file_sha256 = array($process.target.file.sha256)
   $host = array($process.principal.hostname)

 condition:
   $process and $ioc
}

Menggunakan data hubungan VirusTotal dalam aturan

Chronicle menyerap data dari koneksi terkait VirusTotal. Data ini memberikan informasi tentang hubungan antara hash file dan file, domain, alamat IP, dan URL. Informasi yang diperkaya ini disimpan sebagai Entity di Chronicle.

Anda dapat membuat aturan Detection Engine untuk mengidentifikasi kecocokan dengan entity yang diserap dari VirusTotal. Aturan berikut mengirim pemberitahuan tentang download hash file yang diketahui dari alamat IP yang diketahui yang memiliki hubungan VirusTotal. Skor risiko didasarkan pada jenis file dan tag dari metadata file VirusTotal.

Data ini hanya tersedia untuk lisensi VirusTotal dan Chronicle tertentu. Periksa hak Anda dengan Account Manager. Untuk mengetahui daftar semua kolom UDM yang terisi, lihat Memperkaya entitas dengan data hubungan VirusTotal.

rule virustotal_file_downloaded_from_url {
  meta:
    author = "Google Cloud Threat Intelligence"
    description = "Alerts on downloading a known file hash from a known IP with VirusTotal relationships. The risk score is based on file type and tags from VirusTotal file metadata."
    severity = "High"

  events:
    // Filter network HTTP events
    $e1.metadata.event_type = "NETWORK_HTTP"
    $e1.principal.user.userid = $userid
    $e1.target.url = $url

    // Filter file creation events
    $e2.metadata.event_type = "FILE_CREATION"
    $e2.target.user.userid = $userid
    $e2.target.file.sha256 = $file_hash

    // The file creation event timestamp should be equal or greater than the network http event timestamp
    $e1.metadata.event_timestamp.seconds <= $e2.metadata.event_timestamp.seconds

    // Join event file hash with VirusTotal relationships entity graph
    $vt.graph.metadata.entity_type = "FILE"
    $vt.graph.metadata.source_type = "GLOBAL_CONTEXT"
    $vt.graph.metadata.vendor_name = "VirusTotal"
    $vt.graph.metadata.product_name = "VirusTotal Relationships"
    $vt.graph.entity.file.sha256 = $file_hash

    // Join network HTTP target URL with VirusTotal relationships entity graph
    $vt.graph.relations.entity_type = "URL"
    $vt.graph.relations.relationship = "DOWNLOADED_FROM"
    $vt.graph.relations.entity.url = $url

  match:
    $userid over 1m

  outcome:
      $risk_score = max(
        // Tag enrichment from VirusTotal file metadata
        if($e2.target.file.tags = "via-tor" or $e2.target.file.tags = "malware" or $e2.target.file.tags = "crypto", 50) +
        // File types enrichment from VirusTotal file metadata
        if($e2.target.file.file_type = "FILE_TYPE_HTML", 5) +
        if($e2.target.file.file_type = "FILE_TYPE_ELF", 10) +
        if($e2.target.file.file_type = "FILE_TYPE_PE_DLL",15) +
        if($e2.target.file.file_type = "FILE_TYPE_PE_EXE", 20)
    )

  condition:
    $e1 and $e2 and $vt and $risk_score >= 50
}

Langkah selanjutnya

Untuk mengetahui informasi tentang cara menggunakan data yang diperkaya dengan fitur Chronicle lainnya, lihat artikel berikut: