Suricata入門|シグネチャでネットワークの脅威を止めるIDS/IPS
Zeekが「通信を黙々と記録する飛行記録装置」なら、Suricataは「既知の攻撃パターンが通った瞬間に警報を鳴らし、必要なら遮断する門番」。ルールの構造から、content/pcreによるマッチ、IDSとIPSの違い、ET Openルールの運用、Zeek・SIEM連携まで、防御者の視点で日本語でやさしく解説します。
📋 この記事の目次
ネットワークの守りには、性格の違う2つの目が要ります。1つは「すべてを淡々と記録し、後から追えるようにする目」——これはZeekが担います。もう1つが「既知の攻撃パターンが通った“その瞬間”に警報を鳴らし、必要なら止める目」。これを担うのが Suricata(スリカータ)です。Suricataは、流れる通信をあらかじめ用意した“シグネチャ(検知ルール)”と高速照合し、危険を見つけたらアラートを上げ、インライン構成ならその通信を遮断(ブロック)もできる、オープンソースのIDS/IPS(侵入検知・防御システム)です。日本語でまとまった解説がまだ少ないこの分野を、DFIR完全ロードマップの一歩進んだ実践編として、基礎からていねいに解き明かします。
本記事は、守る側(青チーム)が、自分の管理するネットワークを監視して攻撃を検知・遮断するための教育目的の解説です。通信の監視・遮断は、あなた自身が管理または正式に許可されたネットワークでのみ行ってください。他者の通信を無断で傍受する行為は、電気通信事業法の「通信の秘密」や不正アクセス禁止法に関わり得ます。またIPS(インライン)構成は、設定を誤ると正規の通信まで止めてしまい、業務停止を招きます。まずは“見るだけ”のIDSや、自分の検証環境(自宅ラボ)・公開演習用pcapで学びましょう(IDS/IPSの違いと注意は④章で詳述します)。
🛡 Suricataとは? ネットワークの“門番”
既知の悪を“その瞬間”に捕まえる。Zeekと対になる、もう一方の目です。
Suricata=シグネチャで通信を検査する、高速なIDS/IPSエンジン
Suricataは、非営利団体OISF(Open Information Security Foundation)が開発するオープンソースのネットワーク侵入検知・防御エンジンです(2009年に初版公開)。流れるパケットを「シグネチャ(検知ルール)」と照合し、既知の攻撃・マルウェア通信・不審な兆候を見つけ出します。マルチスレッドで高速に動き、ポート番号だけでなくアプリ層のプロトコル(HTTP/TLS/DNS等)を自動認識して検査できるのが特徴。検知だけのIDSとしても、通信を遮断するIPSとしても使えます。
ここで大切なのが、Zeekとの「役割の違いと補完関係」です。Zeekは「悪いと決めつけず、まず通信を“記録”に変える」——いわば記録と振る舞い分析の達人。対してSuricataは「既知の“悪のパターン”に一致したら、その場で警報・遮断する」——シグネチャによる即応の達人です。どちらが上ということはなく、両方を一緒に動かすのが現代のネットワーク監視(NSM)の王道。実際、学習用ディストロSecurity Onionにも、ZeekとSuricataは“セット”で同梱されています。
🛡 Suricataの動き——通信をルールと照合し、警報・遮断・記録する
もう一つ知っておきたいのが、Suricataが「検知の3兄弟」の一角だということです。“悪の特徴をルールで表現して照合する”という発想は、対象を変えて各所で使われています。通信はSuricata、ログはSigma、ファイルはYARA——この3つを押さえると、ネットワーク・ログ・ファイルの3面から“既知の悪”を捕まえる網が完成します。それぞれ文法は違いますが、根っこの考え方は同じ。1つ学べば、ほかの理解もぐっと速くなります。
| 検知ルール | 対象 | 見つけるもの |
|---|---|---|
| Suricata | ネットワーク通信(パケット) | C2通信・攻撃・マルウェアの通信パターン |
| Sigma | ログ(イベント) | 不審なプロセス起動・認証・操作の痕跡 |
| YARA | ファイル・メモリ | マルウェア検体・悪性コードの特徴 |
ひとことで言うと
Suricataは「“既知の攻撃の顔写真”を手に、通る通信を一人ずつ照合する門番」です。Zeekが“全員の出入りを台帳に書く記録係”なら、Suricataは“指名手配犯を見つけたら警報を鳴らす門番”。2人がいて初めて、入口は本当に守られます。
🧱 Suricataルールの構造(action/header/options)
怖がらなくて大丈夫。ルールは“3つのかたまり”でできた、1行の文です。
Suricataのルール(シグネチャ)は、見た目こそ記号が多めですが、構造は3つのかたまりに分かれているだけです。①action(どうする)、②header(どの通信を)、③options(何を見て・どう記録する)。この順に読めば、どんなルールもほどけます。
| かたまり | 役割 |
|---|---|
| ① action | 一致したら何をするか。alert(警報)/ drop(破棄=IPS)/ reject(拒否応答)/ pass(通す)。 |
| ② header | 対象の通信。プロトコル 送信元IP ポート -> 宛先IP ポート。-> は通信の向き。 |
| ③ options | 丸カッコ内。msg(説明)・content(探す中身)・pcre(正規表現)・sid(ルールID)・rev(版)・classtype・reference・metadata など。 |
headerに出てくる $HOME_NET(自組織のネットワーク)や $EXTERNAL_NET(外部)は、設定で定義する変数です。「内側から外側へ向かう通信だけを見る」といった指定が、これで簡潔に書けます。実際の1本を見てみましょう。下は「内部から外部へ、怪しいUser-Agentでの通信=C2の連絡(ビーコン)の疑い」を検知する、教育用のルールです。
▲ alert(action)+http $HOME_NET any -> $EXTERNAL_NET any(header)+カッコ内(options)。metadataでMITRE ATT&CKのC2戦術(TA0011)に紐づけています。sidは自作ルール用に100万番以降を使う慣習があります。
options内の sid(Signature ID)と rev(リビジョン)は、ルールの“背番号と版番号”。これがあるから、アラートを見たとき「どのルールが、なぜ光ったか」を追跡でき、ルールを更新・管理できます。classtype はアラートの種類(例:trojan-activity)、reference は根拠資料へのリンク。メタ情報をきちんと書くことが、後で“育てられる”ルールの条件です。
🧩 ルールの解剖図——action | header | options
SnortのルールはSuricataでもほぼ動く
Suricataのルール文法は、老舗IDSSnortとおおむね互換です。だから世界中で蓄積されたSnort形式の検知ルール資産を、Suricataでも活かせます。「SigmaがSIEMの方言を吸収した」ように、Suricata/Snortの世界にも“共通の書き方”があり、知見が持ち寄れるのです。
🎯 マッチの心臓部:content と pcre、修飾子
「通信の中身の、どこを、どう見るか」。ここがルールの効きを決めます。
options の主役は、通信の中身を探す content です。content:"..." で文字列やバイト列を指定し、見つかれば一致。複数の content を並べれば、すべてを満たす(AND)条件になります。これに修飾子と、後述のスティッキーバッファを組み合わせるのが、Suricataの表現力です。
content(中身の照合)
content:"malware" で文字列を、content:"|6a 40 68|" で16進バイト列を指定。nocase(大小無視)・depth・offset・distance・within で“どこを”見るか細かく制御します。
スティッキーバッファ
http.uri; や tls.sni; と書くと、以降の content は“その部分だけ”を見ます。ポートでなくプロトコルの意味で検査できるのがSuricataの強み。
pcre(正規表現)と flow
pcre:"/.../" で揺れのあるパターンを表現。flow:established,to_server で「確立済み・サーバー向き」など通信の向きと状態を絞り、無駄打ちを防ぎます。
スティッキーバッファは、Suricataを使いこなす鍵です。たとえば http.uri; content:"/gate.php"; と書けば、HTTPのURI部分にだけ「/gate.php」を探します。通信全体をやみくもに探すより、狙った場所をピンポイントで見るほうが、速くて誤検知も少ない。下は「特定のURIパターン+怪しいリクエスト」を、向きと状態で絞って検知する例です。
▲ http.method; content:"GET"; と http.uri; content:"/gate.php"; で“場所”を限定し、pcre で“揺れ”を表現。pcre を使いこなすには正規表現の基礎が効いてきます。
ここで性能の話を少しだけ。Suricataは内部で、各ルールの中から最も“珍しくて手がかりになる”パターンを選び、それを高速検索(fast_pattern)の足がかりにしています。だから content には、短すぎる・ありふれた文字列より、長くて特徴的な文字列を1つは入れるのがコツ。これはYARAで“固い手がかりを1つ含める”話と同じ発想です。何Gbpsもの通信をさばくとき、この差が効いてきます。
暗号化されていても、見えるものはある
通信がTLSで暗号化されていても、Suricataは tls.sni(接続先名)・証明書・JA3フィンガープリントを検査できます。さらに、通信から取り出したファイルのハッシュ(MD5)でルールを書くことも可能。中身が読めなくても、“外形”と“運ばれた物”から攻撃を捕まえられるのは、Zeekと共通する強みです。
🚦 IDSとIPS:見張るか、止めるか
同じSuricataでも、置き方しだいで“警報係”にも“関所”にもなります。違いと注意点を。
Suricataには、大きく2つの動かし方があります。IDS(侵入検知)は、通信の“複製”を受け取って見張るだけ——怪しければアラートを上げますが、通信そのものには手を出しません。IPS(侵入防御)は、通信の“通り道そのもの”に割り込み(インライン)、危険な通信をその場で破棄(ブロック)できます。強力ですが、その分リスクも伴います。
🚦 IDS(見張る)と IPS(止める)の置き方の違い
どちらで始めるべきか。答えははっきりしていて、まずはIDS(見張るだけ)からです。IDSは通信に影響しないので、誤検知が出ても“余計なアラートが増える”だけで済みます。ここでルールを十分にチューニングし、「このルールは確実に悪だけを捕まえる」と自信が持てたものを、少しずつIPS(遮断)に昇格させていく。いきなり全ルールでブロックを始めるのは、事故のもとです。
IPSは通信の通り道に割り込むため、たった1つの出来の悪いルールが、正規の業務通信を巻き込んでブロックし、システム障害を引き起こすことがあります(誤検知=サービス停止)。鉄則は4つ。①まずIDSで運用し、誤検知をゼロに近づけてからブロック対象を選ぶ/②ブロックは“確実に悪”なルールだけに限定(広いルールでdropしない)/③障害時に通信を素通しさせる“フェイルオープン”の挙動を理解しておく/④必ず検証環境で、正規業務を流して影響を確認してから本番へ。「止められる」力は強力ですが、止めてはいけないものまで止めない設計こそが、上級者の証です。
設置場所の考え方は、IDSならZeekやWiresharkと同じ。スイッチのSPAN(ミラー)ポートやTAPから通信の複製を受け取り、インターネットとの境界に置きます。下は、3つの動かし方をそのままコマンドにしたものです。
▲ -r=pcap、-i=受動監視(IDS)、-q=NFQUEUE(IPS/インライン)。同じSuricataが、フラグひとつで“見張る”にも“止める”にもなります。
🔄 ルールを“育てる”:ET Openと運用
ルールは全部自作しなくていい。世界の集合知を取り込み、自分の環境に合わせて磨きます。
「何千ものルールを自分で書くのか…」と身構える必要はありません。世界には、研究者やコミュニティが公開する高品質なルールセットがあります。代表がEmerging Threats(ET Open)——無料で使えるオープンなルール集で、新しい脅威が観測されるたびに更新されます(有償のET Proや、Snort/Talosのルールもあります)。これらを取り込めば、翌日にはあなたの環境でも世界水準の検知が動きます。管理ツールが suricata-update です。
▲ Suricataの出力 eve.json(EVE形式のJSONログ)には、アラートだけでなく http・dns・tls・flow・fileinfo など豊富な記録が入ります。JSONなのでSIEMや jq と相性抜群です。
ただし、ルールを取り込んだだけでは“運用”になりません。どんな優秀なルールセットも、自組織の正常な業務に対しては誤検知(フォールスポジティブ)を出します。ここからが検知エンジニアの腕の見せどころ。3ステップで“育て”ます。
ET Openで土台を作る
suricata-update でルールセットを導入。まずは“世界の集合知”を土台にし、ゼロから書かない。新しい脅威への追従も自動化できます。
チューニング(誤検知を抑える)
うるさいルールはしきい値(threshold)や抑制(suppress)で静かにし、不要なSIDは無効化。「静かで正確」を目指して磨き続けます。
ルールは多ければ良いというものではありません。誤検知だらけのアラートが鳴り続けると、担当者は麻痺し、本当に重要な1件を見逃します(アラート疲れ=alert fatigue)。Sigmaの運用と同じく、Suricataでも「鳴らすこと」より「静かに、正確に鳴らすこと」が上級者への分かれ道。threshold でノイズを抑え、本当に効くルールだけをブロックに昇格させる——この“引き算”が、信頼される検知をつくります。
もう一つ、Suricataの“育て方”で覚えておきたいのがファイル抽出です。通信の中を流れたファイルを取り出し、そのハッシュ(MD5)を記録できます。これを脅威インテリジェンスのハッシュリストと照合すれば、運ばれたマルウェアを名指しで捕捉できます。さらに抽出したファイルをYARAにかければ、“通信→ファイル”と検知が一本につながります。
🎛 検知をつなぐ:Zeek・SIEM・脅威ハント運用
Suricataの警報は、ほかの仕組みと“つなぐ”ことで、本当の力になります。
Suricataのアラートは、それ単体では“点”にすぎません。「なぜ光ったのか」「その前後で何が起きたのか」を知るには、記録の達人Zeekのログや、エンドポイントの情報と突き合わせる必要があります。Suricata(アラート)とZeek(記録)を両輪に、SIEMへ集約してハントする——これが現代のネットワーク監視(NSM)の流れです。
配置する(Deploy)
境界のセンサーで、SuricataとZeekを一緒に動かす。Suricataは“既知の悪に即警報”、Zeekは“全通信を記録”。学習ならSecurity Onionが両方まとめて体験できる。
ルールを整える(Tune)
ET Openを土台に、自組織向けにチューニング。MITRE ATT&CKで「どの攻撃段階をカバーできているか」を地図化し、穴を優先的に埋める。
狩る(Hunt)
アラートを起点に、Zeekの conn.log・dns.log を flow_id で串刺し。「この警報→どの接続→どのドメイン→どのファイル」と物語を復元し、本物か誤検知かを見極める。
対応する(Respond)
確証が得られたらインシデント対応へ。Velociraptorで該当端末を調べれば、“通信”と“端末”の両面から封じ込められる。
ここで全体像を一枚にまとめましょう。Suricataは、検知の3兄弟(通信=Suricata/ログ=Sigma/ファイル=YARA)の“通信担当”であり、Zeekと組んでネットワークの“警報”と“記録”を担います。1つのアラートは“答え”ではなく“調査の入口”——そこから記録をたどり、端末を調べ、対応へつなぐ。この“つなぐ力”こそが、ツールを“守り”に変えます。
Suricata
通信を
シグネチャで警報・遮断
Zeek
通信を
記録・振る舞い分析
SIEM
集約・相関・
可視化
ハント
串刺しで
物語を復元
対応
封じ込め・
復旧へ
□ ネットから隔離した検証環境を用意した(監視・遮断は自分が許可された範囲で)/□ まずはIDSモードで、演習pcapを suricata -r 検査した(いきなりIPSにしない)/□ suricata-update でET Openルールセットを取り込んだ/□ 生成された eve.json を jq でアラート抽出して読んだ/□ うるさいルールを threshold/suppress で静かにする練習をした/□ Security Onion を自宅ラボに入れ、Suricata+Zeek+可視化の流れを体験した。まずは「IDSで見る→ルールを取り込む→静かに磨く」。それからIPSは“確実な悪”だけに、慎重に。
📚 用語集・FAQ・次に読む
つまずきやすい用語と、よくある疑問をまとめました。
ここまでに登場した言葉の“答え合わせ”として、用語集とFAQをまとめました。Suricataは奥が深い分野ですが、入口はこの記事の範囲で十分です。あとは安全な環境で手を動かしながら、少しずつ守備範囲を広げていきましょう。最初のアラートを自分の目で読み解けたとき、ネットワークの守りが“自分ごと”になります。
📖 用語集
| 用語 | 意味 |
|---|---|
| Suricata | シグネチャで通信を検査する、オープンソースの高速IDS/IPS/NSMエンジン。 |
| IDS / IPS | 侵入検知(見張って警報)/侵入防御(インラインで遮断)。同じSuricataの2つの動かし方。 |
| シグネチャ(ルール) | 「この通信は危険」を表す検知ルール。action+header+optionsで書く。 |
| action | 一致時の動作。alert/drop/reject/pass。 |
| content / pcre | 通信の中身を探す指定。文字列・バイト列/正規表現。 |
| スティッキーバッファ | http.uri等。「通信のどの部分を見るか」を指定し、狙い撃ちする仕組み。 |
| sid / rev | ルールのID/リビジョン。アラートの追跡と管理に使う背番号・版番号。 |
| eve.json(EVE) | SuricataのJSON出力。アラート+http/dns/tls/flow/fileinfoを記録。SIEM連携に最適。 |
| ET Open | Emerging Threatsの無料ルールセット。世界の集合知。suricata-updateで導入。 |
| threshold / suppress | うるさいアラートの抑制・しきい値設定。誤検知(アラート疲れ)対策の要。 |
| OISF | Suricataを開発する非営利団体(Open Information Security Foundation)。 |
❓ よくある質問(FAQ)
SuricataとSnortは何が違うの?
どちらもシグネチャ型のIDS/IPSで、ルール文法はおおむね互換です。Suricataはマルチスレッドで高速、JSON(eve.json)出力やアプリ層プロトコル検知・ファイル抽出が標準的、という違いがあります。Snortも3系で刷新されています。“Snort形式のルール資産を活かせる”という意味で、両者は地続きです。
SuricataとZeekはどちらを使えばいい?
役割が違うので両方がおすすめです。Suricataは既知の悪をシグネチャで“その場で警報・遮断”、Zeekは通信を“記録”して後から追える。アラート(Suricata)が出たら、記録(Zeek)で裏取りする——この組み合わせが最強です。Security Onionなら両方まとめて試せます。
最初からIPS(遮断)で使うべき?
いいえ、まずはIDS(見張るだけ)からが鉄則です。IPSは通信を止められる反面、誤検知が即・業務停止につながります。IDSで運用してルールを十分にチューニングし、「確実に悪だけを捕まえる」と自信を持てたルールだけを、慎重にブロックへ昇格させましょう。④章の注意点を必ず確認してください。
ルールは自分で全部書くの?
いいえ。Emerging Threats(ET Open)などの無料ルールセットを suricata-update で取り込むのが基本です。世界中の防御者が積み上げた検知が、すぐ手に入ります。自作は“自組織固有の脅威”を補うとき。読む→取り込む→チューニングするが王道で、いきなりゼロから書く必要はありません。
通信が暗号化されていても検知できる?
中身(本文)は読めませんが、tls.sni(接続先名)・証明書・JA3フィンガープリントは検査できます。また通信から取り出したファイルのハッシュでルールを書くことも可能。“外形”と“運ばれた物”から攻撃を捕まえられるのは、Zeekと共通する強みです。
🧭 次に読む
🗺️ 全体像とネットワーク
🧰 集約と対応
📚 参考・出典(一次情報)
- Suricata 公式ドキュメント(docs.suricata.io)/OISF(Open Information Security Foundation, suricata.io)
- Emerging Threats ルールセット(ET Open / ET Pro)/suricata-update
- Snort(ルール文法の系譜、snort.org)/Security Onion 公式ドキュメント
- EVE JSON 出力フォーマット仕様(Suricata公式)/JA3(Salesforce, TLSフィンガープリント)
- MITRE ATT&CK(ルールの metadata が参照)/SigmaHQ(eveログ向けログソース)


コメント