前段时间,本站遭遇了一次CC攻击,具体攻击的原因未知,攻击持续时间大概在1天左右,攻击器使用了大量IP对本站进行了CC攻击,使得本站一度过载出现无法访问的情况,通过一番努力,在攻击开始后一段时间以后成功封堵了攻击者,本文简要记述了当日的攻击和防御过程,谨以为戒。

    首先给出本站的基本构架,本站采用asp.net mvc 1.0开发,基于sqlite数据库系统,部署在win2008+IIS7的系统上,本次攻击是典型的CC攻击,攻击者使用大量肉鸡发起大量无效http请求,而导致程序过载。

    攻击大概在某天上午开始了,由于本站采用的sqlite为单文件数据库,在大并发情况下负载能力较低,对于一般blog程序自然是绰绰有余,但是在大量攻击的情况下,该数据库就无法充分利用系统资源了,在服务器cpu占用率在30%左右的时候,本站开始变得极为缓慢甚至出现程序执行错误,正常访问出现问题。

    出现问题后,我进入服务器,发现流量达到5M左右,活动http连接在200以上,在此情况下,sqlite负载下的本程序显然已经无法正常服务,于是开始考虑应对方法。

    对付CC攻击,一般采用防火墙封锁或者负载均衡的方式处理,负载均衡显然不太现实,因此,我们考虑采用防火墙系统封堵大量非法请求IP,win2008中自带了功能极为强大的防火墙系统,因此,我们使用它来封锁非法请求。

    由于访问IP量巨大,因此,手动处理和辨别非法ip是不现实的,因此,我考虑使用程序分析攻击ip的方式,对iis日志访问记录进行详细分析,分析方法如下:

         1.对当日的访问ip进行统计
         2.攻击者的典型特征是短时间多次连接,通过该方式,筛选出大量可疑IP
         3.对可疑IP进行分析,剔除搜索引擎蜘蛛IP
         5.最后剩下的基本上就是攻击者IP

    通过以上方法,我们可以在较高精确度的情况下找出攻击者IP,通过对本次攻击的日志分析,在封堵大量攻击者IP之前,找到嫌疑度很高的IP988个。

    然后需要做的就是在防火墙封堵这些IP,规则采用入站规则,这样,防火墙封堵将获得很高的效率,经过试验发现,windows防火墙一条规则大概可以封堵600多个单一IP,因此,我创建了两条规则,通过脚本,将这些可疑度很高的ip全部加入拒绝ip列表,完成之后,服务器流量和cpu占用率马上下降到正常水平。

    在攻击过程中,经常出现攻击者攻击一段时间,停止一段时间,因此,我采用系统通知的方式,在服务器负载或者流量突然很大的时候进行通知,这样就可以在第一时间得知攻击情况并进行封堵。

    在一天以后,攻击停止,我解开了这两条规则,由于攻击者经常使用合法ip进行攻击,因此这些ip的用户也很可能访问本站,因此在攻击停止之后需要解开规则。

    本次规则,共出现攻击ip998个,在封堵之前,攻击次数最多的ip202.108.xxx.xxx进行了1401此攻击连接,最少的攻击IP189.31.xxx.xxx进行了11次攻击连接,在攻击停止之后,再次对日志进行分析,共产生116494次攻击访问请求,同时将系统最高在线人数刷新到331人,考虑在攻击不久之后便封堵了大量攻击IP,因此本次攻击量还是比较大的。

posted on 2010-06-15 14:02  Leven  阅读(1812)  评论(1编辑  收藏  举报
CopyRight 2008, Leven's Blog xhtml | css
Leven的个人Blog