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: Ekspresi reguler 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 yang dibatasi: Mengisolasi nilai tertentu dari kolom yang berisi beberapa informasi yang dipisahkan dengan koma, titik koma, atau dicampur dengan teks lain.
- Analisis teks bebas: Memindai kolom tidak terstruktur (seperti Catatan atau Komentar) untuk mengidentifikasi setiap kecocokan pola, seperti jalur file atau kunci registri.
- Baris perintah audit: Ekstrak semua argumen atau tanda tertentu dari baris perintah proses untuk lebih memahami cakupan perintah.
Jenis data parameter
STRING, STRING
Jenis nilai 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 spesifik 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: Ekstrak 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: Ekspresi reguler 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().