CC攻击
CC攻击中的 CC 即 Challenge Collapsar,其前身名为Fatboy攻击,Collapsar(黑洞) 是绿盟科技的一款抗DDOS产品品牌,在对抗拒绝服务攻击的领域内具有比较高的影响力和口碑。 因此,存在这样一种拒绝攻击行为,可以将受到Collapsar防火墙保护的网站击溃,因此攻击发起者挑衅式的将其更名为Challenge Collapsar 攻击,简称CC攻击。
CC攻击的基本原理[ ]
- CC攻击的原理并不复杂,其主要思路是基于应用层的弱点进行攻击;传统的拒绝服务攻击,如Syn flood 主要是基于协议层和服务层的弱点开展攻击,早期的抗拒绝服务攻击产品也是基于此进行防护。而应用层的弱点,取决于各自应用平台的开发能力,因此难以具有通用性的防护方案,这也是CC攻击没有很好的防护产品,非常容易得手的原因。
$sql="select * from post where tagid='$tagid' order by postid desc limit $start ,30";
- 当post表数据庞大,翻页频繁,$start数字急剧增加时,查询影响结果集=$start+30; 该查询效率呈现明显下降趋势,而多并发频繁调用,因查询无法立即完成,资源无法立即释放,会导致数据库请求连接过多,导致数据库阻塞,网站无法正常打开。
- 性能不够优良的数据查询,不良的程序执行结构,比较消耗资源的功能,都可能成为CC攻击的目标,而执行方法可能是单机发起,也可能是通过肉鸡发起,还有可能通过高流量站点嵌入脚本(iframe嵌入或js嵌入)发起,基于高流量网站嵌入攻击代码的CC攻击,在目前互联网环境上来讲,更加无解。
防范攻击的方法[ ]
- 说了攻击原理,大家肯定会问,那么怎么防御?使用硬件防火墙我不知道如何防范,除非你完全屏蔽页面访问,我的方法是通过页面的编写实现防御。
- 利用Session.这个判断比Cookie更加方便,不光可以IP认证,还可以防刷新模式,在页面里判断刷新,是刷新就不让它访问,没有刷新符号给它刷新符号.给些示范代码吧,Session:
程序代码:
〈% if session(“refresh”)〈〉 1 then Session(“refresh”)=session(“refresh”)+1 Response.redirect “index.asp” End if %〉
- 这样用户第一次访问会使得Refresh=1,第二次访问,正常,第三次,不让他访问了,认为是刷新,可以加上一个时间参数,让多少时间允许访问,这样就限制了耗时间的页面的访问,对正常客户几乎没有什么影响。
程序代码:
〈% Dim fsoObject Dim tsObject dim file if Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then response.write "无代理访问" response.end end if Set fsoObject = Server.CreateObject("Scripting.FileSystemObject") file = server.mappath("CCLog.txt") if not fsoObject.fileexists(file) then fsoObject.createtextfile file,true,false end if set tsObject = fsoObject.OpenTextFile(file,8) tsObject.Writeline Request.ServerVariables("HTTP_X_FORWARDED_FOR") &"["Request.ServerVariables("REMOTE_ADDR")&"]"&now() Set fsoObject = Nothing Set tsObject = Nothing response.write "有代理访问" %〉
- 这样会生成CCLog.txt,它的记录格式是:真实IP [代理的IP] 时间,看看哪个真实IP出现的次数多,就知道是谁在攻击了.将这个代码做成Conn.asp文件,替代那些连接数据库的文件,这样所有的数据库请求就连接到这个文件上,然后马上就能发现攻击的人。
- 还有一个方法就是把需要对数据查询的语句做在Redirect后面,让对方必须先访问一个判断页面,然后Redirect过去。
- 在存在多站的服务器上,严格限制每一个站允许的IP连接数和CPU使用时间,这是一个很有效的方法。
CC的防御要从代码做起,其实一个好的页面代码都应该注意这些东西,还有SQL注入,不光是一个入侵工具,更是一个DDOS缺口,大家都应该在代码中注意.举个例子吧,某服务器,开动了5000线的CC攻击,没有一点反应,因为它所有的访问数据库请求都必须一个随机参数在Session里面,全是静态页面,没有效果.突然发现它有一个请求会和外面的服务器联系获得,需要较长的时间,而且没有什么认证,开800线攻击,服务器马上满负荷了。
CC基于DDOS攻击的原理[ ]
- 首先DoS(Denial of Service) :阻断服务,泛指黑客试图妨碍正常使用者使用网络上的服务。
- DDoS(Distributed Denial of Service):分布式阻断服务,是DoS的一种特例,指黑客利用多台机器同时攻击来达到妨碍正常使用者使用服务的目的。
- 再说CC,CC主要是用来攻击页面的。每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停的进行访问那些需要大量数据操作——就是需要大量CPU时间的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接,到了超级繁忙的状态,就把网络给阻断了!正常的访问就无法进行了!
CC攻击常见问题[ ]
- 1.为什么我使用CC没有什么效果?
CC是通过模拟多用户访问来达到拒绝服务的效果的,也就是说如果你模拟的用户数目不能达到服务器的最大用户,就达不到拒绝服务的效果,比如xfocus只要600用户就能拒绝,某台超级SMTP服务器需要4000+的线程才能拒绝服务。
- 2.为什么我的CC一运行就出错?
说实话,这是我的错误,我最早的版本是有一个BUG的,其实就是代码里面的hostnow溢出,所以你换个现在的版本就没有问题了
- 3.CC的攻击效果取决于什么?
你使用的有效的代理数目,线程数,你选择的攻击的页面,还有服务器的性能。
- 4.CC为什么要使用代理,直接连接效果不是更好吗?
使用代理的理由很多:
第一是为了安全
第二是很多系统的防火墙都会检测出有人PORT-FLOOD,使用代理就不存在被检测成PORT-FLOOD的问题。
第三是利用了代理的特性,代理有个特性就是接到用户请求以后一定会读取页面,不管用户是否已经断开,这样大大提高了我们的攻击效率,如果我们直接连接必须保持住连接对方服务器才运行,我们通过代理只要把请求发给代理就可以断开,剩下的是代理的事情了。所以我们电脑完成的只是连接代理-〉发送请求-〉断开,而不是有些朋友认为的需要等待数据返回,所以程序才能达到如此的高线程。
- 5.为什么我用1000线不能D下来的服务器,别人500线就可以呢?
这个就是页面选择的问题了,如果选择静态页面,效果可以说很不好,因为服务器读取一个静态页面不需要多少时间就能完成,比如一个页面服务器的读取时间为0.0002S那么这说明该服务器的该页面理论处理能力为5000个页面,如果读取时间为0.2S那么说明该服务器该页面的理论处理能力只有5个,显然攻击效果明显不一样。如果我一秒发起500个连接,对于第一个页面,服务器在0.1S里面就处理完了,我怎么攻击也是没有效果的,对于第二个页面,服务器在一秒内只处理了5个连接,还有495个连接在队列中,这样服务器就有495个连接被占用了,2秒就是990个,1分钟就有29700个连接在队列,如果服务器允许的并发连接数目小于这个数字,那么任何人都无法连接到服务器了,服务器这时的CPU资源和内存资源也都满负荷了。
- 6.如何选择一个好的页面?
从第五条我们可以知道,一个能让服务器运行时间越久的页面越是服务器的薄弱点,大家知道木桶理论,木桶能装多少水不决定于木桶最高的地方有多高,而是木桶最低的地方的高度,那么我们选择一个服务器运行时间最久的页面作为对象,这一般是选择数据查询次数多、查询量大、查询时间长的页面。