偵測規則總覽
YARA-L 規則語言
YARA-L 是 Google 開發的偵測規則語言,YARA-L 的目的是擺脫僅將偵測視為資料查詢的模式,轉向實際的事件驅動調查。YARA-L 衍生自 YARA 語言,這種語言常用於惡意軟體分析。L 代表記錄。YARA-L 可讓您充分運用偵測結果中多個來源的所有資訊,並將這些事件關聯至可採取行動的警報。詳情請參閱「YARA-L 2.0 語言總覽」。
Google Security Operations 偵測規則範例
為協助您加快採用 Google SecOps Detection Engine,我們提供含有範例規則的 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 專業人員尋求解答。