【摘 要】文章通过实例分析ids规则提出应该如何完善规则以便降低ids误报率的方法,最后阐述ids规则的创建方法。
【关键词】ids规则 规则分析 规则创建 误报率
1 ids规则实例的分析
当网站允许恶意代码被插入到一个动态创建的网页中时,跨站脚本攻击就发生了。我们来看一个ids规则:alert tcp any any -> any any (content:"<script>";msg:"web-misc cross site scripting attempt";)
规则选项content包含了“<script>”字符串,正好可以匹配跨站脚本攻击的特征,跨站脚本攻击会触发这个规则。可是许多其他的正常流量也会触发这个规则,ids根据该规则发出报警从而产生误报。为了避免这种情况的发生就需要修改这个规则使其仅仅在web流量中触发:
alert tcp $external_net any -> $http_servers $http_ports(content:"<script>"; msg:"web-misc cross site scripting attempt";)
现在,仅在来自web服务器的相关http会话中检测到〈script〉内容时才会触发该规则。当流量开始于一个外部的ip地址($external_net),并被发送给web服务器上http服务端口时,该规则才被触发。当正确地标识公司所有的web服务器和所运行的端口后,跨站脚本规则仅当含有脚本标记的数据流被发送到web服务器上时才触发。但是,载入这个规则后会发现无论何时有包含javascript的请求时都会产生大量的误报。因此需要更进一步地提炼这个规则,找到跨站脚本攻击数据流的唯一特征。
alert tcp $external_net any -> $http_servers $http_ports(msg:"web-misc cross site scripting attempt"; flow:to_server,established;content:"<script>";)
这个校正后的规则使用了flow选项,使用ids的tcp重建特征来鉴别流量的方向。通过应用特定的flow选项,to_server和established,规则仅仅对从客户端向服务器端发起的会话有效。一个跨站脚本攻击只会发生在这个方向传输的流量上,而反方向上的流量可能是一个包含javascript标记的正常的http会话。
现在规则已经可以识别跨站脚本攻击了,且产生误报的可能性大大减少。接着需要利用大小写敏感性确保攻击者不能躲避该规则。content选项是区分大小写的,然而html不是,因此攻击者可以通过将脚本标记修改为<script>或<script>避开这个规则,为了弥补这一点,应用nocase选项来指定不区分大小写。
alert tcp $external_net any -> $http_servers $http_ports(msg:"web-misc cross site scripting attempt";flow:to_server,established;content:"<script>";nocase;)
2 ids规则的编写方法
2.1利用网络知识创造新规则
首先需要编写规则头。web服务器请求响应是一个http数据流,因此规则头的协议部分应使用tcp。要想监控指定的任何外部地址,源地址部分可以使用$external_net变量。因为我们想让该规则应用于web服务器请求响应,所以源端口部分应使用$http_ports变量来标识与http连接相关的端口列表。如果想监控整个内部网络,目标地址部分应使用$home_net变量。http请求可以使用任何随机选取的高端端口,因此可以将目的端口部分设为any。最后我们希望该规则匹配数据流后报警,那么规则行为部分应设为alert,这样就形成了下面的规则头:alert tcp $external_net $http_ports->$home_net any,接下来指定规则选项。
2.2利用流量分析创建新规则
下面通过创建一个监控openssl slapper蠕虫的规则的例子进行说明。
将嗅探器放在一个防火墙后面,防火墙仅仅开放slapper使用的那个端口。slapper是利用了openssl中的一个安全漏洞,因此在防火墙中打开端口443/tcp后开始监控服务器,如果一段时间后,服务器发出一个像“no job control in this shell”这样的响应,就说明服务器遭到slapper攻击了。记录下遭到攻击的时间,然后使用grep对这段时间tcpdump日志记录的数据进行分析。从这个信息中找出一个特征内容赋给规则选项content表达式,并使该特征与ids规则库中其他规则content表达式内容不同,即是唯一的。这里可以使用content:”=xterm; exec bash –i”来创建该特征。
接着开始写规则头。规则实现的功能应该可以对来自任何外部源、任何端口输入的,目的为web服务器的https端口(443),且满足攻击特征的tcp流量进行报警,所以规则头可写为:
alert tcp $external_net any->$home_servers 443,
加上报警消息和版本号后,规则选项为:
(msg:”slapper attack”;flow:to_server,established;content:”=xterm; exec bash –i”;nocase;priority:1;rev:1)
联接规则头和规则选项,完成规则如下:
alert tcp $external_net any->$home_servers 443(msg:”slapper attack”; flow:to_server,established;content:”=xterm; exec bash –i”; nocase; priority:1; rev:1)
至此就完成了监控slapper蠕虫的规则。显然,利用流量分析的方法创建新规则,其工作重点在于识别含有确切攻击的正确数据包,并从中找出区别于其他攻击的唯一特征。
本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/245027.html