Praktik Terbaik Penelusuran UDM
Dokumen ini menjelaskan praktik terbaik yang direkomendasikan Google untuk melakukan penelusuran menggunakan Penelusuran UDM. Penelusuran UDM dapat memerlukan sumber daya komputasi yang cukup besar untuk diselesaikan jika tidak dibangun dengan hati-hati. Performa juga bervariasi bergantung pada ukuran dan kompleksitas data dalam instance Chronicle.
Konstruksi dasar Penelusuran UDM
Setiap kondisi harus dalam bentuk udm-field operator value
.
Contoh:
principal.hostname = "win-server"
Mengoptimalkan rentang waktu untuk Penelusuran UDM
Selalu coba persempit rentang waktu ke batas minimum yang diperlukan. Chronicle dapat menyerap data dalam jumlah besar, sehingga membatasi cakupan data tersebut saat melakukan penelusuran dapat meningkatkan performa penelusuran secara substansial.
Menggunakan ekspresi reguler dengan Penelusuran UDM
Anda dapat menggunakan ekspresi reguler saat melakukan penelusuran UDM:
- Gunakan
AND
,OR
, danNOT
. AND
diasumsikan jika tidak ada operator lain.- Gunakan tanda kurung untuk mengubah urutan prioritas.
- Bergantung pada jenis kolom, operator kolom dapat mencakup:
= != >= > < <=
Menggunakan nocase sebagai pengubah penelusuran
nocase
dapat digunakan sebagai pengubah untuk mengabaikan kapitalisasi.
Misalnya, penelusuran berikut tidak valid:
target.user.userid = "TIM.SMITH" nocase
Ekspresi reguler tidak berfungsi untuk kolom terenumerasi
Anda tidak dapat menggunakan ekspresi reguler untuk kolom terenumerasi (kolom dengan rentang nilai standar) seperti metadata.event_type
atau network.ip_protocol
.
Misalnya, penelusuran berikut tidak valid:
metadata.eventtype = /NETWORK*/
Namun, penelusuran berikut valid (dan memperkirakan apa yang dicoba di atas):
(metadata.event_type = "NETWORK_CONNECTION" or metadata.event_type = "NETWORK_DHCP")
Menggunakan salah satu dan semua operator di kolom Peristiwa
Dalam penelusuran UDM, beberapa kolom diberi label sebagai berulang, yang berarti kolom tersebut adalah daftar nilai atau jenis pesan lainnya. Tidak seperti YARA-L, kolom berulang dalam penelusuran UDM selalu diperlakukan dengan operator any
secara default, tanpa opsi untuk menentukan all
dalam penelusuran Anda.
Saat operator any
digunakan, predikat akan dievaluasi sebagai benar (true) jika nilai apa pun di kolom berulang memenuhi kondisi tersebut. Misalnya, jika Anda menelusuri principal.ip != "1.2.3.4"
dan acara dalam penelusuran Anda menyertakan principal.ip = "1.2.3.4"
dan principal.ip = "5.6.7.8"
, penelusuran akan menghasilkan kecocokan. Hal ini akan memperluas penelusuran Anda untuk menyertakan hasil yang cocok dengan salah satu operator, bukan mencocokkan semuanya.
Setiap elemen di kolom berulang diperlakukan satu per satu. Jika kolom berulang ditemukan dalam peristiwa di penelusuran, peristiwa tersebut akan dievaluasi untuk setiap elemen dalam kolom tersebut. Hal ini dapat menyebabkan perilaku yang tidak terduga, terutama saat melakukan penelusuran menggunakan operator !=
.
Saat menggunakan operator any
, predikatnya dievaluasi sebagai benar (true) jika nilai apa pun dalam kolom berulang memenuhi kondisi.
Stempel waktu menggunakan waktu epoch Unix
Kolom stempel waktu dicocokkan menggunakan waktu Unix epoch (jumlah detik yang telah berlalu sejak Kamis 1 Januari 1970 00:00:00).
Saat menelusuri stempel waktu tertentu, hal berikut (dalam waktu epoch) valid:
metadata.ingested_timestamp.seconds = 1660784400
Stempel waktu berikut tidak valid:
metadata.ingested_timestamp = "2022-08-18T01:00:00Z"
Ada kolom tertentu yang dikecualikan dari filter, termasuk hal berikut:
metadata.id
metadata.product_log_id
*.timestamp
Karena kolom ini cenderung memiliki nilai unik, menampilkannya akan menciptakan lebih banyak "derau" daripada nilai di antarmuka Penelusuran UDM.
Bentuk Normal Konjungtif
Penelusuran UDM menggunakan bentuk normal konjungtif, pendekatan untuk logika Boolean yang menyatakan formula sebagai konjungsi klausa dengan AND atau OR. Setiap klausa yang terhubung dengan kata sambung (AND), harus berupa literal atau berisi disjungsi, (OR).
Contoh:
(A OR B) AND (C OR D)
(A OR B) AND (NOT C OR B)
Klausa juga dapat berupa literal:
A OR B
A AND B
Anda tidak dapat menggunakan A OR (B AND C)
dalam bentuk normal konjungtif, tetapi Anda dapat menggunakan (A OR B) AND (A OR C)
.
Contoh berikut akan menghasilkan error dalam Penelusuran UDM:
principal.hostname = "win-server" nocase OR (principal.hostname = "win-adfs" nocase AND metadata.event_type = "NETWORK_CONNECTION")
Berikut adalah contoh valid yang menggunakan bentuk normal konjungtif dalam Penelusuran UDM:
(principal.hostname = "win-server" nocase OR principal.hostname = "win-adfs" nocase) AND (principal.hostname = "win-server" nocase OR metadata.event_type = "NETWORK_CONNECTION")
Anda tidak dapat menggunakan NOT (A OR B)
dalam bentuk normal konjungtif, tetapi Anda dapat menggunakan NOT A AND NOT B
.
Hal berikut tidak valid:
principal.hostname = "win-server" nocase AND NOT(metadata.event_type = "PROCESS_TERMINATION" OR metadata.event_type = "USER_RESOURCE_ACCESS")
Hal berikut ini valid:
principal.hostname = "win-server" nocase AND NOT metadata.event_type = "PROCESS_TERMINATION" AND NOT metadata.event_type = "USER_RESOURCE_ACCESS"
Anda tidak dapat menggunakan A AND (B OR (C AND D))
dalam bentuk normal konjungtif, tetapi Anda dapat menggunakan A AND (B OR C) AND (B OR D)
.
Hal berikut tidak valid:
principal.hostname = "win-server" nocase AND (metadata.event_type = "PROCESS_LAUNCH" OR (metadata.event_type = "NETWORK_CONNECTION" AND target.ip = "10.128.0.21")
Hal berikut ini valid:
principal.hostname = "win-server" nocase AND (metadata.event_type = "PROCESS_LAUNCH" OR metadata.event_type = "NETWORK_CONNECTION") AND (metadata.event_type = "PROCESS_LAUNCH" OR target.ip = "10.128.0.21")