預設偵測規則

支援的國家/地區:

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 專業人員尋求答案。