Contents
Suricata
SURICATA IDS/IPSはネットワーク上の通信を監視し、不審なトラフィックを検知するオープンソースのIDSです。基本的な仕組みはシグネチャ型であるため、あらかじめ設定した不正な通信を検知できます。また、Suricataは検知だけでなく防御も行えることが特徴です。
1.事前準備
①EPEL リポジトリをシステム上で有効化する
1 |
# dnf -y install epel-release |
②システムのアップデート
1 |
# dnf update -y |
2.Suricata のインストールと設定
①Suricata のインストール
1 2 3 4 5 |
# dnf -y install suricata バージョンの確認 # suricata -V This is Suricata version 6.0.20 RELEASE |
②Suricataがネットワークパケットを検査するインターフェースとIPアドレスを決定
1 2 3 |
# ip --brief add lo UNKNOWN 127.0.0.1/8 ::1/128 ens160 UP 192.168.11.83/24 |
③設定ファイルを編集
1 2 3 4 5 6 7 8 9 |
# vi /etc/suricata/suricata.yaml # 15行目 : varsセクションで、ネットワークを定義する HOME_NET: "[192.168.11.0/24]" EXTRNAL_NET: "!$HOME_NET" # 595行目 : af-packetセクションのインターフェース名を設定 af-packet: - interface: ens160 |
1 2 3 4 5 |
# vi /etc/sysconfig/suricata # 8行目 :インターフェイスを指定 # Add options to be passed to the daemon OPTIONS="-i ens160 --user suricata " |
④Suricataのルール更新
1 2 3 4 5 6 7 |
# suricata-update ---------------------------------------------- 30/8/2024 -- 14:49:31 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 52288; enabled: 39706; added: 52288; removed 0; modified: 0 30/8/2024 -- 14:49:32 - <Info> -- Writing /var/lib/suricata/rules/classification.config 30/8/2024 -- 14:49:32 - <Info> -- Testing with suricata -T. 30/8/2024 -- 14:49:54 - <Info> -- Done. |
⑤Suricataの起動
1 2 |
# systemctl enable --now suricata Created symlink /etc/systemd/system/multiuser.target.wants/suricata.service → /usr/lib/systemd/system/suricata.service. |
⑥Suricataの起動確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# systemctl status suricata ● suricata.service - Suricata Intrusion Detection Service Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; preset: disabled) Active: active (running) since Fri 2024-08-30 14:50:26 JST; 7s ago Docs: man:suricata(1) Process: 22365 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS) Main PID: 22366 (Suricata-Main) Tasks: 1 (limit: 21870) Memory: 224.4M CPU: 7.787s CGroup: /system.slice/suricata.service mq22366 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i ens160 --user suricata Aug 30 14:50:26 Lepard systemd[1]: Starting Suricata Intrusion Detection Service... Aug 30 14:50:26 Lepard systemd[1]: Started Suricata Intrusion Detection Service. Aug 30 14:50:26 Lepard suricata[22366]: 30/8/2024 -- 14:50:26 - <Notice> - This is Suricata version 6.0.20 RELEASE running in SYSTEM mode |
ログを確認
1 2 3 4 5 6 7 8 9 10 11 |
# tail /var/log/suricata/suricata.log 30/8/2024 -- 14:50:26 - <Info> - stats output device (regular) initialized: stats.log 30/8/2024 -- 14:50:26 - <Info> - Running in live mode, activating unix socket 30/8/2024 -- 14:50:39 - <Info> - 1 rule files processed. 39706 rules successfully loaded, 0 rules failed 30/8/2024 -- 14:50:39 - <Info> - Threshold config parsed: 0 rule(s) found 30/8/2024 -- 14:50:39 - <Info> - 39709 signatures processed. 1176 are IP-only rules, 4860 are inspecting packet payload, 33469 inspect application layer, 108 are decoder event only 30/8/2024 -- 14:50:48 - <Info> - Going to use 2 thread(s) 30/8/2024 -- 14:50:48 - <Info> - Running in live mode, activating unix socket 30/8/2024 -- 14:50:48 - <Info> - Using unix socket file '/var/run/suricata/suricata-command.socket' 30/8/2024 -- 14:50:48 - <Notice> - all 2 packet processing threads, 4 management threads initialized, engine started. 30/8/2024 -- 14:50:48 - <Info> - All AFP capture threads are running. |
統計情報を確認するには、stats.log ファイルを確認します(デフォルトで8秒ごとに更新)
1 |
# tail -f /var/log/suricata/stats.log |
より高度な出力であるEVE JSONは、以下のコマンドで生成することができる
1 |
# tail -f /var/log/suricata/eve.json |
3.Suricata のテスト
①curl ユーティリティで ping テストを実行
1 2 |
# curl http://testmynids.org/uid/index.html uid=0(root) gid=0(root) groups=0(root) |
②ログに記録されたかどうかを調べるため、アラートログを確認
1 2 3 |
# cat /var/log/suricata/fast.log 08/30/2024-14:52:33.057054 [**] [1:2260001:1] SURICATA Applayer Wrong direction first Data [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 192.168.11.22:62137 -> 192.168.11.82:443 08/30/2024-14:52:40.065906 [**] [1:2260001:1] SURICATA Applayer Wrong direction first Data [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 192.168.11.22:62155 -> 192.168.11.82:443 |
4.Suricata Rulesの設定
①Suricataにパッケージされているルールセットの表示
1 2 3 4 5 6 |
# ls -al /var/lib/suricata/rules/ total 29840 drwxr-s--- 2 root suricata 57 Aug 30 14:49 . drwxrws--- 4 suricata suricata 33 Aug 30 14:49 .. -rw-r--r-- 1 root suricata 3228 Aug 30 14:49 classification.config -rw-r--r-- 1 root suricata 30551755 Aug 30 14:49 suricata.rules |
②ルールセットを提供するソースのインデックス一覧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# suricata-update list-sources Name: et/open Vendor: Proofpoint Summary: Emerging Threats Open Ruleset License: MIT Name: et/pro Vendor: Proofpoint Summary: Emerging Threats Pro Ruleset License: Commercial Replaces: et/open Parameters: secret-code Subscription: https://www.proofpoint.com/us/threat-insight/et-pro-ruleset Name: oisf/trafficid Vendor: OISF Summary: Suricata Traffic ID ruleset License: MIT Name: scwx/enhanced Vendor: Secureworks Summary: Secureworks suricata-enhanced ruleset License: Commercial Parameters: secret-code Subscription: https://www.secureworks.com/contact/ (Please reference CTU Countermeasures) Name: scwx/malware Vendor: Secureworks Summary: Secureworks suricata-malware ruleset License: Commercial Parameters: secret-code Subscription: https://www.secureworks.com/contact/ (Please reference CTU Countermeasures) Name: scwx/security Vendor: Secureworks Summary: Secureworks suricata-security ruleset License: Commercial Parameters: secret-code Subscription: https://www.secureworks.com/contact/ (Please reference CTU Countermeasures) Name: sslbl/ssl-fp-blacklist Vendor: Abuse.ch Summary: Abuse.ch SSL Blacklist License: Non-Commercial Name: sslbl/ja3-fingerprints Vendor: Abuse.ch Summary: Abuse.ch Suricata JA3 Fingerprint Ruleset License: Non-Commercial Name: etnetera/aggressive Vendor: Etnetera a.s. Summary: Etnetera aggressive IP blacklist License: MIT Name: tgreen/hunting Vendor: tgreen Summary: Threat hunting rules License: GPLv3 Name: malsilo/win-malware Vendor: malsilo Summary: Commodity malware rules License: MIT Name: stamus/lateral Vendor: Stamus Networks Summary: Lateral movement rules License: GPL-3.0-only Name: stamus/nrd-30-open Vendor: Stamus Networks Summary: Newly Registered Domains Open only - 30 day list, complete License: Commercial Parameters: secret-code Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed Name: stamus/nrd-14-open Vendor: Stamus Networks Summary: Newly Registered Domains Open only - 14 day list, complete License: Commercial Parameters: secret-code Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed Name: stamus/nrd-entropy-30-open Vendor: Stamus Networks Summary: Newly Registered Domains Open only - 30 day list, high entropy License: Commercial Parameters: secret-code Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed Name: stamus/nrd-entropy-14-open Vendor: Stamus Networks Summary: Newly Registered Domains Open only - 14 day list, high entropy License: Commercial Parameters: secret-code Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed Name: stamus/nrd-phishing-30-open Vendor: Stamus Networks Summary: Newly Registered Domains Open only - 30 day list, phishing License: Commercial Parameters: secret-code Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed Name: stamus/nrd-phishing-14-open Vendor: Stamus Networks Summary: Newly Registered Domains Open only - 14 day list, phishing License: Commercial Parameters: secret-code Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed Name: pawpatrules Vendor: pawpatrules Summary: PAW Patrules is a collection of rules for IDPS / NSM Suricata engine License: CC-BY-SA-4.0 |
③ソースを有効にする(et/openを有効にする場合)
1 2 3 4 5 6 7 |
# suricata-update enable-source et/open 30/8/2024 -- 15:07:30 - <Info> -- Using data-directory /var/lib/suricata. 30/8/2024 -- 15:07:30 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml 30/8/2024 -- 15:07:30 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules. 30/8/2024 -- 15:07:30 - <Info> -- Found Suricata version 6.0.20 at /usr/sbin/suricata. 30/8/2024 -- 15:07:30 - <Info> -- Creating directory /var/lib/suricata/update/sources 30/8/2024 -- 15:07:30 - <Info> -- Source et/open enabled |
アップデートを実行
1 |
# suricata-update |
Suricata service再起動
1 |
# systemctl restart suricata |
5.Suricata Custom Rulesの作成
①カスタマールールを含むファイルを作成
1 2 3 |
# vi /etc/suricata/rules/local.rules 下記内容を記載 alert icmp any any -> $HOME_NET any (msg:"ICMP Ping"; sid:1; rev:1;) |
②設定ファイルを編集(新しいルールのパスを定義)
1 2 3 4 5 6 7 8 |
# vi /etc/suricata/suricata.yaml # 1969行目あたりに追記 default-rule-path: /var/lib/suricata/rules rule-files: - suricata.rules - /etc/suricata/rules/local.rules |
③設定ファイルのテスト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# suricata -T -c /etc/suricata/suricata.yaml -v 30/8/2024 -- 15:09:12 - <Info> - Running suricata under test mode 30/8/2024 -- 15:09:12 - <Notice> - This is Suricata version 6.0.20 RELEASE running in SYSTEM mode 30/8/2024 -- 15:09:12 - <Info> - CPUs/cores online: 2 30/8/2024 -- 15:09:12 - <Info> - Setting engine mode to IDS mode by default 30/8/2024 -- 15:09:12 - <Info> - master exception-policy set to: auto 30/8/2024 -- 15:09:12 - <Info> - fast output device (regular) initialized: fast.log 30/8/2024 -- 15:09:12 - <Info> - eve-log output device (regular) initialized: eve.json 30/8/2024 -- 15:09:12 - <Info> - stats output device (regular) initialized: stats.log 30/8/2024 -- 15:09:25 - <Info> - 2 rule files processed. 39707 rules successfully loaded, 0 rules failed 30/8/2024 -- 15:09:25 - <Info> - Threshold config parsed: 0 rule(s) found 30/8/2024 -- 15:09:25 - <Info> - 39710 signatures processed. 1177 are IP-only rules, 4860 are inspecting packet payload, 33469 inspect application layer, 108 are decoder event only 30/8/2024 -- 15:09:34 - <Notice> - Configuration provided was successfully loaded. Exiting. 30/8/2024 -- 15:09:34 - <Info> - cleaning up signature grouping structure... complete |
Suricat service再起動
1 |
# systemctl restart suricata |
④Custom Rulesの適用テスト
同一ローカルネットワーク上の別のデバイスでpingを実行し、ログに記録されたかどうかを確認する
1 2 3 4 |
# cat /var/log/suricata/fast.log 08/30/2024-15:10:23.586835 [**] [1:1:1] ICMP Ping [**] [Classification: (null)] [Priority: 3] {ICMP} 192.168.11.22:8 -> 192.168.11.83:0 08/30/2024-15:10:23.586941 [**] [1:1:1] ICMP Ping [**] [Classification: (null)] [Priority: 3] {ICMP} 192.168.11.83:0 -> 192.168.11.22:0 |
JSON形式のログを取得するには、システムにjqをインストールする
1 |
# dnf install jq |
1 |
# systemctl restart suricata |
下記コマンドを実行し、同一ローカルネットワーク上の別のデバイスでpingを実行する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")' pingを実行するとコンソールに下記のように表示される { "timestamp": "2024-08-30T15:12:08.890813+0900", "flow_id": 1698936099737596, "in_iface": "ens160", "event_type": "alert", "src_ip": "192.168.11.22", "src_port": 64519, "dest_ip": "192.168.11.82", "dest_port": 443, "proto": "TCP", "metadata": { "flowints": { "applayer.anomaly.count": 1 } }, "alert": { "action": "allowed", "gid": 1, "signature_id": 2260001, "rev": 1, "signature": "SURICATA Applayer Wrong direction first Data", "category": "Generic Protocol Command Decode", "severity": 3 }, "app_proto": "failed", "app_proto_tc": "tls", "flow": { "pkts_toserver": 5, "pkts_toclient": 3, "bytes_toserver": 370, "bytes_toclient": 424, "start": "2024-08-30T15:12:08.888828+0900" } } |