預設偵測規則
YARA-L 規則語言
YARA-L 是 Google 開發的偵測規則語言,YARA-L 的目的是擺脫僅將偵測視為資料查詢的模式,轉向實際的事件驅動調查。YARA-L 衍生自 YARA 語言,這種語言常用於惡意軟體分析。L 代表記錄。YARA-L 可讓您充分運用偵測結果中多個來源的所有資訊,並將這些事件相互關聯,產生可採取行動的警報。詳情請參閱「YARA-L 2.0 語言總覽」。
Google Security Operations 偵測規則範例
為協助您加快採用 Google SecOps 偵測引擎,我們提供含有範例規則的 GitHub 存放區。這個存放區包含多種偵測規則類別,包括:
- Google Cloud CloudAudit
- Google Workspace
- 資訊警告
- 惡意軟體
- MITRE ATT&CK
- SOC 主要規則
- 可疑事件
每個類別都會採用特定方法查看資料來源,並指定要使用的事件和比對陳述式。
規則範例和調整
下列規則會建立事件變數 $e1
,用於追蹤事件類型。事件變數可以是任何對評估資料有意義的值。這個事件中評估的 UDM 欄位是
metadata.eventype
,因此只呼叫 e1
即可。接下來的幾行會搜尋 e1
中特定出現的規則運算式比對。只要發生 $e1
事件,Google SecOps 就會偵測到異常狀況。為進行調整,系統會提供 not
條件,排除指令列引數的特定非惡意路徑。如果發現來自其他已知檔案路徑的誤判結果頻繁出現,可以為這項規則新增更多 not
條件。
rule suspicious_unusual_location_svchost_execution
{
meta:
author = "Google Cloud Security"
description = "Windows 'svchost' executed from an unusual location"
yara_version = "YL2.0"
rule_version = "1.0"
events:
$e1.metadata.event_type = "PROCESS_LAUNCH"
re.regex($e1.principal.process.command_line, `\bsvchost(\.exe)?\b`) nocase
not re.regex($e1.principal.process.command_line, `\\Windows\\System32\\`) nocase
condition:
$e1
}
指定多個事件變數
YARA-L 可讓您在規則中擁有多個事件變數。在以下範例中,規則有 $e1
和 $e2
事件。條件會指出觸發偵測的邏輯條件。
rule ExcludeZeroValues {
meta:
author = "noone@google.com"
events:
$e1.metadata.event_type = "NETWORK_DNS"
$e1.principal.hostname = $hostname
// $e1.principal.user.userid may be empty string.
$e1.principal.user.userid != "Guest"
$e2.metadata.event_type = "NETWORK_HTTP"
$e2.principal.hostname = $hostname
// $e2.target.asset_id cannot be empty string as explicitly specified.
$e2.target.asset_id != ""
match:
// $hostname cannot be empty string.
$hostname over 1h
condition:
$e1 and $e2
}
規則結果部分
使用結果部分在規則偵測中設定保留變數,以提供下游消耗的擴充功能。舉例來說,您可以根據所分析事件的資料,新增嚴重程度評分資訊。以下偵測會檢查兩個事件,以歸因 $hostname
值。如果值 $hostnames
在 5 分鐘內相符,系統就會套用嚴重程度分數。使用時間範圍時,Google SecOps 偵測引擎只會檢查您指定的離散時間區塊。
rule OutcomeRuleMultiEvent {
meta:
author = "noone@google.com"
events:
$u.udm.principal.hostname = $hostname
$asset_context.graph.entity.hostname = $hostname
$severity = $asset_context.graph.entity.asset.vulnerabilities.severity
match:
$hostname over 5m
outcome:
$risk_score =
max(
100
+ if($hostname = "my-hostname", 100, 50)
+ if($severity = "HIGH", 10)
+ if($severity = "MEDIUM", 5)
+ if($severity = "LOW", 1)
)
$asset_id_list =
array(
if($u.principal.asset_id = "",
"Empty asset id",
$u.principal.asset_id
)
)
$asset_id_distinct_list = array_distinct($u.principal.asset_id)
$asset_id_count = count($u.principal.asset_id)
$asset_id_distinct_count = count_distinct($u.principal.asset_id)
condition:
$u and $asset_context and $risk_score > 50 and not arrays.contains($asset_id_list, "id_1234")
}
結論
YARA-L 是一種彈性的偵測語言,可讓您檢查安全性事件,而不只是傳回資料查詢。事件變數用於追蹤規則條件部分使用的欄位值。您可以運用單一事件、一段時間內的多個事件、關聯單一值的來源 (例如來自不同資料來源的 $hostname),甚至使用正規運算式等工具來提供相符項目。請務必根據自己的環境調整規則,方法是在邏輯中指定排除項目。您也可以使用參照清單將項目分組,然後在規則中參照該清單。請注意,Google SecOps 不需要針對每項偵測結果發出快訊。您可以追蹤多種用途的偵測結果,並只在您認為環境中最關鍵的偵測結果出現時收到快訊。
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。