🐾

Suricata IPSでカスタムルールを設定する時にハマったこと

に公開

概要

Suricataは、オープンソースのネットワーク侵入検知・防御システム(IDS/IPS)です
SuricataをIPSとして利用しようとしたとき、いくつかつまずいた点があったので備忘録としてまとめます

つまずいた点

1.公式ルールは直接変更しない

/etc/suricata/rules/suricata.rulesは公式配布ルールです
特定のシグネチャをdropに変更したい場合、alert → dropに書き換えて設定を反映させればいいと考えていました
しかし、suricata-updateでルールをアップデートすると、上書きされalertになっていました
特定のシグネチャを変更したい場合、local.rulesにカスタムルールとして追記した方が良さそうです

alert → dropに変更

[root@test ~]# grep 2100498 /var/lib/suricata/rules/suricata.rules 
drop ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, confidence Medium, signature_severity Informational, updated_at 2019_07_26;)
[root@test ~]# 

suricata-updateでルールを更新

[root@test ~]# suricata-update
---
<Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules
---
<Info> -- Done.
[root@test ~]#

alertに戻っている

[root@test ~]# grep 2100498 /var/lib/suricata/rules/suricata.rules 
alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, confidence Medium, signature_severity Informational, updated_at 2019_07_26;)
[root@test ~]# 

2. SID(シグネチャID)は一意に設定する

公式ルールをdropに変更したものをそのままカスタムルールに記載したところ、エラーが発生しました
どうやらSID(シグネチャID)が重複するとエラーになってしまうようです
元ルールをコピーして使う場合は SIDを新しい番号(1000000~1999999)に変更する必要があります

NOTE: 1000000-1999999 Reserved for Local Use – Put your custom rules in this range to avoid conflicts!

https://community.emergingthreats.net/t/signature-id-allocation-ranges/491

公式ルールをそのままdropに変更してカスタムルールに記載

[root@test ~]# cat /var/lib/suricata/rules/local.rules
drop ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, confidence Medium, signature_severity Informational, updated_at 2019_07_26;)
[root@test ~]#

構文チェックでSIDが重複のエラーが発生

[root@test ~]# suricata -T -c /etc/suricata/suricata.yaml
---
E: detect-parse: Duplicate signature
E: detect: error parsing signature
---
[root@test ~]# 

まとめ

  • 公式ルールは直接変更しない → 必ず local.rules に追加
  • SIDは一意に設定(1000000〜1999999 推奨)
  • local.rules に追加後は suricata -T -c /etc/suricata/suricata.yaml で構文チェックする

参考リンク

https://docs.suricata.io/en/latest/install.html
https://www.digitalocean.com/community/tutorials/how-to-configure-suricata-as-an-intrusion-prevention-system-ips-on-rocky-linux-8

Discussion