將 Splunk 偵測規則遷移至 Microsoft Sentinel

Splunk 偵測規則是安全資訊與事件管理 (SIEM) 元件,相當於 Microsoft Sentinel 中的分析規則。 本文說明用來識別、比較及遷移 Splunk 偵測規則至 Microsoft Sentinel 的概念。 將 Splunk 偵測規則遷移至 Microsoft Sentinel 的最佳方式,是從SIEM 遷移體驗開始;此體驗可識別現成可用 (OOTB) 的分析規則,以進行自動轉換。

如果你想遷移你的 Splunk Observability 部署,請進一步了解如何從 Splunk 遷移到 Azure 監視器 日誌。

稽核規則

Microsoft Sentinel 利用機器學習分析來創造高保真度且可執行的事件。 你現有的一些 Splunk 偵測在 Microsoft Sentinel 中可能存在冗餘,所以不要盲目遷移所有 Splunk 偵測。 在確認現有偵測規則時,請檢視以下規則稽核考量。

  • 務必選擇適合規則遷移的使用案例,考量業務優先順序與效率。
  • 請確認你了解 Microsoft Sentinel 的規則類型。
  • 確認你是否理解 規則術語。
  • 檢視過去6到12個月內沒有警示的過時規則,判斷它們是否仍然適用。
  • 消除你經常忽略的低階威脅或警報。
  • Microsoft Sentinel Analytics 要求該資料型別必須在 Log Analytics 工作空間中存在,才能啟用規則。 確認你所需的資料來源是否已連接,並檢視你的資料連接方式。 重新檢視資料收集的討論,確保你計畫偵測的應用案例中資料深度與廣度。 接著利用 SIEM 遷移經驗 ,確保資料來源被正確映射。

遷移規則

在確定要遷移的 Splunk 偵測後,請檢視以下遷移流程的考量:

  • 比較 Microsoft Sentinel 現有的 OOTB 分析規則功能與您目前的使用案例。 利用 SIEM 遷移體驗 ,看看哪些 Splunk 偵測會自動轉換成 OOTB 範本。
  • 轉換不符合 OOTB 分析規則的偵測結果。 自動轉換 Splunk 偵測的最佳方式是使用 SIEM 遷移體驗。
  • 透過探索社群資源,如 SOC Prime 威脅偵測市場,發掘更多適合您使用情境的演算法。
  • 如果內建規則無法使用或無法自動翻譯,請手動翻譯偵測結果。 建立新的 KQL 查詢並檢視 規則映射。

欲了解更多資訊,請參閱 遷移偵測規則的最佳實務。

規則遷移步驟

在遷移到 Microsoft Sentinel 時,請依照以下步驟驗證、轉譯及測試每個 Splunk 偵測規則。

  1. 確認你為每條想要遷移的規則都設置了測試系統。

    1. 準備一套為遷移規則的驗證流程,包括完整的測試情境和腳本。

    2. 確保你的團隊有可用的資源 來測試你遷移的規則。

    3. 確認你已連接所需的資料來源, 並檢視你的資料連接方式。

  2. 確認你的偵測是否以 Microsoft Sentinel 的 OOTB 範本形式提供:

    • 利用 SIEM 遷移體驗 自動化翻譯與安裝 OOTB 範本。

      欲了解更多資訊,請參閱 使用 SIEM 遷移體驗。

    • 如果你的使用案例未反映在偵測中,請用 OOTB 規則範本為你自己的工作區建立規則。

      在 Microsoft Sentinel 中,請前往內容中心。

      篩選 內容類型 以取得 分析規則 範本。

      尋找並 安裝/更新 每個對應的內容集線器解決方案或獨立分析規則範本。

      欲了解更多資訊,請參閱「 開箱即用偵測威脅」。

    • 如果你遇到 Microsoft Sentinel OOTB 規則未涵蓋的偵測,請先試用 SIEM 遷移體驗以實現自動轉換。

    • 如果 OOTB 規則和 SIEM 遷移都無法完全轉換偵測,請手動建立規則。 請依照以下步驟建立你的規則:

      1. 請確定你想在規則中使用的資料來源。 透過建立資料來源與資料表的對應表,來辨識你想查詢的 Microsoft Sentinel 資料表。

      2. 識別你想在規則中使用的資料中的任何屬性、欄位或實體。

      3. 明確你的規則標準和邏輯。 在確定你的規則條件和邏輯時,可以考慮使用規則範本作為如何構建 KQL 查詢的範例。

        考慮篩選器、相關規則、活躍清單、參考集、監控清單、偵測異常、聚合等等。 你可以利用舊有 SIEM 提供的參考資料,了解如何 最佳地映射你的查詢語法。

      4. 先辨識觸發條件和規則動作,然後構建並檢視你的 KQL 查詢。 在檢視你的查詢時,請考慮 KQL 的優化指導資源。

  3. 針對你所有相關的使用情境來測試這個規則。 如果沒有達到預期結果,請檢視並編輯 KQL 並再次測試。

  4. 當你滿意時,即可視為該規則已完成遷移。 根據需要,為你的規則動作建立一套劇本。 如需詳細資訊,請參閱 在 Microsoft Sentinel 中使用劇本自動化威脅回應。

了解更多關於分析規則的資訊:

比較規則術語

以下比較表說明了 Microsoft Sentinel 中基於 KQL 的規則如何對應於 Splunk 中基於 SPL 的偵測。

Splunk Microsoft Sentinel
規則類型 • 已排定
• 即時
• 排定查詢
• 融合
• Microsoft 安全性
• 機器學習 (機器學習) 行為分析
Criteria 在 SPL 中定義 在 KQL 中定義
觸發條件 • 結果數量
• 主機數量
• 資料來源數量
• 客製化
門檻:查詢結果數量
動作 • 新增至已觸發的警示
• 日誌事件
• 可查詢的輸出結果
• 以及更多
• 建立警報或事件
• 與 Logic Apps 整合

繪製並比較規則範例

利用本節的 SPL 轉 KQL 範例表與範例,在不同情境下比較並對應 Splunk 與 Microsoft Sentinel 的規則。

比較常見的 Splunk 搜尋指令與 KQL 範例

此表將常見的 SPL 搜尋指令對應至 Microsoft Sentinel 中的 KQL 對應指令。

SPL 命令 描述 KQL 運算子 KQL 範例
chart/ timechart 以表格形式傳回結果,用於繪製時間序列圖表。 渲染運算元 … | render timechart
dedup 移除符合指定條件的後續結果。 • 獨特
• 摘要
… | summarize by Computer, EventID
eval 計算運算式。 了解 常見 eval 指令。 延伸 T | extend duration = endTime - startTime
fields 移除搜尋結果中的欄位。 • 專案
• 專案外出
T | project cost=price*quantity, price
head/tail 回傳第一個或最後一個 N 個結果。 頂端 T | top 5 by Name desc nulls last
lookup 從外部來源加欄位值。 • 外部資料
• 查詢
查找指令 KQL 範例
rename 重新命名欄位。 使用萬用字元指定多個欄位。 專案更名 T | project-rename new_column_name = column_name
rex 使用正則表達式指定群名稱以萃取欄位。 符合正則表達式 … | where field matches regex "^addr.*"
search 篩選結果至符合搜尋表達式的結果。 搜尋 search "X"
sort 依指定欄位排序搜尋結果。 分類 T | sort by strlen(country) asc, price desc
stats 提供統計資料,可依欄位分組。 了解更多 常見的統計指令。 總結 統計指令 KQL 範例
mstats 類似統計,但用於指標而非事件。 總結 Mstats 指令 KQL 範例
table 指定結果集中應保留哪些欄位,並以表格格式保留資料。 專案 T | project columnA, columnB
top/rare 顯示欄位的最常見或最不常見的值。 頂端 T | top 5 by Name desc nulls last
transaction 將搜尋結果分組為交易。

交易指令 SPL 範例
範例: row_window_session 交易指令 KQL 範例
eventstats 它會從你活動中的欄位產生摘要統計,並將這些統計資料儲存在新欄位。

SPL 範例
範例:
• 加入
• make_list
• MV-擴展
KQL 範例
streamstats 求出欄位的累積和。

SPL 範例:
... | streamstats sum(bytes) as bytes _ total \| timechart
row_cumsum ...\| serialize cs=row_cumsum(bytes)
anomalydetection 找出指定欄位中的異常現象。

SPL 範例
series_decompose_anomalies() KQL 範例
where 使用 eval 表達式篩選搜尋結果。 用於比較兩個不同的欄位。 哪裡 T | where fruit=="apple"

lookup 命令:KQL 範例

這個 KQL 範例用 externaldata 來複製 SPL lookup 模式,透過過濾使用者與外部資料來源。

Users 
| where UserID in ((externaldata (UserID:string) [
@"https://storageaccount.blob.core.windows.net/storagecontainer/users.txt" 
h@"?...SAS..." // Secret token to access the blob 
])) | ... 

stats 命令:KQL 範例

這個 KQL 範例用 summarize 來計算交易並加總,依水果和月份分組。

Sales 
| summarize NumTransactions=count(), 
Total=sum(UnitPrice * NumUnits) by Fruit, 
StartOfMonth=startofmonth(SellDateTime) 

mstats 命令:KQL 範例

此 KQL 範例將指標值分組到價格區間,並計算每個區間的紀錄。

T | summarize count() by price_range=bin(price, 10.0) 

transaction command:SPL 範例

此 SPL 範例依活動 ID 將相關的開始與停止事件合併為單一交易。

sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration

transaction 命令:KQL 範例

此 KQL 範例透過將共享活動 ID 上的開始與停止事件結合並計算持續時間,來複製 SPL 交易群組。

let Events = MyLogTable | where type=="Event";
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime, 
Duration = StopTime – StartTime

使用 row_window_session() 來計算序列化資料列集中欄位的工作階段起始值。

...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))

eventstats command:SPL 範例

此 SPL 範例計算每類別一分鐘的事件計數,並用 附加每個時間區的總數 eventstats。

… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time

eventstats 命令:KQL 範例

以下是使用 join 陳述式的範例:

let binSize = 1h;
let detail = SecurityEvent 
| summarize detail_count = count() by EventID,
tbin = bin(TimeGenerated, binSize);
let summary = SecurityEvent
| summarize sum_count = count() by 
tbin = bin(TimeGenerated, binSize);
detail 
| join kind=leftouter (summary) on tbin 
| project-away tbin1

以下是使用 make_list 陳述式的範例:

let binSize = 1m;
SecurityEvent
| where TimeGenerated >= ago(24h)
| summarize TotalEvents = count() by EventID, 
groupBin =bin(TimeGenerated, binSize)
|summarize make_list(EventID), make_list(TotalEvents), 
sum(TotalEvents) by groupBin
| mvexpand list_EventID, list_TotalEvents

anomalydetection command:SPL 範例

此 SPL 範例偵測了 10 年期間歷史收盤價資料中的異常。

sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price

anomalydetection 命令:KQL 範例

這個 KQL 範例使用時間序列分析功能,偵測七天回顧期內身障者登入趨勢的異常。

let LookBackPeriod= 7d;
let disableAccountLogon=SignIn
| where ResultType == "50057"
| where ResultDescription has "account is disabled";
disableAccountLogon
| make-series Trend=count() default=0 on TimeGenerated 
in range(startofday(ago(LookBackPeriod)), now(), 1d)
| extend (RSquare,Slope,Variance,RVariance,Interception,
LineFit)=series_fit_line(Trend)
| extend (anomalies,score) = 
series_decompose_anomalies(Trend)

比較常見的 Splunk eval 指令與 KQL 的對應指令

此表將常見的 SPL eval 函式映射到 Microsoft Sentinel 中的 KQL 對應函式。

SPL 命令 描述 SPL 範例 KQL 指令 KQL 範例
abs(X) 回傳 X 的絕對值。 abs(number) abs() abs(X)
case(X,"Y",…) 接受成對的 X 和 Y 引數,其中 X 引數為布林運算式。 當將值值為 TRUE時,參數返回相應 Y 的參數。 SPL 範例 case KQL 範例
ceil(X) 數字 X 的上限整數。 ceil(1.9) ceiling() ceiling(1.9)
cidrmatch("X",Y) 識別屬於特定子網的 IP 位址。 cidrmatch
("123.132.32.0/25",ip)
• ipv4_is_match()
• ipv6_is_match ()
ipv4_is_match('192.168.1.1', '192.168.1.255')
== false
coalesce(X,…) 回傳第一個不是空值的值。 coalesce(null(), "Returned val", null()) coalesce() coalesce(tolong("not a number"),
tolong("42"), 33) == 42
cos(X) 計算 X 的餘弦。 n=cos(0) cos() cos(X)
exact(X) 使用雙精度浮點運算來計算表達式 X。 exact(3.14*num) todecimal() todecimal(3.14*2)
exp(X) 返回 eX。 exp(3) exp() exp(3)
if(X,Y,Z) 若 X 評估為 TRUE,結果為第二個參數 Y。 若 X 評估為 FALSE,則結果 評估為第三個參數 Z。 if(error==200,
"OK", "Error")
iff() KQL 範例
isbool(X) 如果 TRUE 是布林值,則傳回 X。 isbool(field) • iff()
• gettype
iff(gettype(X) =="bool","TRUE","FALSE")
isint(X) 若為TRUE整數,則回退X。 isint(field) • iff()
• gettype
KQL 範例
isnull(X) 若TRUE為空,則回傳X。 isnull(field) isnull() isnull(field)
isstr(X) 若為字串,TRUE則回傳X。 isstr(field) • iff()
• gettype
KQL 範例
len(X) 此函數回傳字串 X的字元長度。 len(field) strlen() strlen(field)
like(X,"y") 當且僅當 TRUE 符合 X 中的 SQLite 模式時,回傳 Y。 like(field, "addr%") • has
• contains
• startswith
• 符合正規表示式
KQL 範例
log(X,Y) 以第二個參數X為基礎,回傳第一個參數Y的日誌。 的 Y 預設值為 10。 log(number,2) • log
• log2
• log10
log(X)

log2(X)

log10(X)
lower(X) 傳回 X 的小寫值。 lower(username) 托洛爾 tolower(username)
ltrim(X,Y) 傳回從左側修剪掉參數 X 中指定字元後的 Y。 Y 的預設輸出為空格和定位字元。 ltrim(" ZZZabcZZ ", " Z") trim_start() trim_start(“ ZZZabcZZ”,” ZZZ”)
match(X,Y) 若 X 符合正則表達式模式 Y,則回傳。 match(field, "^\d{1,3}.\d$") matches regex … | where field matches regex @"^\d{1,3}.\d$")
max(X,…) 回傳欄位的最大值。 max(delay, mydelay) • max()
• arg_max()
… | summarize max(field)
md5(X) 回傳字串值 X的 MD5 雜湊值。 md5(field) hash_md5 hash_md5("X")
min(X,…) 回傳欄位中的最小值。 min(delay, mydelay) • min_of()
• min()
• arg_min
KQL 範例
mvcount(X) 回傳 X 值的數量(總數)。 mvcount(multifield) dcount …| summarize dcount(X) by Y
mvfilter(X) 根據布林 X 表達式過濾多值欄位。 mvfilter(match(email, "net$")) mv-apply KQL 範例
mvindex(X,Y,Z) 回傳多值 X 引數中從起始位置(從零開始)Y 到 Z(選用)的子集。 mvindex( multifield, 2) array_slice array_slice(arr, 1, 2)
mvjoin(X,Y) 給定一個多值欄位X和字串分隔符Y,並使用 X將各個Y值連接起來。 mvjoin(address, ";") strcat_array KQL 範例
now() 回傳目前時間,以 Unix 時間表示。 now() now() now()

now(-2d)
null() 不接受引數,並回傳 NULL。 null() 無效 null
nullif(X,Y) 包含兩個參數, X 且 Y,若參數不同則返回 X 。 否則,返回 NULL。 nullif(fieldA, fieldB) iff iff(fieldA==fieldB, null, fieldA)
random() 回傳一個介於 0 到 2147483647之間的偽隨機數。 random() rand() rand()
relative_ time(X,Y) 給定紀元時間 X 和相對時間指定器 Y,回傳將 Y 套用至 X 後的紀元時間值。 relative_time(now(),"-1d@d") Unix 時間 KQL 範例
replace(X,Y,Z) 回傳一個字串,此字串是將字串 Z 中每個符合正則表達式字串 Y 的項目替換為字串 X 後所形成的結果。 傳回月份和日期數字交換後的日期。
例如,輸入的 4/30/2015 輸出為 30/4/2009:

replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/")
replace() KQL 範例
round(X,Y) 傳回將 X 四捨五入至 Y 所指定小數位數的結果。 預設是四捨五入為整數。 round(3.5) round round(3.5)
rtrim(X,Y) 傳回X,其中 Y 的字元是從右側修剪的結果。 若未指定 Y,則會修剪空格和定位字元。 rtrim(" ZZZZabcZZ ", " Z") trim_end() trim_end(@"[ Z]+",A)
searchmatch(X) 若事件與搜尋字串TRUE相符,則回傳X。 searchmatch("foo AND bar") iff() iff(field has "X","Yes","No")
split(X,"Y") 以多值欄位回傳 X ,並以分隔符 Y分割。 split(address, ";") split() split(address, ";")
sqrt(X) 傳回 X 的平方根。 sqrt(9) sqrt() sqrt(9)
strftime(X,Y) 回傳以 X 指定的格式呈現的紀元時間值 Y。 strftime(_time, "%H:%M") format_datetime() format_datetime(time,'HH:mm')
strptime(X,Y) 給定一個由字串 X表示的時間,回傳從格式 Y中解析出來的值。 strptime(timeStr, "%H:%M") format_datetime () KQL 範例
substr(X,Y,Z) 針對X (選用) 字元,傳回來自開始位置 (以一為基礎) Y的子字串欄位Z。 substr("string", 1, 3) substring() substring("string", 0, 3)
time() 能以微秒級解析度回傳牆壁時鐘時間。 time() format_datetime() KQL 範例
tonumber(X,Y) 將輸入字串 X 轉換為數字, (Y 可選的預設值為) 10 定義要轉換的數字底邊。 tonumber("0A4",16) toint() toint("123")
tostring(X,Y) 描述 SPL 範例 tostring() tostring(123)
typeof(X) 回傳欄位類型的字串表示。 typeof(12) gettype() gettype(12)
urldecode(X) 回傳已解碼的網址 X 。 SPL 範例 url_decode KQL 範例

case(X,"Y",…) SPL 範例

此 SPL 範例會根據 HTTP 錯誤碼回傳不同的訊息字串。

case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")

case(X,"Y",…) KQL 範例

這個 KQL 範例用 case() 來根據錯誤碼值指派訊息。

T
| extend Message = case(error == 404, "Not found", 
error == 500,"Internal Server Error", "OK") 

if(X,Y,Z) KQL 範例

這個 KQL 範例用 iif() 來標示時間戳記是否落在當前日期。

iif(floor(Timestamp, 1d)==floor(now(), 1d), 
"today", "anotherday")

isint(X) KQL 範例

此 KQL 範例透過使用 gettype 和 iif來檢查是否有X整數相容型別。

iif(gettype(X) =="long","TRUE","FALSE")

isstr(X) KQL 範例

此 KQL 範例透過 X 使用 gettype 和 iif來檢查 是否為字串值。

iif(gettype(X) =="string","TRUE","FALSE")

like(X,"y") 範例

這些 KQL 範例展示了幾個可用來複製 SPL like 模式匹配的字串匹配運算子。

… | where field has "addr"

… | where field contains "addr"

… | where field startswith "addr"

… | where field matches regex "^addr.*"

min(X,…) KQL 範例

這些 KQL 範例展示了利用 min_of、 min、 和 arg_min計算最小值的不同方法。

min_of (expr_1, expr_2 ...)

…|summarize min(expr)

…| summarize arg_min(Price,*) by Product

mvfilter(X) KQL 範例

這個 KQL 範例用 mv-apply 來過濾並減少多值內容,類似於 SPL mvfilter 函數。

T | mv-apply Metric to typeof(real) on 
(
 top 2 by Metric desc
)

mvjoin(X,Y) KQL 範例

這個 KQL 範例是用 strcat_array 自訂分隔符將陣列元素合併成單一字串。

strcat_array(dynamic([1, 2, 3]), "->")

relative time(X,Y) KQL 範例

此 KQL 範例將 datetime 值轉換為 Unix 的紀元時間以進行相對時間計算。

let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s 
};

replace(X,Y,Z) KQL 範例

這個 KQL 範例使用 replace() 正則表達式模式來交換日期字串中的月份和日子部分。

replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)

strptime(X,Y) KQL 範例

此 KQL 範例僅 format_datetime 顯示 datetime 值的小時與分鐘。

format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')

time() KQL 範例

此 KQL 範例將 datetime 值格式化為顯示小時、分鐘與秒的時間字串。

format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')

tostring(X,Y) 描述

SPL tostring(X,Y) 函式將數值轉換為字串,並支援多種格式化選項。 它會回傳一個欄位值 X ,作為一個字串。

  • 若 的 X 值為數字, X 則會被重新格式化為字串值。
  • 若 X 為布林值, X 則被重新格式化為 TRUE 或 FALSE。
  • 若 X 為數字,則第二個引數 Y 為選填,且可以是 hex(將 X 轉換為十六進位)、commas(將 X 格式化為帶有逗號和兩位小數的格式),或 duration(將 X 從以秒為單位的時間格式轉換為可讀的時間格式:HH:MM:SS)。
tostring(X,Y) SPL 範例

此 tostring SPL 範例回傳:

foo=615 and foo2=00:10:15:

… | eval foo=615 | eval foo2 = tostring(
foo, "duration")

urldecode(X) SPL 範例

此 SPL 範例將 URL 編碼的字串解碼回原始形式。

urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")

比較常見的 Splunk stats 指令與 KQL 的對應指令

此表格將常見的 SPL stats 聚合函式映射到 Microsoft Sentinel 中的 KQL 對應函式。

SPL 命令 描述 KQL 指令 KQL 範例
avg(X) 回傳域 X的值平均值。 avg() avg(X)
count(X) 返回場 X的出現次數 。 為了表示特定欄位值以匹配,格式化 X 為 eval(field="value")。 count() summarize count()
dc(X) 回傳欄位 X 的相異值數量。 dcount() …\| summarize countries=dcount(country) by continent
earliest(X) 回傳時間上最早出現的 X值。 arg_min () … \| summarize arg_min(TimeGenerated, *) by X
latest(X) 回傳時間順序上最新看到的 X值。 arg_max () … \| summarize arg_max(TimeGenerated, *) by X
max(X) 返回欄位 X的最大值。 若 的 X 值非數字化,則透過字母順序找到最大值。 max() …\| summarize max(X)
median(X) 返回場中 X最中間的值。 百分位 () …\| summarize percentile(X, 50)
min(X) 回傳欄位 X的最小值。 若 的 X 值非數字化,則透過字母順序找到最小值。 min() …\| summarize min(X)
mode(X) 返回欄位 X的最常見值。 頂尖選手 () …\| top-hitters 1 of Y by X
perc(Y) 返回欄位X的百分位Y數值。 例如,perc5(total) 會傳回欄位 total 的第五百分位值。 百分位 () …\| summarize percentile(Y, 5)
range(X) 返回場 X的最大值與最小值之間的差值。 射程 () range(1, 3)
stdev(X) 回傳場 X的樣本標準差。 STDEV stdev()
stdevp(X) 傳回欄位 X 的母體標準差。 STDEVP () stdevp()
sum(X) 返回域 X的各值總和。 總 () sum(X)
sumsq(X) 返回域 X的各值平方和。
values(X) 會以多值項目形式回傳欄位 X 的所有相異值清單。 數值的順序是按字母順序排列的。 make_set () …\| summarize r = make_set(X)
var(X) 回傳場 X的樣本變異數。 變異數 variance(X)

後續步驟

你學會了如何識別、比較並將 Splunk 偵測規則與 Microsoft Sentinel 分析規則對應。 繼續移轉您的 SOAR 自動化作業。