Menggunakan tabel data
Tabel data adalah konstruksi data multikolom yang memungkinkan Anda memasukkan data Anda sendiri ke Google Security Operations. Tabel data 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 Ringkasan YARA-L 2.0.
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, mengedit isinya, menambahkan baris, dan cara menghapus tabel data dari akun Anda.
Mengakses tabel data Anda
Untuk mengakses halaman Tabel Data, lakukan hal berikut:
- Di sidebar, pilih Investigation > Data Tables.
Untuk menemukan tabel data tertentu, di bagian atas sidebar Tabel Data, masukkan namanya di kolom Penelusuran.
Menambahkan tabel data baru
Saat menambahkan tabel data baru, Anda dapat memasukkan data CSV secara manual, menempelkan data CSV, atau mengimpor file CSV atau TSV ke dalam tabel data.
Konfigurasi berikut bersifat permanen dan tidak dapat diubah setelah tabel data baru disimpan:
Untuk menambahkan tabel data baru ke Google SecOps, lakukan hal berikut:
Di sidebar, pilih Investigation > Data Tables.
Di bagian atas sidebar Tabel Data, klik Buat.
Dalam dialog Buat Tabel Data Baru, beri nama tabel dan, secara opsional, tambahkan deskripsi.
Lakukan salah satu hal berikut:
- Masukkan data CSV secara manual atau tempelkan data CSV ke area Teks (mode edit).
- Lakukan langkah-langkah berikut untuk mengimpor data dari file CSV atau TSV ke dalam tabel data:
- Klik Impor File.
- Buka file, lalu klik Buka. Dialog Impor File akan terbuka.
- Jika Anda memilih file TSV pada langkah sebelumnya, lakukan hal berikut:
- Dari daftar Jenis Pemisah, pilih Deteksi otomatis atau Tab.
- Dari daftar Mulai impor di baris, tentukan baris dalam file yang akan diimpor datanya.
- Klik Impor Data.
Pilih mode edit Tabel dan konfigurasi hal berikut sesuai kebutuhan:
Klik Simpan. Tabel data baru ditampilkan di sidebar Tabel Data dan siap menerima data tambahan.
Memetakan jenis data ke kolom tabel data
Saat menambahkan tabel data baru, Anda dapat memetakan jenis data (string, ekspresi reguler, CIDR, atau angka) 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 pipa (
|). Di antarmuka web, jika ada nilai yang menyertakan karakter pipa (|), nilai tersebut akan diperlakukan sebagai nilai berulang secara default.Untuk permintaan API, tetapkan
repeated_valuesketrue.
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 |
| … | … | … | … |
Menentukan kolom utama
Saat menambahkan tabel data baru, Anda dapat menetapkan kolom tertentu sebagai kolom kunci.
Menandai kolom sebagai kolom kunci akan mengidentifikasi nilai dalam kolom tersebut secara unik, mencegah duplikasi data, dan meningkatkan penemuan data untuk aturan dan penelusuran.
Menetapkan kolom untuk mendukung kolom berulang
Saat menambahkan tabel data baru, Anda dapat menetapkan kolom tertentu untuk mendukung kolom berulang.
Kolom yang ditujukan untuk menyimpan kolom bernilai ganda atau kolom berulang, harus ditetapkan secara eksplisit sebagai berulang saat tabel data dibuat.
Memetakan nama kolom ke kolom entity (opsional)
Saat menambahkan tabel data baru, 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, lakukan langkah-langkah berikut:
- Di tab Detail, pilih mode pengeditan Tabel.
- Klik kanan baris yang ada, lalu pilih Tambahkan baris di atas.
- Masukkan data untuk baris baru. Baris pertama diperlakukan sebagai header tabel. Pastikan untuk mencocokkan setiap item data dengan kolom data dan jenis data yang sesuai.
- Klik Simpan.
Mengedit baris dalam tabel data
Untuk mengedit baris, lakukan tindakan berikut:
- Klik kolom yang ingin Anda ubah. Kolom dapat diedit.
- Buat perubahan.
- Klik Simpan.
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 masa berlaku habis 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 Hours atau Days. 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, lakukan langkah-langkah berikut:
Pilih tabel data dari daftar Tabel Data di sidebar.
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 menambahkan 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 peristiwa atau entitas 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.
Menggabungkan 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 sebagaitruehanya 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. Gabungkan tabel data dengan peristiwa atau entitas UDM menggunakan perbandingan berbasis baris atau berbasis kolom.
Perbandingan berbasis baris dan berbasis kolom dalam tabel data
| Jenis perbandingan | Logika utama | Operator umum | Contoh sintaksis | Kapan digunakan |
|---|---|---|---|---|
| Berbasis baris | Semua kondisi harus cocok dalam BARIS YANG SAMA | =, !=, >, >=, <, <= |
$e.field = %table.col_a |
Jika hubungan antara beberapa nilai kolom dalam baris yang sama penting. |
| Berbasis kolom | Nilai harus ada DI MANA SAJA dalam kolom | IN, IN regex, IN cidr |
$e.field IN %table.col_b |
Saat memeriksa keberadaan nilai dalam sekumpulan nilai dalam satu kolom. |
Tautkan peristiwa UDM ke tabel data menggunakan metode perbandingan Berbasis baris atau Berbasis kolom:
Perbandingan berbasis baris untuk menautkan peristiwa UDM ke tabel data
Untuk menautkan peristiwa UDM ke tabel data menggunakan perbandingan berbasis baris, gunakan operator kesetaraan (
=,!=,>,>=,<,<=).Contoh:
$<udm_variable>.<field_path> = %<data_table_name>.<column_name>- Jika Anda menggunakan beberapa pernyataan perbandingan, semua kolom atau kondisi harus cocok pada baris tabel data yang sama.
Untuk menggunakan operator (seperti
not,!=,>,>=,<,<=) dalam kueri, Anda harus menyertakan setidaknya satu kondisijoinantara kolom UDM dan baris tabel data.Google SecOps memperlakukan aturan apa pun dengan tabel data
joinsebagai aturan multi-peristiwa, yang memerlukan bagianmatchdalam definisi aturan.
Untuk memfilter data dengan mencocokkan nilai dari peristiwa UDM dengan baris dalam tabel data, pertimbangkan sintaksis gabungan berikut:
Sintaksis gabungan yang benar:
"Pengecualian kombinasi" berbasis baris memerlukan, misalnya, gabungan
left outerdan klausawhereyang memeriksanulls.Sintaksis gabungan salah:
Jangan gabungkan
NOTdi sekitar beberapa kondisi kesetaraan berbasis baris. Sintaksis ini tidak mencapai efek "kecualikan jika kombinasi ini ditemukan".Misalnya, jangan gunakan sintaksis ini:
NOT (field1 = %table.col1 AND field2 = %table.col2)Hal ini karena kecocokan masih diterapkan baris demi baris. Jika baris mana pun gagal memenuhi kondisi gabungan dalam,
NOTakan menyebabkan evaluasi baris tersebut menjaditrue, yang berpotensi menyertakan peristiwa, bukan mengecualikannya.
Untuk menggunakan kolom tabel data berjenis
CIDRatauregexuntuk 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>)
Perbandingan berbasis kolom untuk menautkan peristiwa UDM ke tabel data
Untuk menautkan peristiwa UDM ke tabel data menggunakan perbandingan berbasis kolom, gunakan kata kunci
in.Contoh:
$<udm_variable>.<field_path> in %<data_table_name>.<column_name>Untuk mengecualikan peristiwa dengan nilai kolom yang ada di kolom tertentu (misalnya, daftar blokir atau daftar yang diizinkan), gunakan sintaksis ini:
NOT (... IN %table.column)Contoh:
not ($evt_username in %my_data_table.username)Untuk menggunakan kolom tabel data berjenis
CIDRatauregexuntuk 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_nameSaat membandingkan kolom dalam tabel data yang merupakan jenis data CIDR atau ekspresi reguler, kata kunci
cidrdanregexbersifat opsional.Anda juga dapat menggunakan operator
notdengan tabel data.Contoh kueri berikut memfilter entri yang alamat IP-nya (
$e.principal.ip) tidak cocok dengan rentang CIDR yang tercantum di kolombenign_ipdalamcidr_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 jenis 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
Gabungan berbasis baris antara tabel data dan 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 Anda.
Google SecOps memperlakukan aturan apa pun dengan tabel data join sebagai aturan multi-peristiwa, yang memerlukan bagian match yang sesuai 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.
Placeholder didukung untuk tabel data di bagian
eventkueri, tetapi harus terhubung ke peristiwa UDM atau entitas UDM.Contoh berikut menggunakan kolom tabel data jenis
string.Contoh kueri YARA-L ini memeriksa apakah peristiwa login pengguna cocok dengan baris di
example_table.Salah satu kondisinya adalah
user IDada diexample_table.Kedua kondisi harus cocok pada baris yang sama di
example_tableagar aturan dipicu.
// Check if a user exists in a data table and that the user is active for all user login events.
Contoh aturan:
// Check if user exists in a data table and is active in all user login events.
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 data table
// where the uid in the data table row is the userid on the event
// and the active date in the same data 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 data table
// where the uid in the data table row is the userid on the event
// and the active date in the same data 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 32452muncul dalam deteksi sebagaihostnamepengguna dari sistem, dan cocok denganhostnamedalam 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 tersebut 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)
| Alamat IP | 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 mencatat 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 akan 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:
user ip charlie 192.0.2.135 charlie 192.0.2.136
Kueri penelusuran berikut menggambarkan 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_appendmemerlukan array yang menyertakan variabel tabel data dan variabel peristiwa entitas, bukan kondisi gabungan.Dalam contoh berikut,
$g1adalah variabel grafik entity danexample_tableadalah 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 kesamaan 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 <entity_variable> ditingkatkan 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 entitas 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 tabel data yang tidak dipetakan 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 di mana 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 | |
Gunakan 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.
Tabel data hanya mendukung data CSV. Tabel data hanya mendukung nilai yang dipisahkan tab saat menambahkan tabel data baru dan mengimpor file nilai yang dipisahkan tab (TSV).
Kolom tabel data tidak mendukung karakter koma (
,).Batas jumlah pernyataan
insaat mereferensikan daftar referensi dalam kueri juga berlaku untuk pernyataanindalam tabel data.Jumlah maksimum pernyataan
indalam kueri untuk kolom jenis dataStringdanNumber: 7.Jumlah maksimum pernyataan
indengan operator ekspresi reguler: 4.Jumlah maksimum pernyataan
indengan operator CIDR: 2.Jumlah maksimum kolom per tabel data: 1.000.
Baris maksimum per tabel data: 10 juta.
Batas gabungan maksimum volume data di seluruh tabel data dalam akun: 1 TB.
Batas tampilan maksimum di halaman web untuk baris tabel data dalam tampilan editor teks dan tabel: 10.000 baris.
Batas ukuran upload file maksimum untuk pembuatan tabel data: 10 GB.
Placeholder tidak diizinkan di bagian penyiapan.
Kolom yang tidak dipetakan dari tabel data dengan jenis data yang ditetapkan ke
stringhanya 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
cidratauregexuntuk CIDR atau ekspresi reguler.Pencarian tabel data: Karakter pengganti ekspresi reguler tidak didukung dan istilah penelusuran dibatasi hingga 100 karakter.
Batasan untuk gabungan tabel data dalam aturan
Batasan berikut berlaku untuk gabungan tabel data dalam aturan.
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. Hal ini menyebabkan batasan berikut:
Anda tidak dapat menerapkan satu set filter ke tabel data dan menggabungkannya dengan entitas UDM.
Anda tidak dapat menerapkan kumpulan filter yang berbeda ke tabel data yang sama saat menggabungkannya dengan placeholder UDM lain.
Misalnya, tabel data bernama
dtdengan tiga kolom:my_hostname,org, danmy_emailserta 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, filter yang bertentangan (%dt.org ="hr" and %dt.org !="hr") pada tabel dt menghasilkan tabel data kosong, yang kemudian digabungkan dengan e1 dan e2.
Batasan penggunaan tabel data dengan aturan
Batasan berikut berlaku untuk tabel data saat digunakan dengan aturan.
Batasan untuk frekuensi eksekusi
Frekuensi eksekusi real-time tidak didukung untuk aturan dengan tabel data.
Batasan untuk output ke tabel data
Pengubah
anydanalltidak didukung untuk kolom bidang berulang dalam tabel data.Pengindeksan array tidak didukung untuk kolom kolom 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 maksimum 20 hasil.
Jika tabel data tidak ada, tabel baru akan dibuat dengan jenis data
stringdefault 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.
Satu aturan memiliki batas jumlah baris hasil. Batas maksimum 10.000 baris berlaku untuk hasil dan data yang dipertahankan serta untuk tabel data.
Saat Anda memperbarui baris, nilai baru untuk semua kolom non-kunci akan menggantikan nilai lama. Semua pembaruan, termasuk menambahkan baris baru, memerlukan waktu sekitar lima menit agar tersedia untuk dikueri.
Batasan untuk pengayaan entitas dari tabel data
Anda hanya dapat menerapkan satu operasi pengayaan (baik
override,append, atauexclude) ke satu variabel grafik entity.Setiap operasi pengayaan hanya dapat menggunakan satu tabel data.
Anda dapat menentukan maksimum dua operasi pengayaan jenis apa pun di bagian
setupdari aturan YARA-L.
Dalam contoh berikut, operasi override 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 entitas 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]
Batasan penggunaan 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. Kueri hanya didukung melalui antarmuka web.
Satu eksekusi kueri dapat menghasilkan maksimum 1 juta baris ke tabel data atau 1 GB, mana pun batas 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 pengguna kunci enkripsi yang dikelola pelanggan (CMEK).
Penulisan dibatasi hingga 6 per menit per pelanggan.
Dukungan API tidak tersedia untuk operasi tabel data terkait Penelusuran.
Kueri statistik tidak didukung dengan gabungan tabel data.
Tabel data dan gabungan tabel data hanya didukung dengan peristiwa UDM, dan bukan dengan entitas.
Didukung:
%datatable1.column1 = %datatable2.column1Tidak didukung:
graph.entity.hostname = %sample.testAnda tidak dapat menyertakan variabel
matchdi bagianexportkueri statistik.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.