什么是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个/秒,服务器永远有处理不完的连接,服务器的CPU 100%并长时间保持,然后丢连接的60秒服务器也判断处理不过来了,新的连接也处理不了,这样服务器达到了超级繁忙状态。
:
我们假设服务器处理Search只用了0.01S,也就是10毫秒(这个速度你可以去各个有开放时间显示的论坛看看),我们使用的线程也只有120,很多服务器的丢连接时间远比60S长,我们的使用线程远比120多,可以想象可怕了吧,而且客户机只要发送了断开,连接的保持是代理做的,而且当服务器收到SQL请求,肯定会进入队列,不论连接是否已经断开,而且服务器是并发的,不是顺序执行,这样使得更多的请求进入内存请求,对服务器负担更大。
当然,CC也可以利用这里方法对FTP进行攻击,也可以实现TCP-FLOOD,这些都是经过测试有效的。
解决CC的切入点:
1、大部分的HTTP代理服务器代理源client向服务器发出的数据包带有"X-Forwarded-For"特征。
2、针对CC攻击非HTTP端口的时候可以通过过滤HTTP请求特有的"GET"特征进行过滤。
3、对付CC攻击,区别非正常连接要在代理服务器和被攻击的服务器完成三次握手进行数据通讯的时候进行检测。检测出后要及时关闭服务器相应的非正常连接。否则同样可能因死连接过多造成服务器资源枯竭。
4、限制单位时间内同一请求IP的并发连接数也不失为一种好的办法。
5、大部分代理服务器会向服务器报露源请求的源IP地址,只不过这个地址经常是反的例如202.96.140.77你收到所的数据包可能变成77.140.96.202,这可能是程序员没有将网络字节序转换成主机字节序放在HTTP请求信息里所致。找出什么IP攻击你解决办法要你自己想。
以上所讲的不一定能帮助普通用户解决实际问题,以下给普通用户一些简单的解决提示:
1、linux的iptables可以配置字符串模式匹配,也就是可以利用iptables实现 解决CC的切入点1、2。将linux配置为桥模式实现对被攻击的非linux服务器保护。可以参考下(用IPTables实现字符串模式匹配
2、很多unix防火墙都带了限制单一ip并发数的功能。例如ipfw
3、如果是针对WEB网站攻击可以采取一些退让的办法比方说域名转向(把负载交给域名转向服务商)。
也可以通过反响代理或者dns轮询提高web服务整体承受能力。
顺便说一下:字符串匹配本身就是一个开销很大的工作,iptables用来解决CC攻击性能上并不是非常的出色。我可以给一些有开发能力的用户一些提示,以上提及的关键字均出现在三次握手结束后的第四次数据通讯中,且均在TCP数据部分的前255bytes。