多年来,Snort 一直是开源入侵检测/防御系统(IDS / IPS)的实际标准,但随着越来越多的服务器网卡带宽提升,Snort对线路上的数据包进行计算密集型的入侵检测越来越困难。这种情况下,可以考虑部署开源的IDS工具:Suricata。
简介
Suricata 是由 OISF(开发信息安全基金会)开发,它也是基于签名,但是集成了创新的技术。该引擎嵌入了一个 HTTP 规范化器和分析器(HTP 库),可提供非常先进的 HTTP 流处理,从而能够在 OSI 模型的第七层(应用层)上解析流量。
Suircata 是一款支持 IDS 和 IPS 的多线程入侵检测系统。与传统 Snort 相比,Suircata 的多线程和模块化设计使其在效率和性能上超过了原有 Snort,它将 CPU 密集型的深度包检测工作并行地分配给多个并发任务来完成。这样的并行检测可以充分利用多核硬件的优势来提升入侵检测系统的吞吐量,在数据包的深度检测上效果优越。同时,Suircata 可以兼容现有的 Snort 规则签名,还增加了对 ipv6 的支持,已经逐渐成为传统 Snort 入侵检测系统的代替方案。
架构
Suricata 有三种运行模式,分别为 single,workers,autofp。官方推荐性能最佳的运行模式为 workers 。
报文检测系统通常包含四大部分,报文获取、报文解码、报文检测、日志记录;Suricata 不同的功能安装模块划分,一个模块的输出是另一个模块的输入。
Suricata 的搭建过程非常简单,如果是通过软件源安装只需要添加相应仓库源即可
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
sudo apt install suricata jq
测试使用
suricata-update # 更新规则
suricata -T # 测试运行
suricata -i ens33 -c /etc/suricata/suricata.yaml # 启动运行
如果要使Suricata发挥出最大功力。还可以配置加上 luajit、PF_RING。
LuaJIT
LuaJIT 是采用 C 语言写的 Lua 代码的解释器,LuaJIT 试图保留 Lua 的精髓--轻量级,高效和可扩展。
wget https://luajit.org/download/LuaJIT-2.0.5.tar.gz
tar -zxf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5/
sudo make && make install
配置文件
/etc/suricata/
目录下有4个配置文件和一个文件夹,作用分别是:
HOME_NET
与 EXTERNAL_NET
,推荐 HOME_NET
填写内网网段,EXTERNAL_NET
设置为 any
HOME_NET
设置了 any
,EXTERNAL_NET
设置 !$HOME_NET
的话会报错,如果 HOME_NET
设置了内网地址,EXTERNAL_NET
设置为 !$HOME_NET
的话,有些内网之间的告警就无法匹配到suricata 完全兼容 snort 规则
alert modbus any any -> any any (msg:"SURICATA Modbus Request flood detected"; flow:to_server;app-layer-event:modbus.flooded; classtype:protocol-command-decode; sid:2250009; rev:2;)
- alert:默认顺序为:pass,drop,reject,alert,跳过、丢弃、拒绝、警告四种类型的动作
- Modbus:注明协议种类,UDP/ICMP 等
- Any:源地址/目的地址(IP)
- Any:源端口/目的端口
- ->:方向,单向流量;<>双向流量
- Any:源地址/目的地址(IP)
- Any:源端口/目的端口
- msg:”SURICATA Modbus Request flood detected”:关键字 msg 提供对触发警报的有关签名/规则相关文本提示信息
- flow:to_server:客户端到服务器
- app-layer-event:modbus.flooded:具体攻击内容
- classtype:protocol-command-decode:提供有关规则和警报分类的信息,由 classification.config 文件定义。
- sid:2250009:用于唯一性规则标识,sid 不能重复
- rev:2:规则版本号,每次修改规则 rev 则递增1
完整规则
alert tcp $EXTERNAL_NET $FILE_DATA_PORTS -> $HOME_NET any (msg:"INDICATOR-SHELLCODE heapspray characters detected - ASCII "; flow:to_client,established; file_data; content:"0d0d0d0d"; fast_pattern:only; metadata:service ftp-data, service http,service imap, service pop3; reference:url,sf-freedom.blogspot.com/2006/07/heap-spraying-internet-exploiter.html; classty pe:attempted-user; sid:33339; rev:1;)
alert tcp $EXTERNAL_NET $FILE_DATA_PORTS -> $HOME_NET any
规则行为 协议 源ip 源端口 流量方向 目标ip 目标端口 红色代表规则头
pass
如果匹配到规则后,suricata 会停止扫描数据包,并跳到所有规则的末尾drop
ips 模式使用,如果匹配到之后则立即阻断数据包不会发送任何信息reject
对数据包主动拒绝,接受者与发送中都会收到一个拒绝包alert
记录所有匹配的规则并记录与匹配规则相关的数据包$HOME_NET
(受保护的 ip 段)与 $EXTERNAL_NET
(其他所有 ip):!
号来进行排除(msg:"INDICATOR-SHELLCODE heapspray characters detected - ASCII "; flow:to_client,established; file_data; content:"0d0d0d0d"; fast_pattern:only; metadata:service ftp-data, service http,service imap, service pop3; reference:url,sf-freedom.blogspot.com/2006/07/heap-spraying-internet-exploiter.html; classtype:attempted-user; sid:33339; rev:1;)
alert ip any any -> any any (msg:"GPL SCAN same SRC/DST"; sameip; reference:bugtraq,2666; reference:cve,1999-0016; reference:url,www.cert.org/advisories/CA-1997-28.html; classtype:bad-unknown; sid:2100527; rev:9; metadata:created_at 2010_09_23, updated_at 2010_09_23;)
type <threshold|limit|both>, track <by_src|by_dst>, count <N>, seconds <T>
event_filter gen_id 1(组id), sig_id 1101111(规则id), type limit ,track by_src, count 1 , seconds 60
content:"evilliveshere"; content:"here";
这种写法,注意如果没有用内容修饰的话,ids 不会按照先后顺序去匹配的,只会在内容中匹配是否包含这2个值,必须用内容修饰来调整先后顺序,用 distance 0 来让第二个匹配项在第一个匹配项匹配位置之后匹配,并且如果有多个 content 他们的关系是 and 关系必须都匹配到才告警 。!
对匹配项的否定:content:!"evilliveshere"
;alert tcp any any -> any 80(msg:"Evil Doamin www.appliednsm.com"; "content:"GET";httpmethod; content:"www.appliednsm.com";http_uri; sid:5445555; rev:1;)
规则修改
suricata-update list-sources # 列出当前的规则源
suricata-update # 更新规则
例如要禁用某一个规则,直接新建 /etc/suricata/disable.conf
文件,然后在里面填入 sid,每次更新的话会自动禁止该规则。
规则更新后,所有的规则都会保存在 /var/lib/suricata/rules/suricata.rules
文件中,这时候就必须修改 suricata 配置文件的 default-rule-path 与 rule-files 来指定规则文件到这个规则上。
suricata 主要是 et/open 规则,这是系统自带的规则,目前开源免费的就是 et/open、pt 规则、sslbl 规则,其余的均需要授权码才能更新。
本文介绍了Linux环境下Suricata的安装和配置,同时介绍了配置文件和相应的配置规则,Suricata与Snort都是非常优秀的NIDS工具,Suricata对于高并发下的场景支持性更好,如果配合分布式ELK,安全能力将更上一层。
本文作者 r0fus0d
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有