免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 27695 | 回复: 87

一种新的带宽攻击方式 [复制链接]

论坛徽章:
0
发表于 2006-05-12 15:54 |显示全部楼层
本文档的Copyleft归skipjack所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
邮箱: skipjack@163.com
来源:http://skipjack.cublog.cn

本思路是对
http://www.xfocus.net/articles/200505/796.html
攻击思路的整理与提高,无意开发新的攻击器。如利用此原理的攻击软件问世,与我本人skipjack无关。

引文章第一段(呵呵...有这一段足够了)


在TCP三次握手后插入伪造的TCP包
一、说明 用Socket的API Connect完成TCP建立连接的三次握手,同时子进程抓包,抓完三次握手的包后,插入第四个包即可,从对端返回的第五个包来看插入成功了,但因为插入了一个TCP包,之后的连接将发生混乱。可以将插入的那个包Data设置为HTTP Request,向WEB服务器提交请求。又如果目标系统的TCP序列号是可预计算的,那么是否可以做带伪源地址的Blind TCP three-time handshakes和插入,值得试验!


作者所做的实验其实什么也说明不了,只是验证了一下TCP协议序号和检验和计算函数而已。

我想作者八成是受了CC攻击原理的启发,想不通过代理的方式以达到CC攻击效果。但在序号预测这个步骤上,说实话没有可行性。正常TCP协议采用的同步序号是随机值,在43亿的可选空间中,以百兆带宽的速度进行预测也将是杯水车薪。但是……
为了防御ddos,不少厂商的安全设备中都实现了无状态的syn cookie算法,这种算法在大量syn冲击下利用cookie序号在ack包回传的方式判断连接请求的合法性。所以他们的TCP协议握手部分不是一个健康的实现,本思路经修改后用于攻击此类设备将会取得不错的效果。下面简单介绍攻击者如何以64字节ACK包换取服务器1518大数据包重传,如果源IP伪造成功,攻击者从理论上将获得20余倍的带宽放大攻击效果 。如果有两个目标网站,本方法将一箭双雕。
攻击原理:利用TCP协议收到ACK后的快速重传机制

序号乱刀之一:攻击正常TCP/IP协议栈示意图
        当我们获得http response回应后,立即回复一个ack数据包,此ack数据包的seq值是http response数据包中的ack seq值,而ack seq值为http response数据包的seq序号值。这样当server收到此ack数据包后,会认为是自己刚才发送的http response包在网络中已丢失,会利用快速重传机制加以重传。如果我们拼命发送大量的ack包,则服务器就会不断进行重传。Ack数据包的大小只需64字节,但http response通常都在512字节左右,最长可达1518字节。
        因为正常tcp协议序号的不可预测性,所以我们在这次攻击中暴露了自己的真实IP。




序号乱刀之二:攻击采用静态syn cookie的ddos设备防护下的服务器

        所谓静态syn cookie就是以客户端请求之syn包为参数计算回复syn ack中的seq值,并在ack包回传时判断连接合法性的方法,这种方法被ddos厂商大量采用,并且获得数量可观的国家发明专利,呵呵….。你经常会听到ddos厂商的人说他们的设备比防火墙“牛”多了,可轻松达到百兆线速syn防御,但百兆防火墙30M攻击流量就可以干掉,说这种话的ddos厂商,我可以打赌他们的设备80%采用了这种syn cookie算法。
Syn cookie算法的好处是只在synflood攻击时消耗CPU资源,这对于X86下强悍的通用CPU来说,正适用。
读者可能会感到很奇怪,为什么如此成熟的技术防火墙不采用,而让ddos厂商成天挤对?这有如下几个方面的原因:
1:防火墙也用syn cookie进行synflood防御的,但大多不是静态syn cookie,而是严格记录连接状态采用动态syn cookie,所以当syn flood攻击时不光消耗CPU,还要消耗大量内存。这也就是我本文开头提及的本方法可以攻击大部分ddos厂商和小部分防火墙厂商的原因。
2:syn cookie/syn proxy是bsd系统内核源码的一部分,在Linux最新版的2.6内核中syn proxy还没有被包含。所以ddos设备也大多由bsd系统组成。当然bsd是开源的,移植也不是什么大问题喽。
3:防火墙大多以Linux下的开源软件netfilter为基础,但netfilter中hash算法和连接表设计不是很优秀,防火墙转发性能的瓶颈就在于此,如果再加入syn proxy表项,会进一步降低对数据包的处理能力或加大连接表体积。高端防火墙大都支持数百万的连接数,这百万的表项就够防火墙喝一壶的了,再加一个syn proxy表项,性能还不得掉的稀里哗拉的?
4:防火墙很重要的一个网络功能就是DNAT,在没有DNAT操作前,防火墙不知道这些syn包的最终目的地是自身还是DMZ区的服务器,所以syn包必须DNAT后才知道是否要进行syn cookie保护。但这时就已经进入到netfilter处理框架了,性能当然就跟不上了。你见过几个ddos设备支持NAT的?如果支持了,他的性能也会下降不少。如果防火墙工作在桥模式下,不经过netfilter处理框架,防火墙就可以摇身一变成为性能卓越的抗ddos设备了,吗功能都没有,当然一身轻松了。呵呵…但您买的是防火墙,会这么大材小用吗?
言归正传,采用静态syn cookie的ddos设备,我们只需要重放一个ack包就可以达到与服务器的三次握手效果,因此可以做到源IP地址伪装。(这个伪装的源IP地址是你以前用过的,并且与ddos设备通讯过,并保存下来的,现在将它重放而己。如果你看不懂我在说什么,参照我写的《对国内ddos厂商技术点评》一文,抓包分析一下就知道了)。第二步就是发送一个正常的http request请求,随后就是大量的虚假ack请求重传。
天知道,谁在用我们伪装的源IP地址,做为一个连带的牺牲品。
你可能会认为受害服务器B会回复rst包给受害服务器A。这是有可能,但如果服务器B前面加装了一个“状态检测”防火墙,就会直接丢弃这个反射的http response数据包。



文章收录到本人blog中了,欢迎大家讨论。
                                                                   2006-05-12 15:50
                                                                                                            skipjack
2006-05-16 9:09


本思路有价值的地方:
1. 利用一条合法连接,对服务器进行下行带宽攻击,现在的“状态检测”设备不一定可以发现
2. 目标服务器应用层程序感知不到这种攻击,可以逃避基于应用层流量统计的防御方式,因为重传是TCP协议特性,TCP协议自动完成。重传的数据包,对应用层来说是透明的。
3. 现在只是一种思路,不局限于TCP协议。UDP加入重传机制后,也可以保证通讯可靠性。并且这是私人或公司独立开发的协议,漏洞会比TCP协议更大。
4. drdos的带宽放大效果也只不过是6倍而己,并且消耗的是上行带宽。
5. 真正的威胁不在现在,而是在对“长肥管道”的攻击效果。对方下行带宽越宽,攻击效果越明显。TCP会禁用分片,所以重传数据包大小依靠你与服务器之间最小的那个设备的MTU值,所以你见到的TCP协议的IP首部中的长度字段不会超时1518。但在“长肥管道”中,IP首部的长度字段会达到65535的极大值,对这些数据包的重传攻击,会达到令人吃惊的1:1024的放大效果。
1M对1G
1G对1T
明白?就是因为这点,我才会提供本思路,否则1:25的消耗也是蛮力。

攻击完善的TCP协议其实是很困难的:
1.具体可以参见RFC2581中关于Fast Retransmit/Fast Recovery的说明部分。
2.你的ack包构造不好,服务器协议栈还是会利用超时重传,而不是快速重传。


[ 本帖最后由 skipjack 于 2006-5-16 11:27 编辑 ]

论坛徽章:
0
发表于 2006-05-12 16:49 |显示全部楼层
关注~!

在详细些吧

论坛徽章:
0
发表于 2006-05-13 01:20 |显示全部楼层
原帖由 Jambo 于 2006-5-12 16:49 发表
关注~!

在详细些吧


补齐原理部分的说明了,累死了

论坛徽章:
0
发表于 2006-05-15 11:35 |显示全部楼层
有人看没人回,为什么?
这是一种可以穿过防火墙对保护服务器进行的带宽攻击方式,原理上对ddos保护下的服务器威害更大。
大家是感觉可行性不高,还是没看懂啥意思呢?

论坛徽章:
0
发表于 2006-05-15 11:51 |显示全部楼层
那么是否可以做带伪源地址的Blind TCP three-time handshakes和插入
----------------------------------
我觉得不太可能吧,服务器端会对没有记录的ip进行这种操作?
看了第一段描述,好像是告诉服务器数据没有到达,让其重发,这样似乎还是蛮力,虽然以小数据包换得大数据包,但似乎不太有用,先去吃饭,回来再仔细看看。

论坛徽章:
0
发表于 2006-05-15 12:37 |显示全部楼层
原帖由 skipjack 于 2006-5-15 11:35 发表
有人看没人回,为什么?
这是一种可以穿过防火墙对保护服务器进行的带宽攻击方式,原理上对ddos保护下的服务器威害更大。
大家是感觉可行性不高,还是没看懂啥意思呢?

没看懂 惭愧

论坛徽章:
0
发表于 2006-05-15 13:06 |显示全部楼层
重新看了一遍,和上面看的差不多。
感觉没什么实用价值。

论坛徽章:
0
发表于 2006-05-15 13:10 |显示全部楼层
syn flood的价值在于服务器端的timeout消耗的资源,和伪造source address.她发一个包过去,你那边就要等,就要消耗资源,而攻击方则轻松多了。

论坛徽章:
0
发表于 2006-05-15 13:11 |显示全部楼层
原帖由 teczm 于 2006-5-15 12:37 发表

没看懂 惭愧




其实ack包的作用就是发送错误的TCP确认序号,这就是为什么管它叫“序号乱刀”的原因。
呵呵...举个例子,两个人打招乎:

A君:你好
B君:你也好
A君:你吃了吗?
B君:吃了呀
A君:你能把昨天的工作以流水账的形式给我口述一遍吗?
B君:当然可以喽,我:“早晨8点起床...9点到公司...10点写文档...11点吃饭...下午....晚上17:30回家”(共说了千八百字)
A君:不好意思,没听清楚,再来一遍。
B君:OK,我:“早晨8点起床...9点到公司...10点写文档...11点吃饭...下午....晚上17:30回家”(又说了千八百字)

A君:没听清楚,再来一遍。
B君:OK,我....8点
A君:没听清楚,再来一遍。
B君:OK,我....9点
A君:没听清楚,再来一遍。
B君:OK,我....10点
A君:没听清楚,再来一遍。
B君:OK,我....11点
A君:没听清楚,再来一遍。
B君:OK,我....12点
A君:没听清楚,再来一遍。
B君:OK,我....13点
A君:没听清楚,再来一遍。
B君:OK,我....14点
A君:没听清楚,再来一遍。
B君:OK,我....15点
A君:没听清楚,再来一遍。
B君:OK,我....16点

A君:还是没清楚,再来一遍。(真是个傻冒啊)
B君:.......(冒烟中ing)

论坛徽章:
0
发表于 2006-05-15 13:25 |显示全部楼层
原帖由 playmud 于 2006-5-15 13:10 发表
syn flood的价值在于服务器端的timeout消耗的资源,和伪造source address.她发一个包过去,你那边就要等,就要消耗资源,而攻击方则轻松多了。


我这个和syn flood没有任何相似性,syn flood对于ddos设备来说威害和ping flood差不多。它们同属1:1的资源消耗。而作者文章本意也不是这个意思。作者想通过猜测序号的方式来劫持TCP会话,然后再利用CC原理进行1:N的CPU资源消耗。
我的修改建议是:不猜序号仅利用握手的ACK包重放,而轻松做到1:N的带宽消耗。威力虽然减小了,但可行性已大幅提高。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP