IPS(侵入防止システム)を導入したものの、業務通信まで遮断されて社内から問い合わせが止まらない――これは中小企業の情シスで本当によく聞く悩みです。誤検知(フォールスポジティブ)を放置するとアラート疲れで本物の攻撃を見逃し、逆に過剰にルールを止めれば防御スカスカになる。さじ加減が難しいのがIPSのチューニングです。
この記事では、IPSの誤検知が起きる典型パターンから、ホワイトリスト登録・シグネチャ調整・ベンダーへのフィードバック・運用フローまでを、現場で使えるレベルでまとめました。Suricata/Snortの実際のルール記述例もそのまま貼って使えるようにしてあります。IDS/IPSの基本概念から知りたい方は、先にIDS/IPSとは?侵入検知・防止システムの違いと選び方を読むとつながりが見えます。
なお、IDS/IPSを「どこに置くか」という設置場所の判断は本記事の対象外で、姉妹記事「IDS/IPSの設置場所ガイド」で扱います。本記事は設置完了後の運用フェーズ、つまり「鳴ったアラートをどう減らすか」に焦点を絞ります。設置→運用の流れで読み進めると理解が立体的になります。

IPS誤検知が起きる典型パターン3類型
誤検知は「シグネチャが粗い」だけが原因ではありません。私が現場で見てきた事故の8割は、次の3類型のどれかに当てはまります。原因を切り分けないまま「とりあえずルール無効化」をやると、本当に防がなければいけない通信まで通してしまいます。逆に類型さえ把握していれば、ベンダーへのエスカレーションも自社チューニングも判断が速くなります。
| 類型 | 典型シーン | 第一手 | 頻度 |
|---|---|---|---|
| 業務アプリ起因 | 独自プロトコル・自社開発APIがWebシェル風のリクエストを送る | 送信元IP+URIでホワイトリスト | ★★★ |
| 運用ツール起因 | 脆弱性スキャナ・監視Pingが攻撃トラフィックと類似 | スキャナのIPをBYPASSゾーンへ | ★★ |
| シグネチャ過敏 | 正規表現が広すぎて健全なクエリが引っかかる | thresholdで頻度制御+suppress | ★★★ |
類型を見極めずに対応すると、後で「なぜこのルールを止めたのか分からない」という負債になります。誤検知が出たらまず「業務由来か・運用由来か・シグネチャ由来か」を1分で切り分ける癖をつけてください。私の経験では、初動で類型さえ書き残しておくと、半年後の棚卸しが3倍速くなります。
業務アプリ起因が一番ややこしい
3類型のなかでも、業務アプリ起因が最も判別が難しいケースです。社内の独自APIや古いERPは、SQLi・コマンドインジェクション・ディレクトリトラバーサルのシグネチャに偶然一致するペイロードを投げることがあります。本物の攻撃と区別するには、開発元との連携かソース確認が必須です。「触るとブラックボックスが壊れそう」な古いシステムほど、誤検知の温床になりがちです。社内ITに開発経験者がいれば、そのままソースコードを読んで判別できますが、外注で開発されたシステムだとベンダーへの問い合わせに時間がかかります。半年単位の運用設計が必要になるケースもあります。
シグネチャ調整の基本|ホワイトリスト登録手順
ホワイトリストは「ルールを無効化する」のではなく「特定の条件に合致するときだけ例外扱いする」というのが鉄則です。ルール全体を止めると同じ攻撃パターンが他の経路から来たときに素通りします。条件を絞った例外設定こそチューニングの本質です。チューニングを軽視するとIPSは「単なる遮断装置」になり、業務妨害ツールに成り下がります。
1. 5W1Hで例外条件を書き出す
誰(送信元IP)が・何を(URI/ペイロード)・どこへ(宛先IP)・いつ(時間帯)・どう(メソッド/ポート)アクセスしているか。最低でも送信元IPと宛先サービスの2軸で条件を絞ります。「とりあえずIP単位で全部許可」は事故のもとです。条件のメモは設定ファイルのコメント行と、後述のYAML台帳の両方に残します。両方に書くのは冗長に見えますが、設定ファイルだけだと後任者が一覧で把握できず、台帳だけだと現物との乖離が生じやすいからです。
2. Suricataのthreshold.configで頻度制御
Suricataではthreshold.configに1行追加するだけで、特定ルールの発火条件を細かく調整できます。下は「sid 2010939を、送信元10.0.0.0/24からの通信に限り、5分間に10回までは抑制する」設定例です。typeにはlimit・threshold・bothの3種類があり、用途で使い分けます。
# /etc/suricata/threshold.config # sid:2010939 を社内セグメントからは抑制 suppress gen_id 1, sig_id 2010939, track by_src, ip 10.0.0.0/24 # 全体に頻度制限をかける場合 threshold gen_id 1, sig_id 2010939, type limit, track by_src, count 1, seconds 300 # しきい値超過時のみ通知(ノイズ削減) threshold gen_id 1, sig_id 2010939, type threshold, track by_src, count 5, seconds 60
編集後はsuricatasc -c reload-rulesでリロードし、ログに反映を確認します。リロードを忘れて「設定したのに変わらない」というつまずきは初心者あるあるです。systemd経由でのrestartは検知に瞬断が発生するので、本番ではreloadを優先します。
3. Snortのsuppressルールでホスト除外
Snortも同じ考え方です。threshold.confまたはsuppress.confに書きます。重要なのは「コメント行に登録理由と承認日を残す」こと。半年後に見て理由が分からないルールは消されるか、逆に放置される運命です。
# /etc/snort/suppress.conf # 2026-04-15 承認: 情シス田中 / 監視サーバ 192.168.10.5 からのスキャンを除外 # 再評価期限: 2026-10-15 suppress gen_id 1, sig_id 1:2024897, track by_src, ip 192.168.10.5 # 宛先指定での抑制も可能 suppress gen_id 1, sig_id 1:2024897, track by_dst, ip 192.168.20.10
4. ホワイトリスト雛形(YAML管理)
ルールがバラバラの設定ファイルに散らばると棚卸しできなくなります。GitリポジトリにYAMLで集約し、変更はPRで承認制にすると運用が安定します。レビューの際はreviewer欄を埋めるルールにすると、誰が承認したか後から追えます。Git管理にすると変更履歴が残り、「いつ・誰が・なぜこの例外を入れたか」が監査にも耐えます。
# ips-whitelist.yaml - sid: 2010939 reason: "社内資産管理ツールのHTTP POSTがSQLi類似と誤検知" scope: src_ip: 10.0.0.0/24 dst_port: 443 approved_by: "情シス田中" reviewer: "セキュリティ責任者 佐藤" approved_at: "2026-04-15" review_due: "2026-10-15" ticket: "SEC-1024"

ベンダーフィードバックを送る際のテンプレ
商用IPS(Palo Alto・Fortinet・Trend Micro等)の場合、誤検知をベンダーに報告するとシグネチャ自体が修正されることがあります。自社だけでなく業界全体の誤検知が減るので、積極的に送る価値があります。ただ、雑なメールでは動いてもらえません。次のテンプレで送ると対応が早くなります。
件名: [False Positive Report] sig_id XXXXX が業務通信を遮断 # 環境 製品名・バージョン: Palo Alto PAN-OS 11.1.x シグネチャID/名称: XXXXX / SQL Injection Generic 発生日時: 2026-04-20 10:15 JST 発生頻度: 1日あたり約30回 # 誤検知の内容 誤って遮断された通信: 送信元: 10.0.0.50(社内資産管理サーバ) 宛先: 192.168.20.10:443(社内ポータル) メソッド: POST /api/inventory/update # 検証結果 当該通信は社内ツールの正規API呼び出しであり、SQLiではない ペイロードは添付pcapを参照(認証情報マスキング済み) # 希望対応 シグネチャの精度改善、または除外条件の追加を検討いただきたい 回答希望期限: 2週間以内
添付するpcapには機密情報が含まれることが多いので、送信前に必ずペイロード内のトークン・認証情報をマスキングしてください。これを忘れて自社の認証情報をベンダーに渡してしまった事故も実際にあります。tcprewriteやeditcapで機微情報を伏せてから送るのが定石です。Wiresharkで該当バイトを置換してエクスポートする方法でも構いません。
商用IPSのチューニング画面比較
主要な商用IPSのチューニング画面はベンダーごとにかなり違います。次の比較を頭に入れておくと、ベンダー乗り換え時のチューニング負担を見積もれます。※ 各ベンダーのUI構成は2026年5月時点での記述であり、製品アップデートで画面パスが変わる可能性があります。最新版は各ベンダーの公式ドキュメントで確認してください。
| ベンダー | 例外設定の場所 | 細粒度 |
|---|---|---|
| Palo Alto | Vulnerability Profile → Exception | 送信元/宛先/シグネチャID単位 |
| Fortinet | Security Profiles → IPS → Signature Override | カテゴリ・OS・重大度・アクション単位 |
| Trend Micro Apex One/Apex Central | Intrusion Prevention Rules → Configuration(Apex Central集中管理時) | ルール単位+ポリシー継承 |
| Cisco Firepower | Policies → Access Control → Intrusion Policy → Rules | Generate Events / Drop / Disabledの3段 |
ベンダーごとに「条件を絞る粒度」がかなり違うので、調達段階で誤検知運用のしやすさを比較しておくと、運用開始後の負担が大きく変わります。実機検証期間に「想定する誤検知パターン3つを実際に絞り込めるか」を試すと、ベンダー選定の精度が上がります。
アラート疲れを防ぐ運用フロー
誤検知を1件ずつ気合いで対応していると、必ずどこかで限界が来ます。情シス1人体制なら半年も持ちません。トリアージ→チューニング→再評価という3段ループを仕組み化することで、人が変わっても運用が回るようになります。
1. トリアージ(10分以内)
新しいアラートが上がったら、まず「実害があるか・なさそうか」を10分で判定します。詳細解析は後回しでよく、SOAR的な簡易チェックリストで素早く分類します。
| 判定軸 | YES の場合 | NO の場合 |
|---|---|---|
| 送信元は社内資産か | 誤検知候補へ | 本物の可能性大、即対応 |
| 同じシグネチャが過去30日で連発しているか | チューニング対象 | 新規事象として深掘り |
| 関連IDS/EDRログに痕跡があるか | 本物の疑い濃厚 | 誤検知の確度上昇 |
| 業務時間外の通信か | 本物の疑い上昇 | 業務由来の確度上昇 |
2. チューニング(週次バッチ)
個別対応をリアルタイムでやると消耗します。明らかな本物以外は週次のチューニング会で一括処理するのが現実的です。1時間枠で誤検知候補を10件さばくくらいのペースが続きやすい運用です。会の進行は「件数TOP10だけ見る」「YAML台帳に追記する」「翌週まで効果を観測する」の3点をルーティン化します。会議体として固定すると、属人化を防げます。
3. 再評価(月次・四半期)
登録したホワイトリストは「期限付き」で運用します。半年経ったら必ず再評価し、不要になったルールは削除する。これをやらないとホワイトリストが肥大化し、いつのまにか防御がスカスカになります。月次ヘルスチェックで以下10項目を確認してください。
・項目1: 過去30日のアラート件数推移
・項目2: シグネチャ別TOP10と誤検知率
・項目3: ホワイトリスト件数と前月比
・項目4: 期限切れホワイトリストの数
・項目5: ベンダーフィードバック送信件数と返信状況
・項目6: シグネチャ更新適用日と内容
・項目7: IPSバイパス時間(メンテ等)の合計
・項目8: 検知をすり抜けた攻撃の有無(EDR/SIEM突合)
・項目9: オペレーター対応平均時間
・項目10: 経営層への月次レポート提出
これら10項目を毎月スプレッドシートに記録するだけで、半年後には「自社のIPS運用の体力」が数字で見えるようになります。経営層への説明資料にもそのまま使えます。改善トレンドを示せれば、来年度のセキュリティ予算交渉でも強い根拠になります。

オープンソースIPS(Suricata/Snort)でのルール無効化実例
OSS IPSは設定ファイルが直接見えるので、チューニングの透明性が高いのが利点です。一方、ルール無効化を雑にやると後任が引き継げなくなるので、コメント運用が命です。
| 方式 | 用途 | ファイル例 |
|---|---|---|
| disablesid | ルール自体を完全停止(最終手段) | /etc/suricata/disable.conf |
| suppress | 特定IPからのみ抑制(推奨) | threshold.config |
| threshold limit | 頻度を絞り込み(過剰検知向け) | threshold.config |
| modifysid | alertをdropに変える等(高度) | /etc/suricata/modify.conf |
| enablesid | デフォルト無効ルールの有効化 | /etc/suricata/enable.conf |
Suricata/Snortのルール構造そのものを学びたい方は、IDS/IPSをどこに置くかで検知範囲が大きく変わるので、IDS/IPSの設置場所ガイドと合わせて読むと、ルールチューニングの効きどころが立体的に見えてきます。設置場所が間違っていると、どんなに精緻なチューニングをしても誤検知は減りません。
誤検知を放置するリスクと事故事例
「誤検知が多いからとりあえずIPSをdetect-onlyモード(IDSモード)に戻す」――これが一番危ない一手です。現場で実際にあった失敗パターンを2つ紹介します。固有名は伏せていますが、構造は実例そのままです。
事例1: アラート疲れで重要アラートを見落とし
中堅企業で報告された一般的な失敗パターンとして、月3万件のIPSアラートのうち97%が誤検知という構成があります。担当者は「またか」と流す癖がつき、本物のC2通信アラートを11日間見落とした結果、社内端末からデータが持ち出される、という失敗例が業界で共有されています。誤検知率が高い状態を放置すること自体が、攻撃成功率を上げる最大の要因になります。「アラートが多いから人を増やす」より先に、「アラートの質を上げる」のが正解です。
事例2: 過剰なホワイトリストで防御がスカスカ
別の業界では、業務クレームに耐えきれず「社内セグメント全体をIPSの対象外」にしていたケースが報告されています。結果、内部からの不審通信は一切検知できず、ランサムウェアの横展開が完了するまで気づかなかった、という事例があります。「業務優先で例外を広げすぎる」のは、誤検知放置と同じくらい危険です。例外は狭く・短く・記録付きでが基本姿勢です。
事例3: シグネチャ更新を止めて既知の脆弱性が刺さった
3つ目に挙げられるのは、誤検知の頻発に嫌気がさして「シグネチャ自動更新を停止」してしまうパターンです。半年後に公開された既知の脆弱性を狙う攻撃が、当時の最新シグネチャでは検知できたはずなのに素通りした、という失敗例が業界で共有されています。シグネチャ更新は止めず、「更新後にどのルールが暴れたか」を毎週確認する方針に切り替えるのが正しい対処です。シグネチャ更新が業務影響を出した場合のロールバック手順も、事前に手順書化しておくと運用が安定します。
よくある質問
Q1. IPSのルールはどれくらいの頻度で見直すべきですか?
最低でも月1回はTOP10シグネチャの誤検知率を見直し、ホワイトリストは半年で全件再評価が目安です。シグネチャ更新は週次で適用するのが理想ですが、影響範囲確認のため月1まとめ適用にしている企業も多くあります。「更新を止める」だけは避けてください。更新を止めると新規の脆弱性に対応できなくなり、IPSの価値が半減します。
Q2. ホワイトリストはどこまで広げてよいですか?
「送信元IP × 宛先サービス × 該当シグネチャID」の3軸で必ず絞ってください。送信元IPだけで全シグネチャを通すような広い例外は、攻撃者にそのIPを乗っ取られた瞬間に防御が崩壊します。広い例外を作る場合は、別途EDRやNDRで補完監視するのが鉄則です。多層防御の発想を忘れないでください。
Q3. 誤検知率の許容範囲はどのくらいですか?
業務影響のある誤遮断(ブロックモード)であれば、月数件以内が目安です。アラートのみ(IDSモード)でも誤検知率90%超は要チューニング。70%を切ると運用に乗ってきたサインです。一般的に成熟した運用では誤検知率50%前後まで下がります。これより低い数字を目指すと、逆に検知漏れが増えるバランスポイントが訪れます。
Q4. 商用IPSとOSS IPSではチューニングの考え方が違いますか?
基本思想は同じですが、商用はGUIで条件を絞れる代わりにブラックボックス、OSSはルールが見える代わりに自分で書く必要があります。中小企業ならOSS(Suricata)+SIEM連携で十分戦えますが、24時間運用が必要ならMSSP活用も選択肢に入ります。コストと運用力のバランスで決めるのが現実的です。
Q5. 誤検知が多すぎて手が回りません。どこから手を付けるべき?
まず件数TOP10シグネチャだけに絞って1週間チューニングしてください。多くの環境ではTOP10で全アラートの7〜8割を占めます。10件さばけば一気に楽になります。それでも回らなければMSSPやSOCサービスへの一部委託を真剣に検討する段階です。「全部完璧に対応する」のは最初から諦めるのがコツです。
Q6. Snort 2系と3系でルール記述方法は変わりますか?
大きく変わります。Snort 2系は/etc/snort/suppress.confや/etc/snort/threshold.confといったテキスト設定ファイルに、suppress gen_id 1, sig_id 12345, track by_src, ip 10.0.0.0/24のような独自構文で記述します。一方Snort 3系はsnort.lua内のテーブル形式に書式が変更され、suppress = { { gid = 1, sid = 12345 } }のようなLua構文で書きます。既存の2系設定をそのまま3系へコピペしても動かないため、移行時は構文変換スクリプトを通すか、手動で書き直す必要があります。

本記事のまとめ
IPS誤検知の対応は「ルールを止める」ではなく「条件を絞った例外で運用する」が鉄則です。3類型での切り分け、ホワイトリストのYAML管理、ベンダーへのフィードバック、トリアージ→チューニング→再評価の3段ループ、これらを仕組み化すれば情シス1人体制でも誤検知運用は回ります。
IDS/IPS全体の基礎から学び直したい方はIDS/IPSとは?侵入検知・防止システムの違いと選び方を、設置場所の戦略を整理したい方はIDS/IPSの設置場所ガイドもあわせて確認してみてください。Linuxサーバ側のログ監視・SELinux運用は姉妹サイトLinuxMaster.JPで深掘りしています。
IPSチューニングの実例をもっと知りたい方へ
誤検知を減らす運用ノウハウは、現場で踏んだ失敗の数だけ精度が上がります。
正しいセキュリティ知識を体系的に身につけたい方へ、メルマガで実践的なセキュリティ対策ノウハウをお届けしています。
