在EnGarde上编写Snort规则

在EnGarde上编写Snort规则

介绍:

已经有大量的Snort规则,但是可能还有一段时间你需要自己写一个。 您可以将Snort规则写入程序。 它们可以包括变量,关键字和函数。 为什么我们需要写规则? 原因是,没有规则Snort将永远不会检测到有人试图劫持您的机器。 这个HOWTO会给你信心写下你自己的规则。

先决条件:

你将需要什么

  1. 一台机器做你的开发。 这些规则不应该在生产服务器上运行,因为规则只是作为例子,你可以从中学习。
  2. 此外,您将需要一台客户端机器来连接Snort正在运行的机器。
  3. 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规则时,您将注意到您以前从未见过的网络上的攻击者。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏