re.capture_all
re.capture_all(stringText, regex)
Deskripsi
Gunakan fungsi re.capture_all() untuk mengekstrak setiap kecocokan ekspresi reguler yang tidak tumpang-tindih dari string. Meskipun fungsi re.capture() standar berhenti setelah menemukan kecocokan pertama, re.capture_all() akan terus mencari di seluruh string untuk mengidentifikasi setiap instance yang cocok dengan pola Anda.
Fungsi ini menggunakan dua argumen:
string_to_search: String input atau kolom UDM yang ingin Anda telusuri.regex_pattern: Ekspresi reguler yang Anda terapkan. Catatan: Regular expression ini tidak boleh berisi lebih dari satu grup penangkap.
Kasus penggunaan umum
Anda menggunakan re.capture_all() untuk menyelesaikan skenario saat satu kolom log berisi beberapa titik data berharga.
- Mengekstrak beberapa indikator: Menarik semua alamat IP, URL, atau nama host dari satu pesan log atau kolom deskripsi.
- Mengurai data berbatas: Mengisolasi nilai tertentu dari kolom yang berisi beberapa informasi yang dipisahkan dengan koma, titik koma, atau dicampur dengan teks lain.
- Analisis teks berformat bebas: Pindai kolom yang tidak terstruktur (seperti Catatan atau Komentar) untuk mengidentifikasi setiap kecocokan pola, seperti jalur file atau kunci registri.
- Audit command line: Ekstrak semua argumen atau flag tertentu dari command line proses untuk lebih memahami cakupan perintah.
Jenis data parameter
STRING, STRING
Jenis hasil yang ditampilkan
ARRAY_STRINGS
Contoh
Bagian ini menunjukkan contoh yang mendemonstrasikan cara menerapkan re.capture_all() ke
berbagai jenis telemetri. Anda menggunakan pola ini di bagian events untuk
memfilter data atau di bagian outcome untuk memperkaya pemberitahuan deteksi akhir.
Contoh: Mengekstrak jalur .conf kelima dari command line
Contoh penelusuran ini pertama-tama mengonfirmasi keberadaan .conf di command line.
Kemudian, perintah ini menyimpan command line lengkap dan mengekstrak kemunculan kelima dari pola tertentu yang terkait dengan jalur file .conf. Anda dapat menggabungkan
fungsi re.capture_all() dengan arrays.index_to_str() untuk mengekstrak kemunculan
tertentu, seperti jalur .conf kelima dari command line.
re.regex(principal.process.command_line, `\.conf`)
$command_line = principal.process.command_line
$path_component_5 = arrays.index_to_str(re.capture_all(principal.process.command_line, `[s='"]([^'"=s]*.conf)`), 4)
Contoh: Mengekstrak semua kata yang diawali dengan error
Dalam contoh aturan ini, Anda mengambil setiap kata yang diawali dengan error dari
deskripsi hasil keamanan dan menyimpannya dalam array yang disebut $all_errors.
rule ExtractErrors {
meta:
author = "user@example.com"
events:
$e.principal.hostname = "server1"
$log_message = $e.security_result[0].description
outcome:
$all_errors = re.capture_all($log_message, `error\w+`)
condition:
$e
}
Contoh: Gabungkan semua pola seperti IP yang diambil dari string Agen Pengguna
Dalam contoh aturan ini, Anda mengekstrak semua alamat IPv4 dari kolom
network.http.user_agent peristiwa keamanan.
Karena re.capture_all() menampilkan array, Anda dapat menggunakan arrays.join_string() untuk
menggabungkan kecocokan ini ke dalam satu daftar yang mudah dibaca.
rule CaptureAllIPs {
meta:
author = "user@example.com"
events:
$e.network.http.user_agent != ""
$captured_ips = arrays.join_string(re.capture_all($e.network.http.user_agent, `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}`), ", ")
condition:
$e
}
Batasan umum
- Grup tangkapan tunggal: Regular expression yang digunakan dengan
re.capture_all()tidak boleh berisi lebih dari satu grup tangkapan. - Jenis nilai yang ditampilkan array: Fungsi ini menampilkan array string. Untuk menetapkan
hasil ke variabel peristiwa atau menggunakannya dalam fungsi yang mengharapkan satu
string, Anda biasanya perlu membungkusnya dengan
arrays.join_string().