snort规则初试

好久之前就想架一套开源的IDS来监测网站的日常访问,现在有时间了,来实践下snort+base这个平台。

snort是目前使用最广泛的入侵检测系统,许多商用IDS也是基于它来开发的,它的弹性和效率在使用过程中越来越能体会得到。
Base是基于snort的安全分析引擎,可以让用户方面的通过web方式来检索snort安全警报。

snort+base的安装比较简单,只是需要的软件包比较多,libpcap/apache/php/mysql/pear等,缺哪补哪儿即可,官网提供了一份安装文档较为详细 http://www.snort.org/docs/setup_guides/Snort_Base_Minimal.pdf ,google一下也能搜索到很多的文档。

安装完成之后,在snort.conf中默认加载了很多规则文件:
。。。。。。
include $RULE_PATH/web-cgi.rules
include $RULE_PATH/web-coldfusion.rules
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-frontpage.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-php.rules
。。。。。。

因为我们前端有防火墙等设备,并只开放了80端口,所以很多规则可以屏蔽,作为试验就仅仅保留自己定制的规则和规则文件了。
include $RULE_PATH/test.rules

模仿默认规则插入这样一条试试:
alert tcp any any -> 211.67.64.0/24 80 (msg:"e21 SQL union monitor"; uricontent:".php"; pcre:"/(%20and%20)*(select%20)/"; nocase; metada
ta:service http; classtype:web-application-attack; sid:1000001; rev:2;)
规则基本含义是,alert表示规则处理方式是报警;方向是any源IP和any源端口到211.67.64.0/24子网的tcp80端口,即所有的web访问;msg定义的是规则名称;uricontent表示url中包含php字符;nocase表示忽略大小写;content表示在包信息中包含%20union%20字符(一般sql注入的字符);sid代表规则id,不可重复最好从100w开始;rev表示规则版本。

重启snort后,可以看到加载的规则数目,如果正常会看到增加了一条规则数,使用客户端模仿一下union的url访问,在base中可以看到相关的alert条目。

由于防火墙基本隔离网络层的入侵行为,网站目前面临最大的安全问题主要是两类,其一是sql注入方式,其二是脚本编写问题带来的变量漏洞文件上传等,使用这样的方式可以定制一些符合自身网站特点的入侵规则,毕竟作为运维人员,自身的网站构架和文件结构是最熟悉的。

发表评论