tail マクロを利用すれば、特定の項目の出現回数を少ない順番に表示させることができます。
SPLの書き方
下記のSPLは、dest_ip(通信先)毎に出現回数をカウントし出現数の少ないTop10を表示させるSPLの例です。
sourcetype="fgt_traffic"
| stats count by dest_ip
| sort - count
| tail 10
実際に実行するとこうなります。

ちなみに多い順にTop10を表示させたい場合は、headを利用します。
tail マクロを利用すれば、特定の項目の出現回数を少ない順番に表示させることができます。
下記のSPLは、dest_ip(通信先)毎に出現回数をカウントし出現数の少ないTop10を表示させるSPLの例です。
sourcetype="fgt_traffic"
| stats count by dest_ip
| sort - count
| tail 10
実際に実行するとこうなります。

ちなみに多い順にTop10を表示させたい場合は、headを利用します。
これをやるには最初のカウントの際に “as” を利用して別名をつけてあげるとうまくいきます。
下記のSPLは、SPLの例です。
sourcetype="fgt_traffic"
| stats count as dest_count by dest_ip
| stats count by dest_count
| sort - count
| head 10
実際に実行するとこうなります。

bucket もしくは bin を利用して _tme を指定した時間の幅に分割した後、stats マクロを使用しすれば、その時間の幅毎に特定の項目の出現回数を表示させることができます。
下記のSPLは、ログデータを1時間毎に分割し、それぞれの時間内での dstip(通信先)毎の出現回数をカウントし表示させるSPLの例です。
sourcetype="fgt_traffic"
| bucket span=1h _time
| stats count by _time dstip
実際に実行するとこうなります。

さらに、1時間で1,000回以上のアクセスがあったdstipを抽出するには以下の通り記載します。
sourcetype="fgt_traffic"
| bucket span=1d _time
| stats count by _time dstip
| where count > 1000
| table _time dstip count
こちらも実際に実行すると以下の通りとなります。

参考サイト:
・コアラでもわかるSplunkシリーズ 時間毎集計する(Qiita)
https://qiita.com/toshikawa/items/8fa44753bc8f2a4c9cb0
stats マクロで count を利用すれば、特定の項目の出現回数を表示させることができます。
下記のSPLは、dest_ip(通信先)毎に出現回数をカウントし表示させるSPLの例です。
なお、それぞれのdest_ipの出現回数をカウントした後、カウントが多い順に10件表示しています。
sourcetype="fgt_traffic"
| stats count by dest_ip
| sort - count
| head 10
実際に実行するとこうなります。

上記検索を行った後、「視覚エフェクト」を選択すると、結果をグラフ表示することも可能です。

参考サイト:
・Splunk: Splunk入門(SPL編 3/6) – よく使用する統計関数11選
https://qiita.com/frozencatpisces/items/360b4a38212fe1876dbc
stats マクロで avg と median を利用すれば、特定の項目の平均値と中間値を表示させることができます。
下記のSPLは、dest_ip(通信先)毎に最大値(max)、最小値(min)、平均値(avg)、中間値(median)を表示させるSPLの例です。
なお、それぞのれ値を求めた後、最大値(max)が多い順番に並べ替え、最大値(max)が多い順に10件表示しています。
sourcetype="fgt_traffic"
| stats max(bytes_in), min(bytes_in) avg(bytes_in), median(bytes_in) by dest_ip
| sort - max(bytes_in)
| head 10
実際に実行するとこうなります。

上記検索を行った後、「視覚エフェクト」を選択すると、結果をグラフ表示することも可能です。

参考サイト:
・Splunk: Splunk入門(SPL編 3/6) – よく使用する統計関数11選
https://qiita.com/frozencatpisces/items/360b4a38212fe1876dbc
stats マクロで特定のフィールドの値の出現回数をカウントし、それを sortマクロで多い順に並べ替えることで実現できます。
index="(インデックス名)" sourcetype="(ソースタイプ名)" (フィールド名)=(カウントしたい値)
| stats count by (カウントしたいフィールド名)
| sort - count
(カウントしたいフィールド名)に src_ip や hostname など、カウントしたいフィールド名を入れます。
なお、1行目は index 以外は任意(必須ではない)です。
また、”|”は半角になっている必要があるので注意。(全角にすると”|”が緑色になります。)
Splunk の SPL を中途半端に学んでいたため、表題の通り、なぜSPLの先頭にパイプをつける場合とつけない場合があることが疑問でしたが、以下の2つの記事を見てようやくスッキリしました。
(「こおりねこ」さん、ありがとうございます!)
Splunk: Splunk入門(SPL編 1/6) - SPL文の基本(Qiita)
https://qiita.com/frozencatpisces/items/a395d8721977d14bd6a2
まず上記の記事には以下の通り記載があります。
早速、シンプルな SPL 文を実行してみましょう。
search index=”_internal”
「 search 」は SPL のコマンドの1つであり、条件を引数に指定してログを検索、出力するコマンドです。
普段よく目にするのは、いきなり index=”_internal” という形でかかれたSPLですが、実はその前に search コマンドがあり省略されているだけなんですね。
知りませんでした。。。
Splunk: サーチマクロって何だ?(Qiita)
https://qiita.com/frozencatpisces/items/8424d5af4204433948b1
そしてさらに上の記事を見ると、以下の記載があります。
search や inputlookup などの生成コマンド( generating commands )を定義に使用する場合は「定義の先頭にパイプ(|)を付けない」「マクロ使用箇所の直前にパイプを付ける」の2点を守る必要があります。
なるほど、search の場合は先頭にパイプを付けないという決まりがあるのですね。
以下、さわってみた感じ。








mitre_techniques.csv を開き、最後の行で右クリックしてコンテキストメニューを表示したところ

編集した直後

inputlookupコマンドで行を追加した結果を確認したところ

新規にSplunkで監視ルールを作成する際の情報が流れとしてまとまったサイトがなかったのでまとめてみました。
例えば、AADRiskyUsersのログであれば、Identity Protectionの機能から出力されるよね、といったことを整理していく。
リスク データをエクスポートする(Microsoft Learn)
https://learn.microsoft.com/ja-jp/entra/id-protection/howto-export-risk-data
ログを出力する機能が分かれば、MITRE CTID やDTT&CTなどを使って、ATT&CKのどのテクニックが検知できるか確認する。
Microsoft Azure Security Control Mappings to MITRE ATT&CK®(MITRE CTID)
https://center-for-threat-informed-defense.github.io/security-stack-mappings/Azure/README.html
rabobank-cdc / DeTTECT
https://github.com/rabobank-cdc/DeTTECT
検知できそうなテクニックがわかったら、それに該当する検知ルールを Splunk Security Content や Sigmaルールを活用し検討する。
Splunk Security Content
https://research.splunk.com/detections/
SigmaHQ / sigma
https://github.com/SigmaHQ/sigma/tree/master/rules/cloud
NVISOsecurity / sigma-public
https://github.com/NVISOsecurity/sigma-public
SIGMAルールとは、Splunk など製品固有の言語(SPLなど)で書かれた検知ルールではなく、より汎用的?に記載された検知ルールのようです。
したがって、SIGMAルールがあれば、そこから Splunk や Sentinelなどいろいろなベンダーの SIEM で利用できる検知ルールが作成できます。
ちなみに SIGMAルールは以下のGITHUBのサイトなどに置かれています。
GITHUB
https://github.com/SigmaHQ/sigma/tree/master
https://github.com/NVISOsecurity/sigma-public
なお、SIGMAルールから各SIEM固有の検知ルールを生成する方法としては、 Webサイトのサービスを利用する方法とコマンドラインの2通りがありそうです。
Webサイトとしては、以下のUNCODER.IOが有名のようです。
UNCODER.IO
https://uncoder.io/
以下が実際の画面ですが、変換先を見ると Splunk, Sentinel, QRader, XSIAMと有名どころのSIEMへの変換が可能なようです。

そして実際に Splunkの SPLに変換してみたのがこちらです。変換後はシンプル&見慣れた表現なので少しわかりやすいですね。

コマンドとしては sigmatools というものがあるようで、以下のコマンドで簡単にインストールできます。
% pip3 install sigmatools
そして、UNCODER.IOで変換したものと同じSIGMAルールを sigmac コマンドでも変換してみた結果がこちらです。
% vi tmp/proxy_susp_flash_download_loc.yml
% sigmac -t splunk -c splunk-windows tmp/proxy_susp_flash_download_loc.yml
(((c-uri="*/flash_install.php*" OR c-uri="*/install_flash_player.exe") NOT ((cs-host="*.adobe.com"))))
-t の引数で変換先の SIEM として Splunk を指定しています。
Webで変換したものと大体一緒ですが、なぜか先頭に “source=”が付いていませんね。引数が足りないのかな?
<参考サイト>
・Sigmaルールのすすめ(Qiita)(https://qiita.com/sec-chick/items/4416bff231d7a55da75a)
・SIEMクエリ変換ツール「Sigma」を使ってみた(DeveloppersIO)(https://dev.classmethod.jp/articles/sigma-siem-transition-tool/)
・SIEMシステム用シグネチャフォーマット「Sigma」とSigmaルールの変換ツール「Uncoder.io」のご紹介(NEC)(https://jpn.nec.com/cybersecurity/blog/221014/index.html)