Aturan deteksi default

Didukung di:

Bahasa aturan YARA-L

YARA-L adalah bahasa aturan deteksi yang dikembangkan oleh Google. Tujuan YARA-L adalah untuk beralih dari deteksi sebagai kueri data saja ke penyelidikan berbasis peristiwa yang sebenarnya. YARA-L berasal dari bahasa YARA yang umum digunakan dalam analisis malware. L adalah singkatan dari log. YARA-L memungkinkan Anda memanfaatkan semua informasi dari berbagai sumber dalam deteksi, dan menghubungkan peristiwa tersebut ke dalam pemberitahuan yang dapat ditindaklanjuti. Untuk mengetahui informasi selengkapnya, lihat Ringkasan bahasa YARA-L 2.0.

Contoh aturan deteksi Google Security Operations

Untuk membantu mempercepat adopsi Google SecOps Detection Engine, ada repositori GitHub dengan contoh aturan. Repositori ini berisi beberapa kategori aturan deteksi yang berbeda, termasuk yang berikut:

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

Setiap kategori memiliki pendekatan khusus dalam cara melihat sumber data dan menentukan peristiwa serta pernyataan pencocokan 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 sebaiknya panggil saja e1. Baris berikutnya mencari kemunculan spesifik dari kecocokan ekspresi reguler dalam e1. Kondisi yang membuat deteksi di Google SecOps adalah setiap kali peristiwa $e1 terjadi. Untuk tujuan penyesuaian, kondisi not diberikan untuk mengecualikan jalur tidak berbahaya tertentu untuk argumen command line. Kondisi not lainnya dapat ditambahkan ke aturan ini jika Anda mengidentifikasi kesalahan positif yang sering terjadi 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 suatu aturan. Dalam contoh berikut, aturan memiliki peristiwa $e1 dan $e2. Kondisi menyatakan kondisi logis 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 penampung dalam deteksi aturan untuk memberikan pengayaan untuk penggunaan di hilir. Misalnya, Anda dapat menambahkan informasi penilaian tingkat keparahan yang mengandalkan data dari peristiwa yang sedang dianalisis. Deteksi berikut memeriksa dua peristiwa untuk mengatribusikan nilai $hostname. Jika nilai $hostnames cocok selama periode 5 menit, skor tingkat keparahan akan diterapkan. Saat menggunakan jangka waktu, Mesin Deteksi Google SecOps 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, bukan hanya menampilkan kueri data. Variabel peristiwa digunakan untuk melacak nilai kolom yang digunakan di bagian kondisi aturan. Anda dapat menggunakan satu peristiwa, beberapa peristiwa dari waktu ke waktu, mengorelasikan sumber untuk satu nilai (seperti $hostname dari sumber data yang berbeda), dan bahkan menggunakan alat seperti ekspresi reguler untuk memberikan kecocokan. Anda harus menyesuaikan aturan dengan lingkungan Anda sendiri dan hal ini dapat dilakukan dengan menentukan pengecualian dalam logika. Anda juga dapat menggunakan daftar referensi untuk mengelompokkan item, lalu mereferensikan daftar tersebut dalam aturan. Jangan lupa bahwa Google SecOps tidak memerlukan setiap deteksi untuk diberi tahu. Anda dapat melacak deteksi untuk berbagai tujuan dan hanya memberikan peringatan pada deteksi yang Anda anggap paling penting di lingkungan Anda.

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.