【星课堂】快速入门:如何使用Suricata构建网络入侵检测系统?

发布者:星河Salaxy
发布于:2022-04-22 14:26

一. Suricata简介

Suricata是一个免费、开源、成熟、快速、健壮的网络威胁检测引擎。Suricata引擎能够进行实时入侵检测(IDS)、内联入侵预防(IPS)、网络安全监控(NSM)和离线pcap处理。Suricata使用强大而广泛的规则和签名语言来检查网络流量,并提供强大的Lua脚本支持来检测复杂的威胁。使用标准的输入和输出格式(如YAML和JSON),使用现有的SIEMs、Splunk、Logstash/Elasticsearch、Kibana和其他数据库等工具进行集成将变得非常简单。Suricata项目和代码由开放信息安全基金会(OISF)拥有和支持,OISF是一个非盈利基金会,致力于确保Suricata作为一个开源项目的开发和持续成功。




二. Suricata主要特点

l 支持从nfqueue中读取流量

支持分析离线pcap文件和pcap文件方式存储流量数据

l 支持ipv6

l 支持pcap,af_packet,pfring,硬件卡抓包

多线程

l 支持内嵌lua脚本,以实现自定义检测和输出脚本

l 支持ip信用等级

支持文件还原

l 兼容snort规则

支持常见数据包解码:IPv4, IPv6, TCP, UDP, SCTP, ICMPv4, ICMPv6, GRE, Ethernet, PPP, PPPoE, Raw, SLL, VLAN, QINQ, MPLS, ERSPAN, VXLAN

支持常见应用层协议解码:HTTP, SSL, TLS, SMB, DCERPC, SMTP, FTP, SSH, DNS, Modbus, ENIP/CIP, DNP3, NFS, NTP, DHCP, TFTP, KRB5, IKEv2, SIP, SNMP, RDP


三. Suricata主要特点


3.1 规则配置

配置文件位置:/etc/suricata/suricata.yaml

规则目录位置:/etc/suricata/rules

先设置HOME_NET与EXTERNAL_NET,推荐HOME_NET填写内网网段,EXTERNAL_NET设置为any

注意:如果HOME_NET设置了any,EXTERNAL_NET设置!HOME_NET的话会报错,如果HOME_NET设置了内网地址,EXTERNAL_NET设置为!$HOME_NET的话,有些内网之间的告警就无法匹配到。

一般为了测试方便,都设置为any。

通过配置文件的default-rule-path设置规则目录,rule-files来选择启用那些规则

其他配置文件有:

classification-file:

/etc/suricata/classification.config

reference-config-file:

/etc/suricata/reference.config

threshold-file:

/etc/suricata/threshold.config


3.2 规则配置

更多参考官网文档:

低版本手册:

http://suricata.readthedocs.io/en/suricata-4.0.4

高版本手册:

https://suricata.readthedocs.io/en/latest/index.html#

suricata和snort区别:

https://suricata.readthedocs.io/en/latest/rules/differences-from-snort.html

下面是suricata规则的常见格式:


3.2.1 规则头部

规则头部对应属性:

alert tcp $EXTERNAL_NET $FILE_DATA_PORTS -> $HOME_NET any

规则行为;协议;源ip;源端口;流量方向;目标ip;目标端口;红色代表规则头

规则行为,根据优先级排列:

pass 如果匹配到规则后,suricata会停止扫描数据包,并跳到所有规则的末尾

drop ips模式使用,如果匹配到之后则立即阻断数据包不会发送任何信息

reject 对数据包主动拒绝,接受者与发送中都会收到一个拒绝包

alert 记录所有匹配的规则并记录与匹配规则相关的数据包

协议:

在规则中指定匹配那些协议,suricata支持的协议要比snort多一些

TCP、UDP、ICMP、IP(同时用与TCP与UDP)、http、ftp、smb、dns

源ip,目标ip:

支持单个ip,cidr,ip组,[96.30.87.36,96.32.45.57],所有主机any,以及规则文件中配置的ip变量$HOME_NET(受保护的ip段)与$EXTERNAL_NET(其他所有ip)

源端口/目标端口:

支持设置单个端口80,端口组[80,8080],端口范围[1024:65535]以及any任意端口,还可以在配置文件中添加端口组,通过!号来进行排除

流量方向:

-> 单向流量,从源ip到目标ip的单项流量

<> 双向流量,2个ip往返之间的流量


3.2.2 规则选项

规则选项使用分号分隔,有两种格式:

(keyword):(settings);

(keyword);

即由关键字和设置值(部分没有)组成


关键字有很多类,大致有以下几种:

元关键字、paylaod关键字、及各类协议关键字等


3.3 规则提取测试


下面是经常使用的测试命令:

suricata -c /etc/suricata/suricata.yaml -T #-T参数测试规则是否存在问题

suricata -r test.pcap -k none -S test.rules #测试流量和规则匹配情况

运行生成四个结果文件:

如果有签名命中则出现在eve.json与fast.log中。其中,fast.log记录了包含的具体alert情况,包括时间、五元组信息、告警id和告警信息等,是我们本次重点分析的对象。eve.json则记录了告警信息、flow流信息、协议解析的信息(例如http,dns等),以及攻击的payload等。



声明:该文观点仅代表作者本人,转载请注明来自看雪