Splunk 検出ルールをMicrosoft Sentinelに移行する

Splunk 検出ルールは、Microsoft Sentinelの分析ルールと比較するセキュリティ情報とイベント管理 (SIEM) コンポーネントです。 この記事では、Splunk検出ルールをMicrosoft Sentinelに識別、比較、移行するために用いられる概念について説明します。 Splunk 検出ルールをMicrosoft Sentinelに移行する最善の方法は、SIEM 移行エクスペリエンスから始めて、自動翻訳の既定の (OOTB) 分析ルールを識別することです。

Splunk Observability デプロイを移行する場合は、Splunk から Azure Monitor Logs に移行する方法の詳細をご覧ください。

監査ルール

Microsoft Sentinelでは、機械学習分析を使用して、再現性の高い実用的なインシデントを作成します。 既存のSplunk検出の一部はMicrosoft Sentinelで冗長になる可能性があるため、すべてのSplunk検出を盲目的に移行しないでください。 既存の検出規則を特定するときは、次のルール監査に関する考慮事項を確認します。

  • ビジネスの優先順位と効率性を考慮して、ルールの移行を正当化するユース ケースを必ず選択してください。
  • Microsoft Sentinel のルールの種類を理解していることを確認します。
  • ルールの用語を理解していることを確認します。
  • 過去 6 ~ 12 か月間アラートがない古いルールを確認し、まだ関連性があるかどうかを判断します。
  • 日常的に無視する低レベルの脅威やアラートを排除します。
  • Microsoft Sentinel Analytics では、ルールが有効になる前に、データ型が Log Analytics ワークスペースに存在する必要があります。 必要なデータ ソースが接続されていることを確認し、データ接続方法を確認します。 データ収集の会話を見直して、検出する予定のユース ケース全体でデータの深さと幅を確保します。 次に、 SIEM 移行エクスペリエンス を使用して、データ ソースが適切にマップされていることを確認します。

ルールを移行する

移行する Splunk 検出を特定したら、次の移行プロセスに関する考慮事項を確認します。

  • Microsoft Sentinelの OOTB 分析ルールの既存の機能を現在のユース ケースと比較します。 SIEM 移行エクスペリエンスを使用して、OOTB テンプレートに自動的に変換される Splunk 検出を確認します。
  • OOTB 分析ルールに合わない検出を変換します。 Splunk 検出を自動的に変換する最善の方法は、 SIEM 移行エクスペリエンスを使用することです。
  • SOC Prime Threat Detection Marketplace などのコミュニティ リソースを探索することで、ユース ケースのアルゴリズムをさらに見つけることができます。
  • 組み込みのルールが使用できない場合、または自動的に変換されない場合は、検出を手動で翻訳します。 新しい KQL クエリを作成し、 ルールマッピングを確認します。

詳細については、 検出ルールを移行するためのベスト プラクティスに関するページを参照してください。

ルールの移行手順

Microsoft Sentinelへの移行中に各 Splunk 検出ルールを検証、変換、テストするには、次の手順に従います。

  1. 移行する各ルールに対してテスト システムが用意されていることを確認します。

    1. 完全なテスト シナリオやスクリプトなど、移行されたルールの検証プロセスを準備します。

    2. 移行されたルールをテストするためにチームに役立つリソースがあることを確認します。

    3. 必要なデータ ソースが接続されていることを確認し、 データ接続方法を確認します。

  2. 検出がMicrosoft Sentinelで OOTB テンプレートとして使用できるかどうかを確認します。

    • SIEM 移行エクスペリエンスを使用して 、OOTB テンプレートの翻訳とインストールを自動化します。

      詳細については、「 SIEM 移行エクスペリエンスを使用する」を参照してください。

    • ユース ケースが検出に反映されていない場合は、OOTB ルール テンプレートを使用して独自のワークスペースのルールを作成します。

      Microsoft Sentinelで、コンテンツ ハブに移動します。

      Analytics ルール テンプレートのコンテンツ タイプをフィルター処理します。

      対応する各コンテンツ ハブ ソリューションまたはスタンドアロン分析ルール テンプレートを検索して インストール/更新 します。

      詳細については、「すぐに使える脅威の検出」を参照してください。

    • Microsoft Sentinelの OOTB 規則でカバーされていない検出がある場合は、最初に自動翻訳のために SIEM 移行エクスペリエンスを試してください。

    • OOTB ルールも SIEM 移行も検出を完全に変換しない場合は、ルールを手動で作成します。 ルールを作成するには、次の手順に従います。

      1. ルールで使用するデータ ソースを特定します。 データ ソースとデータ テーブルの間にマッピング テーブルを作成して、クエリを実行するテーブルMicrosoft Sentinelを特定します。

      2. ルールで使用するデータ内の属性、フィールド、またはエンティティを特定します。

      3. ルールの条件とロジックを特定します。 ルールの条件とロジックを特定する場合は、KQL クエリを構築する方法のサンプルとしてルール テンプレートを使用することを検討してください。

        フィルター、相関ルール、アクティブ リスト、参照セット、ウォッチリスト、検出異常、集計などを検討します。 従来の SIEM によって提供される参照を使用して、 クエリ構文を最適にマップする方法を理解できます。

      4. トリガー条件とルール アクションを特定し、KQL クエリを構築して確認します。 クエリを確認するときは、KQL 最適化ガイダンス リソースを検討してください。

  3. 関連する各ユース ケースでルールをテストします。 期待される結果が得られない場合は、KQL を確認して編集し、もう一度テストします。

  4. 問題ないと判断したら、そのルールは移行済みと見なしてください。 必要に応じて、ルール アクションのプレイブックを作成します。 詳細については、「Microsoft Sentinelのプレイブックを使用して脅威対応を自動化する」を参照してください。

分析ルールの詳細については、以下を参照してください。

  • 脅威を検出するためのカスタム分析ルールを作成しますアラートのグループ化を使用して、特定の期間内に発生するアラートをグループ化することでアラートの疲労を軽減します。
  • SOC エンジニアが調査中に追跡する証拠の一部としてエンティティを定義できるように、Microsoft Sentinelのエンティティにデータ フィールドをマップします。 また、エンティティ マッピングにより、SOC アナリストは、時間と労力を削減できる直感的な [調査グラフ] (investigation-cases.md#use-the-investigation-graph-to-deep-dive) を利用できます。
  • イベント、アラート、およびインシデント プレビュー ウィンドウの特定のインシデントに関連付けられているブックマークを表示するために証拠を使用する方法の例として、UEBA データを使用してインシデントを調査します。
  • Kusto 照会言語 (KQL)。これを使用して、Log Analytics データベースに読み取り専用要求を送信してデータを処理し、結果を返すことができます。 KQL は、Microsoft Defender for EndpointApplication Insights などの他の Microsoft サービスでも使用されます。

ルールの用語を比較する

次の比較表では、Microsoft Sentinelの KQL ベースのルールが Splunk の SPL ベースの検出にどのように対応するかを明確にしています。

Splunk Microsoft Sentinel
規則の種類 •予定済み
•リアルタイム
• スケジュールされたクエリ
•融合
• Microsoft セキュリティ
• 機械学習 (ML) による行動分析
基準 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 個の結果を返します。 top T | top 5 by Name desc nulls last
lookup 外部ソースからフィールド値を追加します。 外部データ
ルックアップ
ルックアップコマンドKQLの例
rename フィールドの名前を変更します。 ワイルドカードを使用して、複数のフィールドを指定します。 project-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 必要に応じてフィールド別にグループ化された統計を提供します。 一般的な統計コマンドについて詳しくは、こちらをご覧ください。 要約する Stats コマンド KQL の例
mstats 統計と同様に、イベントの代わりにメトリックで使用されます。 要約する mstats コマンド KQL の例
table 結果セットに保持するフィールドを指定し、データを表形式で保持します。 プロジェクト T | project columnA, columnB
top/rare フィールドの最も一般的な値または最小の値を表示します。 top 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式を使用して検索結果をフィルター処理します。 2 つの異なるフィールドを比較するために使用されます。 どこ 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 コマンド: 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 コマンド: SPL の例

このSPL例では、カテゴリごとのイベントカウントを1分単位で計算し、 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 コマンド: SPL の例

このSPL例は、10年間の過去の終値データの異常を検出します。

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

anomalydetection コマンド: KQL の例

このKQLの例では、時系列分析関数を用いて、7日間の遡及期間における障害者アカウントのサインイン傾向の異常を検出します。

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の同等命令を比較してください

この表は、一般的なSPLeval関数をそのKQL対応関数にMicrosoft Sentinelにマッピングしています。

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,…) null ではない最初の値を返します。 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) XTRUE と評価された場合、結果は 2 番目の引数Yになります。 XFALSE に評価された場合、結果は 3 番目の引数 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 が null の場合は、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") TRUEXの SQLite パターンに似ている場合にのみ、Yを返します。 like(field, "addr%") has
contains
startswith
正規表現と一致する
KQL の例
log(X,Y) 2 番目の引数 X をベースとして使用して、最初の引数Yのログを返します。 Yの既定値は10です。 log(number,2) log
log2
log10
log(X)

log2(X)

log10(X)
lower(X) X の小文字の値を返します。 lower(username) tolower 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 引数から、開始位置(0 ベース)の 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 null
nullif(X,Y) XYの 2 つの引数が含まれており、引数が異なる場合は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) 開始位置 (1 から始まる) XからY文字 (省略可能) substring フィールド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) デコードされた URL 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の例では、gettypeiifを用いてXが整数互換型を持つかどうかを確認します。

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

isstr(X) KQL の例

このKQL例では、gettypeiifを用いて が文字列値であるかどうかX確認します。

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_ofminarg_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の例は、日付時間の値を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がブール値の場合、XTRUEまたはFALSEに再フォーマットされます。
  • Xが数値の場合、2 番目の引数Yは省略可能であり、hex (Xを 16 進数に変換)、commas (コンマと小数点以下 2 桁で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の同等命令を比較してください

この表は、一般的なSPLstats集約関数をそのKQLの同等物にMicrosoft Sentinelにマッピングしています。

SPL コマンド 説明 KQL コマンド KQL の例
avg(X) フィールド Xの値の平均を返します。 avg() avg(X)
count(X) Xフィールドの出現回数を返します。 一致する特定のフィールド値を示すには、 Xeval(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の最も中央の値を返します。 percentile() …\| summarize percentile(X, 50)
min(X) フィールド Xの最小値を返します。 Xの値が数値以外の場合、最小値はアルファベット順で検出されます。 min() …\| summarize min(X)
mode(X) フィールド Xの最も頻繁な値を返します。 top-hitters() …\| top-hitters 1 of Y by X
perc(Y) フィールド Xのパーセンタイル Y値を返します。 たとえば、 perc5(total) は、フィールド totalの 5 パーセンタイル値を返します。 percentile() …\| summarize percentile(Y, 5)
range(X) フィールド Xの最大値と最小値の差を返します。 range() range(1, 3)
stdev(X) フィールド Xのサンプル標準偏差を返します。 stdev stdev()
stdevp(X) フィールド Xの母集団標準偏差を返します。 stdevp() stdevp()
sum(X) フィールド Xの値の合計を返します。 sum() sum(X)
sumsq(X) フィールド Xの値の 2 乗の合計を返します。
values(X) 複数値エントリとして X フィールドのすべての個別の値の一覧を返します。 値の順序はアルファベット順です。 make_set() …\| summarize r = make_set(X)
var(X) フィールド Xのサンプル分散を返します。 variance variance(X)

次の手順

Splunk 検出ルールを特定し、比較し、分析ルールをMicrosoft Sentinelにマップする方法について学習しました。 SOAR オートメーションの移行を続行します。