監控分析規則的健康狀況並審核其完整性

為確保您的 Microsoft Sentinel 服務能全面、不中斷且無竄改的威脅偵測,請持續追蹤分析規則的健康狀況與完整性。 透過監控 分析規則執行洞察、查詢健康與稽核日誌,以及 手動重跑測試與優化分析規則,保持最佳運作。

為相關利害關係人設置健康與稽核事件通知,讓他們能採取行動。 例如,定義並發送電子郵件或 Microsoft Teams 訊息,在工單系統中建立新工單,等等。

本文說明如何在 Microsoft Sentinel 中使用 Microsoft Sentinel 的稽核與健康監控功能,從 Microsoft Sentinel 內部追蹤分析規則的健康狀況與完整性。

如需了解規則洞察與手動重執行規則,請參閱 「監控並優化排程分析規則的執行」。

摘要

Microsoft Sentinel 提供兩種類型的日誌用於監控分析規則:健康日誌與稽核日誌。 以下章節將總結每筆日誌所捕捉的內容及資料存放地點。

  • Microsoft Sentinel 分析規則健全狀態記錄:

    • 這份日誌記錄了分析規則執行過程的事件,以及這些執行的最終結果——如果成功還是失敗,以及原因。
    • 日誌也記錄了每次執行分析規則的過程:
      • 規則查詢捕捉了多少事件。
      • 事件數量是否超過規則定義的門檻,導致規則觸發警報。

    這些日誌會被收集在 Log Analytics 的 SentinelHealth 表格中。

  • Microsoft Sentinel 分析規則稽核記錄:

    • 此日誌記錄了對任何分析規則所做的變更事件,包括以下細節:
      • 被更改的規則名稱。
      • 規則的哪些屬性被更改了。
      • 變更前後的規則設定狀態。
      • 進行變更的使用者或身分。
      • 來源 IP 以及變更的日期/時間。
      • ... 以及更多。

    這些日誌會被收集在 Log Analytics 的 SentinelAudit 表格中。

使用 SentinelHealth 和 SentinelAudit 的資料表

要從 SentinelHealth 和 SentinelAudit 表格取得稽核與健康資料,您必須先在您的工作空間啟用 Microsoft Sentinel 健康功能。 欲了解更多資訊,請參閱「開啟 Microsoft Sentinel 的稽核與健康監控」。

一旦開啟健康功能, SentinelHealth 資料表會在分析規則產生的第一個成功或失敗事件時建立。

了解 SentinelHealth 和 SentinelAudit 資料表事件

SentinelHealth 表格記錄以下類型的分析規則健康事件:

  • 已排程的分析規則執行。
  • 近即時(NRT)分析規則執行。

欲了解更多資訊,請參閱 SentinelHealth 表格欄位結構。

SentinelAudit 表格記錄以下類型的分析規則稽核事件:

  • 建立或更新分析規則。
  • 分析規則已刪除。

欲了解更多資訊,請參閱 SentinelAudit 表格欄位結構。

執行查詢以偵測健康與完整性問題

為了達到最佳效果,建議先在 這些表格的預設函式_SentinelHealth () 和 _SentinelAudit () 上建立查詢,而不是直接查詢資料表。 這些函式能在資料表結構有變動時,維持查詢的向下相容性。

第一步,篩選與分析規則相關的資料表。 使用參數 SentinelResourceType 。

_SentinelHealth()
| where SentinelResourceType == "Analytics Rule"

如果你願意,也可以進一步篩選特定類型的分析規則。 請使用這個 SentinelResourceKind 參數。

| where SentinelResourceKind == "Scheduled"

# OR

| where SentinelResourceKind == "NRT"

以下是一些範例問題,幫助你開始:

  • 尋找「自動停用排程分析規則」的規則:

    _SentinelHealth()
    | where SentinelResourceType == "Analytics Rule"
    | where Reason == "The analytics rule is disabled and was not executed."
    
  • 依原因數出成功或失敗的規則與跑法:

    _SentinelHealth()
    | where SentinelResourceType == "Analytics Rule"
    | summarize Occurrence=count(), Unique_rule=dcount(SentinelResourceId) by Status, Reason
    
  • 在 SentinelAudit 表格中找到規則刪除活動。 此查詢會回傳分析規則被刪除的審計紀錄,讓您能追蹤是誰以及何時移除了該規則:

    _SentinelAudit()
    | where SentinelResourceType =="Analytic Rule"
    | where Description =="Analytics rule deleted"
    
  • 依規則名稱和活動名稱查找規則上的活動:

    _SentinelAudit()
    | where SentinelResourceType =="Analytic Rule"
    | summarize Count= count() by RuleName=SentinelResourceName, Activity=Description
    
  • 依來電者名稱(執行該活動的身分)查找規則相關活動:

    _SentinelAudit()
    | where SentinelResourceType =="Analytic Rule"
    | extend Caller= tostring(ExtendedProperties.CallerName)
    | summarize Count = count() by Caller, Activity=Description
    

欲了解更多關於範例查詢中使用的 Kusto 運算子與函式,請參閱 Kusto 文件:

欲了解更多關於KQL的資訊,請參閱Kusto 查詢語言 (KQL) 概述。

其他資源:

查詢已排程規則的健全狀態與完整性問題

當排程規則失敗時,會在同一個視窗內再重試五次。 只要六次嘗試中成功一次,規則不會跳過該視窗或錯過警報。

六次嘗試中若有一次失敗,則表示警報觸發延遲。 以下查詢計算精確延遲:

_SentinelHealth()
| where SentinelResourceType == @"Analytics Rule" 
| where SentinelResourceKind == "Scheduled"
| extend startTime = todatetime(ExtendedProperties["QueryStartTimeUTC"]), executionStart = todatetime(ExtendedProperties["executionStart"])
| extend delay = datetime_diff('minute', startTime, executionStart)

若要尋找完全失敗 (也就是跳過) 的視窗,請使用以下查詢:

_SentinelHealth()| where SentinelResourceType == @"Analytics Rule" 
| where SentinelResourceKind == "Scheduled"
| where Status != "Success"
| extend startTime = tostring(ExtendedProperties["QueryStartTimeUTC"])
| summarize failuresByStartTime = count() by startTime, SentinelResourceId
| where failuresByStartTime == 6
| summarize count() by SentinelResourceId

此查詢會尋找六次重試皆未成功的已排程分析規則執行。 你可以透過看規則視窗的開始時間來辨識重試,因為重試總是看原始開始時間。 此查詢會給出每個分析規則跳過的視窗數量。 我們預期被略過的視窗會很少見。 如果您發現分析規則有略過的視窗,請使用這些查詢來了解這些特定規則的失敗原因,並參考失敗原因與緩解措施對照表來修正這些問題。

查詢 NRT 規則的健全狀態與完整性問題

NRT 規則的重試機制與排程規則不同。 若規則執行失敗,系統在下一次執行時(一分鐘後)也會將此次失敗的時間範圍納入考量。 此行為最多會持續到失敗 60 次(一小時)。

由於某次運行的一次失敗只反映一分鐘的延遲,所以不要只看單一故障。 相反地,請使用以下查詢來監控每個分析規則的延遲:

_SentinelHealth()
| where SentinelResourceKind == "NRT"
| extend startTime = todatetime(ExtendedProperties["QueryStartTimeUTC"]), endTime = todatetime(ExtendedProperties["QueryEndTimeUTC"]), alertsCreated = toint(ExtendedProperties["AlertsGeneratedAmount"])
| where alertsCreated == 0 
| extend ruleDelay = datetime_diff('minute', endTime, startTime)
| project TimeGenerated, ruleDelay, SentinelResourceId
| render timechart

你也可以定義分析規則,在重大延遲時觸發警報,例如當 NRT 規則延遲超過 10 分鐘) (。

狀態、錯誤與建議步驟

無論是 排程分析規則執行 還是 NRT 分析規則執行,您可能會看到下列任一種狀態和描述:

  • 成功:規則成功執行,產生 <n> 警示。

  • 成功:規則執行成功,但未達到產生警報所需的 (<n>) 門檻。

  • 失敗:這些說明說明規則失敗及其可採取的措施。

    描述 補救
    執行查詢時發生內部伺服器錯誤。
    查詢執行已逾時。
    查詢中提到的表格未被找到。 確認相關資料來源是否已連接。
    執行查詢時發生語意錯誤。 試著透過編輯並儲存分析規則來重設 (,但不改任何設定) 。
    查詢所呼叫的函式會以保留字命名。 移除或重新命名函式。
    執行查詢時發生語法錯誤。 試著透過編輯並儲存分析規則來重設 (,但不改任何設定) 。
    工作空間根本不存在。
    此查詢使用過多系統資源,導致無法執行。 檢視並調整分析規則。 請參閱我們的 Kusto 查詢語言、 Kusto 查詢語言概述 及 最佳實務 文件。
    找不到查詢所呼叫的函式。 確認你工作空間中所有查詢呼叫的函式是否存在。
    查詢中使用的工作區找不到。 確認查詢中的所有工作空間都存在。
    你沒有執行這個查詢的權限。 試著透過編輯並儲存分析規則來重設 (,但不改任何設定) 。
    你沒有查詢中一個或多個資源的存取權限。
    查詢指向一條未被找到的儲存路徑。
    查詢被拒絕存取儲存路徑。
    此工作區定義多個同名函式。 移除或重新命名冗餘函式,並透過編輯並儲存來重置規則。
    這個查詢沒有回傳任何結果。
    此查詢不允許多個結果集。
    查詢結果中每列欄位數量不一致。
    由於資料擷取時間過長,該規則的執行被延遲。
    該規則的執行因暫時性問題而延遲。
    由於暫時性問題,警報未被加強。
    由於實體對應問題,警示未獲得擴充。
    < 數字>個實體因 32 KB 警示大小限制而在警示<名稱>中遭到捨棄。
    < 編號> 由於實體映射問題,警報 <名稱> 中的實體被刪除。
    查詢結果導致 <數字>個事件,超過採用每列警示事件分組設定的<規則類型>規則所允許的<限制>結果上限。 每列警示為第一個<限制-1> 事件產生,並產生額外的彙總警示以解釋所有事件。
    - <number> = 查詢回傳的事件數量
    - <限制> = 目前排程規則的上限為 150 則警示,NRT 規則的上限為 30 則
    - <規則類型> = 排程或 NRT

使用審計與健康監測工作手冊

若要將分析規則健康情況和稽核資料視覺化,請從 Microsoft Sentinel 內容中樞安裝並設定 Analytics Health & Audit 活頁簿。

  1. 要讓您的工作簿在工作區中可用,請安裝 Microsoft Sentinel 內容中心的工作簿解決方案:

    1. 從Microsoft Sentinel入口網站,從內容管理選單選擇內容中心 (預覽) 。

    2. 在Content hub中,在搜尋列輸入health,並在結果中從Standalone下的Workbook解決方案中選取Analytics Health & Audit。

      Content Hub 分析健康工作簿選集截圖。

    3. 從細節欄選 「安裝 」,然後選擇「 儲存 」,取而代之。

  2. 當解決方案顯示已安裝時,請從威脅管理選單中選擇工作簿。

    指出已從內容中心安裝分析健全狀態活頁簿解決方案的螢幕截圖。

  3. 在 工作簿 庫中,選取 範本 索引標籤,在搜尋列中輸入 health,然後從結果中選取 Analytics Health & Audit。

    從範本庫選取 Analytics Health 活頁簿的畫面擷圖。

  4. 在細節欄選 「儲存 」以建立可編輯且可用的工作簿副本。 當副本建立完成後,選擇 檢視已儲存的工作簿。

  5. 進入工作簿後,先選擇你想查看的 訂閱 和 工作區 (它們可能已經) 被選中,然後設定時間 範圍(TimeRange )來根據你的需求篩選資料。 使用 顯示說明 切換鈕,在工作簿中直接顯示說明。

    分析規則健全狀態活頁簿概觀索引標籤的螢幕截圖。

這本工作簿有三個分頁區塊:

請在概覽標籤中檢視健康與稽核摘要

概覽標籤顯示健康狀況與稽核摘要:

  • 所選工作區中分析規則執行情況的健康狀態摘要:執行次數、成功與失敗次數,以及失敗事件的詳細資料。
  • 檢視所選工作區中分析規則相關活動的稽核摘要:活動數量隨時間的變化、依類型劃分的活動數量,以及依規則劃分的各類型活動數量。

使用 [健康] 索引標籤來識別分析規則中的問題

健康分頁讓你探索特定的健康事件。

分析健康狀況活頁簿中所選「健康」索引標籤的螢幕擷取畫面。

  • 依 狀態(成功或失敗)和 規則類型(排程或 NRT)篩選整個頁面的資料。
  • 查看所選時間範圍內成功和失敗的規則執行趨勢(依據狀態篩選條件而定)。 您可以在趨勢圖上進行「」時間刷選,以查看原始時間範圍的一小部分。 分析健全狀態工作簿中分析規則隨時間執行的螢幕截圖。
  • 依 reason 篩選頁面其餘部分。
  • 查看所有分析規則的執行總次數,並依狀態按比例顯示於圓餅圖中。
  • 接著是一張表格,顯示了執行過的獨特分析規則數量,依規則類型和狀態分類。
    • 選擇一個狀態以篩選該狀態的剩餘圖表。
    • 選取圖表右上角的「清除選取」圖示 (外觀看起來像「復原」圖示),即可清除篩選條件。 分析健康工作簿中依狀態和類型執行規則數量的截圖。
  • 請參閱每個狀態,並列出可能的理由數量。 (只會顯示在所選時間範圍內的執行所代表的原因。)
    • 選擇一個狀態以篩選該狀態的剩餘圖表。
    • 選取圖表右上角的「清除選取」圖示 (外觀看起來像「復原」圖示),即可清除篩選條件。 分析健康工作簿中依狀態列出的多個獨特原因截圖。
  • 接著,請參考這些原因的清單,包括總規則執行次數和執行的獨特規則數量。
    • 選取一個原因,依該原因篩選以下圖表。
    • 選取圖表右上角的「清除選取」圖示 (外觀看起來像「復原」圖示),即可清除篩選條件。 分析健全狀態活頁簿中依唯一原因區分的規則執行情況螢幕截圖。
  • 接著會有一個清單列出曾執行的各個不重複分析規則,並附上其最新結果,以及成功與失敗的趨勢線 (取決於篩選清單的所選狀態)。
    • 選取一項規則以深入查看,並顯示一個新表格,其中列出該規則在所選時間範圍內的所有執行記錄。
    • 選取圖表右上角的「清除選取」圖示(其外觀類似「復原」圖示),即可清除該表格。 分析健康工作簿中執行的獨特規則清單截圖,包含狀態與趨勢線。
  • 如果你在清單中選擇規則,會顯示一個新的表格,裡面有該規則的健康細節。 分析健康工作簿中選定分析規則執行清單的截圖。

使用審計標籤來檢視分析規則變更

審計 分頁 可以讓你深入分析特定的審計事件。

分析健康活頁簿中選取稽核索引標籤的畫面截圖。

  • 依 照審核規則類型 (排程規則或 Fusion,這些是基於關聯的規則,能偵測多階段攻擊)過濾整頁資料。
  • 查看選定期間內分析規則中經審計活動的趨勢。 您可以在趨勢圖上進行「」時間刷選,以查看原始時間範圍的一小部分。 分析健康活頁簿中的熱門稽核活動螢幕擷取畫面。
  • 查看依 活動 與 規則類型劃分的審核事件數量。
    • 選擇一項活動以篩選該活動的以下圖表。
    • 選取圖表右上角的「清除選取」圖示 (外觀看起來像「復原」圖示),即可清除篩選條件。 分析健康工作簿中依活動與類型統計稽核事件的截圖。
  • 請參閱規則 名稱下的審核事件數量。
    • 選取規則名稱,即可篩選下列表格,只顯示該規則,並可深入查看,顯示一個新表格,列出該規則在所選時間範圍內的所有活動。 (請看下面的截圖。)
    • 選取圖表右上角的「清除選取」圖示 (外觀看起來像「復原」圖示),即可清除篩選條件。 分析健康活頁簿中依規則名稱和呼叫者劃分的已稽核事件螢幕擷取畫面。
  • 查看由 呼叫端(執行該活動的身分)所產生的稽核事件數量。
  • 如果您在前述圖表中選取了規則名稱,會顯示另一個表格,顯示該規則的稽核 活動。 選擇 ExtendedProperties 欄位中以連結出現的值,開啟側面板,顯示規則變更。 分析健全狀態工作簿中選定規則的稽核活動螢幕截圖。