网络入侵检测--Snort软件NIDS模式报警信息详解

Snort最有价值的地方,就是它作为NIDS网络入侵检测软件来分析监控实时流量,那么最终能够产生的报警结果,也就是我们最关注的东西,即我们使用snort需要的就是拿到报警信息,并且联动到我们其他软件模块,这才算起到了作用,没有人会傻乎乎的守着终端看有没有报警啊
网络入侵检测--Snort软件NIDS模式报警信息详解_第1张图片
那么来介绍一下,NIDS模式下产生的报警信息。
首先,我们来看一下,报警模式下运行,能够产生哪些格式的报警信息,通过哪些途径产生。命令是通过-A参数进行配置的,一共有六种方式

参数 作用
-A fast 快速警报模式。使用时间戳、警报消息、源和目标IP/端口以简单格式写入警报。
-A full 完全警报模式。这是默认警报模式,如果未指定模式,将自动使用。
-A unsock 向另一个程序可以监听的UNIX套接字发送警报。
-A none 关闭警报。
-A console 向控制台(屏幕)发送“快速样式”警报。
-A cmg 生成“cmg样式”警报。

网络入侵检测--Snort软件NIDS模式报警信息详解_第2张图片
然后我们来逐一看一下产生的报警如何。
测试方法,首先在snort.conf中增加如下两行,使得操作更简单

###增加接口
config interface:enp1s0
#增加日志存储路径
config logdir:/var/log/snort

还需要配置好规则,目前我们打开了scada的规则,在snort.conf中增加
include $RULE_PATH/protocol-scada.rules
其中触发的规则就是

alert  tcp $EXTERNAL_NET any -> $HOME_NET 502 (msg:"PROTOCOL-SCADA Modbus read holding registers from external source"; flow:to_server,established; modbus_func:read_holding_registers; metadata:policy max-detect-ips drop; reference:url,www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf; classtype:protocol-command-decode; sid:17790; rev:5;)

最后我们提供了一个pcap文件/tmp/all.pcap,作为分析样本。内部包含了一条触发上面规则的modbus协议数据

快速报警

我们来测试快速报警产生,通过执行命令

snort -c /etc/snort/rules/etc/snort.conf -A fast -r /tmp/all.pcap 

然后在/var/log/snort下就能产生报警文件和记录文件
在这里插入图片描述
其中alert就是存储报警信息的文件,snort.log.xxxx就是记录下的报警报文的pcap文件。是不是很简单?

网络入侵检测--Snort软件NIDS模式报警信息详解_第3张图片

然后我们来看alert中的数据

[root@localhost ~]# cat /var/log/snort/alert 
08/03-13:47:59.825270  [**] [1:17790:5] PROTOCOL-SCADA Modbus read holding registers from external source [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 192.168.8.1:49695 -> 192.168.8.3:502
08/03-13:48:00.836034  [**] [1:17790:5] PROTOCOL-SCADA Modbus read holding registers from external source [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 192.168.8.1:49695 -> 192.168.8.3:502
08/03-13:48:01.862030  [**] [1:17790:5] PROTOCOL-SCADA Modbus read holding registers from external source [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 192.168.8.1:49695 -> 192.168.8.3:502

以第一条为例,分开解释

字段 含义
08/03-13:47:59.825270 时间戳
[**] 分割符
[1:17790:5] 这三部分是GID|sid|rev,分别对应了Generator ID,规则里面的sid字段和rev字段。gid可以通过gen-msg.map文件查看到含义。
PROTOCOL-SCADA Modbus read holding registers from external source 规则中的msg字段
[**] 分割符
[Classification: Generic Protocol Command Decode] 分类:属于通用协议命令解码
[Priority: 3] 优先级
{TCP} tcp类型
192.168.8.1:49695 -> 192.168.8.3:502 来往地址及端口

所以我们通过-A fast方式可以得到如上数据。

完整报警

我们用-A full 代替前面的-A fast

snort -c /etc/snort/rules/etc/snort.conf -A full -r /tmp/all.pcap 

就会得到下面的报警

[**] [1:17790:5] PROTOCOL-SCADA Modbus read holding registers from external source [**]
[Classification: Generic Protocol Command Decode] [Priority: 3] 
08/03-13:47:59.825270 192.168.8.1:49695 -> 192.168.8.3:502
TCP TTL:128 TOS:0x0 ID:60237 IpLen:20 DgmLen:52 DF
***AP*** Seq: 0xA2229E72  Ack: 0x34FEC424  Win: 0x1400  TcpLen: 20
[Xref => http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf]

前三行与简单报警基本一致,只是时间放的位置变了。
后面两行就是TCP协议的一些数据,例如TTL,TOS,Seq及 Ack等
最后一行是规则中的reference字段。

网络入侵检测--Snort软件NIDS模式报警信息详解_第4张图片

套接字传输报警

我们用-A unsock 参数,执行命令

snort -c /etc/snort/rules/etc/snort.conf -A full -r /tmp/all.pcap 

这个就是Snort会创建一个IPC socket。然后将报警信息发送到这个socket,其他进程可以通过监听这个本地socket,获得报警信息。

传递的socket文件是
snort_alert,位于你用的log路径下,即前面的/var/log/snort

socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX Domain Socket也提供面向流和面向数据包两种API接口,类似于TCP和UDP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。

值得注意的地方是,这个发送的消息,只有规则中的msg字段,即前面的“PROTOCOL-SCADA Modbus read holding registers from external source”,并无其他消息,所以感觉这个方式有些鸡肋。
网络入侵检测--Snort软件NIDS模式报警信息详解_第5张图片

关闭报警

越说越没用
可能用户就是想安静一下
网络入侵检测--Snort软件NIDS模式报警信息详解_第6张图片
……

snort -c /etc/snort/rules/etc/snort.conf -A none-r /tmp/all.pcap 

控制台输出报警

这个主要是用来调试查看报警信息,直接在终端中就能看到报警信息。

snort -c /etc/snort/rules/etc/snort.conf -A cconsole -r /tmp/all.pcap 

网络入侵检测--Snort软件NIDS模式报警信息详解_第7张图片

cmg模式

这个将在控制台输出结果,会输出链路层数据,及后面会有数据段内容

snort -c /etc/snort/rules/etc/snort.conf -A cmg -r /tmp/all.pcap 

结果如下

08/03-13:47:59.825270  [**] [1:17790:5] PROTOCOL-SCADA Modbus read holding registers from external source [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 192.168.8.1:49695 -> 192.168.8.3:502
Stream reassembled packet
08/03-13:47:59.825270 C8:F7:50:F6:5F:D4 -> A4:BB:6D:AA:2E:45 type:0x800 len:0x42
192.168.8.1:49695 -> 192.168.8.3:502 TCP TTL:128 TOS:0x0 ID:60237 IpLen:20 DgmLen:52 DF
***AP*** Seq: 0xA2229E72  Ack: 0x34FEC424  Win: 0x1400  TcpLen: 20
41 79 00 00 00 06 01 03 00 00 00 0A              Ay..........

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

最后补充一种高速处理的方式

报警存储为unified2格式

配置snort.conf,开启unified2,output unified2:filename snort.log,limit 128
网络入侵检测--Snort软件NIDS模式报警信息详解_第8张图片

通过执行命令

snort -c /etc/snort/rules/etc/snort.conf -r /tmp/all.pcap 

就能够在log路径下生成结果,这个结果就不再是pcap包,而是二进制数据,查看方法是,通过命令

u2spewfoo /var/log/snort/snort.log.1637217363 

网络入侵检测--Snort软件NIDS模式报警信息详解_第9张图片
然后可以通过工具Barnyard2,将数据慢慢写入到msyql中。

Barnyard2的作用是读取Snort产生的二进制事件文件并存储到MySQL中。Snort的配置文件自身含有插件,它允许将Snort报警记录到MySQL中,但这样一来,系统数据会激增。当IDS系统检测到***行为时,它会用INSERT语句向数据库中写入数据,导致更新非常慢。所以如果直接将Snort输出到数据库,在数据量增大时这种方案的效率并不高,故使用外部代理将报警输出到Barnyard2。

这里就不详解了,有兴趣的可以百度snort barnyard两个关键词
网络入侵检测--Snort软件NIDS模式报警信息详解_第10张图片

还是回到前面的话,结果是为了其他软件服务,通过这些方式,将snort作为关键模块融合到系统中,才是正道
网络入侵检测--Snort软件NIDS模式报警信息详解_第11张图片
最近发现学习,写博客也能让人上瘾,就像多年以前健身的时候一样,一下班就去健身房,周末也不会放弃。其实能让人上瘾的方式,就是你的持续有立竿见影的效果,哪怕是很微小的,熬过了前面几天,后续就会欲罢不能。
另外一个原因就是:闲的。
网络入侵检测--Snort软件NIDS模式报警信息详解_第12张图片

你可能感兴趣的:(网络安全,snort,报警,分析)