YARA-L 最佳做法
本文說明 Google Security Operations 建議的 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
- 開始使用 Statistical Search
- 統計搜尋 - 不只是計數
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。