在外网在中各大安全厂商一般使用WAf来防御攻击者的攻击,但是在内网中一般来使用ips,ids来防御攻击者的攻击,这是因为内外网的环境差异造成的,外网中主要是防御一些web攻击,而内网中主机漏洞居多,就用到了ids和ips,但是 IDS和防火墙均具备对方不可替代的功能,因此IDS和防火墙共存,形成互补
0x02 什么是ids和ips
IPS对于初始者来说,是位于防火墙和网络的设备之间的设备。这样,如果检测到攻击,IPS会在这种攻击扩散到网络的其它地方之前阻止这个恶意的通信。而IDS只是存在于你的网络之外起到报警的作用,而不是在你的网络前面起到防御的作用。
IPS检测攻击的方法也与IDS不同。一般来说,IPS系统都依靠对数据包的检测。IPS将检查入网的数据包,确定这种数据包的真正用途,然后决定是否允许这种数据包进入你的网络。
含义不同
IDS :入侵检测系统
做一个形象的比喻:假如防火墙是一幢大楼的门锁,那么IDS就是这幢大楼里的监视系统。一旦小偷爬窗进入大楼,或内部人员有越界行为,实时监视系统会发现情况并发出警告。
IPS :入侵防御系统
作用不同
IDS 专业上讲就是依照一定的安全策略,对网络、系统的运行状况进行监视,尽可能发现各种攻击企图、攻击行为或者攻击结果,以保证网络系统资源的机密性、完整性和可用性。
IPS入侵防御系统是电脑网络安全设施,是对防病毒软件和防火墙的补充。入侵防御系统是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。
0x03 Suricata
Suricata是一个高性能的网络IDS、IPS和网络安全监控引擎。它是开源的,由一个社区经营的非营利性基金会,开放的信息安全基金会所有。(OISF _). Suricata是由OISF开发的
有些厂商选择用Suricata有些厂商选择用snort
Snort自1998年开发至今,拥有比较长的历史和完整的知识库。
即便如此,很多开发厂商还是选择使用了Suricata,主要的原因如下:
旧版本的Snort2不支持多线程、吞吐量小,无论一个 CPU 包含多少个内核,都只会使用一个内核或一个线程,很大程度上造成了性能上的短板。
有一个相当复杂的解决方法:运行多个SNORT单线程实例,全部进入同一个日志。然而,管理这个过程的额外开销(AutoFP)和硬件的高成本,意味着这种设置很少在生产环境中出现。
Suricata可以兼容Snort2的规则签名,也就是snort2的规则直接拿来,放到suricata里就可以用。
Suricata支持文件提取、文件还原,可以将流量中的文件还原出来。
Suricata和snort从规则上来讲并没什么太大的差别,会写一个的规则就自然会写另一个的规则
0x04 Suricata数据结构
0x05 Suricata工作流程
看着太乱看不懂?没关系,看简单的图
有的小伙伴可能有疑问了,异常流量还放行??
这是因为很多厂商和客户都会担心误报的问题,所以只开启了日志功能并没开启拦截功能,很多外网WAF也是只开启了日志功能并不拦截,绝大多数客户大部分情况下就算买了WAF和IPS、IDS等设备都只会开启日志功能,并不拦截,具体看情况
设备会检测内网之间的流量,当有流量经过设备,设备会先加载内部规则,然后对流量进行匹配,如果没有命中的则放行此流量。如果有命中的会记录日志和报文,然后放行或者拦截流量。具体怎么操作看用户设置
0x06 Suricata安装
推荐kali安装,方便
直接apt-get install suricata就安装好了
之后就是安装签名(就是规则rules文件)就可以了,命令是suricata-update
注意这是官方更新的rule规则,更新的配置文件存放在/var/lib/suricata/rules中,文件为classification.config和suricata.rules,需要cp至/etc/suricata/rules中才能加载成功,不然会有如下错误:
其他系统安装参考 https://www.osgeo.cn/suricata/install.html
0x07 Suricata目录
目录:
/etc/suricata/ 存放suricata执行和配置文件的目录
/etc/suricata/rules 规则文件存放目录,自己之后写的也要放在这里
/var/log/suricata/ 存放suricata日志的目录
文件:
suricata.yaml suricata的配置文件,重中之重,特别重要,位于/etc/suricata/下
suricata.rules 官方规则文件,存放在/etc/suricata/rules中
fast.log 警告日志文件,存放在/var/log/suricata/下,匹配的输出都在这里
0x08 Suricata规则
suricata.rules 官方规则文件,存放在/etc/suricata/rules中
其中大部分规则都在suricata.rules文件中
要理解这些规则具体是什么意思也很简单,只需要记住每个字段表示的意思就行了
如:alert tcp any any -> any any (msg: "测试"; flow:established,to_client; content:"|00 00 00 00|"; offset:10;depth:10; sid:1005; rev:1;)
alert tcp :alert表示记录, tc 表示tcp协议 合在一起就是记录tcp协议,alert udp就是记录udp, alert http就是记录http协议,
any any -> any any:第一个any表示ip,第二个any表示端口,箭头表示到,这句话意思为所有ip的所有端口到所有ip的所有端口的流量, any any -> any 445就表示所有ip的所有端口到所有ip的445端口的流量
(msg: "测试"; :表示这个规则匹配的漏洞的命中,一般是漏洞的名字
flow:established,to_client; :表示到客户端建立连接的流量to_client表示到客户端,to_server则表示到服务器的流量
content:"|00 00 00 00|"; :要匹配内容就是wireshark中的那些十六进制
offset:9;depth:10; :一般用来精确匹配内容,offset:9;depth:10;表示偏移9个字符串再进行匹配,向后匹配十位,这里匹配到是第10-20个字符串
sid:1005; :规则编号,没啥太大意义
rev:1;) :等级,没啥太大意义
随着目前漏洞的样式越来越多,有些厂商开始使用双向规则进行匹配。单向规则就是只匹配请求或者返回,双向规则则是即匹配请求也匹配返回,一条数据包同时命中才告警或者拦截
所有具体的字段参考Suricata用户手册中文版https://readthedocs.org/projects/suricatacn/downloads/pdf/latest/
0x09 Suricata使用
一些研发人员会使用Suricata测试写的规则是否准确,一般使用
suricata -c /etc/suricata/suricata.yaml -r test.pcap -k none
-c /etc/suricata/suricata.yaml 表示要加载的配置文件
建议将原加载的规则注释掉,然后自己新建一个规则集并且加载,
-r test.pcap 表示要测试的pacp文件,其他格式结尾的流量包可能会出错
-k none表示 禁用强制校验和检查,没啥太大用,
如果测试流量包命中了规则会在当前文件夹下生成一个fast.log文件。里面记录了命中的规则编号
0x10 参考链接
https://www.cnitpm.com/pm1/73453.html
https://zhuanlan.zhihu.com/p/453068646
https://blog.csdn.net/gengzhikui1992/article/details/103031874
https://readthedocs.org/projects/suricatacn/downloads/pdf/latest/
https://www.osgeo.cn/suricata/install.html