使用資料表

支援的國家/地區:

資料表是多欄資料結構,可用於將自有資料輸入 Google Security Operations。資料表還能做為對照表使用,裡面的資料欄經過定義,資料則會儲存在資料列。您可以透過以下方式建立資料表或將資料表匯入 Google SecOps 帳戶:利用 Google SecOps 網頁介面、資料表 API,或使用 YARA-L 查詢。

使用資料 RBAC 將範圍指派給資料表

如要使用資料表,您必須使用資料角色型存取權控管 (資料 RBAC),將範圍指派給資料表。為資料表指派範圍後,您就能控管哪些使用者和資源可以存取及使用資料表。詳情請參閱「為資料表設定資料 RBAC」。

使用 Google SecOps 網頁介面管理資料表

以下各節說明如何使用網頁介面管理資料表,包括如何存取資料表、新增資料表及編輯內容、將資料匯入資料表、新增資料列、使用半形逗號或 Tab 鍵分隔資料,以及如何從帳戶中移除資料表。

存取資料表

如要前往「資料表」頁面,請執行下列步驟:

  • 在左側邊欄中,依序選取「調查」>「資料表」

如要尋找特定資料表,請在側欄頂端的「搜尋」欄位中輸入資料表名稱。

新增資料表

如要將新的資料表新增至 Google SecOps,請完成下列步驟:

  1. 按一下側欄右上方的「建立」

  2. 在「建立新的資料表」對話方塊中,為新資料表命名,並視需要新增說明。

  3. 按一下「建立」,新的資料表會顯示在主視窗中,並可接受資料。

將資料匯入資料表

如要將資料新增至資料表,可以直接匯入 Google SecOps,方法如下:

  1. 按一下 [Import Data] (匯入資料)

  2. 選取標準 CSV 檔案 (只有 CSV 檔案可以匯入 Google SecOps)。

  3. 準備好將資料匯入資料表時,請按一下「開啟」

將資料類型對應至資料表資料欄

您可以透過網頁介面或 API,將單一資料欄位對應至資料欄,並將重複的資料欄位對應至資料欄,方法如下:

  • 在網頁介面和 API 中,請使用 | 字元分隔資料欄位值。在網頁介面中,如果任何值包含 | 字元,系統預設會將其視為重複值。

  • 如果是 API 要求,請將 repeated_values 設為 true

詳情請參閱「重複欄位」。

在以下範例中,資料表資料欄 Field_value 包含多個欄位的值:

Field_value Field_name
altostrat.com FQDN
192.0.2.135 IP
charlie userid
範例 主機名稱

上表分為四個資料欄,每個資料欄只能對應一個欄位類型,才能用於本文介紹的任何資料表用途。

FQDN IP Userid 主機名稱
altostrat.com 192.0.2.135 charlie 範例

將特定資料欄指定為主要資料欄

將資料欄標示為鍵資料欄,可確保該資料欄中的值具有唯一性、避免資料重複,並提升規則和搜尋的資料探索成效。

指定支援重複欄位的特定資料欄

如要儲存多值欄位或重複欄位的資料欄,建立資料表時必須明確指定為「重複」

將資料欄名稱對應至實體欄位 (選用)

建立資料表時,您可以將資料表的欄名對應至實體欄位。

在下列範例資料表中,UseridRole 欄分別對應至 entity.user.useridentity.user.attribute.role.name

Userid
(map to entity.user.userid)
電子郵件 角色
(對應至 entity.user.attribute.role.name)
插孔 jack123@gmail.com 管理員
tony tony123@gmail.com 工程師

您可以使用 DataTable 資源的 mapped_column_path 欄位,將資料表欄位對應至實體 proto 欄位。

如果資料欄沒有定義實體路徑,例如這個範例表格中的 Email,您必須手動指定資料類型。與參照清單相同,資料表支援的資料類型為 numberstringregexcidr

您可以指定 join 條件,在資料表中同時納入已對應和未對應的資料欄。

未對應的資料欄會儲存在資料表加入的實體 additional 欄位中。這些會以鍵/值組合的形式新增,其中 key 是資料欄名稱,value 則是對應的列值。

在資料表中新增資料列

如要新增資料列,請按照下列步驟操作:

  1. 在「詳細資料」分頁中,按一下現有資料列,然後選取「在上方新增資料列」

  2. 輸入新資料列的資料,系統會將第一列視為資料表標頭:

    1. 以半形逗號或 Tab 鍵分隔資料欄位。
    2. 請務必將每個資料項目對應至適當的資料欄。
    3. 在「詳細資料」分頁中輸入資料列時,系統會自動在「表格編輯器」中填入資料。

編輯資料表中的資料列

如要編輯資料列,請完成下列步驟:

  1. 按一下要變更的欄位。該欄位就會變成可編輯狀態。

  2. 完成變更後,按一下「儲存」

指定要使用半形逗號或 Tab 字元分隔資料

如要使用半形逗號或 Tab 鍵分隔資料,請按照下列步驟操作:

  1. 按一下「匯入資料」旁的「編輯分隔符類型」

  2. 在「編輯分隔符類型」對話方塊中,從「分隔符」選單選取「逗號」或「Tab」

搜尋資料表列

您可以使用網頁介面,在資料表中搜尋特定資訊。在「詳細資料」分頁中,於搜尋欄位輸入搜尋字串,然後按一下「搜尋」。系統會顯示包含搜尋字串的資料列。

管理資料表列的存留時間

如要管理資料表列的存留時間 (TTL) 值,請按照下列步驟操作:

  1. 按一下「顯示各列的存留時間」。系統會顯示存留時間資料欄,指出每列是否已過期。如果未過期,則會顯示到期前的剩餘時間。

  2. 按一下「預設資料列到期時間」,顯示「更新預設資料列到期時間」對話方塊,然後調整資料表資料列的 TTL。

  3. 在「小時」或「天」中輸入新的 TTL 值。最小值為 24 小時。最大值為 365 天。

  4. 按一下 [儲存]

刪除表格列

如要刪除資料列,請在資料列上按一下滑鼠右鍵,然後選取「刪除資料列」

如要刪除多列,請選取要移除的每一列。然後在任何選取的資料列上按一下滑鼠右鍵,並選擇「刪除資料列」

移除資料表

如要移除資料表,請按照下列步驟操作:

  1. 從左側的「資料表」清單中選取資料表。

  2. 點選「刪除」。

使用 Chronicle API 管理資料表

您也可以使用 Chronicle API 提供的 REST 資源,管理 Google SecOps 中的資料表。API 可複製網頁介面中的所有功能,並提供一些額外功能,讓您以更高的效能和規模管理資料表。

以下是資料表 REST 資源:

範例:篩選器語法

下列 Chronicle API 範例說明如何使用 filter 語法,在資料表列中搜尋 google.com

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

在 Google SecOps 中使用資料表

將資料表匯入 Google SecOps 執行個體後,您可以使用 YARA-L 查詢篩選、強化及擴充資料。這份文件包含許多 YARA-L 語法範例,可供您納入 Google SecOps。

您可以在搜尋和規則中,搭配使用資料表和 YARA-L 查詢。資料表可做為下列用途:

  • 使用資料表篩選 UDM 事件或實體資料。您可以將 UDM 遙測事件和實體與資料表中的項目進行比較,藉此篩選這些事件和實體。

  • 使用資料表做為多欄參照清單。您可以將資料表做為多欄參照清單。參照清單只能存取單一維度的資料,但資料表可存取多個維度的資料,並進行資料篩選。

  • 將資料表與事件或實體彙整。您可以使用等號 (=) 運算子,針對以資料列為準的比較作業,將 UDM 事件連結至資料表。您可以透過這項比較功能篩選資料。只有當陳述式中的所有條件都與資料表中的單一資料列相符時,以資料列為準的比較才會評估為 true

使用資料表篩選 UDM 事件和實體資料

您可以將 UDM 事件和實體與資料表中的項目進行比較,藉此篩選 UDM 事件和實體。

您可以透過下列任一方式,將 UDM 事件連結至資料表:

  • 使用等號運算子 (=, !=, >, >=, <, <=) 進行列式比較。例如:$<udm_variable>.<field_path> = %<data_table_name>.<column_name>

  • 使用 in 關鍵字進行欄位比對。 例如:$<udm_variable>.<field_path> in %<data_table_name>.<column_name>

參照清單相同,每個資料表欄支援的資料類型可以是 numberstringregexCIDR

如要使用 number 類型的資料表資料欄進行資料欄比較和聯結,請使用下列語法。這個範例會搜尋包含 target.port 8080 的事件。

%table.number_field = target.port
%table.number_field = 8080
target.port in %table.number_field

如要使用 CIDRregex 類型的資料表欄進行以列為準的比較,請使用下列語法:

net.ip_in_range_cidr($e.principal.ip, %<data_table_name>.<column_name>)

re.regex($e.principal.hostname, %<data_table_name>.<column_name>)

如要使用 CIDRregex 類型的資料表欄進行欄式比較,請使用下列語法:

$e.principal.ip in cidr %cidr_data_table.column_name

$e.principal.hostname in regex %regex_data_table.column_name

比較資料表中 CIDR 或規則運算式資料類型的資料欄時,cidrregex 關鍵字為選用。您也可以搭配資料表使用 not 運算子。以下範例查詢會篩除 IP 位址 ($e.principal.ip) 與 cidr_data_tablebenign_ip 資料欄所列任何 CIDR 範圍都不相符的項目:

not $e.principal.ip in %data_table.benign_ip

使用資料表做為多欄參照清單

您可以將資料表做為多欄參照清單。參照清單只能存取單一維度 (一欄) 的資料,但資料表支援多欄,可讓您篩選及存取多個維度的資料。

您可以使用 in 關鍵字,將 UDM 事件連結至資料表,根據資料欄進行比較,將特定 UDM 欄位中的值與資料表中單一資料欄的值進行比對。

在下列範例中,badApps 資料表包含兩個資料欄:hostnameip。查詢會分別比對這兩個值 (根據 UDM 欄位的值和根據資料表的值,兩者都是字串資料類型)。

規則範例:

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
}

搜尋範例:

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

將資料表與 UDM 事件或實體彙整

您可以使用等號和比較運算子 (=, !=, >, >=, <, <=) 將 UDM 事件連結至資料表,以執行以列為準的比較。這個方法可讓您根據 UDM 事件中與資料表列相符的值,篩選資料。如果使用多個比較陳述式,所有欄位或條件都必須符合同一資料表列。

如要在查詢中使用運算子 (例如 not, !=, >, >=, <, <=),您必須在 UDM 欄位和資料表列之間加入至少一個 join 條件。Google SecOps 會將含有資料表 join 的規則視為多事件規則,因此您也必須在規則定義中加入對應的 match 區段。

完成聯結後,您就能在 Google 搜尋中看到連結的資料表列。詳情請參閱「在 Google 搜尋中查看資料表列」。

以下範例使用 string 類型的資料表資料欄。這項 YARA-L 查詢會檢查使用者登入事件是否與 example_table 中的資料列相符,方法是確認 user ID 是否存在於資料表中。資料表中的同一列必須符合這兩項條件,規則才會觸發。

// Check if a user exists in a data table and that the user is active for 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 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
}

搜尋範例:

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

以下範例說明資料表和 UDM 事件資料如何搭配運作。根據上述 YARA-L 查詢中的邏輯,系統會將 user ID 32452 顯示為使用者的 hostname,並與資料表中的 hostname 相符,因此偵測結果會顯示 user ID 32452

資料表
uid title hostname
32452 HR host1
64452 金融 host2
46364 IT host3
UDM 事件資料表
principal metadata security_result principal
32452 USER_LOGIN 允許 host1
64589 USER_LOGIN 允許 host9
87352 USER_LOGIN 允許 host4

將 YARA-L 查詢結果寫入資料表

您可以將 YARA-L 查詢結果寫入資料表。使用這項功能,您可以從 Google SecOps 資料建立資料表,並利用這些資料表篩選及強化其他資料。

您可以使用 YARA-L 查詢撰寫語法執行下列操作:

  • 定義 YARA-L 語法,將查詢結果寫入資料表。

  • 使用資料表進行威脅情報、事件應變和其他安全用途。

  • 資料應符合 YARA-L 語法和慣例。

使用 YARA-L 將偵測結果和快訊寫入資料表

您可以使用 YARA-L 查詢,將偵測結果和快訊傳送至資料表。

使用 write_row 函式,您可以使用規則的結果,覆寫資料表中具有相符鍵的資料表資料列。如果表格中沒有該鍵,請改為新增資料列。

在 YARA-L 查詢的匯出部分中,指定 write_row 函式。將資料寫入資料表必須是查詢的最後一個動作。這會導致結果變數寫入資料表。

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

使用 YARA-L 修改資料表

以下說明如何使用 YARA-L 修改資料表:

TableName: ip_user_domain_table (主鍵的鍵欄是在建立時定義)

ip_address employee_id* 網域
192.0.2.10 Dana altostrat.com
192.0.2.20 Quinn altostrat.com
192.0.2.30 Lee cymbalgroup.com

* 表示主鍵。

以下查詢會擷取 principal.ipprincipal.user.employee_idtarget.domain 的不重複組合。系統會根據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

查詢結果:

ip empid 網域
192.0.2.10 Dana altostrat.com
192.0.2.30 Lee examplepetstore.com
192.0.2.20 Quinn altostrat.com

範例:使用 write_row 將查詢輸出內容寫入資料表

規則範例:

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
  )
}

搜尋範例:

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
  )

範例:瞭解 write_row

在以下範例中,userip 用做主鍵。偵測結果會保留在偵測結果資料表中,並在查詢的匯出部分評估函式呼叫。

規則範例:

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)
}

搜尋範例:

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)

以下是活動資料:

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
}

以規則形式執行這項查詢時,系統會傳回下列偵測結果:

偵測 ID 比對 $user 比對 $ip
0 charlie 192.0.2.135
1 charlie 192.0.2.136

資料表包含下列項目:

user ip
charlie 192.0.2.135
charlie 192.0.2.136

下列搜尋查詢說明搜尋功能支援將純量值寫入資料表。

events:
    $e.metadata.event_type = "NETWORK_CONNECTION"

export:
  %summary_table.write_row(col_name: $e.metadata.product_name, Vendor_name: $e.metadata.vendor_name)

使用資料表擴充實體圖

您可以使用資料表,從規則中新增、移除或取代實體圖中顯示的實體。在規則的 setup 區段中使用函式,指出資料表應如何與 events 區段中參照的實體事件合併、附加或用於移除實體。

您可以使用下列規則範本修改實體圖表:

rule entity_graph_template {

  meta:
    ...

  setup:
    // import the data table into entity graph
    <enrichment_keyword> <join_condition>

  events:
    ...

  match:
    ...

  condition:
    ...
}

您可以使用下列 YARA-L 2.0 函式,透過資料表強化實體圖表:

  • graph_override:使用資料表中的資料,覆寫實體圖中符合聯結條件的資料列。

    例如:

    [graph_override](?tab=t.0#heading=h.v0fps7eke1if)

  • graph_append:將資料表中的資料列附加至實體圖中的資料列。graph_append 作業需要包含資料表變數和實體事件變數的陣列,而不是聯結條件。

    在以下範例中,$g1 是實體圖形變數,example_table 則是資料表:

    graph_append [$g1, %example_table]

    如要使用 append 函式驗證實體,資料表應包含下列資料欄:

    • start_time (對應至 metadata.interval.start_time.seconds)

    • end_time (對應至 metadata.interval.end_time.seconds)

    您無法使用網頁介面,將資料表欄位對應至中繼資料欄位。如要使用 append,必須使用 Chronicle API (https://cloud.google.com/chronicle/docs/reference/rest/v1alpha/projects.locations.instances.dataTables/create) 建立資料表

  • graph_exclude:移除實體圖中符合 join 條件的資料列。

    例如:

    [graph_exclude](?tab=t.0#heading=h.o0qbb5paki6g)

聯結條件必須是資料表欄位和實體圖欄位之間的等式運算式。如果是 graph_overridegraph_exclude 函式,存取資料表的語法如下:

<data_table_name>.<column_name>

系統會先使用資料表強化事件區段中的 <entity_variable>,再套用為該區段指定的任何篩選器。

實體圖中的實體經過資料表中的實體擴充後,實體圖中的實體變數必須加入 UDM 實體。

使用資料表中的資料覆寫實體圖

使用 graph_override 函式時,實體圖和資料表中的欄位會替換成資料表中的欄位。實體圖形中存在但資料表中沒有的欄位,會維持不變。系統會納入實體圖形中沒有,但資料表有的欄位。

只有對應的資料表資料欄會覆寫實體圖的資料欄。未對應的資料欄會新增至資料表所聯結的實體圖表 additional 欄位。

範例:單一聯結比對

在下列範例中,資料表會覆寫實體圖中符合資料表資料欄和實體圖欄位之間聯結條件的資料列 ($g1.graph.entity.ip = %example_table.my_ip)。

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
}

如要使用資料表中未對應的資料欄 (例如「擁有者」),請使用 $g1.graph.entity.owner = "alice" is $g1.graph.additional.fields["Owner"] = "alice" 的對等陳述式。這是因為資料表的所有未對應欄都會進入實體圖表 ($g1)additional 欄位。

下表說明覆寫作業,其中當資料表中的 IP 欄位與實體圖中的 IP 欄位相符時,實體圖中的資料列就會經過擴充。

現有實體圖表
主機名稱 IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
資料表
主機名稱 IP MAC 擁有者
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

豐富的實體圖表
主機名稱 IP MAC 擁有者
ftp01 10.1.1.4 …:bb alice
www01 10.1.1.5 …:02
h3 10.1.1.4 …:ee doug

範例:比對多個聯結

在下列範例中,實體圖中符合多個聯結條件 ($g1.graph.entity.ip = %example_table.my_ip$g1.graph.entity.hostname = %example_table.my_hostname) 的資料列,會遭到資料表覆寫。

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
}

下表說明覆寫作業,其中當資料表中的 IP 欄位和主機名稱欄位,與實體圖表中的 IP 欄位和主機名稱欄位相符時,實體圖表的資料列就會經過擴充。

現有實體圖表
主機名稱 IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
資料表
主機名稱 IP MAC 擁有者
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
豐富的實體圖表
主機名稱 IP MAC 擁有者
ftp01 10.1.1.4 …:bb alice
www01 10.1.1.5 …:02

將資料表中的資料附加至實體圖表

使用 graph_append 函式時,不需要任何聯結條件。

在下列範例中,資料表中的所有資料列都會附加至實體圖中的資料列。

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
}

下表舉例說明附加作業,其中資料表的資料列會附加至實體圖中的資料列:

現有實體圖表
主機名稱 IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
資料表
IP MAC 擁有者
10.1.1.4 …:01 alice
10.1.1.6 …:cc bob
10.1.1.7 …:dd chris
10.1.1.4 …:ee doug
豐富的實體圖表
主機名稱 IP MAC 擁有者
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

使用 graph_exclude 從實體圖表移除資料列

使用 graph_exclude 函式時,系統會從實體圖表中移除符合聯結條件的資料列。

在下列範例中,系統會移除實體圖中所有符合指定聯結條件 (資料表資料欄和實體圖欄位之間) 的資料列。資料表中的任何資料列都不會新增至實體圖表。

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
}

下表說明排除作業,其中會移除與資料表 IP 欄位相符的實體圖表列:

現有實體圖表
主機名稱 IP MAC
ftp01 10.1.1.4 …:01
www01 10.1.1.5 …:02
資料表
IP MAC 擁有者
10.1.1.4 …:bb alice
10.1.1.6 …:cc bob
10.1.1.7 …:dd chris
豐富的實體圖表
主機名稱 IP MAC
www01 10.1.1.5 …:02

限制

  • Google SecOps 帳戶的資料表數量上限: 1,000 個。

  • 上傳時僅支援 CSV 檔案類型。

  • 在查詢中參照參照清單時,in 陳述式的數量限制也適用於資料表中的 in 陳述式。

  • 查詢中的 in 陳述式數量上限:10

  • 查詢中 in 陳述式的數量上限 (適用於 StringNumber 資料類型欄):7

  • 含規則運算式運算子的 in 陳述式數量上限:4

  • 含 CIDR 運算子的 in 陳述式數量上限:2

  • 每個資料表最多可有 1,000 欄。

  • 每個資料表最多可有 1 千萬列。

  • 帳戶中所有資料表資料量的總和上限:1 TB。

  • 在文字和表格編輯器檢視畫面中,網頁上顯示的資料表列數上限為 10,000 列

  • 在網頁上將檔案上傳至新資料表時的資料列上限: 10,000 列

  • 透過 API 建立資料表時,檔案上傳大小上限為 1 GB

  • 設定部分不允許使用預留位置。

  • 資料類型設為 string 的資料表未對應欄,只能與 UDM 事件或 UDM 實體的字串欄位聯結。

  • 在資料表中,只能使用資料類型設為 cidrregex 的未對應資料欄 (適用於 CIDR 或規則運算式)。

  • 資料表查詢:不支援規則運算式萬用字元,搜尋字詞長度上限為 100 個半形字元。

彙整

  • 使用事件資料表聯結時,系統不支援擷取所有事件樣本以進行偵測。

  • 與實體和 UDM 不同,資料表不支援預留位置。也就是說,您無法:

    • 對資料表套用一組篩選器,然後與 UDM 實體聯結。

    • 將不同的篩選器套用至同一個資料表,同時與另一個 UDM 預留位置聯結。

    舉例來說,假設有名為 dt 的資料表,其中包含 my_hostnameorgmy_email 這 3 個資料欄,並套用下列規則:

    events:
    $e1.principal.hostname =  %dt.my_hostname
    %dt.org ="hr"
    
    $e2.principal.email =  %dt.my_email
    %dt.org !="hr"
    

系統會先套用資料表的所有篩選器,然後將資料表中經過篩選的資料列與 UDM 聯結。在本例中,由於資料表 dt 上的兩個篩選器彼此矛盾 (%dt.org ="hr" and %dt.org !="hr"),因此系統會將空白資料表與 e1e2 聯結。

使用含有規則的資料表

搭配規則使用資料表時,請注意下列限制。

執行頻率

如果規則包含資料表,則不支援即時執行頻率。

輸出至資料表

  • 資料表中的重複欄位資料欄不支援 anyall 修飾符。

  • 資料表中的重複欄位欄不支援陣列索引。

  • 您只能將結果變數匯出至資料表。您無法直接匯出事件路徑或資料表欄。

  • 資料欄清單必須包含資料表的主鍵資料欄。

  • 最多只能有 20 個結果。

  • 如果資料表不存在,系統會按照指定順序,為所有資料欄建立預設字串資料類型的新資料表。

  • 一次只能有一項規則寫入資料表。如果某項規則嘗試寫入另一個規則已寫入的資料表,規則編譯就會失敗。

  • 無法保證生產端規則能在資料表的消費端規則啟動前,將資料列新增至資料表。

  • 每項規則的結果列數設有限制。結果和保存的資料列數上限為 10,000 列。資料表也適用相同限制,單一規則執行作業最多可將 10,000 列輸出至資料表。

  • 如果資料表中已存在主鍵相同的資料列,系統會以新值取代非主鍵資料欄。

從資料表擴充實體

  • 您只能對單一實體圖表變數套用一個擴充作業 (overrideappendexclude)。

  • 每項擴充作業只能使用一個資料表。

  • 您最多可以在 YARA-L 規則的 setup 區段中,定義兩種任何類型的擴充作業。

在下列範例中,覆寫作業會套用至實體圖變數 $g1,而 append 作業會套用至實體圖變數 $g2

    setup:
    graph_override($g1.graph.entity.user.userid = %table1.myids)
    graph_append [$g2, %table1]

在前述範例中,相同的資料表 (table1) 用於強化不同的實體圖。您也可以使用不同的資料表來強化不同的實體圖,方法如下:

    setup:
    graph_override($g1.graph.entity.user.userid = %table1.myids)
    graph_append [$g2, %table2]

搭配 Google 搜尋使用資料表時,請注意下列限制。

  • 您無法使用 Chronicle API 對資料表執行搜尋查詢。您只能透過網頁介面執行搜尋查詢。

  • 單一查詢執行作業最多可將 100 萬列或 1 GB 的資料輸出至資料表,以先達到者為準。

  • 如果事件資料列超過 5 MB,搜尋輸出至資料表時會略過這些資料列。

  • 搜尋功能不支援實體擴充功能。

  • 資料表不支援使用客戶自行管理的加密金鑰 (CMEK)。

  • 每位顧客每分鐘最多可寫入 6 次。

  • 不支援 API。

  • 統計資料查詢不支援資料表聯結。

  • 資料表和資料表聯結僅支援 UDM 事件,不支援實體。

    支援:%datatable1.column1 = %datatable2.column1 不支援:graph.entity.hostname = %sample.test

  • 您無法在 export 區段的統計資料查詢中加入 match 變數。

    舉例來說,系統不支援下列項目:

  match:
      principal.hostname
  export:
      %sample.write_row(
      row: principal.hostname
    )

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。