开源HIDS-OSSEC使用实例:监测CC攻击

2015-06-02 521259人围观 ,发现 12 个不明物体 系统安全

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)原创奖励计划,未经许可禁止转载

更多精彩
相关推荐

这些评论亮了

  • 我已经把aaencode还有一些其它的JS加密方法写成LUA类,Nginx加载后,用户请求后如没有Cookie则返回一段JS,这段JS是在浏览器中写入一段COOKIE,Cookie值由服务器时间戳前6位+密钥值+客户端IP MD5生成,然后由aaencode或者其它加密方法混合加密JS,返回到客户端,客户端执行。如果CC攻击软件无法解析这段JS则永远无法提供正确的Cookie,之后考虑如果某IP一直没有正确的Cookie的话,由Lua动态封IP,目前没有做性能测试,感觉应该也不慢
    )8( 亮了
发表评论

已有 12 条评论

取消
Loading...

这家伙太懒,还未填写个人描述!

6 文章数 53 评论数 0 关注者

特别推荐

文章目录

    文章目录

      推荐关注

      官方公众号

      聚焦企业安全

      填写个人信息

      姓名
      电话
      邮箱
      公司
      行业
      职位
      css.php