Sigma検知ルール完全入門
「一度書けば、どのSIEMでも動く」。ログの海から攻撃を見つけ出す“検知の共通語”Sigmaを、YAMLの読み方からルールの書き方・変換・運用、そして日本発のツールHayabusaまで、防御者の視点で日本語でやさしく解説します。
📋 この記事の目次
攻撃を「受けてから調べる」だけでなく、「起きた瞬間に気づく」こと——それが検知(ディテクション)です。そして検知の世界には、長年の悩みがありました。SIEM(ログ分析基盤)ごとに検索の書き方がバラバラで、せっかく作った“攻撃を見つけるルール”を他の環境に持っていけない。この壁を壊したのが Sigma(シグマ)です。Sigmaは「検知ルールの共通フォーマット」。一度YAMLで書けば、Splunkにも、Elasticにも、Microsoft Sentinelにも変換できます。日本語でまとまった解説がまだ少ないこの分野を、DFIR完全ロードマップの一歩進んだ実践編として、基礎からていねいに解き明かします。
本記事は、守る側(青チーム)が、自分の管理するシステムのログから攻撃の兆候を見つけるための「検知」を学ぶ教育目的の解説です。検知ルールは、あなた自身が監視権限を持つログに対して使ってください。他者のシステムやログを無断で監視・解析する行為は、不正アクセス禁止法やプライバシーに関わる問題になり得ます。学習は、自分の検証環境(自宅ラボ)や公開されているサンプルログで進めましょう。
🛡 Sigmaとは? なぜ「検知の共通語」なのか
「ログ界のYARA」とも呼ばれるSigma。その発想と、解決する課題を理解しましょう。
Sigma=ベンダーに依存しない、検知ルールの共通フォーマット
Sigmaは、ログから不審なイベントを見つけ出すための汎用的でオープンなシグネチャ(検知ルール)形式です(2017年、Florian Roth氏らが考案)。マルウェアを表現するYARA、ネットワーク検知のSnortになぞらえて「ログ界のYARA」とも呼ばれます。ルールは1つのYAMLファイルとして書かれ、特定のSIEM製品に縛られません。公式リポジトリ「SigmaHQ」には、世界中の防御者が共有した15,000本以上のルールが蓄積されています。
なぜこれが画期的なのか。従来、ログから攻撃を探す検索クエリは、SIEM製品ごとに“方言”が違いました。Splunkには SPL、Elasticには独自のクエリ、Microsoft Sentinelには KQL……。ある会社が苦労して作った「この攻撃を見つけるロジック」は、別のSIEMを使う会社にはそのまま渡せず、知見が分断されていたのです。Sigmaはここに「共通語」を持ち込みました。ロジックをSigmaで一度書けば、変換ツールが各SIEMの方言へ翻訳してくれる——だから検知の知識を、世界中で“持ち寄り、使い回せる”ようになったのです。
この“持ち寄り”の力は、想像以上に大きいものです。世界のどこかで新しい攻撃が観測され、誰かがそれを検知するSigmaルールを書いてSigmaHQに公開すれば、翌日にはあなたの環境でも、その攻撃を見張れるようになります。1万5千本という数字は、単なるルールの山ではなく、世界中の防御者が積み上げてきた“集合知”。無料で、誰でも、その恩恵にあずかれるのです。
🔁 「一度書けば、どこでも動く」——Sigmaの変換モデル
これは、潤沢な予算やチームを持たない組織にこそ朗報です。高価な専用ルールを買わなくても、世界水準の検知ロジックを無料で取り込み、自分の環境に合わせて育てていける。しかも一度Sigmaに慣れれば、その知識はSIEMを乗り換えても無駄になりません。Sigmaは、検知という“守りの最前線”を、規模を問わず誰の手にも開いた——そう言える存在です。
ひとことで言うと
Sigmaは「検知ルールのレシピを書く、世界共通の言葉」です。インシデント対応プレイブックが「起きた後にどう動くか」なら、Sigmaは「そもそも“起きた”ことに、いかに早く気づくか」を担います。検知が早ければ早いほど、対応も復旧も楽になります。
📜 Sigmaルールの構造(YAMLを読む)
怖がらなくて大丈夫。Sigmaルールは“設定ファイル”のように素直なYAMLです。
SigmaルールはYAMLという、人にやさしい書式で書かれます。中身は大きく「メタ情報(何のルールか)」と「検知ロジック(何を見つけるか)」の2つ。まずは代表的なフィールドを押さえましょう。
| フィールド | 役割 |
|---|---|
title | ルールの名前。「何を検知するか」を一言で。 |
id | 世界で一意のUUID。ルールを識別・追跡するための背番号。 |
status | 成熟度(stable / test / experimental など)。 |
description | 何を・なぜ検知するのかの説明。 |
logsource | どのログを対象にするか(product / category / service)。 |
detection | 検知ロジック本体。selection(条件)とcondition(組み合わせ方)。 |
falsepositives | 誤検知しそうな“正常な状況”をあらかじめ書いておく。 |
level | 深刻度(critical / high / medium / low)。 |
tags | MITRE ATT&CKなどの分類(例:attack.t1059.001)。 |
logsource は地味に見えて、検知の“当たり外れ”を左右する要です。「どのログを見るか」を取り違えれば、どんなに良いルールも空振りします。たとえばWindowsのプロセス起動を細かく追うなら、標準ログだけでなくSysmonのような“詳しく記録する仕組み”を入れておく必要があります。「検知したい手口は、どのログに痕跡を残すか」——ここを最初に押さえるのが、検知設計の出発点です。
このうち必須なのは title ・ logsource ・ detection の3つ。実際の1本を見てみましょう。下は「ネットワークからコードを取得して実行する、不審なPowerShell」を検知するルールです。
▲ 読み方:logsourceで「Windowsのプロセス作成ログ」を対象に指定し、detectionで「powershell.exeが、DownloadString等を含むコマンドで起動された」という条件を定義。tagsでMITRE ATT&CKの手口(T1059.001)に紐づけています。
注目してほしいのは、このルールに「Splunk」や「Elastic」という言葉が一切出てこないこと。Sigmaは“何を検知したいか”という意図だけを書きます。それを実際のSIEMの検索式へ翻訳するのは、次章で見る変換ツールの仕事です。だから同じ1本が、環境を問わず使い回せるのです。
YAMLは「インデント(字下げ)」が命
YAMLは、半角スペースの字下げで階層を表現します(タブは使いません)。detection: の下に selection:、その下に条件——とインデントがズレると意味が変わってしまうので、そこだけ注意。逆に言えば、記号やカッコだらけのプログラムより、ずっと読みやすいのがSigmaの良いところです。
🧠 detectionの書き方:selectionとcondition
Sigmaの心臓部。「条件(selection)」を作り、「組み合わせ方(condition)」で仕上げます。
detection は、1つ以上の「selection(条件のかたまり)」と、それらをどう組み合わせるかを決める「condition」でできています。selectionの書き方には、覚えやすい3つのパターンがあります。
フィールド指定(複数はAND)
同じselection内に複数のフィールドを並べると、すべて満たす(AND)条件になります。「EventIDが4688 かつ プロセス名が〜」のように絞り込みます。
値のリスト(どれか=OR)
1つのフィールドに値をリストで並べると、どれか1つに一致(OR)。「DownloadString か Net.WebClient か IEX」のような“いずれか”を表します。
キーワード(生のテキスト検索)
フィールドを指定せず、ログ全体から語句を探す書き方。手早く書ける一方、誤検知も増えやすいので使いどころを選びます。
さらに、フィールド名の後ろに「修飾子(モディファイア)」を付けると、一致のしかたを細かく指定できます。これがSigmaの表現力の源です。
| 修飾子 | 意味 | 例 |
|---|---|---|
|contains | 部分一致(含む) | CommandLine|contains: 'mimikatz' |
|endswith | 末尾一致 | Image|endswith: '\cmd.exe' |
|startswith | 先頭一致 | CommandLine|startswith: 'powershell' |
|re | 正規表現でマッチ | CommandLine|re: 'https?://' |
|all | リストの全部に一致(AND) | ...|contains|all: [a, b] |
ちなみに、selection や filter_legit といった名前は自由に決められます。selection_powershell でも susp_cmd でも構いません。大切なのは、condition でその名前を呼び出して論理を組み立てること。条件を複数のselectionに分けて名前を付けておくと、1 of selection_*(いずれか一つ)のように、柔軟で読みやすいルールが書けるようになります。
そして仕上げが condition。複数のselectionやfilter(除外条件)を、and / or / not や 「1 of(いずれか)」「all of(すべて)」で論理的に組み合わせます。下は「whoami の実行を検知。ただしマシンアカウント等による正規実行は除外する」という、実戦的な例です。
▲ not filter_legit で“正常な状況”を引き算するのが、誤検知を減らすコツ。|re を使いこなすには正規表現の基礎が効いてきます。
🧩 detectionの組み立て(selection + filter → condition)
⚙️ ルールを「動かす」:変換とツール
書いたルールは、変換して初めて“検知”になります。中心にいるのが pySigma です。
Sigmaルールは、そのままでは“レシピ”にすぎません。実際に動かすには、各SIEMの検索式へ変換する必要があります。その標準ツールが、Python製のpySigmaと、それを使うコマンドsigma-cliです(かつての sigmac を置き換えた新世代)。
▲ -t splunk を -t elasticsearch などに変えれば、同じルールが別のSIEM向けに翻訳されます。これが「一度書けば、どこでも動く」の正体です。
ただし、変換すれば即・完成ではありません。自動翻訳されたクエリは、環境のフィールド名や癖によって、そのままでは過剰に光ったり、逆に空振りしたりします。だから変換後は必ず、自分の環境のログでテストを。「攻撃の再現ログでちゃんと光るか」「平常時に鳴りすぎないか」を確かめてから本番へ——この一手間が、信頼できる検知と“オオカミ少年”を分けます。
翻訳の精度を上げる仕組みが「プロセッシング・パイプライン」です。現場ごとにログのフィールド名は微妙に違います(同じ「プロセス名」でも、環境によって呼び名が異なる)。パイプラインは、そのズレを吸収して正しくマッピングしてくれます。さらにうれしいのは、Sigmaを“読める”ツールがSIEM以外にも広がっていること。
Hayabusa(隼)
Windowsイベントログを、Sigmaベースで高速スキャンしてタイムライン化。日本のYamato Security製で、日本語ドキュメントも充実。詳しくは⑥章で。
Chainsaw
Rust製の、Sigmaベースのイベントログ検索・検知ツール。大量のログから素早く“当たり”を見つけます。
Splunk / Elastic / Sentinel
変換して取り込めば、商用・OSSの主要SIEMでそのまま検知ルールとして運用できます。
検知の“出口”は、ログ基盤につながる
変換したルールをどこで動かすか——その器がSIEMです。当サイトのSplunk入門で集約したログに、Sigma由来の検知を載せていくイメージを持つと、点と点がつながります。検知が当たったら、C2通信の痕跡やWindowsアーティファクトの解析で“深掘り”へ進みます。
🎛 検知エンジニアリングの実践と心構え
ルールは「書いて終わり」ではありません。育て、磨き続けてこそ“効く検知”になります。
個々のルールを作る技術の先に、「組織を守る検知の仕組みを設計・運用する」営みがあります。これを検知エンジニアリング(ディテクション・エンジニアリング)と呼びます。その基本の流れを押さえましょう。
何を検知するか決める(脅威の選定)
脅威インテリジェンスやMITRE ATT&CKを手がかりに、「自組織にとって重要な攻撃手口」を選ぶ。やみくもに全部ではなく、効くものから。
ログ源を確認する
その手口は、どのログに痕跡を残すか? プロセス作成ログ、Sysmon、認証ログ……。必要なログが取れていなければ、検知は始まらない。
Sigmaルールを書く
selectionで“探すもの”を、filterで“除外するもの”を定義。MITRE ATT&CKの tags も付け、後から「どの手口をカバーしているか」を一望できるように。
テストする(検知できる/誤検知しない)
攻撃を再現したログで「ちゃんと光るか」、平常時のログで「無駄に光らないか」を確認。検証は自分のラボで安全に。
運用し、チューニングし続ける
誤検知が出たら filter を足し、見逃しがあれば条件を見直す。検知は一度きりでなく、育て続けるもの。
もう一つ、検知エンジニアリングの醍醐味が「カバレッジ(網羅度)の可視化」です。各ルールにMITRE ATT&CKの tags を付けておくと、「自分たちは攻撃のどの段階を見張れていて、どこが手薄か」を一枚の地図(ヒートマップ)にできます。闇雲にルールを増やすのではなく、“穴”を見つけて、そこを優先的に埋める——この地図思考こそ、限られた人手で守りを最大化するコツです。
検知ルールは、多ければ良いというものではありません。誤検知(フォールスポジティブ)だらけのアラートが鳴り続けると、担当者は麻痺し、本当に重要な1件を見逃します。これが「アラート疲れ(alert fatigue)」。だからこそ、falsepositives を書き、filter で正常を引き算し、level で優先度をつける——“静かで正確な検知”を設計することが、上級者への分かれ道です。量より、質。
検知と対応は、ひとつながり
良い検知は、インシデント対応の入口です。「何を検知したら、誰が、どう動くか」までを設計して初めて、検知は価値になります。Sigmaの tags でMITRE ATT&CKに紐づけておけば、「自分たちはどの攻撃段階をカバーできているか」の地図も描けます。
🦅 日本語で学ぶ:Hayabusaから始める
いきなりSIEM構築は大変。まずは“1個のEXEとログ”で、Sigmaの効果を体感しましょう。
Sigmaを学ぶうえで、日本の私たちには心強い味方がいます。Hayabusa(隼)——日本のセキュリティ集団Yamato Securityが開発する、Rust製の高速ツールです。Windowsのイベントログ(.evtx)を、Sigmaベースのルールで一気にスキャンし、「いつ・何の不審な出来事が起きたか」をタイムラインにまとめてくれます。日本語ドキュメントが整っているのも、入門に最適な理由です。
▲ サーバ構築も不要。集めた .evtx にこれを走らせるだけで、Sigma検知の“効き”を体験できます。出力CSVを表計算で開けば、怪しい時刻が浮かび上がります。
さらに、Hayabusa向けに整備されたhayabusa-rulesは、前章で紹介したVelociraptorでも利用されています。「同じSigmaルールが、複数のツールで使い回せる」——この記事の冒頭で語った価値を、まさに地で行く好例です。日本語で書かれた解説や、JPCERT/CCのカンファレンス「JSAC」での検知エンジニアリング講座など、学びの足場も着実に増えています。
学び方として一番おすすめなのは、「本物のルールをたくさん読む」ことです。SigmaHQには1万本を超える実戦ルールがあり、その一つひとつが「プロはこの手口を、どう表現したか」の生きた教科書です。気に入ったルールを真似て書き換え、自分のラボで動かし、慣れてきたらコミュニティへ還元する。世界中の防御者が同じように積み上げてきたからこそ、Sigmaは強くなりました。あなたの1本も、その一部になれます。
□ 自分専用の検証環境を用意した(本番のログでは試さない)/□ SigmaHQの既存ルールをいくつか読んで、構造に慣れた/□ サンプルの .evtx に Hayabusa を走らせ、検知の“効き”を体験した/□ ②③のお手本を真似て、自分で1本ルールを書いてみた/□ sigma convert で、自分のSIEM向けに変換してみた。まずは「読む→真似る→書く」。1本書ければ、世界が変わって見えます。
📚 用語集・FAQ・次に読む
つまずきやすい用語と、よくある疑問をまとめました。
ここまでに登場した言葉の“答え合わせ”として、用語集とFAQをまとめました。Sigmaは奥が深い分野ですが、入口はこの記事の範囲で十分です。あとは手を動かしながら、少しずつ守備範囲を広げていきましょう。最初の1本を書き上げたとき、ログの見え方がきっと変わります。
📖 用語集
| 用語 | 意味 |
|---|---|
| Sigma | SIEMに依存しない、ログ検知ルールの汎用フォーマット。YAMLで記述する。 |
| SIEM | 各種ログを集約・検索・相関分析する基盤(Splunk、Elastic、Sentinelなど)。 |
| logsource | ルールが対象とするログの種類(product / category / service)。 |
| selection | 「探す条件」のかたまり。フィールドと値で定義する。 |
| condition | selectionやfilterを and/or/not で組み合わせる、検知の最終ロジック。 |
| 修飾子(modifier) | |contains や |re など、一致のしかたを指定する記法。 |
| pySigma / sigma-cli | Sigmaルールを各SIEMの検索式へ変換するツール群。 |
| 検知エンジニアリング | 守るべき脅威を選び、検知を作り・テストし・運用し続ける営み。 |
| 誤検知(FP) | 正常な活動を誤って“攻撃”と判定すること。多すぎると現場が麻痺する。 |
| MITRE ATT&CK | 攻撃手口を体系化した共通辞書。Sigmaの tags で紐づける。 |
❓ よくある質問(FAQ)
プログラミング経験がなくても書けますか?
はい。SigmaはYAMLという“設定ファイル”の書式で、プログラムというより「条件を箇条書きする」感覚に近いです。まずはSigmaHQの既存ルールを読むところから。構造に慣れたら、お手本を真似て少しずつ書き換えれば、自然と身につきます。
SigmaがあればSIEMはいらない?
いいえ、役割が違います。Sigmaは検知ロジックの“設計図”で、実際にログを集めて検索を走らせる“器”がSIEM(やHayabusa等のツール)です。Sigmaルールを変換して、SIEMやツールの上で動かす——という関係になります。両者はセットで力を発揮します。
SigmaHQに15,000本もあるなら、自分で書く必要は?
既存ルールは強力な出発点ですが、自組織に固有の脅威・正常な業務は自分たちにしか分かりません。既存ルールをベースに、filter で自社の正常を除外したり、独自の手口を足したり——“育てる”工程が検知の質を決めます。だから読む力と書く力、両方が役立ちます。
YARAやSnortと何が違うのですか?
対象が違います。YARAはファイル/マルウェア、Snort/Suricataはネットワークパケット、Sigmaはログ(イベント)を対象にします。「マルウェアはYARA、通信はSnort、ログはSigma」と覚えると整理しやすいでしょう。発想(シグネチャで“悪”を表現する)は共通です。
まず何から始めればいいですか?
Hayabusa+サンプルのイベントログがおすすめです。サーバ構築なしで、Sigmaベースの検知が“効く”体験ができます。次にSigmaHQのルールを読み、②③のお手本を真似て1本書く。そこまで来れば、変換ツールで自分のSIEM向けに出力する、という次のステップが見えてきます。
検知の前に、そもそも何のログを取ればいい?
Windowsなら、まずプロセス作成の記録を有効にし、可能ならSysmonを導入すると、検知できる手口が一気に広がります。攻撃は“プロセスの起動”や“不審な通信”に痕跡を残すことが多いからです。「取れていないログは、検知しようがない」——だからこそ、ログ取得の設計が検知の大前提になります。Windowsのログ・アーティファクトの理解が、ここで効いてきます。
🧭 次に読む
📊 ログと解析の土台
🎯 検知の材料
📚 参考・出典(一次情報)
- SigmaHQ 公式ドキュメント(sigmahq.io)/SigmaHQ/sigma ルールリポジトリ/pySigma・sigma-cli(GitHub)
- Sigma 考案:Florian Roth ほか(The Generic Signature Format for SIEM Systems, 2017)
- Yamato Security「Hayabusa」「hayabusa-rules」(Windowsイベントログ向けSigmaベースツール、日本語ドキュメント)
- JSAC(JPCERT/CC)ワークショップ「Detection Engineering with SIGMA」
- MITRE ATT&CK(攻撃手口の共通辞書、Sigmaの tags が参照)


コメント