Suricata入門|シグネチャでネットワークの脅威を止めるIDS/IPS(ネットワーク侵入検知)

🛡 実務者向け・ネットワーク侵入検知入門

Suricata入門|シグネチャでネットワークの脅威を止めるIDS/IPS

Zeekが「通信を黙々と記録する飛行記録装置」なら、Suricataは「既知の攻撃パターンが通った瞬間に警報を鳴らし、必要なら遮断する門番」。ルールの構造から、content/pcreによるマッチ、IDSとIPSの違い、ET Openルールの運用、Zeek・SIEM連携まで、防御者の視点で日本語でやさしく解説します。

🛡 Suricata 📛 シグネチャ 🚦 IDS / IPS 📡 ネットワーク検知 🧅 Security Onion

ネットワークの守りには、性格の違う2つの目が要ります。1つは「すべてを淡々と記録し、後から追えるようにする目」——これはZeekが担います。もう1つが「既知の攻撃パターンが通った“その瞬間”に警報を鳴らし、必要なら止める目」。これを担うのが Suricata(スリカータ)です。Suricataは、流れる通信をあらかじめ用意した“シグネチャ(検知ルール)”と高速照合し、危険を見つけたらアラートを上げ、インライン構成ならその通信を遮断(ブロック)もできる、オープンソースのIDS/IPS(侵入検知・防御システム)です。日本語でまとまった解説がまだ少ないこの分野を、DFIR完全ロードマップの一歩進んだ実践編として、基礎からていねいに解き明かします。

⚠ 大切な前提(この記事の立ち位置)

本記事は、守る側(青チーム)が、自分の管理するネットワークを監視して攻撃を検知・遮断するための教育目的の解説です。通信の監視・遮断は、あなた自身が管理または正式に許可されたネットワークでのみ行ってください。他者の通信を無断で傍受する行為は、電気通信事業法の「通信の秘密」や不正アクセス禁止法に関わり得ます。またIPS(インライン)構成は、設定を誤ると正規の通信まで止めてしまい、業務停止を招きます。まずは“見るだけ”のIDSや、自分の検証環境(自宅ラボ)・公開演習用pcapで学びましょう(IDS/IPSの違いと注意は④章で詳述します)。

01

🛡 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 ルールと高速照合 (マルチスレッド) 📛 シグネチャ ET Open 等のルール集 🚨 アラート(IDS)怪しい通信を通知 🛑 遮断(IPS)インラインなら止める 🗂 eve.json 記録JSONでログ出力 SIEMへ 同じエンジンが、構成しだいで「警報するIDS」にも「止めるIPS」にもなる 検知の根拠は“ルール”。だからルールの質と運用が、守りの強さを決める

もう一つ知っておきたいのが、Suricataが「検知の3兄弟」の一角だということです。“悪の特徴をルールで表現して照合する”という発想は、対象を変えて各所で使われています。通信はSuricata、ログはSigma、ファイルはYARA——この3つを押さえると、ネットワーク・ログ・ファイルの3面から“既知の悪”を捕まえる網が完成します。それぞれ文法は違いますが、根っこの考え方は同じ。1つ学べば、ほかの理解もぐっと速くなります。

検知ルール対象見つけるもの
Suricataネットワーク通信(パケット)C2通信・攻撃・マルウェアの通信パターン
Sigmaログ(イベント)不審なプロセス起動・認証・操作の痕跡
YARAファイル・メモリマルウェア検体・悪性コードの特徴
💡

ひとことで言うと

Suricataは「“既知の攻撃の顔写真”を手に、通る通信を一人ずつ照合する門番」です。Zeekが“全員の出入りを台帳に書く記録係”なら、Suricataは“指名手配犯を見つけたら警報を鳴らす門番”。2人がいて初めて、入口は本当に守られます。

02

🧱 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(版)・classtypereferencemetadata など。

headerに出てくる $HOME_NET(自組織のネットワーク)や $EXTERNAL_NET(外部)は、設定で定義する変数です。「内側から外側へ向かう通信だけを見る」といった指定が、これで簡潔に書けます。実際の1本を見てみましょう。下は「内部から外部へ、怪しいUser-Agentでの通信=C2の連絡(ビーコン)の疑い」を検知する、教育用のルールです。

# 怪しいUser-Agentでの外向き通信を検知する教育用ルール(1行で書く) alert http $HOME_NET any -> $EXTERNAL_NET any ( \ msg:“SUSP 怪しいUser-AgentによるC2連絡の疑い”; \ flow:established,to_server; \ http.user_agent; content:“EvilBot/1.0”; \ classtype:trojan-activity; \ reference:url,yasashii-cybersecurity.com/suricata-ids-ips-network-detection/; \ metadata:mitre_tactic_id TA0011; \ sid:1000001; rev:1; )

alert(action)+http $HOME_NET any -> $EXTERNAL_NET any(header)+カッコ内(options)。metadataMITRE ATT&CKのC2戦術(TA0011)に紐づけています。sidは自作ルール用に100万番以降を使う慣習があります。

options内の sid(Signature ID)と rev(リビジョン)は、ルールの“背番号と版番号”。これがあるから、アラートを見たとき「どのルールが、なぜ光ったか」を追跡でき、ルールを更新・管理できます。classtype はアラートの種類(例:trojan-activity)、reference は根拠資料へのリンク。メタ情報をきちんと書くことが、後で“育てられる”ルールの条件です。

🧩 ルールの解剖図——action | header | options

① action alert ② header(対象の通信) http $HOME_NET any -> $EXTERNAL_NET any ③ options(何を見て・記録) ( msg; content; sid; rev; … ) どうする どの通信を(向き->も指定) 中身の条件+メタ情報 この3かたまりの順で読めば、どんなルールもほどける(Snortとほぼ共通の文法)
🔁

SnortのルールはSuricataでもほぼ動く

Suricataのルール文法は、老舗IDSSnortとおおむね互換です。だから世界中で蓄積されたSnort形式の検知ルール資産を、Suricataでも活かせます。「SigmaがSIEMの方言を吸収した」ように、Suricata/Snortの世界にも“共通の書き方”があり、知見が持ち寄れるのです。

03

🎯 マッチの心臓部:content と pcre、修飾子

「通信の中身の、どこを、どう見るか」。ここがルールの効きを決めます。

options の主役は、通信の中身を探す content です。content:"..." で文字列やバイト列を指定し、見つかれば一致。複数の content を並べれば、すべてを満たす(AND)条件になります。これに修飾子と、後述のスティッキーバッファを組み合わせるのが、Suricataの表現力です。

基本

content(中身の照合)

content:"malware" で文字列を、content:"|6a 40 68|" で16進バイト列を指定。nocase(大小無視)・depthoffsetdistancewithin で“どこを”見るか細かく制御します。

アプリ層

スティッキーバッファ

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のURIに怪しいパターン(16進の英数16文字+.php)を、外向き通信に限定して検知 alert http $HOME_NET any -> $EXTERNAL_NET any ( \ msg:“SUSP ビーコン風のURIパターン”; \ flow:established,to_server; \ http.method; content:“GET”; \ http.uri; content:“/gate.php”; nocase; \ pcre:“/\/[a-f0-9]{16}\.php$/”; \ classtype:trojan-activity; sid:1000002; rev:1; )

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と共通する強みです。

04

🚦 IDSとIPS:見張るか、止めるか

同じSuricataでも、置き方しだいで“警報係”にも“関所”にもなります。違いと注意点を。

Suricataには、大きく2つの動かし方があります。IDS(侵入検知)は、通信の“複製”を受け取って見張るだけ——怪しければアラートを上げますが、通信そのものには手を出しません。IPS(侵入防御)は、通信の“通り道そのもの”に割り込み(インライン)、危険な通信をその場で破棄(ブロック)できます。強力ですが、その分リスクも伴います。

🚦 IDS(見張る)と IPS(止める)の置き方の違い

IDS(受動・見張るだけ) 通信 宛先 通信はそのまま流れる Suricata 複製を見て🚨警報(無リスク) IPS(インライン・止める) 通信 Suricata通す/止める 宛先 通信が“中を通る”=🛑遮断できる =誤検知は正規通信の停止に直結

どちらで始めるべきか。答えははっきりしていて、まずはIDS(見張るだけ)からです。IDSは通信に影響しないので、誤検知が出ても“余計なアラートが増える”だけで済みます。ここでルールを十分にチューニングし、「このルールは確実に悪だけを捕まえる」と自信が持てたものを、少しずつIPS(遮断)に昇格させていく。いきなり全ルールでブロックを始めるのは、事故のもとです。

🚨 IPS(インライン遮断)は“諸刃の剣”——いきなり本番でやらない

IPSは通信の通り道に割り込むため、たった1つの出来の悪いルールが、正規の業務通信を巻き込んでブロックし、システム障害を引き起こすことがあります(誤検知=サービス停止)。鉄則は4つ。①まずIDSで運用し、誤検知をゼロに近づけてからブロック対象を選ぶ②ブロックは“確実に悪”なルールだけに限定(広いルールでdropしない)/③障害時に通信を素通しさせる“フェイルオープン”の挙動を理解しておく④必ず検証環境で、正規業務を流して影響を確認してから本番へ。「止められる」力は強力ですが、止めてはいけないものまで止めない設計こそが、上級者の証です。

設置場所の考え方は、IDSならZeekWiresharkと同じ。スイッチのSPAN(ミラー)ポートTAPから通信の複製を受け取り、インターネットとの境界に置きます。下は、3つの動かし方をそのままコマンドにしたものです。

# ① IDS:pcapをオフライン検査(まず安全にここから) suricata -r traffic.pcap -l ./logs/ # ② IDS:監視用IFで受動観測(SPAN/TAPから。通信は止めない) sudo suricata -i eth0 # ③ IPS:NFQUEUE経由でパケットを受け取り遮断可能 ※検証環境で慎重に sudo suricata -q 0

-r=pcap、-i=受動監視(IDS)、-q=NFQUEUE(IPS/インライン)。同じSuricataが、フラグひとつで“見張る”にも“止める”にもなります。

05

🔄 ルールを“育てる”:ET Openと運用

ルールは全部自作しなくていい。世界の集合知を取り込み、自分の環境に合わせて磨きます。

「何千ものルールを自分で書くのか…」と身構える必要はありません。世界には、研究者やコミュニティが公開する高品質なルールセットがあります。代表がEmerging Threats(ET Open)——無料で使えるオープンなルール集で、新しい脅威が観測されるたびに更新されます(有償のET Proや、Snort/Talosのルールもあります)。これらを取り込めば、翌日にはあなたの環境でも世界水準の検知が動きます。管理ツールが suricata-update です。

# ET Openルールセットを取得・更新(コミュニティの集合知を取り込む) sudo suricata-update # pcapをオフライン検査し、eve.json を出力 suricata -r suspicious.pcap -l ./output/ # eve.json からアラートだけ抽出して見やすく(jq) cat output/eve.json | jq ‘select(.event_type==”alert”) | {time:.timestamp, sig:.alert.signature, sid:.alert.signature_id, src:.src_ip, dst:.dest_ip}’

▲ Suricataの出力 eve.json(EVE形式のJSONログ)には、アラートだけでなく httpdnstlsflowfileinfo など豊富な記録が入ります。JSONなのでSIEMjq と相性抜群です。

ただし、ルールを取り込んだだけでは“運用”になりません。どんな優秀なルールセットも、自組織の正常な業務に対しては誤検知(フォールスポジティブ)を出します。ここからが検知エンジニアの腕の見せどころ。3ステップで“育て”ます。

取り込む

ET Openで土台を作る

suricata-update でルールセットを導入。まずは“世界の集合知”を土台にし、ゼロから書かない。新しい脅威への追従も自動化できます。

試す

自分の通信で検証する

演習pcapや自組織のミラー通信で動かし、「狙った攻撃で光るか」「平常時に鳴りすぎないか」を確認。YARA同様、2方向のテストが要。

磨く

チューニング(誤検知を抑える)

うるさいルールはしきい値(threshold)抑制(suppress)で静かにし、不要なSIDは無効化。「静かで正確」を目指して磨き続けます。

⚠ 「アラート疲れ」を防ぐのが、運用の本質

ルールは多ければ良いというものではありません。誤検知だらけのアラートが鳴り続けると、担当者は麻痺し、本当に重要な1件を見逃します(アラート疲れ=alert fatigue)。Sigmaの運用と同じく、Suricataでも「鳴らすこと」より「静かに、正確に鳴らすこと」が上級者への分かれ道。threshold でノイズを抑え、本当に効くルールだけをブロックに昇格させる——この“引き算”が、信頼される検知をつくります。

もう一つ、Suricataの“育て方”で覚えておきたいのがファイル抽出です。通信の中を流れたファイルを取り出し、そのハッシュ(MD5)を記録できます。これを脅威インテリジェンスのハッシュリストと照合すれば、運ばれたマルウェアを名指しで捕捉できます。さらに抽出したファイルをYARAにかければ、“通信→ファイル”と検知が一本につながります。

06

🎛 検知をつなぐ:Zeek・SIEM・脅威ハント運用

Suricataの警報は、ほかの仕組みと“つなぐ”ことで、本当の力になります。

Suricataのアラートは、それ単体では“点”にすぎません。「なぜ光ったのか」「その前後で何が起きたのか」を知るには、記録の達人Zeekのログや、エンドポイントの情報と突き合わせる必要があります。Suricata(アラート)とZeek(記録)を両輪に、SIEMへ集約してハントする——これが現代のネットワーク監視(NSM)の流れです。

1

配置する(Deploy)

境界のセンサーで、SuricataとZeekを一緒に動かす。Suricataは“既知の悪に即警報”、Zeekは“全通信を記録”。学習ならSecurity Onionが両方まとめて体験できる。

2

ルールを整える(Tune)

ET Openを土台に、自組織向けにチューニング。MITRE ATT&CKで「どの攻撃段階をカバーできているか」を地図化し、穴を優先的に埋める。

3

集約する(Aggregate)

eve.json をSIEM(Splunk/Elastic)へ。アラートとZeekログを同じ場所に集め、横断検索・相関できるようにする。Sigmaルールをeveログに当てることも可能。

4

狩る(Hunt)

アラートを起点に、Zeekの conn.logdns.logflow_id で串刺し。「この警報→どの接続→どのドメイン→どのファイル」と物語を復元し、本物か誤検知かを見極める。

5

対応する(Respond)

確証が得られたらインシデント対応へ。Velociraptorで該当端末を調べれば、“通信”と“端末”の両面から封じ込められる。

ここで全体像を一枚にまとめましょう。Suricataは、検知の3兄弟(通信=Suricata/ログ=Sigma/ファイル=YARA)の“通信担当”であり、Zeekと組んでネットワークの“警報”と“記録”を担います。1つのアラートは“答え”ではなく“調査の入口”——そこから記録をたどり、端末を調べ、対応へつなぐ。この“つなぐ力”こそが、ツールを“守り”に変えます。

📡

Suricata

通信を
シグネチャで警報・遮断

🛰

Zeek

通信を
記録・振る舞い分析

🪵

SIEM

集約・相関・
可視化

🔎

ハント

串刺しで
物語を復元

🛡

対応

封じ込め・
復旧へ

✅ Suricata学習・はじめの一歩

ネットから隔離した検証環境を用意した(監視・遮断は自分が許可された範囲で)/□ まずはIDSモードで、演習pcapを suricata -r 検査した(いきなりIPSにしない)/□ suricata-update でET Openルールセットを取り込んだ/□ 生成された eve.jsonjq でアラート抽出して読んだ/□ うるさいルールを threshold/suppress で静かにする練習をした/□ Security Onion を自宅ラボに入れ、Suricata+Zeek+可視化の流れを体験した。まずは「IDSで見る→ルールを取り込む→静かに磨く」。それからIPSは“確実な悪”だけに、慎重に。

07

📚 用語集・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 OpenEmerging Threatsの無料ルールセット。世界の集合知。suricata-updateで導入。
threshold / suppressうるさいアラートの抑制・しきい値設定。誤検知(アラート疲れ)対策の要。
OISFSuricataを開発する非営利団体(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と共通する強みです。

まず何から始めればいいですか?

IDSモード+演習pcapが最短です。WiresharkZeekで使った安全な教材pcapを suricata -r にかけ、eve.json のアラートを読んでみましょう。腰を据えるなら Security Onion を自宅ラボに入れると、Suricata+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ログ向けログソース)

コメント