Suricata详解
Posted ZtCling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Suricata详解相关的知识,希望对你有一定的参考价值。
1.什么是Suricate
Suricata引擎能够进行实时入侵检测(IDS)、内联入侵预防(IPS)、网络安全监控(NSM)和离线pcap处理。
是一款开源、快速、高度稳定的网络入侵检测系统
Suricata引擎能够实时入侵检测,内联入侵防御和网络安全监控。Suricata由几个模块组成,如捕捉、采集、解码、检测和输出。
Suricata使用强大而广泛的规则和签名语言来检查网络流量,并提供强大的Lua脚本支持来检测复杂的威胁。使用标准的输入和输出格式(如YAML和JSON),使用现有的SIEMs、Splunk、Logstash/Elasticsearch、Kibana和其他数据库等工具进行集成将变得非常简单。
2.规则分析
suricate包含以下3个部分
-
action:决定当规则匹配的时候会发生什么。
-
header:定义了协议,IP地址,端口和规则的位置等包头信息。
-
rule options:定义规则的细节。
例如这条规则将提取HTTP流量中的后缀为txt的文件,并进行告警
alert http any any → any any (msg:"File txt save";fileext:"txt";filestore;sid:2;rev:1;)
action-header---------------- rule options----------------------------------------
2.1 action
action包括
pass: 如果匹配到规则,suricate会停止扫描并
Drop:如果程序匹配到了这类规则,这个数据包被阻断将不会被发送到目标。
Reject:不同于 Drop 直接丢弃数据包,Reject 在匹配到规则时会主动进行拒绝数据包。当数据包为TCP时,会返回一个 RST 数据包重置连接。
Alert:当匹配到规则时,Suricata 不会对数据包进行任何操作,会像对正常数据包一样进行放行,除了会记录一条只有管理员能够看到的警报。
以上四种操作也是有优先级的,默认的优先级为:Pass > Drop > Reject > Alert。也就是规则在匹配时会优先考虑包含 Pass 的规则,其次才是 Drop,再然后是 Reject,最后再考虑包含 Alert 的规则。
2.2 Header
头部中包含如下几项:
协议(Protocol):这个字段用来告诉 Suricata 当前规则所包含的协议。其取值可以为:tcp,udp,icmp,ip,http,ftp,tls(包含ssl),smb,dns等等。
源/目的地址(Source and destination):源/目的地址可以设置为 IP 地址或者在配置文件(Suricata.yaml)里定义的变量。
端口号(Ports):不同的协议使用不同的端口号,例如 HTTP 使用 80 端口,而 HTTPS则使用 443。通常情况下端口号会设置为 any,这样会影响所有的协议。
流向(Direction):流向告诉规则匹配哪些流量数据,是匹配从外部网络进来的,还是匹配从内部网络出去的,亦或者两种同时匹配。其中,每条规则都必须有一个向右的箭头如示:→
2.3 Rule options
规则的每一条都遵循固定的格式:name: settings;
每条规则也包含如下设置:
元信息(meta-information)包括:msg (message),Sid (signature id),Rev(Revision),Gid (group id),Classtype,Reference,Priority,metadata信息。
头部(Header-Keyword)包括:ttl,ipopts,sameip,ip_proto,id,geoip,TCP关键字,ICMP关键字等等
有效载荷(payloads)包括:content,pcre,nocase,depth,offset,distance,within,isdataat,dsize等。
流信息关键字包括:flow, stream_size信息。
文件关键字:filename,fileext,filemagic,filestore,filesize等。
阈值
具体的规则内容比较复杂,详见官方手册。从中可以看出每条规则的编写都是非常复杂的,而且还包括很多流量协议底层相关的知识
3.所有特性(suricata完整功能列表)
(1)引擎
a、网络入侵检测系统(NIDS)引擎
b、网络入侵防御系统(NIPS)引擎
c、网络安全监控(NSM)引擎
d、离线分析PCAP文件
e、使用pcap记录器记录流量
f、Unix套接字模式
g,用于自动PCAP文件处理
h、与Linux Netfilter防火墙的高级集成
(2)操作系统支持
Linux、FreeBSD、OpenBSD、macOS/Mac OS X、Windows
(3)配置文件
a、YAML-人和机器可读
b、具有良好的注释和文档
c、支持包括其他配置文件
(4)TCP/IP引擎
a、可扩展的流引擎
b、完整的IPv6支持
c、隧道解码:Teredo、IP-IP、IP6-IP4、IP4-IP6、GRE
(5)TCP流引擎
a、跟踪会话
b、流重新组装
c、基于目标的流重新组装
(6)IP整理磁盘碎片引擎
基于目标的重新组装
(7)协议解析器
a、支持数据包解码:IPv4, IPv6, TCP, UDP, SCTP, ICMPv4, ICMPv6, GRE;Ethernet, PPP, PPPoE, Raw, SLL, VLAN, QINQ, MPLS, ERSPAN
b、应用层解码:HTTP, SSL, TLS, SMB, DCERPC, SMTP, FTP, SSH, DNS, Modbus, ENIP/CIP, DNP3, NFS, NTP, DHCP, TFTP, KRB5, IKEv2;
使用Rust语言开发的新协议,用于安全快速的解码
(8)HTTP 引擎
a、基于libhtp的有状态HTTP解析器
b、HTTP请求记录器
c、支持文件识别、提取和日志记录
d、支持每个服务器设置-限制,个性等
e、匹配(规范化)缓冲区的关键字:uri和原始uri、headers and raw headers、cookie、user-agent、request body and response body、method, status and status code、host、request and response lines、decompress flash files等等
(9)检测引擎
a、支持协议的关键字
b、支持每个vlan或捕获设备的多租户
c、xbits -流位扩展
d、PCRE支持:用于登录EVE的子字符串捕获
e、快速模式和预过滤器支持
f、规则分析
g、文件匹配:magic文件、文件大小、文件名和扩展名、文件MD5/SHA1/SHA256校验和——可扩展到数百万个校验和
h、可以选择的多种模式匹配算法
i、具有广泛的调优选项
j、实时规则重载-使用新的规则重新启动Suricata
k、延迟初始化规则
l、用于自定义检测逻辑的Lua脚本
m、支持Hyperscan集成
(10)输出
a、支持Eve日志,所有JSON警告和事件输出
b、用于生成自己的输出格式的Lua输出脚本
c、支持redis支持
e、HTTP请求日志
f、TLS握手日志
g、Unified2输出-兼容Barnyard2
h、快速警报日志
i、警告调试日志—用于规则编写器
j、使用pcap记录器记录流量
k、Prelude 支持
l、drop log - netfilter样式的日志,用于在IPS模式下丢弃数据包
m、syslog -警告syslog
n、stats-引擎统计在固定的时间间隔
o、文件日志,包括JSON格式的MD5校验和
p、提取的文件存储到磁盘,使用v2格式的重复数据删除
q、DNS请求/回复日志程序,包括TXT数据
r、基于信号的日志循环
s、流日志
(11)报警/事件过滤
a、每个规则警告过滤和阈值
b、全局警报过滤和阈值设置
c、每个主机/子网阈值和速率限制设置
(12)包收集
a、高性能捕获:
AF_PACKET:实验性的eBPF和XDP模式可用
PF_RING
NETMAP
b、标准捕获:
PCAP
NFLOG (netfilter集成)
c、IPS模式
基于Linux的Netfilter (nfqueue):不开放的支持
基于FreeBSD和NetBSD的ipfw
基于linux的AF_PACKET
NETMAP
d、捕获卡和专用设备:
Endace
Napatech
Tilera
(13)多线程
a、完全可配置线程——从单线程到几十个线程
b、 预先“runmodes”
c、可选cpu关联设置
d、使用细粒度锁定和原子操作获得最佳性能
e、可选锁分析
(14)IP声誉
a、加载大量基于主机的信誉数据
b、使用“iprep”关键字在规则语言中匹配声誉数据
c、支持live重装
d、支持CIDR 范围
(15)Tools
a、suricata -update 易于规则更新管理的更新
b、Suricata-Verify开发过程中对QA进行开发
Suricata简介
目录Suricata简介
IDS/IPS简介
Suricata主要特点
Suricata基本架构
Suricata抓包性能
Suricata规则
Suricata自定义检测
Suricata http log自定义输出
Suricata单进程同时监听两个网口
问题
总结
参考
Suricata简介
Suricata是一个高性能的IDS、IPS和网络安全监控的引擎。它是开源的,由一个社区经营的非营利基金会开放信息安全基金会(OISF)开发。
安装环境建议使用centos7/redhat7版本以上的操作系统,Suricata版本建议使用4.x以上,这样方便多线程,Hypersca,pfring等功能的使用。6版本的操作系统编译环境需要花时间取升级修复,不建议使用。
IDS/IPS简介
检测系统(Intrusion detection system,简称“IDS”)是一种对网络传输进行即时监视,根据预设的策略,在发现可疑传输时发出警报。
预防系统(Intrusion prevention system,简称“IPS”)是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,一般位于防火墙和网络的设备之间,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。相对于IDS主能提供了中断防御功能。
Suricata主要特点
- 支持从nfqueue中读取流量
- 支持分析离线pcap文件和pcap文件方式存储流量数据
- 支持ipv6
- 支持pcap,af_packet,pfring,硬件卡抓包
- 多线程
- 支持内嵌lua脚本,以实现自定义检测和输出脚本
- 支持ip信用等级
- 支持文件还原
- 兼容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基本架构
运行模式
有三种运行模式,分别为single,workers,autofp。官方推荐性能最佳的运行模式为workers模式。
single模式:只有一个包处理线程,一般在开发模式下使用。
workers模式:多个包处理线程,每个线程包含完整的处理逻辑。
autofp模式:有多个包捕获线程,多个包处理线程。一般适用于nfqueue场景,从多个queue中消费流量来处理。
四种线程模块
包获取:包捕获
解码:对数据包和应用层协议解码
检测:通过规则或者自定义脚本对数据包进行检测
输出:输出检测结果和常规协议相关日志等
Suricata性能调优
抓包性能对比
- 硬件捕获 > pfring zc > pfring > af-packet > pcap
调优
1,关闭网卡多队列功能
原因:一般使用流量镜像方式把流量镜像到服务器网卡,如果多队列的话,同一个tcp连接的数据有可能会被分散到不同的队列,由于时间的延迟可能导致有乱序可能。例如先收到了syn/ack,再收到syn,suricata会认为此流量无效而丢弃。如果做检测,则需要加缓冲和排序,代价较大。
2,关闭网卡lro,gro特性
原因:lro/gro导致将各种较小的包合并成大的“超级包”,从而破坏suricata对tcp连接的跟踪。
3,使用pfring zc模式捕获包
原因:pfring+zero copy提升性能,但是zero copy需要网卡驱动支持,目前我们使用pfring模式抓包,只需要kernel支持即可。
4,调整配置文件中内存相关配置,调大flow.memcap,stream.memcap,stream.reassembly.memcap
5,使用workers运行模式
6,调整配置文件中max-pending-packets为8192
7,suricata编译需要支持luajit(用于替换原始lua),Hyperscan高性能正则库,PF_RING高性能包捕获库
Suricata规则
1,兼容snort规则,具体可参考官方文档。
2,通过规则和内置的关键字实现对数据包的过滤和处理等。
3,Suricata4.x版本之后有自带的规则管理工具
Suricata自定义检测
支持通过lua脚本对数据包进行自定义检测,例如协议识别和异常流量识别等
Suricata http log自定义输出
支持通过lua脚本脚本获取http协议request和response的相关信息,从而可以输出http协议中的所以数据,例如header,request body,response body等。
Suricata单进程同时监听两个网口
通过修改suricata.yml配置文件可以实现,以pfring捕获方式为例,如下配置文件为同时捕获两个网口流量的配置:
pfring:
- interface: em2
threads: auto
cluster-id: 81
cluster-type: cluster_flow
- interface: em4
threads: auto
cluster-id: 82
cluster-type: cluster_flow
问题
1,发现流量里面有部分vlan数据的情况下,suricata不能正常输出http和dns等应用协议的日志
解决:
关闭如下配置
vlan:
use-for-tracking: false
总结
目前,我们使用Suricata分析从交换机镜像过来的流量,Suricata的输出为两个:Suricata检测出来的alert异常事件和解码的所有应用协议的日志。以方便后续的存储和分析,以及告警处理。
参考
https://suricata-ids.org/features/all-features/
https://suricata.readthedocs.io/en/suricata-4.1.3/rules/index.html
以上是关于Suricata详解的主要内容,如果未能解决你的问题,请参考以下文章
数通面试私房菜之ISIS专题第六期:ISIS与OSPF异同点详解