规则库中的每条规则在逻辑上分为两部分:规则头部和规则选项。规则头部包含规则的操作、协议、源IP地址和目标IP地址及其网络掩码和端口。规则选项包括报警信息及需要检测的模式信息。规则的一般格式为:

<规则操作><协议><源主机IP><源端口><方向操作符><目标主机IP><目标端口><规则选项1:值1>;<规则选项2:值2>;…;<规则选项n:值n>;)

在圆括号前的部分是规则头部,在圆括号中的部分是规则选项。规则选项部分中冒号前面的词组称为选项关键字。规则选项不是规则的必需部分,它只是用来定义收集特定数据包的特定特征。一条规则中不同部分必须同时满足才能执行,相当于“与”操作。而同一个规则库文件中的所有规则之间相当于一个“或”操作。

以下是一个例子:alert tcp any any -> 192.168.1.0/24 111 (content:" 00 01 86 a5 "; msg: "mountd access";)。该条规则描述了:任何使用TCP协议连接网络192.168.1.0/24中任何主机的111端口的数据包中,如果出现了二进制数据00 01 86 a5,便发出警告信息mountd access。

规则操作说明当发现适合条件的数据包时应该做些什么。有两种操作:alert和log。如果是 alert,则使用选定的告警方法产生警报,并记录这个数据包;如果是log,则只记录该数据包。

协议指明当前使用的是何种协议。对于IP地址和端口,关键字“any”可以用来定义任何IP地址。在IP地址后指定网络掩码,如/24指定一个C类网络,/16指定一个B类网络,/32指定一个特定主机。如192.168.1.0/24指定了从192.168.1.1 到 192.168.1.255的一个范围的IP地址。

IP地址有一个“非”操作。这个操作符号用来匹配所列IP地址以外的所有IP地址。“非”操作使用符号“!”表示。例如任何由外部网络发起的连接可以表示为:alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111。

端口号可以用几种方法指定:用“any”、数字、范围以及用“非”操作符。“any”指定任意端口。指定端口范围用“:”它可以指定一个范围内的所有端口。如:log udp any any -> 192.168.1.0/24 1:1024。该条规则记录任何从任意主机发起的到目标网络任何主机上的1~1024端口的UDP协议数据包。

方向操作符“->”规定了规则应用的数据流方向。其左边的IP地址为数据流的起点,右边为终点。双向操作符为“<>”,它告诉系统应该关注任何方向的数据流。

规则选项形成了检测系统的核心,一个规则的规则选项中可能有多个选项,不同选项之间使用“;”分隔开来,他们之间为“与”的关系。选项由关键字和参数组成,每个关键字和它的参数使用冒号“:”分隔。这些关键字主要包括:

● msg:在警报和记录的数据中打印消息。

● logto:将数据包记录到一个用户指定的文件中。

● ttl:检测IP数据包的TTL域。

● id:检测IP数据包的分段ID域是否等于特定的值。

● nocase:设定搜索中使用与大小写无关的方式。

● dsize:检测数据包的有效荷载是否等于特定的值。

● content:在数据流中搜索特定的模式串。

● offset:设定content中的起点。

● depth:设定content中的终点。

● flags:检测TCP数据包的标志是否等于特定的值。

● seq:检测TCP的顺序号是否等于特定的值。

● ack:检测TCP的应答域否等于特定的值。

三、实例分析

下面结合入侵检测的实例来介绍该系统是如何检测入侵的,这里以WEB攻击为例来进行介绍。WEB攻击是入侵的一大类,它是指利用CGI、WEB服务器和浏览器等存在的安全漏洞来损害系统安全或导致系统崩溃的一类入侵方式。由于WEB的广泛使用,关于它的各种安全问题不断地发布出来,这些漏洞中的一些漏洞甚至允许攻击者获得系统管理员的权限而进入站点内部。因此,WEB攻击的危害很大。

虽然WEB攻击种类繁多,但是分析一下,还是具有如下几个特点:

● 都是通过HTTP数据流来进行的,所以可以通过HTTP数据流来进行检测。

● HTTP是无状态的协议,一般都是通过一次请求来实现,或者包含有一次具有典型的入侵特征的请求,所以利用一次请求信息就可以实现检测。

● 一般都是通过构造别有用心的请求字符串来实现的,所以可以采用基于规则的方法。

在我们的系统中可以检测出100多种WEB攻击方式。例如规则:alert http $EXTERNALNET any -> $HTTPSERVER 80 (content:"/maillist.pl"; nocase; msg: " WEB-CGI Maillist CGI access attempt ";) 。该规则规定了检测从外网的任意端口到内网的WEB服务器的80端口的数据流。检测条件为请求中包含“/maillist.pl”字符串,匹配不分大小写,告警名称为“WEB-CGI Maillist CGI access attempt”。这里利用了两个自定义的变量$EXTERNALNET和$HTTPSERVER,分别表示外网和WEB服务器。

四、结束语

本文在对入侵检测系统进行分析的基础上,在Linux系统下实现了一个基于网络的入侵检测系统。实践表明,该系统对于检测一些常见的入侵方式具有很好的效率和性能。同时,该系统提供了完整的框架,可以灵活地应用于各种环境并扩充。当然,本系统还有很多不足的地方:数据源比较单一,还应该加入日志数据源;而且现在对于应用层协议只实现了HTTP协议分析,以后还可以加入其他协议分析,如TELNET、FTP等。这些都需要今后进一步完善。未来的入侵检测系统将会结合其它网络管理软件,形成入侵检测、网络管理、网络监控三位一体的工具。同时,网络安全需要纵深的、多层次的防护。即使拥有当前最强大的入侵检测系统,如果不及时修补网络中的安全漏洞的话,安全也无从谈起。只有将入侵检测系统与其他安全工具结合起来,才能构筑起一道网络安全的立体防御体系,最大程度地确保网络系统的安全。


相关内容