YARA-L 最佳做法
本文說明 Google 安全作業團隊建議的 YARA-L 規則編寫最佳做法。
篩除零值
在您執行規則的事件中,系統可能會自動略過欄位。省略欄位時,系統會預設為零值。
例如,省略的字串值預設為 ""
。
如果您將兩個都省略的欄位視為相同,兩者都可能會預設為零值。這可能會導致兩個欄位都含有零值,進而造成不必要的比對結果。如要避免這種情況,請明確指定零值。
舉例來說,如果您有一個規則是根據兩個欄位將兩個事件視為相等,那麼這兩個欄位都有可能為空白,導致兩者相符:
$e1.field1 = $e2.field2
如果資料中省略 e1.field1
和 e2.field2
,"" = ""
就會設為 true,導致相符。
下列比較運算式可確保您不會取得任何符合項目,因為 e1.field1
和 e2.field2
不含任何資料:
$e1.field1 = $e2.field2
$e1.field != ""
零值和取決於強化資料的規則
如果規則依賴尚未更新的強化資料,則值可能為空值或零。因此,建議您在依附加值規則中篩除零值 (空值檢查)。瞭解 Google SecOps 如何豐富事件和實體資料,以及如何在規則中使用經過豐富的背景資訊資料。
新增事件類型篩選器
在下列範例中,系統會將每個 UDM 事件的 IP 位址與參考清單進行比對,因此會耗用大量資源:
events:
// For every UDM event, check if the target.ip is listed in
// the suspicious_ip_addresses reference list.
$e.target.ip in %suspicious_ip_addresses
如果 YARA-L 規則只偵測特定事件類型的 UDM 事件,新增事件類型篩選器有助於減少規則需要評估的事件數量,進而改善規則。
events:
// For every UDM event of type NETWORK_DNS, check if the target.ip is
// listed in the suspicious_ip_addresses reference list.
$e.metadata.event_type = "NETWORK_DNS"
$e.target.ip in %suspicious_ip_addresses
將這些篩選器新增至事件部分開頭。您也應在規則運算式或其他比較運算式前,放置相等篩選器。系統會依照規則中的順序套用篩選器。
如要查看社群部落格中有關 YARA-L 的文章,請參閱:
- YARA-L 基本概念
- YARA-L 規則變數
- YARA-L 運算子和修飾符
- 使用規則運算式建立單一事件規則
- 在規則中匯總事件
- 在條件中設定門檻值
- 規則編輯器導覽
- YARA-L 規則選項
- 建立單一事件規則 - 字串比對
- 建立多重事件規則 - 彙整事件
- 建立多重事件規則 - 排序事件
- 建立多重事件規則 - 在條件中加入多個彙整和計數
- 建立多重事件規則 - 滑動視窗
- 在單一事件規則中推出結果
- 多重事件規則中的結果 - 計數
- 多重事件規則中的結果 - 陣列
- 多重事件規則中的結果:最大值、最小值、總和
- 結果 - 風險分數、條件邏輯和數學運算子
- 函式 - strings.concat
- 函式 - strings.coalesce
- 函式 - 網路
- 參考資料清單
- CIDR 參考清單
- 規則運算式參考清單
- 字串函式 - 大寫或小寫
- 規則運算式函式 - re.regex
- 規則運算式函式 - re.capture
- 字串函式 - strings.base64_decode
- 規則運算式函式 - re.replace
- 開始使用統計搜尋
- 統計搜尋:不只是計數
還有其他問題嗎?向社群成員和 Google SecOps 專家尋求解答。