什么是cc攻击?怎么防御cc攻击?
cc攻击原理
cc主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,对不?!一般来说,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观,现在知道为什么很多空间服务商都说大家不要上传论坛,聊天室等东西了吧。
一个静态页面不需要免备案服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的体积有200mb大小,系统很可能就要在这200mb大小的数据空间搜索一遍,这需要多少的cpu资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
cc就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量cpu时间的页面)。很多朋友问到,为什么要使用代理呢?因为代理可以有效地隐藏自己的身份,也可以绕开所有的防火墙,因为基本上所有的防火墙都会检测并发的tcp/ip连接数目,超过一定数目一定频率就会被认为是connection-flood。使用代理攻击还能很好的保持连接,我们这里发送了数据,代理帮我们转发给对方免备案服务器,我们就可以马上断开,代理还会继续保持着和对方连接(我知道的记录是有人利用2000个代理产生了35万并发连接)。
可能很多朋友还不能很好的理解,我来描述一下吧。我们假设免备案服务器a对search.asp的处理时间需要0.01s(多线程只是时间分割,对结论没有影响),也就是说他一秒可以保证100个用户的search请求,免备案服务器允许的最大连接时间为60s,那么我们使用cc模拟120个用户并发连接,那么经过1分钟,免备案服务器的被请求了7200次,处理了6000次,于是剩下了1200个并发连接没有被处理。有的朋友会说:丢连接!丢连接!问题是免备案服务器是按先来后到的顺序丢的,这1200个是在最后10秒的时候发起的,想丢?!还早,经过计算,免备案服务器满负开始丢连接的时候,应该是有7200个并发连接存在队列,然后免备案服务器开始120个/秒的丢连接,我们发动的连接也是120个/秒,免备案服务器永远有处理不完的连接,免备案服务器的cpu100%并长时间保持,然后丢连接的60秒免备案服务器也判断处理不过来了,新的连接也处理不了,这样免备案服务器达到了超级繁忙状态。
蝴蝶:我们假设免备案服务器处理search只用了0.01s,也就是10毫秒(这个速度你可以去各个有开放时间显示的论坛看看),我们使用的线程也只有120,很多免备案服务器的丢连接时间远比60s长,我们的使用线程远比120多,可以想象可怕了吧,而且客户机只要发送了断开,连接的保持是代理做的,而且当免备案服务器收到sql请求,肯定会进入队列,不论连接是否已经断开,而且免备案服务器是并发的,不是顺序执行,这样使得更多的请求进入内存请求,对免备案服务器负担更大。
当然,cc也可以利用这里方法对ftp进行攻击,也可以实现tcp-flood,这些都是经过测试有效的。
防范方法
说了攻击原理,大家肯定会问,那么怎么防御?使用硬件防火墙我不知道如何防范,除非你完全屏蔽页面访问,我的方法是通过页面的编写实现防御。
1、使用cookie认证。这时候朋友说cc里面也允许cookie,但是这里的cookie是所有连接都使用的,所以启用ip+cookie认证就可以了。
2、利用session。这个判断比cookie更加方便,不光可以ip认证,还可以防刷新模式,在页面里判断刷新,是刷新就不让它访问,没有刷新符号给它刷新符号。给些示范代码吧,session:
1then
session(“refresh”)=session(“refresh”)+1
response.redirect“index.asp”
endif
这样用户第一次访问会使得refresh=1,第二次访问,正常,第三次,不让他访问了,认为是刷新,可以加上一个时间参数,让多少时间允许访问,这样就限制了耗时间的页面的访问,对正常客户几乎没有什么影响。
3、通过代理发送的http_x_forwarded_for变量来判断使用代理攻击机器的真实ip,这招完全可以找到发动攻击的人,当然,不是所有的代理免备案服务器都发送,但是有很多代理都发送这个参数。详细代码:
这样会生成cclog.txt,它的记录格式是:真实ip[代理的ip]时间,看看哪个真实ip出现的次数多,就知道是谁在攻击了。将这个代码做成conn.asp文件,替代那些连接数据库的文件,这样所有的数据库请求就连接到这个文件上,然后马上就能发现攻击的人。
4、还有一个方法就是把需要对数据查询的语句做在redirect后面,让对方必须先访问一个判断页面,然后redirect过去。
5、在存在多站的免备案服务器上,严格限制每一个站允许的ip连接数和cpu使用时间,这是一个很有效的方法。
cc的防御要从代码做起,其实一个好的页面代码都应该注意这些东西,还有sql注入,不光是一个入侵工具,更是一个ddos缺口,大家都应该在代码中注意。举个例子吧,某免备案服务器,开动了5000线的cc攻击,没有一点反应,因为它所有的访问数据库请求都必须一个随机参数在session里面,全是静态页面,没有效果。突然发现它有一个请求会和外面的免备案服务器联系获得,需要较长的时间,而且没有什么认证,开800线攻击,免备案服务器马上满负荷了。
代码层的防御需要从点点滴滴做起,一个脚本代码的错误,可能带来的是整个站的影响,甚至是整个免备案服务器的影响,慎之!
广告位 |