适合读者:DDOS研究员、各大站长、网络管理员
前置知识:ASP基本阅读能力
蝴蝶:前段时间上海一家游戏娱乐公司的网站遭到了基于页面请求的DDOS分布式拒绝服务攻击,网站陷入完全瘫痪状态,并被黑客的匿名信勒索,金额高达10万元,而在勒索过程中,这群黑客还表示会对腾讯QQ等网站下手,随后QQ“服务器维护”几天。12月5号的时候,全球BitTorrent服务器也受到了很强烈的DDOS攻击,一度陷入瘫痪。而DDOS攻击中最流行的也是威力最大的就是基于页面的DDOS以及将这个攻击理论发挥得淋漓尽致的攻击工具CC,本文特邀CC作者和我们共同了解CC的相关攻击原理和防范方法,希望能让更多的朋友了解这样的攻击方式并能防范它。
我写CC的思路及防范方法
文/ kiki
很多朋友都知道木桶理论,一桶水的最大容量不是由它最高的地方决定的,而是由它最低的地方决定,服务器也是一样,服务器的安全性也是由它最脆弱的地方决定的,最脆弱的地方有多危险服务器就有多危险。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
%>
这样用户第一次访问会使得Refresh=1,第二次访问,正常,第三次,不让他访问了,认为是刷新,可以加上一个时间参数,让多少时间允许访问,这样就限制了耗时间的页面的访问,对正常客户几乎没有什么影响。
3. 通过代理发送的HTTP_X_FORWARDED_FOR变量来判断使用代理攻击机器的真实IP,这招完全可以找到发动攻击的人,当然,不是所有的代理服务器都发送,但是有很多代理都发送这个参数。详细代码:
<%
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文件,替代那些连接数据库的文件,这样所有的数据库请求就连接到这个文件上,然后马上就能发现攻击的人。
4. 还有一个方法就是把需要对数据查询的语句做在Redirect后面,让对方必须先访问一个判断页面,然后Redirect过去。
5. 在存在多站的服务器上,严格限制每一个站允许的IP连接数和CPU使用时间,这是一个很有效的方法。
CC的防御要从代码做起,其实一个好的页面代码都应该注意这些东西,还有SQL注入,不光是一个入侵工具,更是一个DDOS缺口,大家都应该在代码中注意。举个例子吧,某服务器,开动了5000线的CC攻击,没有一点反应,因为它所有的访问数据库请求都必须一个随机参数在Session里面,全是静态页面,没有效果。突然发现它有一个请求会和外面的服务器联系获得,需要较长的时间,而且没有什么认证,开800线攻击,服务器马上满负荷了。
代码层的防御需要从点点滴滴做起,一个脚本代码的错误,可能带来的是整个站的影响,甚至是整个服务器的影响,慎之!
[ 本帖最后由 ayazero 于 2005-11-18 12:42 编辑 ]
mafa 回复于:2005-11-17 18:28:59
怎么不注明从《黑客防线》转的呢?lz不厚道。
zjzf_1 回复于:2005-11-18 01:02:52
如果这也是精华 我写的那个就是精华中的精华 斑竹.... 我也没办法
hardiwang 回复于:2005-11-18 11:21:13
to :mafa 《黑客防线》?
我不知道是哪里的文章,不过我上大学的时候经常在《黑防》发表文章的。
哈哈,现在很少看了。真不好意思!
to :zjzf_1,我看你的文章也回了帖子,不过我觉得的你对CC的理解不够。所以看到这个帖子才转了上来,希望大家共同进步!
zjzf_1 回复于:2005-11-20 11:11:54
晕倒................ "不过我觉得的你对CC的理解不够" 那谁够呀?
mafa 回复于:2005-11-20 14:44:07
引用:原帖由 zjzf_1 于 2005-11-20 11:11 发表
晕倒................ "不过我觉得的你对CC的理解不够" 那谁够呀?
呵呵,你不会就是开发cc的kiki吧?
这篇文章正式发表在黑防上的。
www_ftp 回复于:2005-12-15 18:09:13
呵呵~~
benjiam 回复于:2005-12-16 16:37:54
页面级ddos 就这个水平啊? BS
双眼皮的猪 回复于:2005-12-18 15:15:01
我还以为是clearcase...
撒哈拉里的鱼 回复于:2005-12-18 17:04:09
猪也在这里啊~~我是云~
这个帖子,哎。。
ayazero 回复于:2005-12-18 17:20:33
猪?云? ……我昏倒
www_ftp 回复于:2005-12-19 10:46:17
zjzf_1 这方面研究还是比较深的
zjzf_1 回复于:2005-12-26 19:19:47
to :mafa 《黑客防线》?
我不知道是哪里的文章,不过我上大学的时候经常在《黑防》发表文章的。
哈哈,现在很少看了。真不好意思!
to :zjzf_1,我看你的文章也回了帖子,不过我觉得的你对CC的理解不够。所以看到这个帖子才转了上来,希望大家共同进步!
hardiwang 你个垃圾
我放一台我的东西 你自己攻攻看 看我们谁理解不够
http://59.34.196.251/
[ 本帖最后由 zjzf_1 于 2005-12-28 18:09 编辑 ]
zhuomingliang 回复于:2005-12-29 21:19:59
to楼上的MM:
1、不要骂人,技术高就瞧不起人了啊
2、我是种田的
3、有的工作你代替不了我,有的工作我也代替不了你
4、我很无聊
bend 回复于:2005-12-31 15:41:46
好久没来了,看人在说CC什么的,不知为何物,原来。。。。。。CC就这个东东啊
呵呵
不好用
hardiwang 回复于:2006-01-01 16:33:16
to :zjzf_1
如果是三年前,也许我会去搞搞你的网站
呵呵,现在的年轻人,就是太冲动,动不动说脏话。
真正做技术的是为了更好服务于公司、社会、国家。
在下就此打住,请各位看客随意……
platinum 回复于:2006-01-01 20:02:50
先做人,后做事
zjzf_1 回复于:2006-01-01 22:45:58
引用:原帖由 hardiwang 于 2006-1-1 16:33 发表
to :zjzf_1
如果是三年前,也许我会去搞搞你的网站
呵呵,现在的年轻人,就是太冲动,动不动说脏话。
真正做技术的是为了更好服务于公司、社会、国家。
在下就此打住,请各位看客随意……
如果三年前 还有输入法漏洞的时代 我相信你种水平的可能还能搞搞我没有打过补丁的服务器
如今就难了 虽然我不是搞系统安全的 但是也会用Windows Update
真正做技术的 就是为了做技术 为了钱 这就是真正做技术的!
我认识个huawei的硬件工程师 现在在兼职做假的cisco
我们专著的就是 技术 就是钱
大家骂我现实不如说我诚实
[ 本帖最后由 zjzf_1 于 2006-1-1 23:03 编辑 ]
platinum 回复于:2006-01-02 06:53:19
引用:原帖由 zjzf_1 于 2006-1-1 22:45 发表
真正做技术的 就是为了做技术 为了钱 这就是真正做技术的!
对我来说,兴趣更重要,不在乎能发大财,我不在乎给多少钱
个人有个人的活法,并不能说谁对谁错,但能到“为了钱而做技术,做技术就是为了钱”的地步,我只能说“可悲”二字了
呵~ :wink:
zjzf_1 回复于:2006-01-02 16:00:41
引用:原帖由 platinum 于 2006-1-2 06:53 发表
对我来说,兴趣更重要,不在乎能发大财,我不在乎给多少钱
个人有个人的活法,并不能说谁对谁错,但能到“为了钱而做技术,做技术就是为了钱”的地步,我只能说“可悲”二字了
呵~ :wink:
因为你一做不好技术 二赚不到钱 所以只能用兴趣而以安慰自己
或者你还年轻吧
platinum 回复于:2006-01-02 18:21:35
引用:原帖由 zjzf_1 于 2006-1-2 16:00 发表
因为你一做不好技术 二赚不到钱 所以只能用兴趣而以安慰自己
或者你还年轻吧
你错了,人活着为了什么?钱吗?
每个人的人生观世界观不同,也许你认为应该是的,但不代表人人都像你一样
也许,在你眼里只有钱了吧,也只有这样才能解释的通,才能让我理解一些
引用:
安装win98 每次20 (不含分区费)
安装winxp一次30
杀毒软件10元
如果安装系统+杀毒软件 免费安装qq
上门服务公交车费往返4元
看见了你的签名,无话可说了
zjzf_1 回复于:2006-01-02 20:52:14
如果看到这种签名你都要贴上来讲两句的话
对你的识别能力 我也是彻彻底底无话可说
"你错了,人活着为了什么?钱吗?"
做技术就是为了钱(而不是人活着就是为了钱 你好像歪解我的意思哦)
做技术做研究就是为了创造价值 创造价值跟俗人说俗点就是为了钱
否则就是在玩 不是在做技术 明白吗?
你如果不爽加我msn 我跟你细砍 [email]bsder@msn.com[/email]
以我的年龄 不管做技术也好 还是做人做生意也好 我相信都不比你在我这个年龄做的差
[ 本帖最后由 zjzf_1 于 2006-1-2 21:08 编辑 ]
platinum 回复于:2006-01-03 01:06:11
这不是什么爽不爽的问题,道不同不为谋,您走您的阳关路,我走我的独木桥好了
河里的鱼 回复于:2006-01-03 09:10:04
网络安全版啊,大哥!
james_h 回复于:2006-01-03 12:49:32
引用:原帖由 zjzf_1 于 2006-1-2 16:00 发表
因为你一做不好技术 二赚不到钱 所以只能用兴趣而以安慰自己
或者你还年轻吧
作人要厚道!年轻人!
你在“IT职业生涯”的“……茂名……招聘……”帖子看了,就凭这个,就可以判断,要么你自己本来就是个穷光蛋,要么就是护着自己的利益拿别人开涮。BS!
zjzf_1 回复于:2006-01-03 16:00:29
我要说的 发到你的站内短讯了 我不想在这里说太多
[ 本帖最后由 zjzf_1 于 2006-1-3 16:14 编辑 ]
对你从未放弃 回复于:2006-01-04 16:19:08
阿装个系统收这么少钱呀?
偶上次给装了个SERVER 收了200 大洋 嘿嘿~
表说偶黑~.
robert2000 回复于:2006-01-04 17:19:08
引用:原帖由 platinum 于 2006-1-1 20:02 发表
先做人,后做事
真的对,会做人才会做事
benjiam 回复于:2006-01-05 10:00:02
讨论技术
wanzff 回复于:2006-01-06 05:09:10
支持一下,人家发表技术,大家要多支持吗????CC攻击现在真是令人头疼呀,为了它我天天工作被客户说呀,千兆硬防也不行
songyu 回复于:2006-01-06 06:36:44
大多评论跑题了~ 该简单的地方偏偏搞的复杂,无用的垃圾理论也拼命加入CC攻击中,在还不知道
为什么攻击方法叫做“CC”的情况下,就去分析评论。汗~ 说几句实在话,等大家丢鸡蛋过来好了~
www_ftp 回复于:2006-01-06 09:15:49
引用:原帖由 wanzff 于 2006-1-6 05:09 发表
支持一下,人家发表技术,大家要多支持吗????CC攻击现在真是令人头疼呀,为了它我天天工作被客户说呀,千兆硬防也不行
我不信,防的很好呀.
b2linux 回复于:2006-01-12 17:07:22
这里讨论CC攻击,不是人身攻击,
实在是晕啦
ALENG_LINUX 回复于:2006-01-12 21:19:59
不管怎么样,这个文章不错,顶上
A.com 回复于:2006-01-13 10:27:33
楼主转的方法,至少能防90%的CC攻击,还不用额外花钱。如果这些也不做,光讨论剩下的10%有意义吗?
永远不要小看一些简单的防范方法,如果大家都这么做了,我敢打赌,我国的白客就都变黑客了
ecto 回复于:2006-02-07 16:21:13
呵呵,看了这个帖子有意思
老大都忍不住了,跟人干上了!
CC,在游戏中好像是个频率连接,就是每秒多少次,用频率闲置可防,不过,我说的可能和你们讨论的不一样
sorry 跑题了!
initx 回复于:2006-02-22 20:42:56
实在看不下去了,让小弟说二句吧~!
楼主的文章实在有太多的漏洞,CC是啥东西我不知道,但是主要是用来攻击的我知道
呵呵
但是具体的原理和攻击效果,楼主写的文章里面绝对是有问题的
如果说是syn-flood的话或者DDoS攻击这些都很好防,(你说我讲大话?)
听我慢慢道来
syn-flood 和DDoS 都是利用TCP的三次握手的漏洞的对吧
如果我在遭受DDoS 攻击的时候,我对每一个进入我系统的syn 数据包,
回复rst数据包,正常用户的浏览器会重新发syn数据包,这个时候我再让syn通过
那么DDoS攻击者呢?攻击者是关发syn 包,然后不停的变换src IP ,攻击者并
不管server回复的数据包是什么,为什么,为了隐藏自己真实的IP,攻击者的IP
都是伪造的,所以当server 回复rst数据包的时候,攻击者并不知道,但正常的用户
知道,浏览器会自动重新连接,这样正常的用户可以继续访问,攻击者呢?还是想点
新办法吧~!其实《黑客张大民》的文章有篇专门写DDoS的攻防,写的非常不错
在这里借chinunix感谢一下《黑客张大民》的作者的N多精神(N>= 100个褒点)
syn-flood呢?不就是DoS么,DDoS你都会防了,DoS你还怕什么?
不过前面的方法对DoS攻击防范起来有点太耗系统资源了,可以用linux里面的syn-cookie来防范,如果已经遭受攻击的话,可以通过修改/proc/内的网络数值
降低keep alive的时间,这点debian做的比较好,默认的debian在内核的设定
上就针对攻击有所优化,RH系统呢,需要自己手工修改几个数值
回到开头
如果是针对应用级的攻击,比如楼主说的页面攻击,那也好办
apache 有很多相关的模块,比如connect-limit模块(可能我记的不对)
或者你通过iptable 限制每秒每个IP进入的数据包数量,等方法都可以
预防这种攻击
至于为什么这个CC能造成这么大的破坏力
1.夸张的宣传
2.系统管理员缺乏有效的防御手段
-_- 不过我看到楼主的这样的帖子也很火大
偶们是愤青,要有个性,骂人是口头语,不过从来不往心里去
哈哈
祝大家工作学习愉快
猪楼主早点写出CCII
GunKing 回复于:2006-02-23 02:28:27
老实说,很多所谓的资深专家,就爱犯经验错误,听到CC,就以为和以前的SYN—FLOOD什么的~~所以就企图从IP层或是TCP层来解决问题,那么就会出现类似有人说得千兆硬防也扛不住的情况。如果你在听说CC的时候,多GOOGLE一下,就能发现它出现的历史,以及黑圈安全圈内为此发生的一些闹剧,也会搜到相关的技术原理,以及N个版本,以及源码,如果你看懂了源码,那我想你就明白为什么CC这么难防?——因为N多人企图以传统防火墙的模式来阻止攻击。。而有效的手段无非就是使用基于应用层的技术:比如一楼所说的方式。而CC的难防也在于难于做出通用的防止方法,就好比SQL注入一样,不过也只是难于而已.
看到太多人不厌其烦的发关于CC,DDOS的东西,有些人乘机广告,违背版规.ay4的置顶的确是很不错的.建议大家有什么关于CC之类的东西,都灌在这里吧,别另开贴影响市容了..最后,忍不住引用某人的话:其实DDOS没有太多技术含量的
[ 本帖最后由 GunKing 于 2006-2-23 02:30 编辑 ]
macrodba 回复于:2006-02-23 09:02:26
支持一下了。
initx 回复于:2006-02-24 13:46:58
引用:原帖由 GunKing 于 2006-2-23 02:28 发表
老实说,很多所谓的资深专家,就爱犯经验错误,听到CC,就以为和以前的SYN—FLOOD什么的~~所以就企图从IP层或是TCP层来解决问题,那么就会出现类似有人说得千兆硬防也扛不住的情况。如果你在听说CC的时候,多GOOG ...
有话就说出来,有技术就拿出来
你用CC来攻,我来防
大家做裁判如何
事实胜于熊便
initx 回复于:2006-02-24 14:13:15
引用:原帖由 zjzf_1 于 2005-12-26 19:19 发表
to :mafa 《黑客防线》?
我不知道是哪里的文章,不过我上大学的时候经常在《黑防》发表文章的。
哈哈,现在很少看了。真不好意思!
to :zjzf_1,我看你的文章也回了帖子,不过我觉得的你对CC的 ...
AIX 4.1的?
zhang142233 回复于:2006-02-28 23:07:07
引用:原帖由 b2linux 于 2006-1-12 17:07 发表
这里讨论CC攻击,不是人身攻击,
实在是晕啦
哈哈~说的好哇~笑的我快晕啦~
porlo 回复于:2006-03-02 13:53:57
这样的文章也是精华?晕
双眼皮的猪 回复于:2006-03-05 16:28:38
千兆硬防跟应用层的攻击有什么关系?
zjzf_1 回复于:2006-03-09 17:39:29
引用:原帖由 porlo 于 2006-3-2 13:53 发表
这样的文章也是精华?晕
非常认同你
deeperpurple 回复于:2006-03-14 10:01:35
引用:原帖由 双眼皮的猪 于 2006-3-5 16:28 发表
千兆硬防跟应用层的攻击有什么关系?
没关系 :shock:
blues1205 回复于:2006-03-15 00:10:19
路过。。看真人PK。。。:em02::em02::em02::em02::em02:
|