BYsan

 找回密碼
 成為會員
搜索
熱搜: 活動 交友 discuz
查看: 2160|回復: 0

CC攻击原理及防范方法

[複製鏈接]
發表於 2006-7-19 16:45:48 | 顯示全部樓層 |閱讀模式
很多朋友都知道木桶理论,一桶水的最大容量不是由它最高的地方决定的,而是由它最低的地方决定,服务器也是一样,服务器的安全性也是由它最脆弱的地方决定的,最脆弱的地方有多危险服务器就有多危险。DDOS也是一样,只要你的服务器存在一个很耗资源的地方,限制又不够,就马上成为别人DDOS的对象。比如SYN-FLOOD,它就是利用服务器的半连接状态比完全连接状态更耗资源,而SYN发动方只需要不停的发包,根本不需要多少资源。

一个好的DDOS攻击必须是通过自己极少资源的消耗带来对方较大的资源消耗,否则比如ICMP-FLOOD和UDP-FLOOD都必须和别人一样大的带宽,对方服务器消耗多少资源自己也得赔上多少资源,效率极其低下,又很容易被人发现,现在基本没有什么人用了。

攻击原理

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,这些都是经过测试有效的。

防范方法

说了攻击原理,大家肯定会问,那么怎么防御?使用硬件防火墙我不知道如何防范,除非你完全屏蔽页面访问,我的方法是通过页面的编写实现防御。

1. 使用Cookie认证。这时候朋友说CC里面也允许Cookie,但是这里的Cookie是所有连接都使用的,所以启用IP+Cookie认证就可以了。

2. 利用Session。这个判断比Cookie更加方便,不光可以IP认证,还可以防刷新模式,在页面里判断刷新,是刷新就不让它访问,没有刷新符号给它刷新符号。给些示范代码吧,Session:

<%if session(“refresh”)<> 1 then
Session(“refresh”)=session(“refresh”)+1
Response.redirect “index.asp”
End if
%>

&#36825;&#26679;用&#25143;第一次&#35775;&#38382;&#20250;使得Refresh=1,第二次&#35775;&#38382;,正常,第三次,不&#35753;他&#35775;&#38382;了,&#35748;&#20026;是刷新,可以加上一&#20010;&#26102;&#38388;&#21442;&#25968;,&#35753;多少&#26102;&#38388;允&#35768;&#35775;&#38382;,&#36825;&#26679;就限制了耗&#26102;&#38388;的&#39029;面的&#35775;&#38382;,&#23545;正常客&#25143;几乎&#27809;有什么影&#21709;。

3. 通&#36807;代理&#21457;送的HTTP_X_FORWARDED_FOR&#21464;量&#26469;判&#26029;使用代理攻&#20987;机器的真&#23454;IP,&#36825;招完全可以找到&#21457;&#21160;攻&#20987;的人,&#24403;然,不是所有的代理服&#21153;器都&#21457;送,但是有很多代理都&#21457;送&#36825;&#20010;&#21442;&#25968;。&#35814;&#32454;代&#30721;:

<%
Dim fsoObject
Dim tsObject
dim file
if Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then
response.write "&#26080;代理&#35775;&#38382;"
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 "有代理&#35775;&#38382;"
%>

&#36825;&#26679;&#20250;生成CCLog.txt,它的&#35760;&#24405;格式是:真&#23454;IP [代理的IP] &#26102;&#38388;,看看哪&#20010;真&#23454;IP出&#29616;的次&#25968;多,就知道是&#35841;在攻&#20987;了。&#23558;&#36825;&#20010;代&#30721;做成Conn.asp文件,替代那些&#36830;接&#25968;据&#24211;的文件,&#36825;&#26679;所有的&#25968;据&#24211;&#35831;求就&#36830;接到&#36825;&#20010;文件上,然后&#39532;上就能&#21457;&#29616;攻&#20987;的人。

4. &#36824;有一&#20010;方法就是把需要&#23545;&#25968;据查&#35810;的&#35821;句做在Redirect后面,&#35753;&#23545;方必&#39035;先&#35775;&#38382;一&#20010;判&#26029;&#39029;面,然后Redirect&#36807;去。

5. 在存在多站的服&#21153;器上,&#20005;格限制每一&#20010;站允&#35768;的IP&#36830;接&#25968;和CPU使用&#26102;&#38388;,&#36825;是一&#20010;很有效的方法。

CC的防御要&#20174;代&#30721;做起,其&#23454;一&#20010;好的&#39029;面代&#30721;都&#24212;&#35813;注意&#36825;些&#19996;西,&#36824;有SQL注入,不光是一&#20010;入侵工具,更是一&#20010;DDOS缺口,大家都&#24212;&#35813;在代&#30721;中注意。&#20030;&#20010;例子吧,某服&#21153;器,&#24320;&#21160;了5000&#32447;的CC攻&#20987;,&#27809;有一&#28857;反&#24212;,因&#20026;它所有的&#35775;&#38382;&#25968;据&#24211;&#35831;求都必&#39035;一&#20010;&#38543;机&#21442;&#25968;在Session里面,全是&#38745;&#24577;&#39029;面,&#27809;有效果。突然&#21457;&#29616;它有一&#20010;&#35831;求&#20250;和外面的服&#21153;器&#32852;系&#33719;得,需要&#36739;&#38271;的&#26102;&#38388;,而且&#27809;有什么&#35748;&#35777;,&#24320;800&#32447;攻&#20987;,服&#21153;器&#39532;上&#28385;&#36127;荷了。
   
代&#30721;&#23618;的防御需要&#20174;&#28857;&#28857;滴滴做起,一&#20010;&#33050;本代&#30721;的&#38169;&#35823;,可能&#24102;&#26469;的是整&#20010;站的影&#21709;,甚至是整&#20010;服&#21153;器的影&#21709;,慎之!
您需要登錄後才可以回帖 登錄 | 成為會員

本版積分規則

小黑屋|手機版|Archiver|BYsan

GMT+8, 2024-5-4 11:04 AM , Processed in 0.040333 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回復 返回頂部 返回列表