偵測規則總覽

支援的國家/地區:

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