山寨IPS试验

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




花了两天时间研究了一下山寨IPS的方法,基于Snort,Share给大家。

Google了一下,Snort似乎在2.3之后就支持了Inline mode,于是找到了其mainline最新的2.8版本,摆弄了一段时间未果,由于是业余试验没有时间debug它,于是又google到了snort-inline这个网站。

该网站是在mainline添加inline特性之前某些非官方侠客做的patch。在Ubuntu8.1上面,基于其中的snort_inline-2.4.4-final版本试验成功,步骤如下:

1.build以及install两个模块
在build snort时候使用如下configue命令
./configure –enable-inline

2.build后将snort_inline目录下的etc目录内容拷贝到/etc/snort_inline

3.找一些免费的signature,拷贝到/etc/snort_inline/rules目录下面

4.修改config文件,主要是RULE_PATH等环境变量的修改,保证目录的正确性。

5.配置iptables
iptables -A OUTPUT -p tcp –dport 80 -j QUEUE
这部分是重点了,这条配置策略将netfilter收到的80端口的报文内容倒腾到Queue中。等待App进行读取

于是我们可以用web流量测试IPS了。

6.运行daemon
snort_inline -Q后,snort-inline可以从ip queue读取数据

7.测试inline阻断
在etc/snort_inline/rules/web-attacks.rules头部添加一条rule,其实就是signature
drop tcp any any -> any 80 (classtype:attempted-user; msg:”Port 80 connection initiated”;)
从Ubuntu尝试向外连接80端口会触发阻断,产生了日志。日志好像存在/var/log/snort之中,信息忘了存下来了。

其间还遇到了编译错误以及模块依赖等等问题,兵来将挡,逐个解决就好了。

这样的话,一个有模有样的IPS engine就可以了,但实际上问题还多多:

首先signature到哪里去找,找不到要向原公司购买。

其次是性能问题,诸位熟悉Netfilter的达人可以分析一下,不晓得从IPTable的queue中读取traffic性能如何。

最后要想作为产品还要解决管理等诸多问题,因此这种方式暂时只能放在实验室的出口玩玩了。

(1个打分, 平均:5.00 / 5)

雁过留声

“山寨IPS试验”有8个回复

  1. chunhui_true 于 2010-01-18 7:20 下午

    我以为B大侠研究IPS应该高屋建瓴站在宇宙历史唯物主义的高角度来看待这个问题。安装配置之类的有的是人在做,呵呵。
    官方也可以下载规则,只要注册他的一个帐号得到一个认证码即可。
    还有一个http://www.bleedingsnort.com/ 这个据说是提供免费规则的地方。
    又听说新出来一个扬言要替代snort的ids http://www.openinfosecfoundation.org/ 据说支持多线程之类的。。。

  2. appleleaf 于 2010-01-18 7:45 下午

    收藏chunhui_true的评论,这些我都首次听说,多谢。

  3. chunhui_true 于 2010-01-18 8:34 下午

    抱歉appleleaf。我开头没注意,以为作者是BNN老大呢,原来这里有N多大侠发稿。
    appleleaf大侠在研究入侵检测么?期待更多文章!

  4. M 于 2010-01-18 9:54 下午

    BNN就是首席呀~~

  5. system 于 2010-01-18 11:06 下午

    用TILERA硬件平台,SMP Linux2.6, Snort,直接就可以支持10G 山寨IPS了。

  6. chunhui_true 于 2010-01-19 12:52 上午

    # system 于 2010-01-18 11:06 pm

    用TILERA硬件平台,SMP Linux2.6, Snort,直接就可以支持10G 山寨IPS了。

    snort不需要做任何修改吗?那国内的一些号称高性能大流量的厂商还有啥可说的啊。snort在也不应该自称“轻量”了吧。

  7. 明月照高楼 于 2010-01-20 2:59 上午

    俺做过
    PM 1.6+ linux 2.6 + snort inline
    Http 32k payload 性能在10M左右…
    简单的说,snort inline 要把包先放在一个队列,然后拷贝到用户空间,然后snort做分析,然后把裁决的结果扔回内核,然后从队列里取出来决定是否转发….
    netlink的设计就不是用来干这种大流量的活滴

  8. 杰克 于 2010-01-20 5:43 上午

    netlink的设计就不是用来干这种大流量的活滴

    把netlink换成memmap。