入侵检测系统规则分析及其创建研究(一)
详细内容
【摘 要】文章通过实例分析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_ any -> $_SERVERS $_PORTS(content:"<SCRIPT>"; msg:"WEB-MISC cross site scripting attempt";)
现在,仅在来自Web服务器的相关会话中检测到〈SCRIPT〉内容时才会触发该规则。当流量开始于一个外部的IP地址($EXTERNAL_),并被发送给Web服务器上服务端口时,该规则才被触发。当正确地标识公司所有的Web服务器和所运行的端口后,跨站脚本规则仅当含有脚本标记的数据流被发送到Web服务器上时才触发。但是,载入这个规则后会发现无论何时有包含java script的请求时都会产生大量的误报。因此需要更进一步地提炼这个规则,找到跨站脚本攻击数据流的唯一特征。
alert tcp $EXTERNAL_ any -> $_SERVERS $_PORTS(msg:"WEB-MISC cross site scripting attempt"; flow:to_server,established;content:"<SCRIPT>";)
这个校正后的规则使用了flow选项,使用IDS的TCP重建特征来鉴别流量的方向。通过应用特定的flow选项,to_server和established,规则仅仅对从客户端向服务器端发起的会话有效。一个跨站脚本攻击只会发生在这个方向传输的流量上,而反方向上的流量可能是一个包含java script标记的正常的会话。
现在规则已经可以识别跨站脚本攻击了,且产生误报的可能性大大减少。接着需要利用大小写敏感性确保攻击者不能躲避该规则。content选项是区分大小写的,然而HTML不是,因此攻击者可以通过将脚本标记修改为<ScRiPt>或<script>避开这个规则,为了弥补这一点,应用nocase选项来指定不区分大小写。
alert tcp $EXTERNAL_ any -> $_SERVERS $_PORTS(msg:"WEB-MISC cross site scripting attempt";flow:to_server,established;content:"<SCRIPT>";nocase;)
2 IDS规则的编写方法
2.1利用网络知识创造新规则
首先需要编写规则头。Web服务器请求响应是一个数据流,因此规则头的协议部分应使用TCP。要想监控指定的任何外部地址,源地址部分可以使用$EXTERNAL_变量。因为我们想让该规则应用于Web服务器请求响应,所以源端口部分应使用$_PORTS变量来标识与连接相关的端口列表。如果想监控整个内部网络,目标地址部分应使用$HOME_变量。请求可以使用任何随机选取的高端端口,因此可以将目的端口部分设为any。最后我们希望该规则匹配数据流后报警,那么规则行为部分应设为alert,这样就形成了下面的规则头:alert tcp $EXTERNAL_ $_PORTS->$HOME_ any,接下来指定规则选项。
