搜尋資料表

支援語言:

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

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

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

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

以下章節說明如何使用網頁介面管理資料表,包括如何存取資料表、新增資料表、編輯內容、新增資料列,以及如何從帳戶中移除資料表。

存取資料表

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

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

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

新增資料表

新增資料表時,您可以手動輸入 CSV 資料、貼上 CSV 資料,或將 CSV 或 TSV 檔案匯入資料表。

儲存新的資料表後,就永久無法變更下列設定:

如要在 Google SecOps 中新增資料表,請按照下列步驟操作:

  1. 在側欄中,依序選取「調查」>「資料表」

  2. 在「資料表」側欄頂端,按一下 「建立」

  3. 在「Create New Data Table」(建立新的資料表) 對話方塊中,為資料表命名,並視需要新增說明。

  4. 執行下列其中一個步驟:

    • 手動輸入 CSV 資料,或將 CSV 資料貼到「文字」 (編輯模式) 區域。
    • 如要從 CSV 或 TSV 檔案將資料匯入資料表,請按照下列步驟操作:
    1. 按一下「匯入檔案」
    2. 前往檔案並按一下「開啟」。「匯入檔案」對話方塊會隨即開啟。
    3. 如果您在上一個步驟中選取了 TSV 檔案,請按照下列步驟操作:
      1. 在「分隔符類型」清單中,選取「自動偵測」或「Tab」
      2. 從「從這個資料列開始匯入」清單中,指定要從檔案的哪個資料列開始匯入資料。
    4. 按一下 [Import Data] (匯入資料)
  5. 選取「表格」編輯模式,然後視需要設定下列項目:

  6. 按一下 [儲存]。新的資料表會顯示在「資料表」側欄中,並可接受其他資料。

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

新增資料表時,您可以將資料類型 (字串、規則運算式、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 範例

指定索引鍵資料欄

新增資料表時,您可以將特定資料欄指定為索引鍵資料欄。

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

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

新增資料表時,您可以指定特定資料欄支援重複欄位。

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

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

新增資料表時,您可以將資料表的資料欄名稱對應至實體欄位。

在下列範例資料表中,UseridRole 欄分別對應至 entity.user.useridentity.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),您必須手動指定資料類型。與參照清單相同,資料表支援的資料類型為 numberstringregexcidr

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

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

在資料表中新增資料列

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

  1. 在「詳細資料」分頁中,選取「表格」編輯模式。
  2. 在現有資料列上按一下滑鼠右鍵,然後選取「在上方新增資料列」
  3. 輸入新資料列的資料。第一列會視為表格標題。請務必將每個資料項目對應至適當的資料欄和資料類型。
  4. 按一下 [儲存]

編輯資料表中的資料列

如要編輯資料列,請按照下列步驟操作:

  1. 按一下要變更的欄位。該欄位就會變成可編輯狀態。
  2. 修改所需的設定。
  3. 按一下 [儲存]

搜尋資料表列

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

管理資料表列的存留時間

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

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

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

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

  4. 按一下 [儲存]

資料列層級的存留時間覆寫行為

資料列會繼承在資料表層級套用的存留時間。您也可以為個別資料列設定特定存留時間,且這類資料列層級的存留時間會優先於資料表層級的預設值。新增資料列時,TTL 會從建立時間開始計算。

刪除表格列

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

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

移除資料表

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

  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 事件或實體合併。

資料表中的列和欄比較

比較類型 主要邏輯 常見運算子 語法範例 使用時機
以列為準 同一列中的所有條件都必須相符 =!=>>=<<= $e.field = %table.col_a 同一列中多個資料欄值之間的關係很重要時。
以資料欄為準 值必須存在於資料欄的「任何位置」 ININ regexIN cidr $e.field IN %table.col_b 檢查單一資料欄中的一組值是否含有特定值。

使用「以資料列為準」或「以資料欄為準」比較方法,將 UDM 事件連結至資料表:

  • 如要使用以資料列為準的比較方式,將 UDM 事件連結至資料表,請使用等號運算子 (=!=>>=<<=)。

    例如:$<udm_variable>.<field_path> = %<data_table_name>.<column_name>

    • 如果使用多個比較陳述式,則所有欄位或條件都必須符合相同資料表列。
    • 如要在查詢中使用運算子 (例如 not!=>>=<<=),您必須在 UDM 欄位和資料表列之間加入至少一個 join 條件。

    • Google SecOps 會將含有資料表的規則視為多事件規則,因此規則定義中必須有 match 區段。join

  • 如要根據 UDM 事件中與資料表資料列相符的值篩選資料,請考慮使用下列聯結語法:

    • 正確的 JOIN 語法:

      以資料列為準的「組合排除」需要 left outer 聯結和檢查 nullswhere 子句,例如:

    • 錯誤的 JOIN 語法:

      請勿在多個以資料列為準的等號條件周圍加上 NOT。這種語法無法達到「如果找到這個組合,則排除」的效果。

      舉例來說,請勿使用以下語法:NOT (field1 = %table.col1 AND field2 = %table.col2)

      這是因為系統仍會逐列套用比對。如果任何資料列未通過內部合併條件,NOT 會導致該資料列的評估結果為 true,可能包括事件而非排除事件。

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

    net.ip_in_range_cidr($e.principal.ip, %<data_table_name>.<column_name>)
    
    re.regex($e.principal.hostname, %<data_table_name>.<column_name>)
    
  • 如要使用以資料欄為準的比較方式,將 UDM 事件連結至資料表,請使用 in 關鍵字。

    例如:$<udm_variable>.<field_path> in %<data_table_name>.<column_name>

  • 如要篩除特定資料欄中含有欄位值的事件 (例如封鎖清單或允許清單),請使用以下語法:NOT (... IN %table.column)

    例如:not ($evt_username in %my_data_table.username)

  • 如要使用 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 事件中與資料表列相符的值篩選資料。如果您使用多個比較陳述式,所有欄位或條件都必須符合同一資料表列。

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

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

  • 查詢的 event 區段支援資料表預留位置,但必須連結至 UDM 事件或 UDM 實體。

  • 以下範例使用 string 類型的資料表資料欄。

    • 這個 YARA-L 查詢範例會檢查使用者登入事件是否與 example_table 中的資料列相符。

      • 其中一個條件是 user ID 存在於 example_table 中。
      • 規則必須在同一列中同時符合這兩項條件,才會觸發。example_table
    • 規則範例:

      // 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
      }
      
    • 搜尋範例:

      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 中繼資料 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
    
  • 範例:將搜尋結果匯出至資料表

    events:
      $e.metadata.event_type = "USER_LOGIN"
      $e.security_result.action = "ALLOW"
    
    outcome:
      $user = $e.principal.user.userid
      $ip = $e.target.ip[0] // Assuming target.ip is an array
      $timestamp = $e.metadata.event_timestamp.seconds
    
    export:
      // Write to the data table named 'successful_logins'
      %successful_logins.write_row(
        user: $user,          // Maps $user variable to 'user' column
        ip: $ip,              // Maps $ip variable to 'ip' column
        first_seen: $timestamp // Maps $timestamp variable to 'first_seen' column
      )
    

使用 YARA-L 修改資料表

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

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

    資料表包含下列項目:

    使用者 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

API 頻率限制

呼叫 Google SecOps 資料表和資料表列 REST API 端點時,系統會對每個專案和使用者強制執行下列每分鐘查詢次數 (QPM) 配額:

資源 API 作業 頻率限制 (標準)
DataTables CreateDataTable (data_table/create_requests) 每分鐘 60 次查詢
DataTables GetDataTable (data_table/get_requests) 每分鐘 120 次查詢
DataTables ListDataTables (data_table/list_requests) 每分鐘 120 次查詢
DataTables UpdateDataTable (data_table/update_requests) 每分鐘 60 次查詢
DataTables DeleteDataTable (data_table/delete_requests) 每分鐘 60 次查詢
DataTableRows CreateDataTableRow (data_table_row/create_requests) 每分鐘 60 次查詢
DataTableRows GetDataTableRow (data_table_row/get_requests) 每分鐘 120 次查詢
DataTableRows ListDataTableRows (data_table_row/list_requests) 每分鐘 120 次查詢
DataTableRows UpdateDataTableRow (data_table_row/update_requests) 每分鐘 60 次查詢
DataTableRows DeleteDataTableRow (data_table_row/delete_requests) 每分鐘 60 次查詢
DataTableRows BulkCreateDataTableRows (同步 / 非同步) 每分鐘 30 次查詢
DataTableRows BulkReplaceDataTableRows (同步 / 非同步) 每分鐘 30 次查詢
DataTableRows BulkUpdateDataTableRows (同步 / 非同步) 每分鐘 10 次查詢
DataTableRows BulkDeleteDataTableRows (同步 / 非同步) 每分鐘 30 次查詢
DataTableRows BulkGetDataTableRows (data_table_row/bulk_get_requests) 每分鐘 120 次查詢

限制

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

  • 資料表僅支援 CSV 資料。只有在新增資料表和匯入定位點分隔值 (TSV) 檔案時,資料表才支援定位點分隔值。

  • 資料表欄位不支援逗號 (,) 字元。

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

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

  • 最多只能有 5 個含有規則運算式運算子的 in 陳述式。

  • 含 CIDR 運算子的 in 陳述式數量上限為 5 個。

  • = (JOIN) 陳述式數量上限為 10 個。

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

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

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

  • 資料表中的資料量上限:10 GB。

  • 設定區段不允許使用預留位置。

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

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

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

規則中資料表聯結的限制

規則中的資料表聯結有以下限制。

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

  • 與實體和 UDM 不同,資料表不支援預留位置。這會導致下列限制:

    • 您無法將一組篩選器套用至資料表,並與 UDM 實體聯結。

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

    舉例來說,假設有名為 dt 的資料表,其中包含 my_hostnameorgmy_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") 會導致資料表空白,然後與 e1e2 聯結。

使用含規則的資料表時的限制

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

執行頻率的限制

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

輸出至資料表的限制

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

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

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

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

  • 最多可有 20 個結果。

  • 如果資料表不存在,系統會建立新資料表,並為所有資料欄套用預設的 string 資料類型,順序則依指定而定。

  • 最多五項規則可同時寫入資料表。

  • 我們無法保證生產端規則可以在資料表的取用端規則啟動前,將資料列新增至資料表。

  • 單一規則的結果列數量設有限制。結果、保存的資料和資料表最多只能有 10,000 列。

  • 更新資料列時,所有非鍵值資料欄的新值都會取代舊值。所有更新 (包括新增資料列) 大約需要五分鐘,才能用於查詢。

從資料表擴充實體的限制

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

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

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

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

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

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

  • none 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
        )
    
    

使用 Chronicle API 或 Terraform 重新命名或刪除資料表時的限制

  • 平台或 API 不支援重新命名。
  • 如果規則參照資料表,您就無法透過平台或 API 刪除資料表。
  • 在 Terraform 中,重新命名資料表會觸發刪除和重新建立作業。如果規則參照資料表,這項作業就會失敗,因為 API 會禁止刪除舊資料表。
  • Terraform 中的資料遺失風險:即使規則未參照資料表,使用 Terraform 重新命名資料表仍會導致資料永久遺失。Terraform 會毀損現有資料表,並以新的空白資料表取代,不會保留原始資料表中的任何資料。
  • 建議的解決方法:
    • 使用新名稱建立新的資料表。
    • 更新規則,開始使用新的資料表。
    • 刪除舊的資料表。

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