Menggunakan tabel data

Didukung di:

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:

  1. Di sidebar, pilih Investigation > Data Tables.

  2. Di bagian atas sidebar Tabel Data, klik Buat.

  3. Dalam dialog Buat Tabel Data Baru, beri nama tabel dan, secara opsional, tambahkan deskripsi.

  4. 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:
    1. Klik Impor File.
    2. Buka file, lalu klik Buka. Dialog Impor File akan terbuka.
    3. Jika Anda memilih file TSV pada langkah sebelumnya, lakukan hal berikut:
      1. Dari daftar Jenis Pemisah, pilih Deteksi otomatis atau Tab.
      2. Dari daftar Mulai impor di baris, tentukan baris dalam file yang akan diimpor datanya.
    4. Klik Impor Data.
  5. Pilih mode edit Tabel dan konfigurasi hal berikut sesuai kebutuhan:

  6. 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_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

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)
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, lakukan langkah-langkah berikut:

  1. Di tab Detail, pilih mode pengeditan Tabel.
  2. Klik kanan baris yang ada, lalu pilih Tambahkan baris di atas.
  3. 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.
  4. Klik Simpan.

Mengedit baris dalam tabel data

Untuk mengedit baris, lakukan tindakan berikut:

  1. Klik kolom yang ingin Anda ubah. Kolom dapat diedit.
  2. Buat perubahan.
  3. 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:

  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 masa berlaku habis 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 Hours atau Days. 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, lakukan langkah-langkah berikut:

  1. Pilih tabel data dari daftar Tabel Data di sidebar.

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

  • 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 kondisi join antara kolom UDM dan baris tabel data.

    • Google SecOps memperlakukan aturan apa pun dengan tabel data join sebagai aturan multi-peristiwa, yang memerlukan bagian match dalam 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 outer dan klausa where yang memeriksa nulls.

    • Sintaksis gabungan salah:

      Jangan gabungkan NOT di 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, NOT akan menyebabkan evaluasi baris tersebut menjadi true, yang berpotensi menyertakan peristiwa, bukan mengecualikannya.

  • 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 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 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 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 event kueri, 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 ID ada di example_table.

    • Kedua kondisi harus cocok pada baris yang sama di example_table 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:

// 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 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 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. 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 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 in saat mereferensikan daftar referensi dalam kueri juga berlaku untuk pernyataan in dalam tabel data.

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

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 dt dengan tiga 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, 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 any dan all tidak 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 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.

  • 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, atau exclude) 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 setup dari 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.column1

    Tidak didukung: graph.entity.hostname = %sample.test

  • Anda tidak dapat menyertakan variabel match di bagian export kueri 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.