在EnGarde上编写Snort规则
介绍:
已经有大量的Snort规则,但是可能还有一段时间你需要自己写一个。 您可以将Snort规则写入程序。 它们可以包括变量,关键字和函数。 为什么我们需要写规则? 原因是,没有规则Snort将永远不会检测到有人试图劫持您的机器。 这个HOWTO会给你信心写下你自己的规则。
先决条件:
你将需要什么
- 一台机器做你的开发。 这些规则不应该在生产服务器上运行,因为规则只是作为例子,你可以从中学习。
- 此外,您将需要一台客户端机器来连接Snort正在运行的机器。
- EnGarde安全社区3.0.18或更高版本,安装Snort。
语法:规则的胆量
语法可能看起来有点奇怪,但本节将会解释它,以便您可以开始编写自己的规则。 Snort规则分为两部分: 规则标题和规则选项 。 首先, 规则标头包含规则,动作,协议,源和目标IP地址以及源和目标端口。 第二部分是规则选项,其中包含一个警告消息和关于应该查看的数据包部分的信息,以查看是否应该执行规则操作。
例:
alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)
直到第一个括号的文本是规则标题 ,括号内的部分是( 规则选项 s)。
规则行动:
您可以在此描述数据包的“谁,哪里,什么”,以及在触发规则的情况下该怎么做。 在编写规则操作时,您可以从以下关键字中进行选择。
警报:使用所选的警报方法生成警报,然后记录数据包
log:记录数据包
pass:忽略数据包
协议:
规则的下一部分是协议。 更受欢迎的是:TCP,UDP和ICMP,但Snort支持许多其他的,并且继续添加新的。
源IP地址:
以下协议是源IP地址。 这定义了数据包来自哪里。 您可以使用关键字any定义所有IP地址。 您甚至可以编写一个规则来匹配除了您定义的地址之外的任何地址。 这是通过使用“!”,否定运算符完成的
源端口:
这是数据包来自的端口号。 端口号也有关键字any 。 您还可以定义一系列端口。 这是通过使用“:”完成的。 例如1:1000定义所有端口范围从1到1000。
方向操作员
方向运算符“ - >”用于定义规则所适用的流量的“方向”。 换句话说,流量进出机器的地方。
目的IP地址:
接下来是目的IP地址。 哪个定义了数据包在哪里。 与源IP地址类似,您可以使用关键字any或定义不会导致规则触发的地址。
目的端口 :
目的IP地址是目的地端口号。 这是数据包尝试连接到的端口号。 这里的选项与源端口相同。
基本格式:
action protocol src_ip src_port direction dst_ip dst_port ( rule options)
添加新规则:
由于我们现在对Snort规则的语法有一个基本的了解,所以我们可以在系统中添加一个新的规则。
首先以root身份登录并转换到sysadm_r。
newrole -r sysadm_r
[test_server]# newrole -r sysadm_r
Authenticating root.
Password:
setenforce 0
接下来,您将需要编辑snort.conf,使用您喜欢的编辑器来修改/var/chroot/snort/etc/snort.conf
。 我们需要包括以下内容:
alert tcp any any - > any 80(msg:“Sample alert”; classtype:misc-attack; sid:2002973; rev:1;)
最后重新启动Snort以使您的新规则生效。
我们刚刚添加的规则:规则如何工作:
当用户尝试访问网站时触发上述规则。 当规则被触发时,它将执行警报并显示消息。 操作关键字警报使用定义的方法生成警报,然后记录数据包。 我们检测到的数据包的协议是TCP,并且定义了所有源IP地址和端口号。 目的地在连接到端口80的任何IP地址上定义。最后, 规则选项关键字msg告诉记录器和警报引擎显示消息“采样警报”。
测试:
现在你一定有兴趣看到你的规则在行动。
要查看规则触发,您将需要尾随Snort警报日志。
cd /var/chroot/snort/var/log/snort
tail -f alert
现在打开一个Web浏览器并输入你的test_server的IP地址。
看看Snort的警报日志。 您将看到Snort的消息,这是我们刚添加的新规则的原因。
[**] [1:2002973:1] Sample alert [**]
[Classification: Misc Attack] [Priority: 2]
12/12-15:35:22.130162 test_client:35524 -> test_server:80
TCP TTL:64 TOS:0x0 ID:35734 IpLen:20 DgmLen:52 DF
***A**** Seq: 0x5F3B46F0 Ack: 0x85067266 Win: 0xB7 TcpLen: 32
TCP Options (3) => NOP NOP TS: 49925498 1529581
检测有效载荷示例:
将以下行
添加到/var/chroot/snort/etc/local.rules中
:
alert tcp any any -> any 80 (content:"index.pl";sid:12345678;rev:1;classtype:misc-attack;)
您可以看到我们编写了一个规则来检测连接到端口80的任何流量与“index.pl”的内容。
要测试这个,请执行上述步骤来拖尾Snort的警报日志。 然后打开一个Web浏览器并进入。
这只是开始:
凭借现在的知识,您可以深入挖掘自己的规则。 Snort官方文档包含语法中的每一个内容。 当您深入编写自己的Snort规则时,您将注意到您以前从未见过的网络上的攻击者。