Aturan deteksi default
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 investigasi berbasis peristiwa yang sebenarnya. YARA-L berasal dari bahasa YARA yang biasa digunakan dalam analisis malware. L adalah singkatan dari log. YARA-L memungkinkan Anda memanfaatkan semua informasi dari beberapa sumber dalam deteksi, dan menghubungkan peristiwa tersebut ke dalam pemberitahuan yang dapat ditindaklanjuti. Untuk informasi selengkapnya, lihat Ringkasan bahasa YARA-L 2.0.
Contoh aturan deteksi Google Security Operations
Untuk membantu mempercepat penerapan Mesin Deteksi Operasi Keamanan Google, 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 SOC prime
- Peristiwa mencurigakan
Setiap kategori menggunakan pendekatan tertentu dalam cara melihat sumber data dan menentukan peristiwa dan 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 sedang dievaluasi. Kolom UDM yang dievaluasi dalam peristiwa ini adalah
metadata.eventype
sehingga sebaiknya sebut saja e1
. Baris berikutnya
akan menelusuri kemunculan tertentu dari pencocokan ekspresi reguler dalam e1
. Kondisi yang
membuat deteksi di Google Security Operations adalah setiap kali peristiwa $e1
terjadi. Untuk tujuan penyesuaian, kondisi not
disediakan untuk mengecualikan
jalur tertentu yang tidak berbahaya 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 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 penahan dalam deteksi aturan guna
memberikan pengayaan untuk konsumsi downstream. Misalnya, Anda dapat menambahkan informasi skor 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 keparahan akan diterapkan. Saat menggunakan jangka waktu, Mesin Deteksi Operasi Keamanan Google 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, mengaitkan sumber untuk satu nilai (seperti $hostname dari berbagai sumber data), 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 Security Operations tidak perlu menerima pemberitahuan untuk setiap deteksi. Anda dapat melacak deteksi untuk beberapa tujuan dan hanya memberikan pemberitahuan tentang deteksi yang Anda tentukan paling penting di lingkungan Anda.