OSSEC作为一款流行的开源HIDS在FreeBuf上已经有不少文章了,虽然ossec已经内置了一些规则,但要真正满足实际的需求还是远远不够的。这里以一个实例,具体讲解一下如何自己制定一条规则,来加深对ossec的理解。
思路
假设我们有这样一个需求,要对指定的某个动态页面进行监测(本文例子为/phpinfo.php),通过一段时间内的单个ip访问频率判断是否存在cc行为。
通过ossec处理该需求的思路:
1.监控web服务器web日志文件读取日志。 2.针对/phpinfo.php该页面建立一条rule,规则为每当检测到/phpinfo.php被访问到一次,则触发一次。 3.再新建一条rule,规则为一定时间内同一个ip触发我们刚才建立的rule达到一定次数,则触发本条规则(本文为方便验证,暂设为每分钟10次)。
思路已经有了,我们再看看怎么实现。我使用的环境为一台ossec server+webui(centos),一台装了ossec agent(centos)的Apache server,具体部署方法可以百度或者站内搜索,这方面的资料很多就不赘述了。
首先我们要将Apache server的access访问日志添加到ossec日志源中。修改ossec agent端的配置文件ossec.conf,加入如下配置:
<localfile> <location>/var/log/httpd/access_log</location> <log_format>apache</log_format> </localfile>
<location>标签中的内容为需要监控的日志文件路径,这里填access日志的实际路径,<log_format>标签则是日志的类型格式,这里用到的是Apache。其它支持的格式可以参考官方文档 http://ossec-docs.readthedocs.org/en/latest/syntax/head_ossec_config.localfile.html
完成之后,我们先不着急建立新的规则,而是先看一下Apache日志在ossec中是怎么解析的。首先访问一下/phpinfo.php,从accesslog中找到这条访问日志。然后我们要用到{ossec路径}/bin/ossec-logtest这个工具来测试一下,结果如下图:
日志包含的字段已经解析了出来,并且匹配中了id为31108的rule。我们看看31108是个什么样的规则(在规则文件rules/web_rules.xml中):
<rule id="31108" level="0"> <if_sid>31100</if_sid> <id>^2|^3</id> <compiled_rule>is_simple_http_request</compiled_rule> <description>Ignored URLs (simple queries).</description> </rule>
这条规则意思为,若日志的响应代码为2xx或者3xx,则匹配该规则。我们可以在新建的规则中用到这条rule,帮我们过滤掉403、404页面。
在web_rules.xml规则文件中添加如下rule:
<rule id="31170" level="3"> <if_sid>31108</if_sid> <url>^/phpinfo.php</url> <description>target url </description> </rule>
这条rule意思是匹配了31108rule的日志中url包含/phpinfo.php的话,则匹配该rule,<url>标签中可用"|"分隔添加多个路径。
我们再用ossec-logtest工具测试一下:
我们新添加的规则已经匹配成功。不过这里level值实际用的时候要改成0,不然一直报警会很烦的(ossec默认不会对level 3以下的rule报警)。
继续添加下一条规则,也是判断cc攻击的规则:
<rule id="31171" level="10" frequency="10" timeframe="60"> <if_matched_sid>31170</if_matched_sid> <same_source_ip /> <description>cc attacks </description> <group>DDOS</group> </rule>
当同一ip在60秒内触发id为31170的rule 10次的时候,触发本规则(标签的具体描述请参考: http://ossec-docs.readthedocs.org/en/latest/syntax/head_rules.html)。
最后,依次重启ossec server端和agent端的服务,使规则生效。反复刷新/phpinfo.php页面,可看到实际的报警效果:
至此新建规则的工作已完成,只需按照自己的需要略微修改即可。今后的文章中我会进一步讲到利用ossec的active-response功能对cc攻击进行阻断。
* 作者:plane636,文章属FreeBuf黑客与极客(Freebuf.COM)原创奖励计划,未经许可禁止转载