Menggunakan tabel data
Tabel data adalah konstruksi data multikolom yang memungkinkan Anda memasukkan data Anda sendiri ke Google Security Operations. Tabel ini dapat berfungsi sebagai tabel pencarian dengan kolom yang ditentukan dan data yang disimpan dalam baris. Anda dapat membuat atau mengimpor tabel data ke akun Google SecOps menggunakan UI Google SecOps, API tabel data, atau dengan menggunakan kueri YARA-L dalam aturan.
Mengelola tabel data menggunakan antarmuka pengguna Google SecOps
Bagian berikut menjelaskan cara mengelola tabel data menggunakan antarmuka pengguna, termasuk cara mengakses tabel data, menambahkan tabel data baru dan mengedit kontennya, mengimpor data ke tabel, menambahkan baris, memisahkan data menggunakan koma atau tab, dan cara menghapus tabel data dari akun Anda.
Mengakses tabel data
Untuk membuka halaman tabel data, buka sidebar navigasi kiri, lalu klik Detections > Data tables. Anda dapat menelusuri tabel data yang ada dengan memasukkan namanya di kolom penelusuran di bagian atas sidebar.
Menambahkan tabel data baru
Untuk menambahkan tabel data baru ke Google SecOps, selesaikan langkah-langkah berikut:
Klik tambahkan Tambahkan di kanan atas sidebar.
Pada dialog Create new data table, beri nama tabel baru dan (opsional) tambahkan deskripsi.
Klik Buat. Tabel data baru akan muncul di jendela utama dan siap menerima data.
Mengimpor data ke tabel data
Untuk menambahkan data ke tabel data, Anda dapat mengimpornya langsung ke Google SecOps sebagai berikut:
Klik Impor Data.
Pilih file CSV standar (hanya file CSV yang dapat diimpor ke Google SecOps).
Klik Buka jika Anda siap mengimpor data ke tabel data.
Menambahkan baris data baru ke tabel data
Untuk menambahkan baris data baru ke tabel data secara manual, Anda dapat memasukkannya langsung, dengan baris pertama berfungsi sebagai header tabel. Untuk melakukannya, lakukan hal berikut:
Di tab Details, tempatkan kursor di akhir baris yang ada, lalu tekan Enter.
Masukkan baris data baru:
- Pisahkan kolom data menggunakan koma atau tab.
- Pastikan untuk mencocokkan setiap item data dengan kolom data yang sesuai.
- Saat Anda memasukkan data baris di tab Detail, data tersebut akan diisi di Editor tabel.
Menentukan apakah akan menggunakan koma atau tab untuk memisahkan data
Untuk memisahkan data menggunakan koma atau tab, lakukan hal berikut:
Klik
Edit jenis pemisah di samping Impor Data.Pada dialog Edit jenis pemisah, pilih Titik koma atau Tab dari menu Pemisah.
Menghapus tabel data
Untuk menghapus tabel data:
Pilih tabel data dari daftar Tabel data di sebelah kiri.
Klik Hapus.
Mengelola tabel data menggunakan Chronicle API
Anda juga dapat menggunakan resource REST yang tersedia di Chronicle API untuk mengelola tabel data di Google SecOps. API ini memiliki fungsi yang setara dengan antarmuka pengguna, dan menyertakan beberapa fitur tambahan yang memungkinkan Anda mengelola tabel data dengan performa dan skala yang lebih besar.
Berikut adalah resource REST tabel data:
Menggunakan tabel data di Google SecOps
Setelah mengimpor tabel data ke instance Google SecOps, Anda dapat menggunakannya untuk memfilter, meningkatkan kualitas, dan memperkaya data menggunakan aturan. Dokumen ini menyertakan banyak contoh dalam sintaksis YARA-L, yang dapat Anda sertakan ke dalam aturan Google SecOps dalam instance Anda. Untuk informasi selengkapnya tentang cara mengedit aturan di Google SecOps, lihat Mengelola aturan menggunakan Editor Aturan.
Anda dapat menggunakan tabel data bersama dengan aturan dengan cara berikut:
Memfilter data entitas atau peristiwa UDM menggunakan tabel data. Anda dapat memfilter peristiwa dan entitas telemetri UDM dengan membandingkannya dengan entri dalam tabel data.
Menggabungkan tabel data dengan peristiwa atau entity. Anda dapat menautkan peristiwa UDM ke tabel data menggunakan operator persamaan untuk perbandingan berbasis baris. Perbandingan ini memungkinkan Anda memfilter data. Agar perbandingan berbasis baris dievaluasi sebagai benar, semua kondisi dalam pernyataan harus cocok dengan baris.
Gunakan tabel data sebagai daftar referensi multikolom. Anda dapat menggunakan tabel data sebagai daftar referensi multikolom. Meskipun daftar referensi dapat mengakses data dalam satu dimensi, tabel data memungkinkan Anda mengakses data dalam beberapa dimensi, sehingga memungkinkan pemfilteran data.
Memfilter data peristiwa dan entitas UDM menggunakan tabel data
Anda dapat memfilter peristiwa dan entitas UDM dengan membandingkannya dengan entri dalam tabel data.
Tautkan peristiwa UDM ke tabel data dengan salah satu cara berikut:
Menggunakan operator kesetaraan (
=, !=, >, >=, <, <=
) untuk perbandingan berbasis baris. Contoh,$<udm_variable>.<field_path> = %<data_table_name>.<column_name>
.Menggunakan kata kunci
in
untuk perbandingan berbasis kolom. Misalnya,$<udm_variable>.<field_path> in %<data_table_name>.<column_name>
.`
Seperti daftar referensi, jenis data yang didukung untuk setiap kolom tabel data dapat berupa string
, regex
, atau CIDR
.
Untuk menggunakan kolom tabel data jenis CIDR atau ekspresi reguler untuk perbandingan berbasis baris, gunakan sintaksis berikut:
net.ip_in_range_cidr($e.principal.ip, %<data_table_name>.<column_name>)
re.regex($e.principal.hostname, %<data_table_name>.<column_name>)
Untuk menggunakan kolom tabel data jenis CIDR atau ekspresi reguler untuk perbandingan berbasis kolom, gunakan sintaksis berikut:
$e.principal.ip in cidr %cidr_data_table.column_name
$e.principal.hostname in regex %regex_data_table.column_name
Jika Anda menentukan jenis data kolom sebagai CIDR atau ekspresi reguler, kecualikan kata kunci cidr
atau regex
.
Anda juga dapat menggunakan operator not
dengan tabel data. Contoh aturan berikut memfilter entri dengan alamat IP ($e.principal.ip
) yang tidak cocok dengan rentang CIDR yang tercantum di kolom benign_ip
di cidr_data_table
:
not $e.principal.ip in cidr %cidr_data_table.benign_ip
Menggabungkan tabel data dengan peristiwa atau entity UDM
Anda dapat menggunakan tabel data untuk memfilter peristiwa UDM menggunakan operator kesetaraan =, !=, >, >=, <, <=
untuk perbandingan berbasis baris.
Dalam contoh berikut, aturan YARA-L memeriksa bahwa saat pengguna login, ID penggunanya ada di tabel data (example_table
). Di baris yang sama pada tabel data tempat kecocokan terjadi, aturan ini juga memeriksa apakah akun pengguna aktif sebelum peristiwa login
didaftarkan.
// Check if a user exists in a data table and the user is active for all user login events.
rule udm_join_data_table {
meta:
description = "Join data table with UDM event"
event:
$e.metadata.event_type = USER_LOGIN
$e.security_result.action = ALLOW
$e.principal.user.userid = $userid
// Event must match at least one row in the table where the uid in the table
// row is the userid for the event and the active date in the same table
// row is before the event timestamp
%example_table.uid = $userid
$e.principal.hostname = %example_table.hostname
match:
$userid over 1h
condition:
$e
}
Contoh berikut mengilustrasikan tabel data dan data peristiwa UDM. Berdasarkan logika dalam aturan YARA-L sebelumnya, pengguna dengan ID pengguna 32452 muncul dalam deteksi karena nama host pengguna di sistem cocok dengan nama host di tabel data.
Tabel data | ||
uid | title | hostname |
32452 | HR | host1 |
64452 | Keuangan | host2 |
46364 | IT | host3 |
Tabel peristiwa UDM | |||
principal | metadata | security_result | principal |
32452 | USER_LOGIN | IZINKAN | host1 |
64589 | USER_LOGIN | IZINKAN | host9 |
87352 | USER_LOGIN | IZINKAN | host4 |
Menggunakan tabel data sebagai daftar referensi multikolom
Anda dapat menggunakan tabel data sebagai daftar referensi multikolom. Meskipun daftar referensi dapat mengakses data dalam satu dimensi, tabel data memungkinkan Anda mengakses data dalam beberapa dimensi, sehingga memungkinkan pemfilteran data.
Anda dapat menautkan peristiwa UDM ke tabel data menggunakan kata kunci in
untuk perbandingan
berbasis kolom.
Tabel data dapat dirujuk sebagai daftar referensi multikolom menggunakan sintaksis yang sama dengan yang digunakan oleh daftar referensi:
%<data_table_name>.<column_name>.
Dalam contoh berikut, pemberitahuan dipicu untuk koneksi jaringan dengan
kombinasi port dan protokol yang mencurigakan. Port
dan protocol
adalah kolom dalam
tabel data badApps
.
rule udm_in_data_table {
meta:
description = "Use data table as multicolumn reference list"
events:
$e.metadata.event_type = NETWORK_CONNECTION
$e.security_result.action = ALLOW
$e.target.asset.asset_id = $assetid
// event port matches at least one value in table column port
$e.target.port in %badApps.port
// event IP matches at least 1 value in table column protocol
$e.target.network.ip in %badApps.ip
match:
$assetid over 1h
condition:
$e
}
Memetakan jenis data ke satu kolom tabel data
Petakan setiap jenis data ke satu kolom tabel data. Setiap kolom yang berisi nilai untuk beberapa kolom harus dipisahkan sebelum dapat digunakan sebagai tabel data.
Dalam contoh berikut, kolom tabel data Field_value
berisi nilai
untuk beberapa kolom:
Field_value | Field_name |
altostrat.com | FQDN |
192.0.2.135 | IP |
charlie | userid |
contoh | hostname |
Tabel sebelumnya dibagi menjadi empat kolom dengan setiap kolom dipetakan ke hanya satu jenis kolom sebelum dapat digunakan untuk kasus penggunaan tabel data yang disajikan dalam dokumen ini.
FQDN | IP | Userid | Hostname |
altostrat.com | 192.0.2.135 | charlie | contoh |
… | … | … | … |
Memetakan nama kolom ke kolom entity
Saat membuat tabel data, Anda dapat memetakan nama kolom tabel data ke kolom entity.
Dalam contoh tabel data berikut, kolom Userid
dan Role
dipetakan
ke entity.user.userid
dan entity.user.attribute.role.name
:
Userid
(petakan ke entity.user.userid) |
Peran
(petakan ke entity.user.attribute.role.name) |
|
jack | jack123@gmail.com | admin |
tony | tony123@gmail.com | engineer |
Kolom Email
tidak dapat dipetakan ke jalur entity entity.user.email_address
karena merupakan kolom berulang. Anda tidak dapat memetakan kolom tabel data ke kolom berulang.
Anda dapat memetakan kolom tabel data ke kolom proto entity menggunakan kolom mapped_column_path
dari resource DataTable.
Untuk kolom yang tidak memiliki jalur entity yang ditentukan, seperti Email
dalam
contoh tabel ini, Anda harus menentukan jenis data. Seperti halnya daftar referensi, jenis data yang didukung untuk tabel data adalah string
, regex
, dan cidr
.
Anda dapat menentukan kolom yang dipetakan dan tidak dipetakan dalam tabel data menggunakan kondisi join. Kolom yang tidak dipetakan akan masuk ke kolom additional
dari entity (tempat tabel data digabungkan) sebagai pasangan nilai kunci dengan kunci adalah nama kolom dan nilai adalah nilai baris untuk kolom tersebut.
Menulis hasil dari kueri YARA-L ke tabel data
Anda dapat menulis hasil dari kueri YARA-L ke tabel data. Dengan menggunakan fitur ini, Anda dapat membuat tabel data dari data Google SecOps dan menggunakan tabel ini untuk memfilter dan meningkatkan kualitas data lainnya.
Anda dapat menggunakan sintaksis aturan YARA-L untuk tabel data untuk hal berikut:
Tentukan sintaksis YARA-L untuk menulis hasil aturan ke tabel data. Anda dapat menggunakan sintaksis yang sama untuk penelusuran dan dasbor.
Gunakan tabel data untuk intelijen ancaman, respons insiden, dan kasus penggunaan keamanan lainnya.
Pastikan data konsisten dengan konvensi YARA-L.
Menulis deteksi dan pemberitahuan ke tabel data menggunakan aturan
Anda dapat menggunakan aturan YARA-L untuk mengirim deteksi dan pemberitahuan ke tabel data.
Dengan menggunakan fungsi write_row, Anda dapat menimpa baris tabel data dengan kunci yang cocok di tabel data menggunakan hasil dari aturan. Jika kunci tidak ditemukan dalam tabel, tambahkan baris baru.
Tentukan fungsi write_row di bagian ekspor kueri YARA-L. Menulis data ke tabel data harus menjadi tindakan akhir aturan. Tindakan ini memastikan bahwa variabel hasil ditulis ke tabel data.
export:
%<data_table_name>.write_row(
data_table_column_x_name: <value>,
data_table_column_y_name: <value>,
...,
...,
data_table_column_z_name: <value>
)
// depending on the key column(s), the rows will be updated for existing keys
and appended for new keys
Mengubah tabel data menggunakan YARA-L
Berikut ini cara mengubah tabel data menggunakan YARA-L:
TableName: ip_user_domain_table
(kolom kunci untuk kunci utama ditentukan saat pembuatan)
ip_address | employee_id* | domain |
192.0.2.10 | Dana | altostrat.com |
192.0.2.20 | Quinn | altostrat.com |
192.0.2.30 | Lee | cymbalgroup.com |
* menunjukkan kunci utama.
Aturan berikut menangkap kombinasi unik dari principal.ip
, principal.user.employee_id
, dan target.domain
. Filter ini memfilter
hasil berdasarkan prevalensi target.domain
:
rule unique_principal_userid_and_ip_and_target_domain_with_low_prevalence {
meta:
author = "GP"
description = "Captures unique combinations of principal.ip,
principal.user.employee_id, and target.domain where
target.domain.prevalence is less than 5"
rule_version = "1.0"
events:
$e.principal.ip = $principal_ip
$e.principal.user.employee_id = $principal_user_employee_id
$e.target.domain.name = $target_domain
$e.target.domain.prevalence.day_count < 5
condition:
$e
}
Hasil aturan:
ip | empid | domain |
192.0.2.10 | Dana | altostrat.com |
192.0.2.30 | Lee | examplepetstore.com |
192.0.2.20 | Quinn | altostrat.com |
Contoh: Menggunakan write_row untuk menulis output aturan ke tabel data
rule write_to_data_table {
meta:
author = "GP"
description = "Captures uniqueprincipal.user.employee_id, and target.domain where target.domain.prevalence is less than 5"
rule_version = "1.0"
events:
$e.principal.user.employee_id = $principal_user_employee_id
$e.target.domain.name = $target_domain
$e.target.domain.prevalence.day_count < 5
outcome:
$hostname = $target_domain
$principal_emp_id = $principal_user_employee_id
condition:
$e
export:
%ips_with_hostnames.write_row (
employeeid:$principal_emp_id,
hostname:$hostname,
)
}
Contoh: Memahami write_row
Dalam contoh berikut, user
dan ip
adalah kunci utama. Setiap deteksi yang tetap ada di tabel deteksi akan menghasilkan satu evaluasi panggilan fungsi di bagian ekspor aturan.
Berikut aturannya:
rule successful_logins_by_user_to_ip {
meta:
events:
$e.metadata.event_type = "USER_LOGIN"
all $e.security_result.action != "BLOCK"
all $e.security_result.action != "UNKNOWN_ACTION"
$user = $e.principal.user.userid
$ip = $e.target.ip
$ts = $e.metadata.event_timestamp.seconds
match:
$user, $ip over 1h
outcome:
$first_seen = min($ts)
condition:
$e
export:
%successful_logins.write(user:$user, ip:$ip)
}
Berikut adalah data peristiwa:
metadata: {
event_type: USER_LOGIN
event_timestamp: { seconds: 1283299200 }
}
principal: {
user: {
userid: "charlie"
}
}
target: {
ip: ["192.0.2.135", "192.0.2.136"]
}
security_result: {
action: ALLOW
}
Deteksi berikut ditampilkan:
ID Deteksi | Cocokkan $user | Cocokkan $ip |
0 | charlie | 192.0.2.135 |
1 | charlie | 192.0.2.136 |
Tabel data berisi hal berikut:
pengguna | ip |
charlie | 192.0.2.135 |
charlie | 192.0.2.136 |
Memperkaya grafik entity dengan tabel data
Anda dapat menggunakan tabel data untuk menambahkan, menghapus, atau mengganti entitas yang ditampilkan dalam
grafik entitas. Gunakan fungsi di bagian setup
aturan untuk menunjukkan cara
menggabungkan, menambahkan, atau menggunakan tabel data untuk menghapus entitas dari
peristiwa entitas yang dirujuk di bagian events
.
Anda dapat menggunakan template aturan berikut untuk mengubah grafik entity:
rule entity_graph_template {
meta:
...
setup:
// import the data table into entity graph
<enrichment_keyword> <join_condition>
events:
...
match:
...
condition:
...
}
Anda dapat menggunakan fungsi YARA-L 2.0 berikut untuk meningkatkan grafik entity dengan tabel data:
graph_override
: Menutupi baris dalam grafik entity yang cocok dengan kondisi join dengan data dari tabel data.Contoh:
[graph_override](?tab=t.0#heading=h.v0fps7eke1if)
graph_append
: Menambahkan baris dari tabel data ke baris dalam grafik entity. Operasigraph_append
memerlukan array yang menyertakan variabel tabel data dan variabel peristiwa entity, bukan kondisi join.Pada contoh berikut,
$g1
adalah variabel grafik entity danexample_table
adalah tabel data:graph_append [$g1, %example_table]
graph_exclude
: Menghapus baris dalam grafik entity yang cocok dengan kondisi join.Contoh:
[graph_exclude](?tab=t.0#heading=h.o0qbb5paki6g)
Kondisi join harus berupa ekspresi kesetaraan antara kolom tabel data dan kolom grafik entity. Untuk fungsi graph_override
dan graph_exclude
, sintaksis untuk mengakses tabel data adalah sebagai berikut:
<data_table_name>.<column_name>
Setiap filter yang ditentukan untuk <entity_variable>
di bagian peristiwa akan diterapkan setelah peningkatannya dengan tabel data.
Setelah entitas dalam grafik entitas diperkaya dengan entitas dalam tabel data, variabel entitas dalam grafik entitas harus digabungkan ke entitas UDM.
Mengganti grafik entity dengan data dari tabel data
Dengan fungsi graph_override
, kolom yang ada di grafik entity dan tabel data diganti dengan kolom dari tabel data. Kolom yang ada di grafik entity dan tidak ada di tabel data tetap sama. Kolom yang tidak ada dalam grafik entity, tetapi ada dalam tabel data, akan disertakan.
Hanya kolom tabel data yang dipetakan yang akan mengganti kolom
grafik entity. Kolom yang tidak dipetakan ditambahkan ke kolom additional
grafik entity tempat tabel data digabungkan.
Contoh: Mencocokkan pada satu join
Dalam contoh berikut, baris dalam grafik entity yang cocok dengan kondisi join
antara kolom tabel data dan kolom grafik entity
($g1.graph.entity.ip = %example_table.my_ip
) akan diganti oleh tabel data.
rule rule_override {
meta:
description = "Override entity context with data table before joining with UDM event"
setup:
//Rows in the entity graph that match the join condition are overridden by the data table
graph_override ($g1.graph.entity.ip = %example_table.my_ip)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Filter will be applied after graph is overridden by data table
$g1.graph.entity.hostname = "ftp01"
// Accessing unmapped columns
$g1.graph.additional.fields["Owner"] = "alice"
// Joining the UDM event with the enriched entity graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
Untuk menggunakan kolom yang tidak dipetakan (misalnya "Pemilik") dari tabel data, lalu pernyataan yang setara untuk $g1.graph.entity.owner = "alice" is $g1.graph.additional.fields["Owner"] = "alice"
.
Hal ini karena semua kolom tabel data yang tidak dipetakan masuk ke
kolom additional
dari grafik entity ($g1)
.
Tabel berikut mengilustrasikan operasi penggantian saat baris dalam grafik entity diperkaya saat kolom IP dalam tabel data cocok dengan kolom IP dalam grafik entity.
Grafik entity yang ada | ||
Hostname | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Tabel data | |||
Hostname | IP | MAC | Pemilik |
ftp01 | 10.1.1.4 | …:bb | alice |
h1 | 10.1.1.6 | …:cc | bob |
h2 | 10.1.1.7 | …:dd | chris |
h3 | 10.1.1.4 | …:ee | doug |
Grafik entity yang diperkaya | |||
Hostname | IP | MAC | Pemilik |
ftp01 | 10.1.1.4 | …:bb | alice |
www01 | 10.1.1.5 | …:02 | |
h3 | 10.1.1.4 | …:ee | doug |
Contoh: Mencocokkan di beberapa join
Pada contoh berikut, baris dalam grafik entity yang cocok dengan beberapa
kondisi join ($g1.graph.entity.ip = %example_table.my_ip
dan $g1.graph.entity.hostname = %example_table.my_hostname
) akan diganti oleh
tabel data.
rule rule_override {
meta:
description = "Override Entity context with Data Table before joining with UDM event"
setup:
// example with more than one condition
graph_override ($g1.graph.entity.ip = %example_table.my_ip and
$g1.graph.entity.hostname = %example_table.my_hostname)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Filter will be applied after graph is overridden by data table
$g1.graph.entity.hostname = "ftp01"
// joining the UDM event with the enriched entity graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
Tabel berikut mengilustrasikan operasi penggantian saat baris grafik entitas diperkaya jika kolom IP dan kolom nama host dalam tabel data cocok dengan kolom IP dan kolom nama host dalam grafik entitas.
Grafik entity yang ada | ||
Hostname | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Tabel data | |||
Hostname | IP | MAC | Pemilik |
ftp01 | 10.1.1.4 | …:bb | alice |
h1 | 10.1.1.5 | …:cc | bob |
h2 | 10.1.1.6 | …:dd | chris |
h3 | 10.1.1.4 | …:ee | doug |
Grafik entity yang diperkaya | |||
Hostname | IP | MAC | Pemilik |
ftp01 | 10.1.1.4 | …:bb | alice |
www01 | 10.1.1.5 | …:02 |
Menambahkan data dari tabel data ke grafik entity
Dengan fungsi graph_append
, tidak diperlukan kondisi join.
Dalam contoh berikut, semua baris dalam tabel data ditambahkan ke baris dalam grafik entity.
rule rule_append {
meta:
description = "Data table append entity"
setup:
graph_append [$g1, %example_table]
events:
// filter UDM events
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Join the filtered UDM events with the enriched graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
Tabel contoh berikut mengilustrasikan operasi penambahan saat baris tabel data ditambahkan ke baris dalam grafik entity:
Grafik entity yang ada | ||
Hostname | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Tabel data | |||
Hostname | IP | MAC | Pemilik |
10.1.1.4 | …:01 | alice | |
10.1.1.6 | …:cc | bob | |
10.1.1.7 | …:dd | chris | |
10.1.1.4 | …:ee | doug |
Grafik entity yang diperkaya | |||
Hostname | IP | MAC | Pemilik |
ftp01 | 10.1.1.4 | …:01 | |
www01 | 10.1.1.5 | …:02 | |
10.1.1.4 | …:bb | alice | |
10.1.1.6 | …:cc | bob | |
10.1.1.7 | …:dd | chris | |
10.1.1.4 | …:ee | doug |
Menggunakan graph_exclude untuk menghapus baris dari grafik entitas
Dengan fungsi graph_exclude
, baris dalam grafik entity yang cocok dengan kondisi join akan dihapus dari grafik entity.
Dalam contoh berikut, semua baris dalam grafik entity yang cocok dengan kondisi join tertentu (antara kolom tabel data dan kolom grafik entity) akan dihapus. Tidak ada baris dari tabel data yang ditambahkan ke grafik entity.
rule rule_exclude {
meta:
setup:
graph_exclude ($g1.graph.entity.ip = %example_table.ip)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
Tabel berikut mengilustrasikan operasi pengecualian saat baris grafik entitas yang cocok dengan kolom IP tabel data dihapus:
Grafik entity yang ada | ||
Hostname | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Tabel data | ||
IP | MAC | Pemilik |
10.1.1.4 | …:bb | alice |
10.1.1.6 | …:cc | bob |
10.1.1.7 | …:dd | chris |
Grafik entity yang diperkaya | ||
Hostname | IP | MAC |
www01 | 10.1.1.5 | …:02 |
Batasan
Batas jumlah pernyataan
in
saat mereferensikan daftar referensi dalam aturan juga berlaku untuk pernyataanin
dalam tabel data.Hanya jenis file CSV yang didukung untuk diupload.
Ukuran maksimum tabel data adalah 10 GB.
Batas agregat maksimum volume data di seluruh tabel data dalam tenant adalah 1 TB.
Jumlah maksimum pernyataan
in
dalam aturan, dengan atau tanpa operator khusus: 7Jumlah maksimum pernyataan
in
dengan operatorregex
: 4Jumlah maksimum pernyataan
in
dengan operatorcidr
: 2Placeholder tidak diizinkan di bagian penyiapan baru.
Kolom yang tidak dipetakan dari tabel data dengan jenis data yang ditetapkan ke
string
hanya dapat digabungkan dengan kolom string peristiwa UDM atau entity UDM.Hanya gunakan kolom yang tidak dipetakan dalam tabel data dengan jenis data yang ditetapkan ke
cidr
atauregex
untuk CIDR atau ekspresi reguler.Anda tidak dapat memetakan kolom tabel data ke kolom berulang.
Menggunakan tabel data dengan aturan
Batasan berikut berlaku untuk tabel data saat digunakan dengan aturan:
Frekuensi berjalan
Frekuensi pengoperasian real-time tidak didukung untuk aturan dengan tabel data.
Gabungan
Tidak seperti entitas dan UDM, tabel data tidak mendukung placeholder. Artinya, Anda tidak dapat menerapkan satu kumpulan filter ke tabel data, menggabungkannya dengan entitas UDM, lalu menerapkan kumpulan filter yang berbeda ke tabel data yang sama dan menggabungkannya dengan variabel placeholder UDM lain.
Misalnya, tabel data bernama
dt
dengan 3 kolom:my_hostname
,org
, danmy_email
serta dengan aturan berikut:
events:
$e1.principal.hostname = %dt.my_hostname
%dt.org ="hr"
$e2.principal.email = %dt.my_email
%dt.org !="hr"
Semua filter pada tabel data diterapkan terlebih dahulu, lalu baris yang difilter
dari tabel data digabungkan dengan UDM. Dalam hal ini, tabel data kosong digabungkan dengan e1
dan e2
karena dua filter pada tabel data dt
saling bertentangan (%dt.org ="hr" and %dt.org !="hr"
).
Output ke tabel data
Anda hanya dapat mengekspor variabel hasil ke tabel data. Anda tidak dapat mengekspor kolom tabel data atau jalur peristiwa secara langsung.
Daftar kolom harus menyertakan kolom kunci utama untuk tabel data.
Anda tidak boleh memiliki lebih dari 20 hasil.
Kolom tabel data tidak mendukung nilai berulang, sehingga semua variabel hasil yang ditulis ke tabel data harus berupa nilai tunggal.
Jika tabel data tidak ada, tabel baru akan dibuat dengan jenis data string default untuk semua kolom, mengikuti urutan yang ditentukan.
Hanya satu aturan yang dapat menulis ke tabel data dalam satu waktu. Jika aturan mencoba menulis ke tabel data yang sudah ditulis oleh aturan lain, kompilasi aturan akan gagal.
Tidak ada jaminan bahwa aturan produsen dapat menambahkan baris ke tabel data sebelum aturan konsumen untuk tabel data tersebut dimulai.
Aturan memiliki batas jumlah baris hasil. Batas 10.000 baris berlaku untuk hasil dan data yang dipertahankan. Batas yang sama berlaku untuk tabel data; satu eksekusi aturan dapat menghasilkan maksimum 10.000 baris ke tabel data.
Jika baris dengan kunci utama yang sama sudah ada di tabel data, kolom kunci non-utama akan diganti dengan nilai baru.
Anda hanya dapat menerapkan satu operasi pengayaan (
override
,append
, atauexclude
) ke satu variabel grafik entity.Setiap operasi pengayaan dapat dilakukan hanya menggunakan satu tabel data.
Anda dapat menentukan maksimal dua operasi pengayaan dari jenis apa pun di bagian
setup
dari aturan YARA-L.
Pada contoh berikut, operasi penggantian diterapkan ke variabel grafik entity
$g1
dan operasi append
diterapkan ke variabel grafik entity
$g2
.
setup:
graph_override($g1.graph.entity.user.userid = %table1.myids)
graph_append [$g2, %table1]
Dalam contoh sebelumnya, tabel data yang sama (table1
) digunakan untuk meningkatkan
grafik entity yang berbeda. Anda juga dapat menggunakan tabel data yang berbeda untuk meningkatkan kualitas
grafik entity yang berbeda, sebagai berikut:
setup:
graph_override($g1.graph.entity.user.userid = %table1.myids)
graph_append [$g2, %table2]