下载本文的PDF版本 PDF

缺乏优先级队列的危害

我们迫切需要关键互联网基础设施保护。

维杰·吉尔,美国在线

大多数现代路由器由多个线卡组成,这些线卡执行数据包查找和转发,所有线卡都由控制平面控制,控制平面充当路由器的“大脑”,执行诸如管理功能、错误报告、包括路由计算在内的控制功能以及邻接关系维护等基本任务。此控制平面有许多名称;在本文中,它被称为路由处理器或RP。路由处理器计算转发表,并使用控制平面总线将其下载到线卡。线卡执行实际的数据包查找和转发。尽管各个供应商或型号的实现可能略有不同,但要点保持不变。

服务提供商已经观察到针对网络基础设施(路由器、路由协议等)的DoS(拒绝服务)攻击有所增加。这些攻击导致网络不稳定和服务中断(路由处理器过载,路由协议开始震荡,因此路由器不再对全局有完整的视图;此外,提供商还看到过交换矩阵变得不稳定的情况——这在理论上永远不应该发生,但我已经在某些设备上看到过这种情况)。

本文假设读者对DoS攻击有一定的了解(更多信息请参见http://www.ietf.org/rfc/rfc2827.txt)。DoS攻击有很多不同的类型,包括所谓的“smurf”攻击,使用聚合流量来压垮单个链路,以及导致路由器崩溃的“killer”数据包,以及针对内容主机和DNS(域名系统)服务器等的洪水攻击。

另一类数据包由所谓的“圣诞树”数据包组成,这些数据包利用了大多数路由器转发硬件针对没有选项的IP数据包进行了优化的事实。“圣诞树”数据包由设置了多个IP选项的IP数据包组成。板空间和成本约束意味着大多数(并非全部)数据包转发硬件是为正常的无选项IP数据包设计的,并且没有足够的处理能力来处理具有许多选项的IP数据包。当这些数据包通过路由器时,转发硬件会将数据包“踢给”路由处理器以进行进一步处理。这会消耗路由处理器资源,以及内部控制通信总线上的带宽,使合法的控制流量匮乏,并可能导致路由器丢失邻接关系和/或崩溃。

本文仅关注针对路由器控制平面的基础设施攻击,因为这些是最困难和最麻烦的攻击类型,并且因为无论硬件变得多么强大,几乎都不可能解决这些攻击。根据定义,设计具有成本效益的路由器意味着路由器的横截面带宽容量将超过控制总线的带宽几个数量级,这使得控制总线特别容易受到攻击。

基础设施攻击对网络特别具有隐蔽性和破坏性,因为路由器被设计用于将数据包从一个接口移动到另一个接口;它们没有针对处理大量源自路由器或必须来自路由器(路由处理器)的流量进行优化。必须来自路由器的流量示例包括发送ICMP(互联网控制消息协议)不可达数据包,以及如果发往链路层的MTU(最大传输单元)小于目标数据包的大小,则生成IP分片。

很难区分有效的控制流量——BGP(边界网关协议)保活、更新、连接打开等——与看起来像合法控制流量的无效数据包(例如,源地址为配置的BGP对等体的伪造BGP更新)。可以利用这一事实,用大量无效的控制流量淹没路由器CPU,导致路由器变得不稳定和/或崩溃。

崩溃或发生故障的路由器会导致网络不稳定,从而导致性能下降。随着骨干网响应变得更加有效,攻击者也在不断发展更新、更复杂的攻击技术。可能永远不会有一种有效地阻止所有攻击的解决方案;因此,重点是灵活的战术和战略选择,并且这些选择可以不断演进以应对威胁级别。

本文详细介绍了网络架构、运行原理以及用于处理针对关键互联网基础设施的DoS攻击的保护方法。这涉及到实施对于加固路由器和其他网络基础设施非常重要的硬件功能。这些功能在事后很难进行改造。在这个级别进行的任何更改都将涉及软件重写,并可能需要板级更改;因此,尽早提出这些要求越好。

概述

路由器针对通过硬件的流量进行了优化;它们没有针对发往硬件的流量进行优化。设计具有成本效益的路由器意味着横截面带宽容量在预算分配中占主导地位。根本没有经济有效的方法来设计一种路由器,使其能够以其转发数据的速率吸收和有效地处理数据。

以下是一个简单的分析:大约在2004年,一台路由器有32个端口,能够在两个方向上以每秒10千兆比特的速度转发数据(Juniper T640,Cisco 12416;http://www.juniper.nethttp://www.cisco.com)。为了转发数据,路由器必须解封装帧,验证校验和(如果有),对报头执行查找,然后将数据包发送到出站接口。所有这些都是使用定制的硬件/软件组合完成的,并且可以在线速下完成,以满足所有实际目的。

但是,考虑一下如果数据包到达路由器的情形。路由器必须执行解封装、校验和验证,然后将数据包传递给设备“大脑”路由处理器,以进行进一步处理。这不仅涉及查看数据包报头,还涉及查看数据包的主体,并尝试理解其中包含的内容。

这是资源密集型的,处理器(通常是单个CPU)很容易过载,尤其是在32个线卡(每个线卡都能够接收高达每秒10千兆比特的流量,并配有专用数据包转发引擎)可以向路由处理器发送大量数据的情况下。

这会导致合法进程因带宽和处理器能力不足而陷入饥饿状态,从而导致协议保活和其他内务处理任务错过,这通常会导致邻接关系被丢弃,路由器变得不可达,并导致网络提供的服务中断。

更糟糕的是,某些路由器设计在路由处理器和线卡之间具有低带宽总线(这是一种完全有效的设计,因为路由处理器并非设计用于传递或处理大量数据)。

参考硬件设计

图1显示了现代路由器的参考硬件设计。这是具有分布式转发机制和集中式路由处理器的路由器的通用表示,集中式路由处理器维护协议状态,交换路由更新,并构建分发到线卡的转发表。线卡基于转发表进行自主转发。路由处理器不参与转发数据包。

问题

攻击者正在抓住这个薄弱环节。针对基础设施的DoS攻击正在增加。我们已经看到过端口179攻击——MSDP(组播源发现协议)也可能紧随其后。

区分无效和有效的控制流量(例如,BGP更新)非常重要。尽管对控制流量进行速率限制是必要的,但它是不够的。足够多的虚假数据会淹没合法数据,导致连接震荡/重置,因为保活和协议更新在看起来有效但实际上无效的更新的泥潭中丢失。

本文重点关注BGP。大多数其他流量由诸如时间协议之类的内务处理或对设备的带内访问组成,这些流量不会导致控制平面问题。IGP(内部网关协议)要么不可路由,要么可以在网络边缘安全地阻止;要么没有正当理由让IGP更新从外部源进入网络,要么可以将其划分到少数特定路由器。

优先级队列

网络设备可以实现对任何发往控制平面(RP)的流量进行简单、明确的解析:过滤器认为有趣的流量进入高优先级队列;其他所有流量进入低优先级队列。

如图1所示,在线卡和路由处理器之间通常存在有限的容量。为了有效,必须在所有发往RP进行进一步处理的流量之间共享此容量。使用此容量的流量分为路由器内部的内务处理任务(例如,将转发表的新副本下载到线卡)、维护任务等,以及路由控制平面流量(例如BGP保活和更新)以及发往路由器的随机流量、ICMP、Telnet/SSH(安全外壳)、时间协议等。

显然,某些流量更重要。如果RP无法获得BGP更新或保活,则流量转发将受到影响。另一方面,如果网络时间协议暂时无法到达RP,则转发不会受到影响。因此,设置两个队列非常重要:一个快速服务于重要流量的高优先级队列;以及一个如果高优先级队列中没有等待流量时可以服务的低优先级队列。

应该提供诸如访问列表之类的鉴别器来过滤发往路由器的流量。此鉴别器将决定哪些流量是重要的(放置在高优先级队列中),哪些是不重要的(放置在低优先级队列中)。

至少实际提供两个优先级级别非常重要。如果没有优先级队列,大量数据包洪流将淹没单个队列,导致合法的控制流量被丢弃或延迟,并导致随之而来的中断。有了两个队列,鉴别器可以快速筛选重要流量并将其放入高优先级队列进行服务,而其他所有流量都放入低优先级队列,以便在有时间时进行服务。如果低优先级队列在一段时间内无法得到服务,则不会对网络造成重大损害;如果低优先级队列已满,则路由器可以快速丢弃流量,而不会对网络控制平面造成潜在损害。

解决方案的另一半是速率限制。低优先级队列应以可配置的方式进行速率限制,并应积极丢弃流量。

由于前面所述的原因,当流量到达路由处理器时,通常为时已晚。这意味着排队和鉴别器应用应该在线卡/转发引擎上发生,然后再传递到路由处理器。

至于要过滤什么,路由器应该能够实现GTSM(通用TTL安全机制),如http://www.faqs.org/rfcs/rfc3682.html中所定义,以及动态过滤,如http://www.nanog.org/mtg-0210/gill.html中所述。

动态过滤

互联网域间路由依赖于BGP(正在进行中的工作:http://www.ietf.org/html.charters/idr-charter.html)。BGP使用TCP/IP(http://www.rfc-editor.org/rfc/rfc793.txt)作为底层传输机制。使用传输机制的一些底层属性,可以使路由硬件在面对攻击时更加健壮。(参见图2和图3。)

每个会话都可以通过标准的TCP/IP五元组唯一标识(为简洁起见,我将重点关注BGP)

• 协议

• 源IP地址(src ip)

• 源端口(src port)

• 目标IP地址(dst ip)

• 目标端口(dst port)

BGP的五元组包括:(tcp,本地ip,本地端口,对等体ip,对等体端口)。一旦你有了这些信息,匹配数据包就变成了一个可以在每个线卡上执行的简单任务。发往路由器的数据包与过滤器进行匹配。如果数据包与过滤器匹配,则将该数据包放入高优先级队列;否则,将该数据包放入低优先级队列。

在会话建立时,五元组如下所示:(tcp,本地ip,本地端口,对等体ip,179)。假设构建过滤器的路由器赢得了冲突检测,则无需更改任何内容。如果路由器输掉了冲突检测,则按如下方式更新过滤器:(tcp,本地ip,179,对等体ip,对等体端口)。反转过滤器,因为传入的数据包将具有本地ip和作为对等体ip和对等体端口的本地端口,然后将过滤器推送给线卡。

这在实践中实际表现如何?以下是一个简单的分析。

任何线卡上到达的任何有效BGP数据包都将具有正确的五元组,并且应放入高优先级队列。大多数欺骗性的DoS BGP数据包将与过滤器不匹配,并且将被放入低优先级队列。路由处理器CPU首先服务于高优先级队列。这减轻了数据包洪泛。

现在,假设一个聪明的攻击者可以利用有关被攻击路由器的一些知识来填写五元组。可以通过多次traceroute网络轻松获得以下信息。这将导致了解五元组,从而能够填写:(tcp,本地ip,p,对等体ip,p');必须猜测p和p'才能通过过滤器并进入高优先级队列。假设攻击者具有一些BGP知识,则攻击者可以猜测——取决于BGP冲突检测的解决方式——p或p'必须为179。攻击者现在必须猜测BGP冲突获胜者的本地端口,该端口可以在1,025到大约64,000之间的任何范围内。

攻击者在选择有效本地端口时必须尝试的总可能性约为216-1,即大约64,000。这意味着,平均而言,攻击者需要尝试32,000次才能找到正确的五元组,或者换句话说,每发送32,000个数据包中只有1个数据包可以通过过滤器并命中RP CPU。这意味着现在攻击者必须调动平均大32,000倍的资源才能对路由器产生不利影响。攻击基础设施的成本急剧上升,而防御成本却很小。

稳定性是最重要的。一旦会话建立,就仅为邻居放置高优先级队列过滤器。在会话建立之前,将邻居数据包放入低优先级队列。为了会话能够建立而牺牲时间,而不是击垮现有会话,这是一个在操作上正确的选择。

此处描述的过滤器存在一些缺点。这些过滤器必须尽可能靠近线卡实施。如果在RP上实施,它们将毫无用处,因为瓶颈远在RP进入等式之前。实施还会增加成本和复杂性。

互联网已将控制平面置于数据平面中。尽管这在尝试调试各个部分之间的连接时很有用,但缺点是控制平面很容易受到通过数据平面的攻击。此处提出的一些建议有助于加强控制平面,使其免受基于数据平面的简单攻击。网络服务提供商应与所有现有和潜在供应商合作,以确保所有设备都实施控制平面优先级队列。问

喜欢它,讨厌它?请告诉我们

[email protected] 或 www.acmqueue.com/forums

维杰·吉尔 是AOL全球网络运营的高级网络架构师。他之前的职位包括马里兰大学的系统开发和分析,以及UUNET和MFN/AboveNet的高级网络架构师。

© 2004 1542-7730/04/1100 $5.00

acmqueue

最初发表于Queue vol. 2, no. 8
数字图书馆中评论本文





更多相关文章

保罗·维克西 - 要么静态,要么回家
当前和历史上计算机和网络安全中的大多数问题都可归结为一个简单的观察:让其他人控制我们的设备对我们不利。在另一个时间,我将解释“其他人”和“不利”的含义。就本文而言,我将完全专注于我所说的控制的含义。我们失去对设备控制的一种方式是外部分布式拒绝服务(DDoS)攻击,这些攻击用不需要的流量填充网络,从而没有空间容纳真实的(“需要的”)流量。其他形式的DDoS类似:例如,低轨道离子炮(LOIC)的攻击可能不会完全填满网络,但它可以使Web服务器忙于响应无用的攻击请求,以至于服务器无法响应任何有用的客户请求。


阿克塞尔·阿恩巴克、哈迪·阿斯加里、米歇尔·范·埃滕、尼科·范·艾克 - HTTPS市场中的安全崩溃
HTTPS(超文本传输​​协议安全)已发展成为安全的Web浏览的事实标准。通过基于证书的身份验证协议,Web服务和Internet用户首先使用TLS/SSL证书相互验证(“握手”),端到端加密Web通信,并在浏览器中显示挂锁以指示通信是安全的。近年来,HTTPS已成为保护在线社交、政治和经济活动的重要技术。


莎朗·戈德堡 - 为什么保护互联网路由需要这么长时间?
BGP(边界网关协议)是将Internet粘合在一起的粘合剂,可实现不同组织运营的大型网络之间的数据通信。BGP通过为组织之间的流量设置路由来使Internet通信全球化 - 例如,从波士顿大学的网络,通过更大的ISP(Internet服务提供商),如Level3,巴基斯坦电信和中国电信,然后到住宅网络,如Comcast或企业网络,如美国银行。


本·劳里 - 证书透明度
2011年8月28日,一个为google.com错误颁发的通配符HTTPS证书被用于对伊朗的多个用户进行中间人攻击。该证书由荷兰CA(证书颁发机构)DigiNotar颁发,DigiNotar是VASCO Data Security International的子公司。后来的分析表明,DigiNotar早在7月19日就已意识到其系统中的漏洞,时间超过一个月。它还表明,至少已颁发了531个欺诈性证书。最终计数可能永远不会知道,因为DigiNotar没有所有错误颁发的证书的记录。





© 保留所有权利。

© . All rights reserved.