Aturan deteksi default

Bahasa aturan YARA-L

YARA-L adalah bahasa aturan deteksi yang dikembangkan oleh Google. Tujuan YARA-L adalah beralih dari deteksi hanya sebagai kueri data ke investigasi berbasis peristiwa sebenarnya. YARA-L berasal dari bahasa YARA yang biasa digunakan dalam analisis {i>malware<i}. L adalah singkatan dari logs. YARA-L memungkinkan Anda memanfaatkan semua informasi dari berbagai sumber dalam deteksi, dan menghubungkan peristiwa tersebut menjadi pemberitahuan yang dapat ditindaklanjuti. Untuk informasi selengkapnya, lihat Ringkasan bahasa YARA-L 2.0.

Aturan deteksi sampel Chronicle

Untuk membantu mempercepat penggunaan Chronicle Detection Engine, ada repositori GitHub dengan aturan contoh. Repositori ini berisi beberapa kategori aturan deteksi, termasuk yang berikut ini:

  • Google Cloud CloudAudit
  • Google Workspace
  • Peringatan informasi
  • Malware
  • MITRE ATT&CK
  • Aturan prima SOC
  • Peristiwa mencurigakan

Setiap kategori menggunakan pendekatan tertentu dalam melihat sumber data dan menentukan peristiwa serta pernyataan yang cocok yang akan digunakan.

Contoh aturan dan penyesuaian

Aturan berikut membuat variabel peristiwa $e1 yang digunakan untuk melacak jenis peristiwa. Variabel peristiwa dapat berupa nilai apa pun yang memiliki arti bagi data yang dievaluasi. Kolom UDM yang dievaluasi dalam peristiwa ini adalah metadata.eventype, jadi cukup panggil e1 saja. Baris berikutnya menelusuri kemunculan ekspresi reguler tertentu yang cocok dalam e1. Kondisi yang membuat deteksi di Chronicle adalah setiap kali peristiwa $e1 terjadi. Untuk tujuan penyesuaian, kondisi not disediakan guna mengecualikan jalur tidak berbahaya tertentu untuk argumen command line. Kondisi not lebih lanjut dapat ditambahkan ke aturan ini jika Anda mengidentifikasi positif palsu yang sering berasal dari jalur file lain yang diketahui.

rule suspicious_unusual_location_svchost_execution

{
 meta:
   author = "Google Cloud Security"
   description = "Windows 'svchost' executed from an unusual location"
   yara_version = "YL2.0"
   rule_version = "1.0"

 events:
   $e1.metadata.event_type = "PROCESS_LAUNCH"
   re.regex($e1.principal.process.command_line, `\bsvchost(\.exe)?\b`) nocase
   not re.regex($e1.principal.process.command_line, `\\Windows\\System32\\`) nocase

condition:
   $e1
}

Menentukan lebih dari satu variabel peristiwa

YARA-L memungkinkan Anda memiliki lebih dari satu variabel peristiwa dalam satu aturan. Pada contoh berikut, aturan memiliki peristiwa $e1 dan $e2. Kondisi tersebut menyatakan kondisi logika yang memicu deteksi.

rule ExcludeZeroValues {
  meta:
    author = "noone@google.com"

  events:
    $e1.metadata.event_type = "NETWORK_DNS"
    $e1.principal.hostname = $hostname

    // $e1.principal.user.userid may be empty string.
    $e1.principal.user.userid != "Guest"

    $e2.metadata.event_type = "NETWORK_HTTP"
    $e2.principal.hostname = $hostname

    // $e2.target.asset_id cannot be empty string as explicitly specified.
    $e2.target.asset_id != ""

  match:
    // $hostname cannot be empty string.
    $hostname over 1h

  condition:
    $e1 and $e2
}

Bagian hasil aturan

Gunakan bagian hasil untuk menetapkan variabel penahanan dalam deteksi aturan guna memberikan pengayaan bagi konsumsi downstream. Misalnya, Anda dapat menambahkan informasi penskoran tingkat keparahan yang bergantung pada data dari peristiwa yang dianalisis. Deteksi berikut memeriksa dua peristiwa untuk mengatribusikan nilai $hostname. Jika nilai $hostnames cocok selama periode 5 menit, skor keparahan akan diterapkan. Saat menggunakan jangka waktu, Chronicle Detection Engine hanya memeriksa blok waktu terpisah yang Anda tentukan.

rule OutcomeRuleMultiEvent {
    meta:
      author = "noone@google.com"
    events:
      $u.udm.principal.hostname = $hostname
      $asset_context.graph.entity.hostname = $hostname

      $severity = $asset_context.graph.entity.asset.vulnerabilities.severity

    match:
      $hostname over 5m

    outcome:
      $risk_score =
        max(
            100
          +   if($hostname = "my-hostname", 100, 50)
          +   if($severity = "HIGH", 10)
          +   if($severity = "MEDIUM", 5)
          +   if($severity = "LOW", 1)
        )

      $asset_id_list =
        array(
          if($u.principal.asset_id = "",
             "Empty asset id",
             $u.principal.asset_id
          )
        )

      $asset_id_distinct_list = array_distinct($u.principal.asset_id)

      $asset_id_count = count($u.principal.asset_id)

      $asset_id_distinct_count = count_distinct($u.principal.asset_id)

    condition:
      $u and $asset_context and $risk_score > 50 and not arrays.contains($asset_id_list, "id_1234")
}

Kesimpulan

YARA-L adalah bahasa deteksi fleksibel yang memungkinkan Anda memeriksa peristiwa keamanan dan tidak hanya menampilkan kueri data. Variabel peristiwa digunakan untuk melacak nilai kolom yang digunakan di bagian kondisi pada aturan. Anda dapat menggunakan satu peristiwa, beberapa peristiwa dari waktu ke waktu, menghubungkan sumber untuk satu nilai (seperti $nama host dari sumber data yang berbeda), dan bahkan menggunakan alat seperti ekspresi reguler untuk memberikan kecocokan. Aturan tersebut harus disesuaikan dengan lingkungan Anda sendiri. Hal ini dapat dilakukan dengan menentukan pengecualian dalam logika. Anda juga dapat menggunakan daftar referensi untuk mengelompokkan item bersama-sama, kemudian mereferensikan daftar tersebut dalam aturan. Jangan lupa bahwa Chronicle tidak mengharuskan setiap deteksi untuk diberi tahu. Anda dapat melacak deteksi untuk berbagai tujuan dan hanya memperingatkan pengguna yang menurut Anda paling penting di lingkungan Anda.