本文說明如何識別、比較並將 ArcSight 偵測規則遷移至 Microsoft Sentinel 分析規則。
識別與遷移規則
Microsoft Sentinel 利用機器學習分析來產生高保真度且可執行的事件,而你現有的一些偵測在 Microsoft Sentinel 中可能已經多餘。 因此,不要盲目遷移所有偵測和分析規則。 在確定現有偵測規則時,請檢視以下考量事項。
- 務必選擇適合規則遷移的使用案例,考量業務優先順序與效率。
- 請確認你了解 Microsoft Sentinel 的規則類型。
- 確認你是否理解 規則術語。
- 檢視過去六到十二個月內未觸發任何警示的規則,判斷它們是否仍然適用。
- 消除你經常忽略的低階威脅或警報。
- 使用現有功能,並檢查 Microsoft Sentinel 內建的分析規則是否能滿足你目前的使用情境。 由於 Microsoft Sentinel 利用機器學習分析來產生高保真度且可執行的事件,您現有的部分偵測功能很可能不再需要。
- 確認連接的資料來源並檢視你的資料連接方式。 重新檢視資料收集的討論,確保你計畫偵測的應用案例中資料深度與廣度。
- 請瀏覽社群資源,如 SOC Prime 威脅偵測市集 ,確認你的規則是否可用。
- 考慮像 Uncoder.io 這樣的線上查詢轉換器是否適合你的規則。
- 如果規則無法取得或無法轉換,則需要手動建立,使用 KQL 查詢。 檢視 規則映射 以建立新的查詢。
進一步了解遷移偵測規則的最佳做法。
要將您的分析規則遷移到 Microsoft Sentinel:
確認你為每條想要遷移的規則都設置了測試系統。
準備一套為遷移規則的驗證流程,包括完整的測試情境和腳本。
確保你的團隊有可用的資源 來測試你遷移的規則。
確認你已連接所有必要的資料來源, 並檢視你的資料連接方式。
確認你的偵測是否能作為 Microsoft Sentinel 內建範本提供:
如果內建規則足夠,可以使用內建規則範本來建立你自己的工作區規則。
在 Microsoft Sentinel 中,前往「配置>分析>規則範本」標籤,建立並更新每個相關的分析規則。
想了解如何從內建範本建立規則,請參閱從 範本建立排程分析規則。
如果你遇到 Microsoft Sentinel 內建規則未涵蓋的偵測,可以試試線上查詢轉換器,例如 Uncoder.io 將查詢轉換成 KQL。
先辨識觸發條件和規則動作,然後構建並檢視你的 KQL 查詢。
如果內建規則和線上規則轉換器都不夠用,你就得手動建立規則。 在這種情況下,請依照以下步驟開始制定你的規則:
請確定你想在規則中使用的資料來源。 你會想在 Microsoft Sentinel 中建立一個資料來源與資料表之間的對應表,以識別你想查詢的資料表。
識別你想在規則中使用的資料中的任何屬性、欄位或實體。
明確你的規則標準和邏輯。 在這個階段,你可能會想用規則範本作為範例,幫助你構建 KQL 查詢。
考慮篩選器、相關規則、活躍清單、參考集、監控清單、偵測異常、聚合等等。 你可以利用舊有 SIEM 提供的參考資料,將 ArcSight 查詢語法映射到 KQL。
先辨識觸發條件和規則動作,然後構建並檢視你的 KQL 查詢。 在檢視你的查詢時,請考慮 KQL 的優化指導資源。
針對你所有相關的使用情境來測試這個規則。 如果它沒有提供預期的結果,您可能需要檢視 KQL,然後再測試一次。
當你滿意時,就可以視為規則已遷移。 根據需要,為你的規則動作建立一套劇本。 若要建立並使用規則動作的 Playbook,請參見 Microsoft Sentinel 中的 Playbook 自動化威脅回應。
了解更多關於分析規則的資訊:
- Microsoft Sentinel 中的排程分析規則:使用警示分組來降低警示疲勞,將在特定時間內發生的警示分組。
- 在 Microsoft Sentinel 中將資料欄位映射到實體:讓 SOC 工程師能將實體定義為調查過程中追蹤的證據。 實體映射也讓 SOC 分析師能利用直覺式 的調查圖表 ,幫助減少時間與精力。
- 以 UEBA 資料調查事件:作為如何利用證據在事件預覽窗格中顯示事件、警示及與特定事件相關的書籤的範例。
- Kusto 查詢語言(KQL):您可以使用 KQL 向 Log Analytics 資料庫發送唯讀請求,以處理資料並回傳結果。 KQL 也被用於其他 Microsoft 服務,例如 適用於端點的 Microsoft Defender 和 Application Insights。
比較規則術語
此表格有助於你釐清 Microsoft Sentinel 與 ArcSight 中規則的概念。
| ArcSight | Microsoft Sentinel | |
|---|---|---|
| 規則類型 | - 過濾規則 - 加入規則 - 主動名單規則 - 還有更多 |
- 排程查詢 - 融合 - Microsoft 安全性 - 機器學習(ML)行為分析 |
| Criteria | 在規則條件中定義 | 在 KQL 中定義 |
| 觸發條件 | - 定義 在行動中 - 在聚合中定義(用於事件聚合) |
門檻:查詢結果數量 |
| 動作 | - 集合事件欄位 - 發送通知 - 建立新案件 - 加入活躍清單 - 還有更多 |
- 建立警報或事件 - 與邏輯應用程式整合 |
繪製並比較規則範例
請參考以下範例,將 ArcSight 偵測規則與以 Kusto 查詢語言(KQL)撰寫的 Microsoft Sentinel 查詢進行比較。
| 規則 | 描述 | ArcSight (樣本偵測規則) | KQL 查詢範例 | 資源 |
|---|---|---|---|---|
過濾器 (AND) |
一個帶有 AND 條件的範例規則。 活動必須符合所有條件。 |
濾波器 (與) 範例 | 濾波器 (與) 範例 | 弦濾波器: - 字串運算元 數值濾波器: - 數值運算子 約會時間篩選器: - 以前 - 約會時間 - 介於 - 現在 解析: - 句法解析 - 摘錄 - parse_json - parse_csv - parse_path - parse_url |
過濾器 (OR) |
一個帶有 OR 條件的範例規則。 該事件可符合任一條件。 |
濾波器 (或) 範例 | 濾波器 (或) 範例 |
-
字串運算元 - 在 |
| 巢狀濾波器 | 一個帶有巢狀過濾條件的範例規則。 該規則包含了該 MatchesFilter 陳述,且該陳述也包含過濾條件。 |
巢狀濾波器範例 | 巢狀濾波器範例 |
-
使用 KQL 函式來加速分析 - 用參數化函式豐富 Windows 安全事件 - 加入 - 其中 |
| 作用中清單(查閱) | 一個使用該 InActiveList 陳述的範例查找規則。 |
作用中清單(查詢)範例 | 作用中清單(查詢)範例 | - 觀察清單相當於活躍清單功能。 了解更多關於 觀察清單的資訊。 - 其他實作查詢的方法 |
| 相關性(比對) | 一個範例規則,針對一組基事件定義條件,使用以下 Matching Event 陳述。 |
相關性 (匹配) 範例 | 相關性 (匹配) 範例 | join 運算子: - 加入 - 以時間窗口連接 - 洗牌 - 播出 - 聯合 定義陳述: - 設 彙總: - make_set - make_list - make_bag - bag_pack |
| 相關性(時間視窗) | 一個範例規則,針對一組基事件定義條件,使用 Matching Event 陳述,並使用 Wait time 過濾條件。 |
時間窗 (相關性) 例子 | 時間窗 (相關性) 例子 |
-
加入 - Microsoft Sentinel 規則與 join 陳述 |
篩選 (AND) 範例:ArcSight
這裡有一條包含 AND ArcSight 條件的範例過濾規則。
篩選 (AND) 範例:KQL
這是含有 AND 條件的 KQL 篩選規則。
SecurityEvent
| where EventID == 4728
| where SubjectUserName =~ "AutoMatedService"
| where isnotempty(SubjectDomainName)
此規則假設 Azure 監視代理程式 (AMA) 會收集 Windows 安全性事件。 因此,該規則使用 Microsoft Sentinel SecurityEvent 資料表。
請參考以下最佳實務:
- 為了優化你的查詢,盡量避免使用大小寫不區分的運算子:
=~。 - 如果值不區分大小寫,請使用
==。 - 先從會篩掉最多資料的
where條件式開始排序篩選器。
篩選 (OR) 範例:ArcSight
這裡有一條包含 OR ArcSight 條件的範例過濾規則。
篩選 (OR) 範例:KQL
以下是在 KQL 中使用 OR 條件撰寫篩選規則的幾種方式。
作為第一個選項,請使用以下 in 陳述:
SecurityEvent
| where SubjectUserName in
("Adm1","ServiceAccount1","AutomationServices")
第二個選項是,使用以下 or 陳述:
SecurityEvent
| where SubjectUserName == "Adm1" or
SubjectUserName == "ServiceAccount1" or
SubjectUserName == "AutomationServices"
雖然兩種選項在效能上相同,但我們推薦第一個選項,因為它更易閱讀。
巢狀濾波器範例:ArcSight
這裡有一個 ArcSight 中巢狀過濾規則的範例。
這是關於 /All Filters/Soc Filters/Exclude Valid Users 過濾器的規則。
巢狀濾波器範例:KQL
以下是在 KQL 中使用 OR 條件撰寫篩選規則的幾種方式。
作為第一個選項,使用帶有 where 以下陳述的直接過濾器:
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName) or
isnotempty(TargetDomainName)
| where SubjectUserName !~ "AutoMatedService"
第二個選項是使用 KQL 函數:
將以下查詢存為帶有
ExcludeValidUsers別名的 KQL 函式。SecurityEvent | where EventID == 4728 | where isnotempty(SubjectDomainName) | where SubjectUserName =~ "AutoMatedService" | project SubjectUserName請使用以下查詢來篩選
ExcludeValidUsers別名。SecurityEvent | where EventID == 4728 | where isnotempty(SubjectDomainName) or isnotempty(TargetDomainName) | where SubjectUserName !in (ExcludeValidUsers)
第三種選擇是使用參數函數:
建立一個參數函式,並將
ExcludeValidUsers作為其名稱和別名。定義函數的參數。 例如:
Tbl: (TimeGenerated:datetime, Computer:string, EventID:string, SubjectDomainName:string, TargetDomainName:string, SubjectUserName:string)該
parameter函數有以下查詢:Tbl | where SubjectUserName !~ "AutoMatedService"執行以下查詢以呼叫參數函式:
let Events = ( SecurityEvent | where EventID == 4728 ); ExcludeValidUsers(Events)
第四個選項是使用 join 以下函數:
let events = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName)
or isnotempty(TargetDomainName)
);
let ExcludeValidUsers = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName)
| where SubjectUserName =~ "AutoMatedService"
);
events
| join kind=leftanti ExcludeValidUsers on
$left.SubjectUserName == $right.SubjectUserName
Considerations
- 我們建議你使用帶有
where陳述句的直接過濾器, (第一個選項) 因為它簡單易用。 為了獲得最佳效能,請避免使用join(第四個選項)。 - 為了優化你的查詢,盡量避免使用
=~!~不區分大小寫的操作員。 如果值不區分大小寫,請使用==與!=運算子。
作用中清單 (查詢) 範例:ArcSight
這是一個 ArcSight 中的作用中清單(查閱)規則。
主動清單 (查詢) 範例:KQL
Important
在執行此查詢前,請先在Microsoft Sentinel建立Cyber-Ark 例外帳戶監控清單,並包含帳戶欄位。
以下 KQL 查詢使用 Cyber-Ark 例外帳戶監控清單來篩選查詢結果。
let Activelist=(
_GetWatchlist('Cyber-Ark Exception Accounts')
| project Account );
CommonSecurityLog
| where DestinationUserName in (Activelist)
| where DeviceVendor == "Cyber-Ark"
| where DeviceAction == "Get File Request"
| where DeviceCustomNumber1 != ""
| project DeviceAction, DestinationUserName,
TimeGenerated,SourceHostName,
SourceUserName, DeviceEventClassID
將篩選器排序時,先從可篩掉最多資料的 where 陳述式開始。
關聯(比對)範例:ArcSight
這裡有一個 ArcSight 規則範例,用 the 陳述句來定義針對一組基礎事件 Matching Event 的條件。
關聯(比對)範例:KQL
以下 KQL 範例展示了如何在 Microsoft Sentinel 中實作 ArcSight 匹配相關規則。
let event1 =(
SecurityEvent
| where EventID == 4728
);
let event2 =(
SecurityEvent
| where EventID == 4729
);
event1
| join kind=inner event2
on $left.TargetUserName==$right.TargetUserName
最佳做法
- 為了優化你的查詢,請確保較小的表格位於函式的
join左側。 - 如果表格左側相對較小 (最多可達 100 K 紀錄) ,則可增加
hint.strategy=broadcast資料以提升效能。
關聯(時間窗)範例:ArcSight
這裡有一個範例 ArcSight 規則,用 陳述 Matching Event 句定義一組基礎事件的條件,並使用 Wait time 過濾條件。
關聯 (時間窗) 範例:KQL
以下 KQL 範例實作了一個與 ArcSight 範例相當的時間窗相關規則。
let waittime = 10m;
let lookback = 1d;
let event1 = (
SecurityEvent
| where TimeGenerated > ago(waittime+lookback)
| where EventID == 4728
| project event1_time = TimeGenerated,
event1_ID = EventID, event1_Activity= Activity,
event1_Host = Computer, TargetUserName,
event1_UPN=UserPrincipalName,
AccountUsedToAdd = SubjectUserName
);
let event2 = (
SecurityEvent
| where TimeGenerated > ago(waittime)
| where EventID == 4729
| project event2_time = TimeGenerated,
event2_ID = EventID, event2_Activity= Activity,
event2_Host= Computer, TargetUserName,
event2_UPN=UserPrincipalName,
AccountUsedToRemove = SubjectUserName
);
event1
| join kind=inner event2 on TargetUserName
| where event2_time - event1_time < lookback
| where tolong(event2_time - event1_time ) >=0
| project delta_time = event2_time - event1_time,
event1_time, event2_time,
event1_ID,event2_ID,event1_Activity,
event2_Activity, TargetUserName, AccountUsedToAdd,
AccountUsedToRemove,event1_Host,event2_Host,
event1_UPN,event2_UPN
聚合範例:ArcSight
以下是一個 ArcSight 規則範例,包含聚合設定:10 分鐘內符合條件三次。
聚合範例:KQL
以下 KQL 查詢說明如何利用聚合來偵測三個或以上的匹配。
SecurityEvent
| summarize Count = count() by SubjectUserName,
SubjectDomainName
| where Count >3