免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: skipjack
打印 上一主题 下一主题

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

论坛徽章:
0
1 [报告]
发表于 2006-05-15 14:38 |显示全部楼层
你怎么为一个blind IP计算这个重放的ack包?那不等于要hack掉协议站中使用的加密算法吗?

论坛徽章:
0
2 [报告]
发表于 2006-05-15 14:53 |显示全部楼层
原帖由 skipjack 于 2006-5-15 14:42 发表


重放的ack包不是计算出来的,是我以前用过保存下来的。所以叫重放的ack,不叫猜测的ack。就是这一点把原作者思路的可行性大幅提高。
另外、协议栈中有加密算法吗,就算有会在三次握手时体现吗?


可是你以前记录的ACK分段的源地址不是受害服务器的源地址,而是你自己的源地址啊。
你不知道服务器里面的secret值,无法伪造任意服务器的ACK(除非你hack掉协议站中使用的加密算法)。
就算事先取得被害服务器的权限,抓包得到一个ACK分段也没有用,服务器里的secret值是变化的啊。

也许是我没看懂,我觉得你的推理靠不住,老兄还是编出一个东西让大家看看吧。

[ 本帖最后由 JohnBull 于 2006-5-15 15:00 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-05-15 15:14 |显示全部楼层
原帖由 skipjack 于 2006-5-15 15:07 发表


没有你想像的那么复杂,过程是这样的:
1.用ADSL拨一次号,与ddos防护的服务器进行一次http访问,把此次三次握手的ack包保存起来。当然如果服务器用cookie认证也把http get这个数据包保存。
2.再用ADSL拨一 ...


我不知道你看过Linux的syncookie实现没有,反正你的方法肯定不会通过Linux的cookie检查。
saddr和sport不一样的话根本不行。


  1. static __u32 check_tcp_syn_cookie(__u32 cookie, __u32 saddr, __u32 daddr,
  2.                                   __u16 sport, __u16 dport, __u32 sseq,
  3.                                   __u32 count, __u32 maxdiff)
  4. {
  5.         __u32 diff;

  6.         /* Strip away the layers from the cookie */
  7.         cookie -= cookie_hash(saddr, daddr, sport, dport, 0, 0) + sseq;

  8.         /* Cookie is now reduced to (count * 2^24) ^ (hash % 2^24) */
  9.         diff = (count - (cookie >> COOKIEBITS)) & ((__u32) - 1 >> COOKIEBITS);
  10.         if (diff >= maxdiff)
  11.                 return (__u32)-1;

  12.         return (cookie -
  13.                 cookie_hash(saddr, daddr, sport, dport, count - diff, 1))
  14.                 & COOKIEMASK;   /* Leaving the data behind */
  15. }
复制代码


  1. static u32 cookie_hash(u32 saddr, u32 daddr, u32 sport, u32 dport,
  2.                        u32 count, int c)
  3. {
  4.         __u32 tmp[16 + 5 + SHA_WORKSPACE_WORDS];

  5.         memcpy(tmp + 3, syncookie_secret[c], sizeof(syncookie_secret[c]));
  6.         tmp[0] = saddr;
  7.         tmp[1] = daddr;
  8.         tmp[2] = (sport << 16) + dport;
  9.         tmp[3] = count;
  10.         sha_transform(tmp + 16, (__u8 *)tmp, tmp + 16 + 5);

  11.         return tmp[17];
  12. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2006-05-15 15:34 |显示全部楼层
原帖由 skipjack 于 2006-5-15 15:30 发表


重放的saddr和sport为什么不一样?攻击对象是采用静态cookie的ddos设备,如果是动态的cookie就又回到猜序号的老路上去了。你贴的源码中有SHA关键字,呵呵...我想性能是个大问题。等一会儿,我仔细看看。


sorry,犯晕了,不是saddr和sport不同,而是secret不同。所以你的攻击方法对于Linux而言理论上还是可以持续2分钟的。

但是按我前面所说,你描述的攻击方法还是等于变相“取得了被攻击主机的权限”了啊,你要是想攻击任意服务器还是不现实。

[ 本帖最后由 JohnBull 于 2006-5-15 15:44 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-05-16 10:15 |显示全部楼层
原帖由 大大狗 于 2006-5-15 16:36 发表
看了,那么这个应用在什么地方啊~~~

1.用ADSL拨一次号,与ddos防护的服务器进行一次http访问,把此次三次握手的ack包保存起来。当然如果服务器用cookie认证也把http get这个数据包保存。
2.再用ADSL拨一次号,把保存的ack包重放给服务器,把保存的http get request包重放给服务器(当然,这个包你可以自己造,CC就是这么干的)。
3.发送大量的ack,请求服务器重传http response这个大数据包。


“攻击”一个无辜的宽带用户。仅此而已。

论坛徽章:
0
6 [报告]
发表于 2006-05-17 00:15 |显示全部楼层
原帖由 skipjack 于 2006-5-16 11:31 发表


应该多考滤将来,而不是现在。

本思路有价值的地方:
1. 利用一条合法连接,对服务器进行下行带宽攻击,现在的“状态检测”设备不一定可以发现
2. 目标服务器应用层程序感知不到这种攻击,可以逃避基于应 ...


我已经明白你的意思了,你的方案技术上是成立的,你后来提出的两次ADSL拨号的手段也是成立的。

但问题是如果你要攻击某一台特定的靶机,而不是一个随机的无辜者的话,一切又回到了我一开始的问题上:你如何得到靶机的一个合法的ACK分段?除非你hack掉syncookie使用的加密算法反推出secret(对Linux而言几乎不可能,用的是sha)。
又如果你能直接拿到靶机的本地权限或者能拿到他的上游路由器,那么还用得着flood吗?直接该干嘛干嘛了,何必兜这么大圈子呢。

你的方案有点象:“如果我是国家主席,我就可以xxx,然后xxx,再然后xxx...”
每步都符合逻辑,但问题是你怎么当国家主席呢?而且你如果真的当了国家主席,你那时候还会在乎那些xxx吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP