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 pemeta dengan kolom yang ditentukan dan data yang disimpan dalam baris. Anda dapat membuat atau mengimpor tabel data ke akun Google SecOps menggunakan antarmuka web Google SecOps, API tabel data, atau menggunakan kueri YARA-L.
Menetapkan cakupan ke tabel data menggunakan RBAC data
Untuk menggunakan tabel data, Anda harus menetapkan cakupan ke tabel data menggunakan kontrol akses berbasis peran (RBAC) data. Dengan menetapkan cakupan ke tabel data, Anda dapat mengontrol pengguna dan resource mana yang dapat mengakses dan menggunakannya. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi RBAC data untuk tabel data.
Mengelola tabel data menggunakan antarmuka web Google SecOps
Bagian berikut menjelaskan cara mengelola tabel data menggunakan antarmuka web, termasuk cara mengakses tabel data, menambahkan tabel data baru dan mengedit isinya, mengimpor data ke tabel, menambahkan baris, memisahkan data menggunakan koma atau tab, dan cara menghapus tabel data dari akun Anda.
Mengakses tabel data Anda
Untuk mengakses halaman Tabel data, lakukan hal berikut:
- Di sidebar kiri, pilih Investigasi > Tabel data.
Untuk menemukan tabel data tertentu, masukkan 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
Buat di kanan atas sidebar.Dalam dialog Buat tabel data baru, 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.
Memetakan jenis data ke kolom tabel data
Anda dapat memetakan kolom data tunggal ke kolom data, dan memetakan kolom data berulang ke kolom data menggunakan antarmuka web atau API, sebagai berikut:
Di antarmuka web dan API, pisahkan nilai kolom data menggunakan karakter
|
. Di antarmuka web, jika ada nilai yang menyertakan karakter|
, nilai tersebut akan diperlakukan sebagai nilai berulang secara default.Untuk permintaan API, tetapkan
repeated_values
ketrue
.
Untuk mengetahui informasi selengkapnya, lihat Kolom berulang.
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 di atas dibagi menjadi empat kolom dengan setiap kolom dipetakan ke hanya satu jenis kolom sebelum dapat digunakan untuk salah satu kasus penggunaan tabel data yang disajikan dalam dokumen ini.
FQDN | IP | Userid | Hostname |
altostrat.com | 192.0.2.135 | charlie | contoh |
… | … | … | … |
Menetapkan kolom tertentu sebagai kolom kunci
Menandai kolom sebagai kolom kunci secara unik mengidentifikasi nilai dalam kolom tersebut, mencegah duplikasi data, dan meningkatkan penemuan data untuk aturan dan penelusuran.
Menentukan kolom tertentu untuk mendukung kolom berulang
Kolom yang ditujukan untuk menyimpan kolom multi-nilai atau kolom berulang, harus ditetapkan secara eksplisit sebagai berulang saat tabel data dibuat.
Memetakan nama kolom ke kolom entity (opsional)
Saat membuat tabel data, Anda dapat memetakan nama kolom tabel data ke kolom entitas.
Dalam tabel data contoh berikut, kolom Userid
dan Role
dipetakan
ke entity.user.userid
dan entity.user.attribute.role.name
:
Userid
(dipetakan ke entity.user.userid) |
Peran
(dipetakan ke entity.user.attribute.role.name) |
|
jack | jack123@gmail.com | administrator |
tony | tony123@gmail.com | engineer |
Anda dapat memetakan kolom tabel data ke kolom proto entity menggunakan kolom
mapped_column_path
dari resource DataTable
.
Untuk kolom tanpa jalur entity yang ditentukan, seperti Email
dalam tabel contoh ini, Anda harus menentukan jenis data secara manual. Seperti
daftar referensi, jenis data yang didukung
untuk tabel data adalah number
, string
, regex
, dan cidr
.
Anda dapat menyertakan kolom yang dipetakan dan tidak dipetakan dalam tabel data dengan menentukan kondisi join
.
Kolom yang tidak dipetakan disimpan di kolom additional
entity yang digabungkan dengan tabel. Nilai ini ditambahkan sebagai key-value pair, dengan key
adalah nama kolom dan value
adalah nilai baris yang sesuai.
Menambahkan baris baru ke tabel data
Untuk menambahkan baris baru, ikuti langkah-langkah berikut:
Di tab Detail, klik kanan baris yang ada, lalu pilih Tambahkan baris di atas.
Masukkan data untuk baris baru, dengan baris pertama diperlakukan sebagai header tabel:
- 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.
Mengedit baris dalam tabel data
Untuk mengedit baris, lakukan hal berikut:
Klik kolom yang ingin Anda ubah. Kolom tersebut kemudian dapat diedit.
Setelah melakukan perubahan, klik Simpan.
Tentukan 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 Koma atau Tab dari menu Pemisah.
Menelusuri baris tabel data
Anda dapat menelusuri informasi tertentu dalam tabel data menggunakan antarmuka web. Di tab Detail, masukkan string penelusuran di kolom penelusuran, lalu klik Telusuri. Baris yang berisi string penelusuran Anda akan ditampilkan.
Mengelola TTL baris tabel
Untuk mengelola nilai time-to-live (TTL) untuk baris tabel, lakukan hal berikut:
Klik Tampilkan TTL per baris. Kolom TTL ditampilkan, yang menunjukkan apakah setiap baris telah berakhir. Jika belum habis masa berlakunya, waktu yang tersisa sebelum habis masa berlakunya akan ditampilkan.
Klik waktu Habis masa berlaku baris default untuk menampilkan dialog Perbarui habis masa berlaku baris default dan sesuaikan TTL baris tabel.
Masukkan nilai TTL baru dalam Jam atau Hari. Nilai minimumnya adalah 24 jam. Nilai maksimumnya adalah 365 hari.
Klik Simpan.
Menghapus baris tabel
Untuk menghapus baris, klik kanan baris, lalu pilih Hapus baris.
Untuk menghapus beberapa baris, pilih setiap baris yang ingin Anda hapus. Kemudian, klik kanan baris yang dipilih dan pilih Hapus baris.
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 dapat mereplikasi semua fitur yang tersedia di antarmuka web, dan menyertakan beberapa fitur tambahan yang memungkinkan Anda mengelola tabel data dengan performa yang lebih baik dan skala yang lebih besar.
Berikut adalah resource REST tabel data:
Contoh: sintaksis filter
Contoh Chronicle API berikut menunjukkan cara menggunakan sintaksis filter
untuk menelusuri google.com
dalam baris tabel data:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://staging-chronicle.sandbox.googleapis.com/v1alpha/projects/{$PROJECT}/locations/${REGION}/instances/${INSTANCE}/dataTables/${DATA_TABLE_NAME}/dataTableRows?filter=google.com
Menggunakan tabel data di Google SecOps
Setelah mengimpor tabel data ke instance Google SecOps, Anda dapat menggunakannya untuk memfilter, meningkatkan, dan memperkaya data menggunakan kueri YARA-L. Dokumen ini menyertakan banyak contoh dalam sintaksis YARA-L, yang dapat Anda masukkan ke dalam Google SecOps.
Anda dapat menggunakan tabel data bersama dengan kueri YARA-L dalam Penelusuran dan aturan. Tabel data dapat digunakan 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.
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.
Gabungkan tabel data dengan peristiwa atau entitas. Anda dapat menautkan peristiwa UDM ke tabel data menggunakan operator kesetaraan (
=
) untuk perbandingan berbasis baris. Perbandingan ini memungkinkan Anda memfilter data. Perbandingan berbasis baris dievaluasi sebagaitrue
hanya jika semua kondisi dalam pernyataan cocok dengan satu baris dalam tabel 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 number
, string
, regex
, atau CIDR
.
Untuk menggunakan kolom tabel data berjenis number
untuk perbandingan dan penggabungan berbasis kolom, gunakan sintaksis berikut. Contoh ini menelusuri peristiwa yang mencakup target.port
8080.
%table.number_field = target.port
%table.number_field = 8080
target.port in %table.number_field
Untuk menggunakan kolom tabel data berjenis CIDR
atau regex
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 berjenis CIDR
atau regex
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
Saat membandingkan kolom dalam tabel data yang merupakan jenis data CIDR atau ekspresi reguler, kata kunci cidr
dan regex
bersifat opsional.
Anda juga dapat menggunakan operator not
dengan tabel data. Contoh kueri berikut memfilter entri yang alamat IP-nya ($e.principal.ip
) tidak cocok dengan rentang CIDR yang tercantum di kolom benign_ip
dalam cidr_data_table
:
not $e.principal.ip in %data_table.benign_ip
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 (satu kolom), tabel data mendukung beberapa kolom, sehingga Anda dapat memfilter dan mengakses data di beberapa dimensi.
Anda dapat menautkan peristiwa UDM ke tabel data menggunakan kata kunci in
untuk perbandingan berbasis kolom, sehingga Anda dapat mencocokkan nilai dalam kolom UDM tertentu dengan nilai dalam satu kolom tabel data.
Dalam contoh berikut, tabel data badApps
berisi dua kolom: hostname
dan ip
. Kueri mencocokkan kedua nilai (nilai berdasarkan kolom UDM dan nilai berdasarkan tabel data, keduanya berjenis data string) secara independen.
Contoh aturan:
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 hostname matches at least one value in table column hostname.
$e.target.hostname in %badApps.hostname
// Event IP matches at least one value in table column ip.
$e.target.ip in %badApps.ip
match:
$assetid over 1h
condition:
$e
}
Contoh penelusuran:
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
$e.target.asset.asset_id = $assetid
// Event hostname matches at least one value in table column hostname.
$e.target.hostname in %badApps.hostname
// Event IP matches at least one value in table column ip.
$e.target.ip in %badApps.ip
Menggabungkan tabel data dengan peristiwa atau entitas UDM
Anda dapat menautkan peristiwa UDM ke tabel data menggunakan operator kesetaraan dan perbandingan (=, !=, >, >=,
<, <=
) untuk melakukan perbandingan berbasis baris. Pendekatan ini memungkinkan Anda memfilter data dengan mencocokkan nilai dari peristiwa UDM dengan baris dalam tabel data. Jika Anda menggunakan
beberapa pernyataan perbandingan, semua kolom atau kondisi harus cocok pada baris tabel data yang sama.
Anda harus menyertakan minimal satu kondisi join
antara kolom UDM dan baris tabel data untuk menggunakan operator (seperti not, !=, >, >=, <, <=
) dalam kueri.
Google SecOps memperlakukan aturan apa pun dengan tabel data join
sebagai aturan multi-peristiwa, yang mengharuskan Anda juga menyertakan bagian match
dalam definisi aturan.
Saat gabungan terjadi, baris tabel data tertaut akan terlihat di Penelusuran. Untuk mengetahui informasi selengkapnya, lihat Melihat baris tabel data di Penelusuran.
Contoh berikut menggunakan kolom tabel data jenis string
. Kueri YARA-L ini memeriksa apakah peristiwa login pengguna cocok dengan baris di example_table
dengan mengonfirmasi bahwa user ID
ada dalam tabel. Kedua kondisi harus cocok pada
baris yang sama dalam tabel data agar aturan dipicu.
// Check if a user exists in a data table and that the user is active for all user login events.
Contoh Aturan:
rule udm_join_data_table {
meta:
description = "Join data table with UDM event"
events:
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "ALLOW"
$e.principal.user.userid = $userid
// Event must match at least 1 row in the table where the uid in the table
// row is the userid on 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 Penelusuran:
events:
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "ALLOW"
$e.principal.user.userid = $userid
// Event must match at least 1 row in the table where the uid in the table
// row is the userid on 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
Contoh berikut menggambarkan cara kerja tabel data dan data peristiwa UDM secara bersamaan. Berdasarkan logika dalam kueri YARA-L sebelumnya, pengguna dengan user ID 32452
muncul dalam deteksi sebagai hostname
pengguna dari sistem dan cocok dengan hostname
dalam 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 |
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 penulisan kueri YARA-L untuk hal berikut:
Tentukan sintaksis YARA-L untuk menulis hasil kueri ke tabel data.
Gunakan tabel data untuk intelijen ancaman, respons insiden, dan kasus penggunaan keamanan lainnya.
Data harus sesuai dengan sintaksis dan konvensi YARA-L.
Menulis deteksi dan pemberitahuan ke tabel data menggunakan YARA-L
Anda dapat menggunakan kueri YARA-L untuk mengirim deteksi dan pemberitahuan ke tabel data.
Dengan 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. Penulisan data ke tabel data harus menjadi tindakan terakhir kueri. Hal ini akan menyebabkan 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 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.
Kueri berikut mengambil kombinasi unik dari principal.ip
,
principal.user.employee_id
, dan target.domain
. Setelan ini memfilter hasil berdasarkan
prevalensi target.domain
:
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
// To run this query as a rule, add Condition Section here
// condition:$e
Hasil kueri:
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 kueri ke tabel data
Contoh Aturan:
rule udm_write_data_table {
meta:
description = "Writeto data table"
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 Penelusuran:
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
export:
%ips_with_hostnames.write_row(
employeeid:$principal_emp_id,
hostname:$hostname
)
Contoh: Memahami write_row
Dalam contoh berikut, user
dan ip
digunakan sebagai kunci utama. Setiap deteksi yang tetap ada dalam tabel deteksi menghasilkan satu evaluasi panggilan fungsi di bagian ekspor kueri.
Contoh Aturan:
rule udm_write_data_table {
meta:
description = "Write data table"
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_row(user:$user, ip:$ip)
}
Contoh Penelusuran:
events:
$e.metadata.event_type = "USER_LOGIN"
all $e.security_result.action != "BLOCK"
all $e.security_result.action != "UNKNOWN_ACTION"
$ts = $e.metadata.event_timestamp.seconds
outcome:
$user = $e.principal.user.userid
$ip = $e.target.ip[0]
export:
%successful_logins.write_row(user:$user, ip:$ip)
Berikut data acara:
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 saat kueri ini dieksekusi sebagai aturan:
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 |
Kueri penelusuran berikut mengilustrasikan dukungan yang ditawarkan di Penelusuran untuk menulis nilai skalar ke tabel data.
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
export:
%summary_table.write_row(col_name: $e.metadata.product_name, Vendor_name: $e.metadata.vendor_name)
Memperkaya grafik entity dengan tabel data
Anda dapat menggunakan tabel data untuk menambahkan, menghapus, atau mengganti entitas yang ditampilkan dalam grafik entitas dari aturan. Gunakan fungsi di bagian setup
aturan untuk menunjukkan cara tabel data harus digabungkan dengan, ditambahkan ke, atau digunakan 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 kualitas grafik entitas dengan tabel data:
graph_override
: Menimpa baris dalam grafik entitas yang cocok dengan kondisi gabungan 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 entitas. Operasigraph_append
memerlukan array yang menyertakan variabel tabel data dan variabel peristiwa entitas, bukan kondisi gabungan.Dalam contoh berikut,
$g1
adalah variabel grafik entity danexample_table
adalah tabel data:graph_append [$g1, %example_table]
Untuk fungsi
append
, tabel data harus menyertakan kolom berikut untuk memvalidasi entitas:start_time
(dipetakan kemetadata.interval.start_time.seconds
)end_time
(dipetakan kemetadata.interval.end_time.seconds
)
Kolom tabel data tidak dapat dipetakan ke kolom metadata menggunakan antarmuka web. Untuk kasus penggunaan
append
, tabel data harus dibuat menggunakan Chronicle API (https://cloud.google.com/chronicle/docs/reference/rest/v1alpha/projects.locations.instances.dataTables/create)graph_exclude
: Menghapus baris dalam grafik entitas yang cocok dengan kondisijoin
.Contoh:
[graph_exclude](?tab=t.0#heading=h.o0qbb5paki6g)
Kondisi gabungan 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>
Filter apa pun yang ditentukan untuk <entity_variable>
di bagian peristiwa diterapkan
setelah penyempurnaannya 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 dalam grafik entity dan tidak ada dalam tabel data tetap sama. Kolom
yang tidak ada dalam grafik entity, tetapi ada dalam tabel data disertakan.
Hanya kolom tabel data yang dipetakan yang menggantikan kolom
grafik entity. Kolom yang tidak dipetakan ditambahkan ke kolom additional
grafik entitas tempat tabel data digabungkan.
Contoh: Mencocokkan pada gabungan tunggal
Dalam contoh berikut, baris dalam grafik entity yang cocok dengan kondisi
gabungan antara kolom tabel data dan kolom grafik entity
($g1.graph.entity.ip = %example_table.my_ip
) 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, maka pernyataan yang setara untuk $g1.graph.entity.owner = "alice" is $g1.graph.additional.fields["Owner"] = "alice"
.
Hal ini karena semua kolom yang tidak dipetakan dari tabel data masuk ke kolom additional
dari grafik entity ($g1)
.
Tabel berikut menggambarkan operasi penggantian yang memperkaya baris dalam grafik entitas saat kolom IP dalam tabel data cocok dengan kolom IP 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.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 beberapa gabungan
Dalam contoh berikut, baris dalam grafik entity yang cocok dengan beberapa kondisi gabungan ($g1.graph.entity.ip = %example_table.my_ip
dan $g1.graph.entity.hostname = %example_table.my_hostname
) digantikan 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 menggambarkan operasi penggantian yang memperkaya baris grafik entitas saat 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 gabungan.
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 menggambarkan 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 | ||
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 entitas yang cocok dengan kondisi gabungan akan dihapus dari grafik entitas.
Dalam contoh berikut, semua baris dalam grafik entity yang cocok dengan kondisi gabungan yang diberikan (antara kolom tabel data dan kolom grafik entity) akan dihapus. Tidak ada baris dari tabel data yang ditambahkan ke grafik entitas.
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 menggambarkan 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
Jumlah maksimum tabel data untuk akun Google SecOps: 1.000.
Hanya jenis file
CSV
yang didukung untuk upload.Batas jumlah pernyataan
in
saat mereferensikan daftar referensi dalam kueri juga berlaku untuk pernyataanin
dalam tabel data.Jumlah maksimum pernyataan
in
dalam kueri: 10Jumlah maksimum pernyataan
in
dalam kueri untuk kolom jenis dataString
danNumber
: 7Jumlah maksimum pernyataan
in
dengan operator ekspresi reguler: 4Jumlah maksimum pernyataan
in
dengan operator CIDR: 2Jumlah maksimum kolom per tabel data: 1.000.
Baris maksimum per tabel data: 10 juta.
Batas gabungan maksimum volume data di seluruh tabel data dalam satu akun: 1 TB.
Batas tampilan maksimum di halaman web untuk baris tabel data dalam tampilan editor teks dan tabel: 10.000 baris
Batas baris maksimum saat mengupload file ke tabel data baru di halaman web: 10.000 baris
Batas ukuran upload file maksimum untuk pembuatan tabel data dari API: 1 GB
Placeholder tidak diizinkan di bagian penyiapan.
Kolom yang tidak dipetakan dari tabel data dengan jenis data yang ditetapkan ke
string
hanya dapat digabungkan dengan kolom string dari peristiwa UDM atau entity UDM.Gunakan hanya kolom yang tidak dipetakan dalam tabel data dengan jenis data yang ditetapkan ke
cidr
atauregex
untuk CIDR atau ekspresi reguler.Pencarian tabel data: Karakter pengganti ekspresi reguler tidak didukung dan istilah penelusuran dibatasi hingga 100 karakter.
Gabungan
Pengambilan semua sampel peristiwa untuk deteksi tidak didukung saat menggunakan gabungan tabel data dengan peristiwa.
Tidak seperti entitas dan UDM, tabel data tidak mendukung placeholder. Artinya, Anda tidak dapat:
Terapkan satu set filter ke tabel data dan gabungkan dengan entitas UDM.
Menerapkan serangkaian filter yang berbeda ke tabel data yang sama saat menggabungkannya dengan 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"
).
Menggunakan tabel data dengan aturan
Batasan berikut berlaku untuk tabel data saat digunakan dengan aturan.
Frekuensi menjalankan
Frekuensi eksekusi real-time tidak didukung untuk aturan dengan tabel data.
Output ke tabel data
Pengubah
any
danall
tidak didukung untuk kolom bidang berulang dalam tabel data.Pengindeksan array tidak didukung untuk kolom bidang berulang dalam tabel data.
Anda hanya dapat mengekspor variabel hasil ke tabel data. Anda tidak dapat mengekspor jalur peristiwa atau kolom tabel data secara langsung.
Daftar kolom harus menyertakan kolom kunci utama untuk tabel data.
Anda dapat memiliki maksimal 20 hasil.
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 suatu aturan mencoba menulis ke tabel data yang sedang 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.
Pengayaan entitas dari tabel data
Anda hanya dapat menerapkan satu operasi pengayaan (
override
,append
, atauexclude
) ke satu variabel grafik entity.Setiap operasi pengayaan hanya dapat dilakukan menggunakan satu tabel data.
Anda dapat menentukan maksimum dua operasi pengayaan jenis apa pun di bagian
setup
dari aturan YARA-L.
Dalam 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 kualitas grafik entity yang berbeda. Anda juga dapat menggunakan tabel data yang berbeda untuk meningkatkan kualitas grafik entitas yang berbeda, sebagai berikut:
setup:
graph_override($g1.graph.entity.user.userid = %table1.myids)
graph_append [$g2, %table2]
Menggunakan tabel data dengan Penelusuran
Batasan berikut berlaku untuk tabel data saat digunakan dengan Penelusuran.
Anda tidak dapat menjalankan kueri penelusuran pada tabel data menggunakan Chronicle API. Anda hanya dapat menjalankan kueri penelusuran dari antarmuka web.
Satu eksekusi kueri dapat menghasilkan maksimum 1 juta baris ke tabel data atau 1 GB, mana pun yang tercapai terlebih dahulu.
Output penelusuran ke tabel data akan melewati baris peristiwa jika ukurannya melebihi 5 MB.
Pengayaan entitas tidak didukung dengan Penelusuran.
Tabel data tidak didukung untuk pelanggan yang menggunakan kunci enkripsi yang dikelola pelanggan (CMEK).
Penulisan dibatasi hingga 6 per menit per pelanggan.
Dukungan API tidak tersedia.
Kueri statistik tidak didukung dengan gabungan tabel data.
Penggabungan tabel data dan tabel data hanya didukung dengan peristiwa UDM, bukan dengan entitas.
Didukung:
%datatable1.column1 = %datatable2.column1
Tidak didukung:graph.entity.hostname = %sample.test
Anda tidak dapat menyertakan variabel
match
dalam kueri statistik di bagianexport
.Misalnya, hal berikut tidak didukung:
match:
principal.hostname
export:
%sample.write_row(
row: principal.hostname
)
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.