Misbehaving TCP Receivers Can Cause Internet-Wide Congestion Collapse
概要
opt-ack是由一个非正常操作的客户端对于一个没有被接收的数据段发送的ACK。而以前的工作都集中在以opt-ack为手段贪婪地提高终端到终端的性能,我们专门研究opt-ack来拒绝服务攻击。具体来说,一个攻击者向许多受害者并行发送opt-ack,从而放大其有效带宽到3000万倍(最坏情况)。因此,即使是一个相对温和的攻击者可以完全充满从众多受害者到攻击者本身的路径。更糟糕的是,一个分布式的网络攻击机器(“僵尸”)的并行攻击可以利用在互联网上的配置(预留空间)带来的广泛传播造成持续的拥塞崩溃。我们在模拟中和在广域网中实现这一攻击,并在数据包的数量和产生的总流量上显示它的严重程度。我们设计并实现了一种不需要客户端或网络更改,能够进行实际部署的新的解决方案。此外,我们在一个真实的网络中证明了解决方案的效率。 安全
关键词
拥塞控制,分布式拒绝服务,传输控制协议 介绍
Savage等人展示了三种技术,通过它们一个行为不端的TCP接收器操纵发送者在公平的成本下给其他节点提供更好的服务。Opt-ack有了一个这样的技术,接收者在数据段被实际接收之前发送确认(ACKs),欺骗发送者。实际上,连接的往返时间减少了,总吞吐量增加了。Savage等人观察一个行为不端的接收器可以使用opt-ack来隐藏数据的损失,从而以数据完整性为代价,提高终端到终端的性能。他们进一步指出,Opt-ack可能可以被用于拒绝服务,但没有进一步进行调查。
在本文中,我们考虑一个接收器的唯一目标就是利用opt-ack发动分布式拒绝服务(DoS)攻击,不仅仅是对个别机器,而是对整个网络。 在本文中,我们:
1. 通过分析(Section 2.2)在模拟中和现实中的实验展示了opt-ack可能带来的原来没有被发现的重大的危险(一个攻击者,多个受害者) 2. 调查预防技术,并基于跳段提出了一种新颖,高效,增量部署(可以逐步展开的)解决方案(第4.2节),而以前的解决方案忽略了实际部署的因素。 3. 认为分布式opt-ack攻击(许多攻击者,很多受害者)有可能在大部分的网络中带来持续的拥塞崩溃,因此需要立即行动。 基于正反馈的攻击
传输协议的重要组成部分是流量和拥塞控制算法。这些算法的不可避免的依靠远程反馈来确定数据包应该以什么速率发送。这种反馈可以以positive or negative acknowledgments(正负ACK)直接来自网络或者更常见的是来自终端主机。这些算法隐含地假设远程实体生成正确的反馈。这通常是一个安全的假设,因为不正确的反馈会迅速恶化端到端的性能。然而,一个不关心数据的完整性的攻击者,可能会违反这个假设来诱导发送者向网络注入大量的数据包。虽然不是所有的这些数据包都能到达接收机,但是他们的确阻塞了发送者的网络使从发送者到接收者的路径达到饱和。
因为确认数据包是比较小的(40字节),这对以数百甚至数千的平行受害者为目标的攻击者来说是微不足道的。事实上,不仅是每个受害者的接入链路饱和,由于过度供应,在上游ISP带宽更高的链路开始遭受拥塞崩溃。在第2.4节中,我们认为,足够多的攻击者可以压倒骨干网络(链路)的核心,造成广域持续拥塞崩溃。 攻击分析
在本节中我们描述攻击的伪代码,攻击的变种和opt-ack攻击的分布式版本的细节。在3节中,我们提出在实现攻击和减轻实际问题的技术中的观察。
算法1显示了一个单一的攻击者可以同时针对许多受害者。通常情况下,攻击者会使用一个妥协的机器a compromised machine(一个“僵尸”),而不是直接发动攻击。(注:This attack can also be mounted if the attacker is able to spoof TCP connections, either by being on the path between the victim and the spoofed address, or from guessing the initial sequence number, but we do not further consider it.)考虑一组受害者,V1...VN,服务于各种大小的文件。攻击者连接到每一个受害者,然后发送应用层的请求,例如,HTTP GET。攻击者开始确认(ACK)数据段,不管他们是否到达(图1)。这导致受害者越来越快的对攻击者的opt-ack作出相应使得它的本地链路达到饱和。为了持续攻击,攻击者反复要求同一文件或遍历一定数量的文件。
攻击的关键是,攻击者必须产生一个看似有效的ACKS序列。一个ACK要被认为是有效的,它必须不能在受害者发送相应的数据包之前到达。因此,攻击者必须只基于攻击者已经发送的ACKS流来估计哪个包在什么时候被发出。起初,这似乎是一个艰巨的挑战,但受害人接受ACK的行为是完全由TCP拥塞控制算法规定的。攻击需要三个参数:一个n个受害者的表,最大段大小(MSS),和窗口缩放(wscale)因子。在该算法中,攻击者可以跟踪每个受害者的估计窗口(WI)和序列号来确认收到(acki)。WI,maxwindow的上限,默认是65535,但可以通过窗口缩放选项改变(见2.2节)。值得注意的是,攻击者可以操纵每个受害者的重传超时(RTO),因为RTO是一个由ACK的到达率计算的往返时间函数。因此,换句话说,攻击可以完全操纵受害者以何种速度发送,发送多少,并在何时超时timeout。
考虑到大文件在互联网上的普遍性,存在接近任意数量的潜在受害者。任何能够流通TCP数据的机器都是潜在的受害者,包括HTTP服务器、FTP服务器、内容分发网络
(CDN),P2P文件共享对 P2P file sharing peers(Kazaa [ 2 ],Gnutella [ 1 ])、NNTP服务器,甚至有过一次常见字符发生器('chargen”)服务的机器(machines with the once common character generator (‘chargen’) service)。 攻击流很难区分合法流量。对于一个足够接近受害者的外部观察员,例如网络入侵检测系统(IDS)。这个流与一个完全有效的高速连接在理论上没有什么区别。(注Presumably, a monitoring system deployed closer to the attacker could detect the asynchrony between ACKs and data segments, but it is not practical to store per-flow state deep in the network. )如果一个大的数据包流进入本地网络,IDSs发出警告是很常见的。来自攻击者的ACKs流是相当小的(在2.2节中可以看到确切数字)。离开网络的数据流才是问题。(It is the stream of data leaving the network that is the problem.)
此外,攻击者可以通过向更多的受害者更低频率的发送接收信息acks,保持产生的流量总数恒定来进一步掩盖攻击。换句话说,通过让每个主机生成更少的流量,保持在检测阈值下,但增加主机的总数,使得在本地受害者不能明显的发现他们处于一个DDoS攻击中。因此,由于缺少全局协调,受害者们很难本地检测是否它们的数据流中存在任何一个恶意数据。
虽然算法1在理论上可行,对于对手来说,保持ACKs和受害者实际发送的段同步仍然很有挑战性。我们在下一个章节解决这些问题。 放大
同时,受害者可以被诱导发送大量的数据到网络,这并不奇怪,实际的optact放大因子是真正令人震惊的。从单个攻击者到所有受害者引发的流量上限是一个有四项内容的函数:受害者数量n,对于每个单独的受害者i,ACKS到达每个受害者的速度(αi),最大段长度(MSSI),和受害者的拥塞窗口的大小(WI)。值得注意的是,攻击者可以使用一个单一的ACK确认数据包的一个完整的拥塞窗口。如果我们假设一个标准的TCP/IP的40字节的头(header)没有选择(with no options),那么数据包大小为40 + MSSI bytes3。在字节/秒的攻击流量率只是每个被害人的 ACK到达率(αi),数据包的数量(?wi/ MSSI?),每个数据包的大小(40 + MSSI)的乘积之和。鉴于最大窗口Wi是65535×2wscale,而且所有受害者总的ACK到达率不能超过攻击者的带宽(β)除以ACK的大小(40),我们得到的总攻击流量为Tmax字节/秒: Tmax = β×65535×2wscale ×
+
mss 40
从上式中我们可以知道,对于典型的网络连接,例如mss = 1460 and wscale = 0,攻击者有1683的放大系数。在最坏的情况下,即如果MSS = 88 (the minimum mss for Linux and Windows XP[19]) and wscale = 14,那么放大系数可高达32554441。在没有窗口缩放的现实世界中,攻击者on56 Kbps的调制解调器(β= 7000 B / S)可以产生9351145的B/S或约8.9mb/s的总的到达所有受害者的流(flooding summed