使用資料表
資料表是多欄資料結構,可用於將自有資料輸入 Google Security Operations。資料表還能做為對照表使用,裡面的資料欄經過定義,資料則會儲存在資料列。您可以透過以下方式建立資料表或將資料表匯入 Google SecOps 帳戶:利用 Google SecOps 網頁介面、資料表 API,或使用 YARA-L 2.0 總覽查詢。
使用資料 RBAC 將範圍指派給資料表
如要使用資料表,您必須使用資料角色型存取權控管 (資料 RBAC),將範圍指派給資料表。為資料表指派範圍後,您就能控管哪些使用者和資源可以存取及使用資料表。詳情請參閱「設定資料表的資料 RBAC」。
使用 Google SecOps 網頁介面管理資料表
以下章節說明如何使用網頁介面管理資料表,包括如何存取資料表、新增資料表、編輯內容、新增資料列,以及如何從帳戶中移除資料表。
存取資料表
如要前往「資料表」頁面,請按照下列步驟操作:
- 在側欄中,依序選取「調查」>「資料表」。
如要尋找特定資料表,請在「資料表」側欄頂端的「搜尋」欄位中輸入資料表名稱。
新增資料表
新增資料表時,您可以手動輸入 CSV 資料、貼上 CSV 資料,或將 CSV 或 TSV 檔案匯入資料表。
儲存新的資料表後,就永久無法變更下列設定:
- 欄標題
- 資料對應
- 主鍵
- 重複欄位
- 資料欄名稱與實體欄位的對應關係
如要將新的資料表新增至 Google SecOps,請按照下列步驟操作:
在側欄中,依序選取「調查」>「資料表」。
在「資料表」側欄頂端,按一下 「建立」。
在「Create New Data Table」(建立新的資料表) 對話方塊中,為資料表命名,並視需要新增說明。
執行下列其中一個步驟:
- 手動輸入 CSV 資料,或將 CSV 資料貼到「文字」(編輯模式) 區域。
- 如要從 CSV 或 TSV 檔案將資料匯入資料表,請按照下列步驟操作:
- 按一下「匯入檔案」。
- 前往檔案並按一下「開啟」。「匯入檔案」對話方塊會隨即開啟。
- 如果您在上一個步驟中選取了 TSV 檔案,請按照下列步驟操作:
- 在「分隔符類型」清單中,選取「自動偵測」或「Tab」。
- 從「從這個資料列開始匯入」清單中,指定要從檔案的哪個資料列開始匯入資料。
- 按一下 [Import Data] (匯入資料)。
選取「表格」編輯模式,然後視需要設定下列項目:
按一下 [儲存]。新的資料表會顯示在「資料表」側欄中,並可接受其他資料。
將資料類型對應至資料表欄
新增資料表時,您可以將資料類型 (字串、規則運算式、CIDR 或數字) 對應至資料表欄。
您可以透過網頁介面或 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 | 範例 |
| … | … | … | … |
指定索引鍵資料欄
新增資料表時,您可以將特定資料欄指定為索引鍵資料欄。
將資料欄標示為鍵資料欄,可確保該資料欄中的值具有唯一性,避免資料重複,並提升規則和搜尋的資料探索效率。
指定支援重複欄位的資料欄
新增資料表時,您可以指定特定資料欄支援重複欄位。
如要儲存多值欄位或重複欄位的資料欄,建立資料表時必須明確指定為「重複」。
將資料欄名稱對應至實體欄位 (選填)
新增資料表時,您可以將資料表的資料欄名稱對應至實體欄位。
在下列範例資料表中,Userid 和 Role 欄分別對應至 entity.user.userid 和 entity.user.attribute.role.name:
| Userid
(對應至 entity.user.userid) |
電子郵件 | 角色
(對應至 entity.user.attribute.role.name) |
| 插孔 | jack123@gmail.com | 管理員 |
| tony | tony123@gmail.com | 工程師 |
您可以使用 DataTable 資源的 mapped_column_path 欄位,將資料表欄位對應至實體 proto 欄位。
如果資料欄沒有定義實體路徑,例如這個範例表格中的 Email,您必須手動指定資料類型。與參照清單相同,資料表支援的資料類型為 number、string、regex 和 cidr。
您可以指定 join 條件,在資料表中同時納入已對應和未對應的資料欄。
未對應的資料欄會儲存在資料表所加入實體的 additional 欄位中。這些會以鍵/值組合的形式新增,其中 key 是資料欄名稱,value 則是對應的列值。
在資料表中新增資料列
如要新增資料列,請按照下列步驟操作:
- 在「詳細資料」分頁中,選取「表格」編輯模式。
- 在現有資料列上按一下滑鼠右鍵,然後選取「在上方新增資料列」。
- 輸入新資料列的資料。第一列會視為表格標題。請務必將每個資料項目對應至適當的資料欄和資料類型。
- 按一下 [儲存]。
編輯資料表中的資料列
如要編輯資料列,請按照下列步驟操作:
- 按一下要變更的欄位。欄位會變成可編輯狀態。
- 修改所需的設定。
- 按一下 [儲存]。
搜尋資料表列
您可以使用網頁介面,在資料表中搜尋特定資訊。在「詳細資料」分頁中,於搜尋欄位輸入搜尋字串,然後按一下「搜尋」。系統會顯示包含搜尋字串的資料列。
管理資料表列的存留時間
如要管理資料表列的存留時間 (TTL) 值,請按照下列步驟操作:
按一下「顯示各列的存留時間」。系統會顯示存留時間資料欄,指出每列是否已過期。如果尚未過期,則會顯示到期前的剩餘時間。
按一下「預設資料列到期時間」,顯示「更新預設資料列到期時間」對話方塊,並調整資料表資料列的存留時間。
在「小時」或「天數」中輸入新的 TTL 值。最小值為 24 小時。最大值為 365 天。
按一下 [儲存]。
刪除表格列
如要刪除資料列,請在該列上按一下滑鼠右鍵,然後選取「刪除資料列」。
如要刪除多列,請選取要移除的每一列。然後在任何選取的列上按一下滑鼠右鍵,並選擇「刪除列」。
移除資料表
如要移除資料表,請按照下列步驟操作:
從側欄的「資料表」清單中選取資料表。
按一下「Delete」(刪除)。
使用 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 事件連結至資料表,進行以資料列為準的比較。您可以透過這項比較篩選資料。只有當陳述式中的所有條件都與資料表中的單一資料列相符時,以資料列為準的比較才會評估為true。
使用資料表篩選 UDM 事件和實體資料
您可以將 UDM 事件和實體與資料表中的項目進行比較,藉此篩選 UDM 事件和實體。使用以列為準或以欄為準的比較方式,將資料表與 UDM 事件或實體合併。
資料表中的列和欄比較
| 比較類型 | 主要邏輯 | 常見運算子 | 語法範例 | 使用時機 |
|---|---|---|---|---|
| 以列為準 | 同一列中的所有條件都必須相符 | =、!=、>、>=、<、<= |
$e.field = %table.col_a |
當同一列中多個資料欄值之間的關係很重要時。 |
| 以資料欄為準 | 值必須存在於資料欄的「任何位置」 | IN、IN regex、IN cidr |
$e.field IN %table.col_b |
檢查單一資料欄中的一組值是否含有特定值。 |
使用「以列為準」或「以欄為準」比較方法,將 UDM 事件連結至資料表:
以資料列為準的比較,將 UDM 事件連結至資料表
如要使用以資料列為準的比較方式,將 UDM 事件連結至資料表,請使用等號運算子 (
=、!=、>、>=、<、<=)。例如:
$<udm_variable>.<field_path> = %<data_table_name>.<column_name>- 如果您使用多個比較陳述式,則所有欄位或條件都必須符合同一資料表列。
如要在查詢中使用運算子 (例如
not、!=、>、>=、<、<=),您必須在 UDM 欄位和資料表列之間加入至少一個join條件。Google SecOps 會將含有資料表的任何規則視為
join多事件規則,因此規則定義中必須有match區段。
如要根據 UDM 事件中與資料表資料列相符的值篩選資料,請考慮使用下列聯結語法:
正確的 JOIN 語法:
以資料列為準的「組合排除」需要
left outer聯結和檢查nulls的where子句。錯誤的 JOIN 語法:
請勿在多個以資料列為準的等號條件周圍加上
NOT。這種語法無法達到「如果找到這個組合就排除」的效果。舉例來說,請勿使用以下語法:
NOT (field1 = %table.col1 AND field2 = %table.col2)這是因為系統仍會逐列套用比對。如果任何資料列未通過內部合併條件,
NOT會導致該資料列的評估結果為true,可能包括事件而非排除事件。
如要使用 以資料列為準的比較,請使用
CIDR或regex類型的資料表資料欄,並採用下列語法:net.ip_in_range_cidr($e.principal.ip, %<data_table_name>.<column_name>) re.regex($e.principal.hostname, %<data_table_name>.<column_name>)
以資料欄為準進行比較,將 UDM 事件連結至資料表
如要使用資料欄比較將 UDM 事件連結至資料表,請使用
in關鍵字。例如:
$<udm_variable>.<field_path> in %<data_table_name>.<column_name>如要篩除特定資料欄中含有欄位值的事件 (例如封鎖清單或允許清單),請使用以下語法:
NOT (... IN %table.column)例如:
not ($evt_username in %my_data_table.username)如要使用
CIDR或regex類型的資料表資料欄進行以資料欄為準的比較,請使用下列語法:$e.principal.ip in cidr %cidr_data_table.column_name $e.principal.hostname in regex %regex_data_table.column_name比較資料表中 CIDR 或規則運算式資料類型的資料欄時,
cidr和regex關鍵字為選用。您也可以搭配資料表使用
not運算子。下列範例查詢會篩除 IP 位址 (
$e.principal.ip) 不符合cidr_data_table中benign_ip資料欄所列任何 CIDR 範圍的項目:not $e.principal.ip in %data_table.benign_ip
使用資料表做為多欄參照清單
資料表可做為多欄參照清單。雖然參照清單可以存取單一維度 (一個資料欄) 的資料,但資料表支援多個資料欄,因此您可以篩選及存取多個維度的資料。
您可以使用 in 關鍵字,將 UDM 事件連結至資料表,進行以資料欄為準的比較,將特定 UDM 欄位中的值與資料表中單一資料欄的值進行比對。
在下列範例中,badApps 資料表包含兩個資料欄:hostname 和 ip。查詢會分別比對兩個值 (根據 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 事件中與資料表列相符的值篩選資料。如果使用多個比較陳述式,則所有欄位或條件都必須符合同一資料表列。
您必須在 UDM 欄位和資料表列之間加入至少一個 join 條件,才能在查詢中使用運算子 (例如 not, !=, >, >=, <, <=)。Google SecOps 會將含有資料表的任何規則視為多事件規則,因此規則定義中必須有對應的 match 區段。join
彙整完成後,連結的資料表資料列就會顯示在 Google 搜尋中。詳情請參閱「在 Google 搜尋中查看資料表列」。
查詢的
event區段支援資料表預留位置,但必須連結至 UDM 事件或 UDM 實體。以下範例使用
string類型的資料表欄。這個 YARA-L 查詢範例會檢查使用者登入事件是否與
example_table中的資料列相符。其中一個條件是
user ID存在於example_table中。規則觸發時,
example_table的同一列必須符合這兩項條件。
// Check if a user exists in a data table and that the user is active for all user login events.
規則範例:
```none
// 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
}
```
搜尋範例:
```none
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
```
以下範例說明資料表和 UDM 事件資料如何搭配運作。
根據上述 YARA-L 查詢中的邏輯,系統會將
user ID 32452顯示為使用者的hostname,並與資料表中的hostname相符。資料表 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 位址 | employee_id* | 網域 |
| 192.0.2.10 | Dana | altostrat.com |
| 192.0.2.20 | Quinn | altostrat.com |
| 192.0.2.30 | Lee | cymbalgroup.com |
* 表示主鍵。
以下查詢會擷取 principal.ip、principal.user.employee_id 和 target.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
在以下範例中,user 和 ip 用做主鍵。偵測結果資料表中的每個偵測結果,都會導致查詢匯出部分中的函式呼叫評估一次。
規則範例:
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_override 和 graph_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" 的對等陳述式。這是因為資料表的所有未對應欄都會進入實體圖的 additional 欄位 ($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.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 資料。只有在新增資料表並匯入定位點分隔值 (TSV) 檔案時,資料表才會支援定位點分隔值。
資料表欄位不支援逗號 (
,) 字元。在查詢中參照參照清單時,
in陳述式的數量限制也適用於資料表中的in陳述式。查詢中
in陳述式的數量上限 (適用於String和Number資料類型資料欄):7 個。含規則運算式運算子的
in陳述式數量上限為 4 個。含 CIDR 運算子的
in陳述式數量上限:2。每個資料表最多可有 1,000 個資料欄。
每個資料表最多可有 1 千萬列。
帳戶中所有資料表資料量的總上限:1 TB。
在文字和表格編輯器檢視畫面中,網頁上顯示的資料表列數上限為 10,000 列。
建立資料表時,上傳檔案的大小上限為 10 GB。
設定部分不允許使用預留位置。
資料類型設為
string的資料表未對應資料欄,只能與 UDM 事件或 UDM 實體的字串欄位聯結。在資料表中,只能使用資料類型設為
cidr或regex的未對應資料欄 (適用於 CIDR 或規則運算式)。資料表查詢:不支援規則運算式萬用字元,搜尋字詞最多 100 個半形字元。
規則中資料表聯結的限制
規則中的資料表聯結有下列限制。
使用資料表與事件聯結時,系統不支援擷取所有事件樣本以進行偵測。
與實體和 UDM 不同,資料表不支援預留位置。這會導致下列限制:
您無法將一組篩選器套用至資料表,並與 UDM 實體聯結。
將同一個資料表與另一個 UDM 預留位置聯結時,無法套用不同的篩選器組合。
舉例來說,假設有名為
dt的資料表,其中包含my_hostname、org和my_email三個資料欄,並有下列規則: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") 會導致資料表空白,然後與 e1 和 e2 聯結。
使用含規則的資料表時的限制
搭配規則使用資料表時,請注意下列限制。
執行頻率的限制
含有資料表的規則不支援即時執行頻率。
輸出至資料表的限制
資料表中的重複欄位資料欄不支援
any和all修飾符。資料表中的重複欄位資料欄不支援陣列索引。
您只能將結果變數匯出至資料表。您無法直接匯出事件路徑或資料表欄。
資料欄清單必須包含資料表的主鍵欄。
最多可有 20 個結果。
如果資料表不存在,系統會建立新資料表,並為所有資料欄指派預設的
string資料類型,順序則依指定而定。一次只能有一項規則寫入資料表。如果某項規則嘗試寫入另一個規則已寫入的資料表,規則編譯就會失敗。
我們無法保證生產端規則能在資料表的取用端規則啟動前,將資料列新增至資料表。
單一規則的結果列數量設有限制。結果、保存的資料和資料表最多只能有 10,000 列。
更新資料列時,所有非鍵值資料欄的新值都會取代舊值。所有更新 (包括新增資料列) 大約需要五分鐘,才能用於查詢。
從資料表擴充實體的限制
您只能對單一實體圖表變數套用一項擴充作業 (
override、append或exclude)。每項擴充作業只能使用一個資料表。
您可以在 YARA-L 規則的
setup區段中,定義最多兩項任何類型的擴充作業。
在下列範例中,override 作業會套用至實體圖表變數 $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 搜尋資料表時的限制
搭配 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 專業人員尋求答案。