Menggunakan tabel data

Didukung di:

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:

  1. Klik Buat di kanan atas sidebar.

  2. Dalam dialog Buat tabel data baru, beri nama tabel baru dan, opsional, tambahkan deskripsi.

  3. 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:

  1. Klik Impor Data.

  2. Pilih file CSV standar (hanya file CSV yang dapat diimpor ke Google SecOps).

  3. 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 ke true.

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)
Email 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:

  1. Di tab Detail, klik kanan baris yang ada, lalu pilih Tambahkan baris di atas.

  2. Masukkan data untuk baris baru, dengan baris pertama diperlakukan sebagai header tabel:

    1. Pisahkan kolom data menggunakan koma atau tab.
    2. Pastikan untuk mencocokkan setiap item data dengan kolom data yang sesuai.
    3. 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:

  1. Klik kolom yang ingin Anda ubah. Kolom tersebut kemudian dapat diedit.

  2. 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:

  1. Klik Edit jenis pemisah di samping Impor Data.

  2. 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:

  1. 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.

  2. Klik waktu Habis masa berlaku baris default untuk menampilkan dialog Perbarui habis masa berlaku baris default dan sesuaikan TTL baris tabel.

  3. Masukkan nilai TTL baru dalam Jam atau Hari. Nilai minimumnya adalah 24 jam. Nilai maksimumnya adalah 365 hari.

  4. 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:

  1. Pilih tabel data dari daftar Tabel data di sebelah kiri.

  2. 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 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. Operasi graph_append memerlukan array yang menyertakan variabel tabel data dan variabel peristiwa entitas, bukan kondisi gabungan.

    Dalam contoh berikut, $g1 adalah variabel grafik entity dan example_table adalah tabel data:

    graph_append [$g1, %example_table]

    Untuk fungsi append, tabel data harus menyertakan kolom berikut untuk memvalidasi entitas:

    • start_time (dipetakan ke metadata.interval.start_time.seconds)

    • end_time (dipetakan ke metadata.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 kondisi join.

    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 pernyataan in dalam tabel data.

  • Jumlah maksimum pernyataan in dalam kueri: 10

  • Jumlah maksimum pernyataan in dalam kueri untuk kolom jenis data String dan Number: 7

  • Jumlah maksimum pernyataan in dengan operator ekspresi reguler: 4

  • Jumlah maksimum pernyataan in dengan 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 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 atau regex 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, dan my_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 dan all 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, atau exclude) 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]

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 bagian export.

    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.