使用复制确认和重组间隙方法防止网络数据注入攻击的制作方法

文档序号:6654794阅读:267来源:国知局
专利名称:使用复制确认和重组间隙方法防止网络数据注入攻击的制作方法
技术领域
本发明一般地涉及计算机网络。本发明更具体而言涉及防止网络中的数据注入攻击。
背景技术
这一部分中描述的方法可以被实行,但并不一定是先前已被设计或实行了的方法。因此,除非在这里另行指出,否则这一部分中描述的方法不是本申请的权利要求的现有技术,并且也并不因为被包括在这一部分中而被承认是现有技术。
对于商家和顾客等来说,网络已经成为了一种很重要的工具,他们中的很多人现在都依赖于诸如邮件服务器、Web站点和内容服务器等网络资源的持续可用性。随着对网络的使用增加,保护网络不受恶意实体的干扰变得越来越重要。例如,拒绝服务(“DoS”)攻击可能使合法用户不能访问网络服务,并且已经被成功地用来干扰对诸如Yahoo!和CNN等因特网站点的合法用户访问。
数据注入攻击可能导致DoS或其他负面影响。一种类型的数据注入攻击利用如在因特网工程任务组(IETF)请求注解(RFC)793中定义的作为因特网的基本协议之一的传输控制协议(“TCP”)的基本设计。在数据注入攻击中,攻击者猜测有效TCP连接的参数值,然后发送包含恶意或虚假数据净荷的虚假段。如果接收者将这些段传递给应用,则当应用处理或执行这些数据净荷时可能会出现故障。
遵从RFC 793并且充当数据接收者的一种典型的TCP实现在接收到任何丢失段之前,在重组缓冲区中维护无序数据。该接收者针对被无序接收的每个段发送确认(“ACK”)消息,指示最近的有效顺序号。发送者在重传缓冲区中保持未被确认的段。这一处理使得发送者可迅速地重传在传送中丢失的段,因为这些段未被确认。
一种TCP数据注入攻击利用上述TCP实现机制,所述机制试图在无序到达并且需要被重组为正确顺序的段被传递给TCP以上的逻辑层的应用之前管理这些段。边界网关协议(BGP)、超文本传输协议(HTTP)、一些语音协议、多协议标签交换(MPLS)和使用TCP连接的其他协议是这些攻击的目标。后果可能是很严重的。例如,当路由器的BGP会话被关闭相关的TCP连接干扰时,路由器将丢弃其创建的所有BGP路由,基本上导致BGP处理的故障。因此,BGP处理必须将自身与网络中的对等路由器重新同步,在重新同步期间,故障路由器不能转发任何流量。
此外,数据注入攻击可能导致向上游处理提供恶意命令、不必要地填充重组缓冲区、其他高层应用的误操作、发起“ACK战争”,等等。因此,本领域的研究人员正致力于研究在不从根本上改变如RFC 793中规定的TCP的操作的情况下挫败TCP数据注入攻击的方法。
成功的攻击必须注入携带用于源端口、目的地端口的正确值的TCP段;对于顺序号和ACK号来说,一个范围内的值是允许的。这些值的允许范围很大,因此发动涉及顺序地检查每个参数的所有可能值的强力攻击似乎是不可能的。但是,在大多数TCP实现中,选择有效值的任务较为简单,因为在RFC 793中存在某些漏洞。这些漏洞在遵从RFC 793的实现中产生了安全弱点。例如,将伪随机32位值指定为新TCP连接的初始顺序号(ISN)似乎防止了攻击者以任何可行的方式猜测正确的顺序号,因为潜在的正确值的数量是232或约40亿个值。但是,即使段的顺序号不与下一预期顺序号严格匹配,如果段的顺序号落在可接受值的一个窗口或范围内,则遵从RFC 793的传统TCP实现也将接受这个段。所述窗口或范围的大小一般与重组缓冲区的字节数相同,并且被用来补偿段可能丢失的可能性。在一些TCP实现中,允许的顺序值的范围可以是16,384、65,535,或更大。
一个后果是即使当真随机或伪随机ISN被使用时,攻击者也不需要正确地生成顺序号的所有32位以提供接收节点将接受的号码。如果允许的顺序值的范围足够大,则攻击者在可行的时间中通过随机或强力选择而猜到正确的顺序值的机会就大大增加。接收节点建立的窗口越大,黑客就越容易实施攻击。
此外,大多数实现将较小范围的值用于初始端口号,并简单地对每个新连接增加端口号。因此,攻击者较容易使用普通的计算资源猜到被两个端点用于合法TCP连接的端口值。
还出现了另一个弱点,因为大多数TCP实现不测试ACK值是否等于预期的ACK值,甚至也不测试ACK值是否落在允许的ACK值的范围内。相反,大多数实现将接受携带大于先前接收的ACK值的ACK值的任何段,只要顺序号在允许范围内。RFC 793将ACK值定义为在从1到232这个范围内的无符号整数。因此,猜到允许的顺序号的攻击者可通过仅尝试两个ACK值(1或232-1,其中一个必定被接受)就能成功地进行数据注入攻击。
上述危害的结果是在大多数实现中,攻击者可在理论上在(232/窗口大小/2)个段或大约30,000个段中将数据注入连接。因此,即使使用传统的计算设备也能较快地进行强力攻击。
Mitesh Dalal等人于2004年1月9日提交的题为“Preventing NetworkReset Denial of Service Attacks”的共同未决申请No.10/755,146(律师卷号50325-0868)中描述了用于防止网络DoS复位攻击的方法。Pritam Shah等人于2003年8月14日提交的题为“Detecting network denial of serviceattacks”并被转让给本受让人的共同未决申请No.10/641,494中提供了用于处理被称为SYN-RST攻击的类似攻击的方法。Shah等人的方法适合于中间路由器而不是TCP端点设备,但是并没有完全解决本公开中描述的所有问题。


在附图中以示例而非限制的方式示出了本发明,在附图中,相似的标号指代相似的元件,其中图1是示出了用于施行TCP数据注入攻击的一种技术的消息流示意图;
图2是示出了用于在数据段到达时将其丢弃的方法的流程图;图3是示出了基于重叠而从重组缓冲区删除虚假数据段的方法的流程图;图4是示出了图3的操作示例的框图;图5A是示出了由数据发送者执行的用于使用复制ACK消息作为触发来从重组缓冲区删除虚假数据段的方法的流程图;图5B是示出了在由数据接收者执行的用于使用复制ACK消息作为触发来从重组缓冲区删除虚假数据段的方法中的步骤的流程图;图5C是示出了图5A的操作示例的消息流示意图;图5D是示出了图5C的示例中的其他步骤的消息流示意图;图6是示出了用于基于对重组间隙的分析来从重组缓冲区删除虚假数据段的方法的流程图;图7是示出了可在其上实现实施例的计算机系统的框图。
具体实施例方式
描述了用于防止网络数据注入攻击的方法和装置。在以下描述中,为了说明的目的列举了很多具体细节,以提供对本发明的全面理解。但是本领域的技术人员应当清楚,本发明可在没有这些具体细节的情况下实施。在其他情形下,公知的结构和设备以框图的形式示出,以避免不必要地模糊本发明。
这里根据以下大纲描述实施例1.0概述2.0用于防止网络数据注入攻击的方法2.1用于在到达时丢弃数据段的方法2.2用于基于重叠而从重组缓冲区删除虚假数据段的方法2.3用于使用复制ACK消息作为触发来从重组缓冲区删除虚假数据段的方法2.4用于基于对重组间隙的分析来从重组缓冲区删除虚假数据段的方法
3.0实现机制——硬件概述4.0扩展和替换1.0概述仅作为简介,并且不限制所附权利要求的范围,本发明满足了在背景技术中提到的需要以及将从以下描述中变得清楚的其他需要和目的,在一个方面中,本发明包括一种用于防止对网络的攻击的方法,其中所述攻击包括将虚假传输控制协议(TCP)段注入发送者和接收者之间的TCP连接,所述方法包括由计算机实现的以下步骤接收复制ACK消息并使复制ACK计数器递增;当重传缓冲区为空并且复制ACK计数器等于指定的击发因子(strike factor)时,发送提供正确的顺序值和ACK值的正确的ACK消息。接收者通过接收正确的ACK消息继续;确定正确的顺序值是否小于重组缓冲区中所有段的最高顺序值;并且当正确的顺序值小于重组缓冲区中所有段的最高顺序值时从重组缓冲区丢弃所有段。
另一方法接收第二TCP段;确定第二TCP段与先前放置在重组缓冲区中的第一TCP段之间的顺序值间隙;根据指定的拭探值(heuristic)确定顺序值间隙是否太大;如果顺序值间隙太大则执行以下步骤创建并发送携带刚好在最近被正确确认的顺序值之前的第一顺序值的哑段(dummysegment);接收对哑段的确认;确定在确认中携带的第二顺序值是否小于第一TCP段的第三顺序值;当在确认中携带的第二顺序值小于第一TCP段的第三顺序值时,从重组缓冲区丢弃第一TCP段。
在其他方面,本发明包括被配置为执行上述步骤的计算机装置和计算机可读介质。此外,很多其他特征和方面将从下面的描述和所附权利要求变得很清楚。
2.0用于防止TCP拒绝服务攻击的方法描述了几种用于防止网络数据注入攻击的方法。第一方法丢弃携带小于下一未被确认的序列减去最大窗口大小的ACK值的接收到的段。术语“小于”在这里用在其中可能发生卷绕(wraparound)的无符号整数值的上下文中。该方法帮助将虚假注入段据于TCP重组缓冲区之外。仅需要在充当接收者的TCP处理的逻辑中作出一些很小的改变。在第二方法中,拭探值被用来检验新到达的段的顺序号,当顺序号是下一预期顺序号时,新到达的段被使用,并且重组缓冲区的内容不被考虑。此外,如果新到达的段的数据净荷在序列顺序方面与已经在重组缓冲区中的段重叠,则重组缓冲区中的重叠段被认为是虚假的并被丢弃。因此,如果第一方法由于某种原因没能防止虚假数据进入重组缓冲区,则该方法帮助从重组缓冲区删除虚假数据。
在第三和第四方法中,ACK消息或哑段被发送,以验证重组缓冲区中的数据的真实性,并且帮助更快地丢弃虚假数据。这些方法涉及发送者对虚假数据的检测,并且改良了对典型TCP实现固有的用于处理ACK消息的机制的使用。第四方法可在不修改发送者的实现的情况下实现。此外,这些方法在接收者中的实现维持了与RFC 793的兼容性。
2.1用于在数据段到达时将其丢弃的方法现在参考图1和图2描述用于防止TCP数据注入攻击的第一方法。图1是示出了用于施行TCP数据注入攻击的一种技术的消息流示意图。图2是示出了用于在数据段到达时将其丢弃的方法的流程图。
图2的处理导致了图1中以示例的方式示出的消息流,该处理可在由充当TCP连接的端点的网络元件执行的一个或多个计算机程序、指令序列或其他软件元件中实现。例如,图2可以被实现为TCP应用的一部分,或者是路由器、交换机或网络基础设施的其他元件的操作系统的功能。或者,图2可以被实现为被个人计算机、工作站或其他网络末端站的操作系统容宿或与个人计算机、工作站或其他网络末端站的操作系统相关联的TCP进程、堆栈、适配器或代理。
在图1中,发送者102、攻击者104和接收者106代表TCP连接中的端点。发送者102、攻击者104和接收者106可包括路由器、交换机、集线器、网关、个人计算机、工作站、服务器,或连接到或可以被连接到或与网络通信的其他设备。攻击者104是将不希望的或虚假的段注入已在发送者102和接收者106之间建立的TCP流或连接的任何实体。攻击者104可包括工作站、个人计算机、路由器、交换机或其他处理元件。
发送者102、接收者106和攻击者104参与一个或多个网络。此外。发送者102、接收者106和攻击者104可以在局域网(LAN)、广域网(WAN)、一个或多个因特网或任何其他类型的网络或其子网中,或可通过局域网(LAN)、广域网(WAN)、一个或多个因特网或任何其他类型的网络或其子网而被访问,在上述网络中,传输控制协议(TCP)被用来建立网络元件之间的连接。这种网络可包含额外的网络基础设施元件,例如路由器、交换机等,以及其他末端站设备,例如工作站、打印机、服务器等。在一种实现中,发送者102、接收者106和攻击者104全都可通信地耦合到公共分组交换网络,例如因特网。
发送者102、接收者106和攻击者104可以被连接到额外的网络元件。其他实施例可包括比已示出的更少或更多的网络元件。具体而言,在实际系统中,可以有任意数量的网络元件。
为了描述图1,假设发送者102和接收者106仅如在RFC 793中定义的那样实现TCP,并且使用大小为4000的窗口。发送者102向接收者106发送顺序号(“SeqNo”)为101、ACK值为5005并且具有441字节数据的段110。接收者106发送SeqNo为5005,ACK为543的确认消息112。在此描述中,诸如“SeqNo 543”或“ACK 5005”这样的标号被分别用作为携带值为543的顺序号和值为5005的确认的TCP段的简化表示。
接下来攻击者104发送具有SeqNo 3000、ACK 0x2000000(33,554,432)和256字节恶意数据的段114。攻击者104在没有关于那时正被发送者102和接收者106用于TCP连接的顺序号的真实知识的情况下猜到了SeqNo 3000,并且SeqNo 3000是允许的SeqNo值,因为(3000<543+4000)。传统上不对ACK值进行窗口大小的比较,因此在2,147,488,649到4,294,967,295和0到5001这个范围中的ACK值都是可接受的。攻击者104还确定出或猜出发送者102和接收者106的网络地址,例如它们的IP地址以及用于当前连接的端口号。所述地址和端口值被放置在虚假段114中,但是为了简明起见而未被示出。由于攻击者104不确定ACK值0x2000000(33,554,432)是否合适,因此攻击者104还发送具有相同的SeqNo 3000但是ACK值为0x82000000(2,181,038,080)的段116。
在步骤118,接收者106接受段116但是丢弃了段114,因为其ACK值是不可接受的。然后接收者通过发送具有SeqNo 5005和ACK 543的段120来对段116进行确认。值为5005的SeqNo被使用,因为段112是最近接收到的有序段,并且接收者106需要用信号表明它正在等待紧随其后的段,虽然已经接收到了看上去在流的未来很远处的段116。在没有防范方法的情况下,如步骤122所示,段116最终被转发到使用、依赖于或执行段116中的数据的应用并可能危害该应用。
现在参考图2,在这里的第一防御方法中,在步骤202,TCP段被接收。在步骤204,执行测试来确定接收到的段中携带的ACK值是否小于下述差即下一已被发送但未被确认的顺序值(以RFC 793的说法是snduna)减去迄今为止发送的段的总数和与该TCP连接相关联的最大窗口的大小这二者中的较小者所得到的差。在一个实施例中,表达式min(snduna-isn,最大窗口大小)产生被与未被确认的顺序值相比较的值。
最大窗口大小值反映了对等体可管理的最大窗口大小。允许的窗口大小可变为另一窗口大小以用于特定的段交换,但是即使发生了这样的调节,在步骤204的测试中还是使用最大窗口大小。因此,步骤204对照过去的有效ACK值的窗口来测试接收到的段。为了在步骤204产生“真”结果,有效的ACK值不能大于下一预期顺序值之后的一个窗口。
相反,现有方法允许具有在包括和早于下一未被确认顺序值的那一半顺序值空间内的任意ACK值的段,并且假设顺序值本身在传入窗口中。在这种环境下,RFC 739允许接收者忽略ACK。RFC 793仅要求如果接收到的ACK值大于接收者的预期值,则接收者必须发送回指定了预期ACK值的ACK段。RFC 793缺乏用于处理早于预期的ACK值的严格要求,这向攻击者提供了提出会被接受的虚假段的途径。
如果步骤204的测试为真,则在步骤206,该段被丢掉而不是被转发到应用或被放置在重组缓冲区中以用于潜在的重新排序和以后的转发。如果步骤204的测试为假,则在步骤208,对接收到的段执行另一TCP段处理。
在一种替换中,步骤204的测试不允许ACK值落在窗口中,而是测试接收到的TCP段的ACK值是否刚好等于预期的ACK值或者是小于初始窗口的某个范围的值。如果未发现精确匹配,则传入段被丢掉。这一替换可使得接收者丢弃在其他有效的但是延迟的数据之前到达的数据,因为当较早数据到达时,接收者要求发送者尚未遇到的ACK值。因此,该方法可能强制发送者执行重传。但是,为了受益于提高已知较易受攻击的网络环境中的攻击抵抗力,这一缺点是可以接受的。
使用上述方法,虚假段被据于重组缓冲区之外,并且不被转发到虚假段可能导致问题的较高层应用或处理。具体而言,利用本方法,仅当段的顺序号在可接受的窗口内并且其ACK值正确时,该段才被接受。
2.2用于基于重叠从重组缓冲区删除虚假数据段的方法图3是示出了用于基于重叠从重组缓冲区删除虚假数据段的方法的流程图;图4是示出了图3的操作的示例的框图。一般地,图3提供了用于通过检测段是虚假的来从TCP重组缓冲区删除不正确的注入段的方法,所述段被检测为虚假的是因为它们不正确地重叠了与先前接收的被正确地确认了的段相关联的数据。
首先参考图3,步骤302-304代表准备步骤,其被描述为提供用于由后续步骤所代表的解决方案的上下文。在步骤302,第一TCP段被接收并且是有序的。该段被转发到应用,并且下一预期顺序号值在存储器中被更新。术语“第一”在步骤302中被用来说明步骤302的段出现在步骤304和步骤306的段之前,但是步骤302的段可能在TCP连接建立之后的任意时刻到达,并不需要是在完成TCP握手阶段之后实际接收的第一个段。在步骤304,第二段被接收并且是无序的,因此第二段被存储在重组缓冲区中。
在步骤306,第三段被接收。在步骤308,测试被执行以确定第三段携带的SeqNo值是否等于下一预期SeqNo值。步骤308还可涉及验证第三段的SeqNo和其数据长度的和是否精确地与重组缓冲区中的其他段对准。如果否,则在步骤309,传统的处理被应用于无序段。如果SeqNo值刚好是下一预期值,则第三段被视为从当前连接中的合法发送者到达的可信段。第三段被视为可信的,因为攻击者猜到并发送精确的下一预期SeqNo值的机会是1/232。
因此,在步骤310执行测试,以确定第三段是否与已在重组缓冲区中的任何段重叠。在此上下文中,“重叠”意味着在第三段中携带的SeqNo和数据长度的和与重组缓冲区中的任意段的SeqNo重叠。在某些情形下,第三传入段可能与来自攻击者的若干段重叠。如果没有这样的重叠,则在步骤316,执行对缓冲区和第三段的常规重组处理。
但是,如果发现重叠,则先前被接收进重组缓冲区的重叠段被视为虚假段,而第三段被视为真实段。重叠指示虚假段已被接收进重组缓冲区,因为当连续的SeqNo值被与流中的在先段的数据长度大小相比较时,一组真实段最终将精确地顺次对准。此外,攻击者需要猜测SeqNo值,因此重叠的存在强烈建议SeqNo已被猜测并且相关联的段是虚假的。在步骤310发现的重叠可能是全部重叠也可能是部分重叠。在步骤312,从重组缓冲区丢弃虚假段。
在步骤313,ACK消息被发送并且携带第三段的SeqNo。在步骤314,正常的TCP处理继续。这种处理可能包括重传,重传通过要求发送者重传在被丢弃的虚假段所覆盖的范围内的数据来帮助确保重组缓冲区仅包含有效数据。
现在结合图4示出一个示例。具有SeqNo 201和100字节数据的无序段404先前已被接收进重组缓冲区402,如数字1所示。如数字2所示,下一预期顺序号是101,这就是为什么段404被视为无序的原因。
在数字3,段406到达,其具有SeqNo 101和150字节数据。SeqNo值101刚好是预期的下一SeqNo值,因此对于段406,步骤308的测试(图3)为真。此外,101和150的和是251,其与段404携带的值201重叠。因为段406被视为可信的,因为它携带精确的下一预期顺序号,因此段404被视为虚假的并且被丢弃,如数字4所示。然后,具有SeqNo 251的ACK段被发送以对段406进行确认。
因此,上述方法删除了被无意中接收进重组缓冲区的虚假注入数据段。该方法可被单独实施,或者与这里的2.1节的方法结合起来实施。
2.3用于使用复制ACK消息作为触发来从重组缓冲区删除虚假数据段的方法图5A是示出了由数据发送者执行的用于使用复制ACK消息作为触发来从重组缓冲区删除虚假数据段的方法的流程图;图5B是示出了由数据接收者执行的用于使用复制ACK消息作为触发来从重组缓冲区删除虚假数据段的方法的步骤的流程图;图5C是示出了图5A的操作示例的消息流示意图;图5D是示出了图5C的示例中的其他步骤的消息流示意图。
在描述图5A到图5D时,术语“重传缓冲区”指包含一个或多个已被发送但尚未被确认的数据段的数据结构,而术语“重组缓冲区”指存储接收到的无序数据的数据结构。
在传统的TCP处理中,对于被注入重组缓冲区的每个段,TCP都生成具有当前顺序号和确认最近的有序数据的确认号的复制ACK。在接收三(3)个复制ACK之后,如果在重传缓冲区中有一个丢失段的话,则发送者执行丢失段的快速重传。如果重传缓冲区为空,则发送者什么都不作。
在本方法中,在接收到的ACK的量超过了指定的击发因子并且如果重传缓冲区为空,则发送者向接收者发送携带正确的顺序号和正确的ACK号的特殊的确认消息(被称为纠正确认消息)。在接收到纠正确认消息时,接收者确定接收者的重组缓冲区中的数据是假注入数据。接收者可基于确定ACK段中的顺序号小于重组缓冲区中的数据来进行这种确定。因此,重组缓冲区中的一个或多个段被丢弃。该方法提供了丢弃假注入数据的快速方法。
在本方法的一个实施例中,击发因子是三(3)。或者,击发因子是1或2;而典型的击发因子可以在1到10这个范围中,在其他实施例中可以使用任何其他特定的击发因子。利用值为1的击发因子,发送者不用等待3个复制ACK,而是在没有数据未被确认时,针对在发送者处接受的每个复制ACK发送纠正确认消息。
首先参考图5A,其示出了当攻击者发送虚假段时用于发送者的复制ACK方法的步骤。在步骤502,复制ACK被接收。在步骤504,发送者测试其重传缓冲区是空的还是包含未被确认的段。如果缓冲区不为空,则在步骤506,在需要时执行快速重传操作。
如果重传缓冲区为空,则处理假设复制ACK是虚假数据段注入所导致的假复制ACK。因此,在步骤508,假复制ACK计数器的值被递增。一般地,假复制ACK计数器的初始值为0,并且每次到达步骤508时递增1。
在步骤510,发送者测试假复制ACK计数器的值是否等于特定的击发因子。击发因子是根据察觉到的危险的级别、所需的安全级别或根据所需的响应级别而预先设置的固定值。在各个实施例中,典型的击发因子值为1,2或3。打击值可以是可配置的参数,其例如可在配置文件、用户接口面板中设置或通过被发往执行实现的网络元件的命令行接口命令来设置。
如果假复制ACK计数器不等于击发因子,则在步骤512,该方法返回控制以便执行常规TCP处理。执行对控制的传送,因为假复制ACK消息的数量尚未超过由打击值代表的危险级别。但是,如果假复制ACK计数器与打击值匹配,则在步骤514,纠正确认消息被发送到发送者,该消息携带发送者先前发送的所有数据的最高或正确顺序号,还携带有效的ACK值。步骤514的效果是重新同步已发送了太多ACK消息的合法发送者,同时防止当复制ACK消息被接收者以传统方式处理时,响应于恶意攻击者而可能出现的负面影响。
现在参考图5B,其示出了由数据接收者执行的步骤。在步骤530,纠正确认消息被接受。其他段可能在接收纠正确认消息之前被接收,但是为了简明起见,纠正确认消息被示为下一段。在步骤532,接收者测试纠正确认消息的SeqNo是否小于重组缓冲区中任意段的最高顺序号。如果否,则控制在步骤507返回。如果纠正确认消息的SeqNo小于重组缓冲区中任意段的最高顺序号,则重组缓冲区包含至少一些虚假注入数据,虽然虚假数据在重组缓冲区中的具体位置是未知的。因此,在步骤534,全部重组缓冲区被丢弃。因此,通过上述测试,接收者可确定它已将假的注入数据段放置在重组缓冲区中,并且可以丢弃它。因此,上游应用可免受虚假数据的影响。
现在参考图5C、图5D描述上述方法的示例性应用中的消息流。假设击发因子是二(2),由发送者102维护的复制ACK计数器的初始值为0,发送者102在其重传缓冲区中没有段。
发送者102发送具有SeqNo 101、ACK 5001以及50字节数据的段509。该段被有序接收,并且接收者106发送具有SeqNo 5001和ACK 152的ACK消息511。然后,攻击者104注入具有SeqNo 4000、ACK 1和256字节的恶意或虚假数据的虚假段513。接收者106发送ACK消息。然后基于SeqNo值4000,接收者106确定段513是被无序接收的。因此,接收者106发送具有ACK值152和SeqNo 5001的复制ACK消息516,以便向发送者102提供正确的值。在步骤518,发送者102累积或使其假复制ACK计数器递增,因为其重传缓冲区是空的,因此计数器值为1。
攻击者104发送具有SeqNo 5000、ACK 1和256字节数据的虚假段520。段520中的SeqNo值与段513不同,因为攻击者104正在猜测SeqNo值,而且不知道允许的窗口或下一预期SeqNo值。然后基于SeqNo值5000,接收者106确定段520是被无序接收的。因此,接收者106发送仍具有ACK值152和SeqNo 5001的复制ACK消息522。发送者102在步骤524使其假复制ACK计数器递增,因为其重传缓冲区是空的,因此计数器值为2。
在步骤526,发送者102通过步骤510的测试(图5A)确定假复制ACK计数器等于击发因子。
现在参考图5D,响应于步骤526的确定,发送者102发送具有SeqNo152和ACK 5001的纠正ACK消息538。因此,纠正ACK消息538向接收者106宣告正确值。作为响应,在步骤540,接收者106确定纠正ACK消息538的SeqNo小于重组缓冲区中的段的SeqNo。因此,接收者106在步骤542从重组缓冲区丢弃虚假段。
2.4用于基于对重组间隙的分析来从重组缓冲区删除虚假数据段的方法图6是示出了基于对重组间隙的分析来从重组缓冲区删除虚假数据段的方法的流程图。
在步骤602,查询阈值(“query_threshld”)被确定和存储。用于选择查询阈值的技术在本节末尾描述。
在步骤604,TCP段被接收。在步骤606,确定接收到的段的SeqNo与重组缓冲区中第一段相比的重组间隙。在本上下文中,重组间隙值指示重组缓冲区中第一段的开始和接收到的段之间的字节差别。在一个实施例中,重组间隙值被确定为reassm_gap=(重组缓冲区中第一段的SeqNo)-rcvnxt其中“rcvnxt”指示TCP处理预期接收的下一段。然后,重组间隙值被用作为触发,以便确定重组缓冲区中的数据是否为假。具体而言,在步骤608,执行测试以确定注入的数据是否满足以下条件query_threshold<=reassm_gap<=rcvwnd其中“rcvwnd”表示接收窗口大小。如果关系不成立,则控制在步骤607返回。如果关系成立,则查询阈值已达到,意味着重组间隙太大。
因此,在步骤610创建哑ACK段。在本上下文中,“哑ACK段”意味着这样的TCP消息,其被格式化为传统ACK消息,但是被创建和发送以用于确定端点是否合法。或者,哑ACK段可被称为验证ACK段,或者任何其他功能上等同的术语都可被用作为段的标记。哑ACK段携带刚好在最近被正确地确认的SeqNo值之前的SeqNo值,还携带合法ACK值。在一个实施例中,SeqNo值被选择为SeqNo<=(snduna-1),或者比已经被确认的SeqNo老的任何SeqNo。ACK值可以是任何可接受的ACK值,例如ACK(rcvnxt)。在TCP段的标志部分设置ACK位。哑ACK段在步骤612被发送。
哑ACK段的目的是验证重组缓冲区中数据的真实性。具体而言,如这里所述地发送哑ACK段将致使遵从RFC 793的发送者以正确的SeqNo和ACK值进行响应。在步骤614,从发送者接收ACK消息。根据RFC793,ACK消息提供发送者先前发送过的最大顺序号。
然后,接收者可确定重组缓冲区中的数据是否是虚假的。在一个实施例中,在步骤616,接收者测试在步骤614接收的发送者ACK消息的SeqNo是否小于重组缓冲区中第一段的SeqNo。如果是,则重组缓冲区中的段是虚假的并在步骤618被丢弃。
因此,上述方法认识到要不是虚假段,发送者和接收者之间的连接处于同步状态。因为只有发送者和接收者知道精确的下一预期SeqNo,因此对哑段的使用可被用来致使发送者通过证明关于精确的下一预期SeqNo的知识来向接收者证实自己。
在步骤602选择和在步骤608使用的查询阈值可以使用几种方法中的任意一个来选择。在一个实施例中,步骤608涉及测试reassm_gap是否大于当时的窗口大小的1/2。或者,查询阈值可以是当时窗口大小的1/3,窗口大小的3/4,等等。选定值可以根据网络中的察觉到的危险级别而变化。查询阈值还可以是可配置的参数值。
在另一实施例中,最大段大小(“mss”)也被考虑。例如,步骤608可以涉及评估关系if(reasm_gap>min(rcvwndsize/2,n*maxmss)),其中n是由应用选择的或是由程序控制的。在另一替换中,查询阈值可以根据诸如带宽和延迟的函数或往返时间(RTT)估计、可用带宽以及窗口大小的组合等值来动态改变。
上述方法不需要改变在接收者处使用的TCP逻辑,因此维持了与现有的TCP实现的互操作性。本节和2.3节的方法可与在现有的RFC中描述的现有的快速重传和快速恢复方法一起使用而无需任何修改。
3.0实现机制——硬件概述图7是示出了可在其上实现实施例的计算机系统700的框图。优选实施例使用在例如路由器设备这样的网络元件上运行的一个或多个计算机程序实现。因此在本实施例中,计算机系统700是路由器。
计算机系统700包括用于传送信息的总线702或其他通信机制,以及用于处理信息的耦合到总线702的处理器704。计算机系统700还包括主存储器706,例如随机访问存储器(RAM)、闪存或其他动态存储设备,它们耦合到总线702,以便存储信息和要被处理器704执行的指令。主存储器706还可用来在要被处理器704执行的指令的执行期间存储临时变量或其他中间信息。计算机系统700还包括耦合到总线702以便存储处理器704的静态信息和指令的只读存储器(ROM)708或其他静态存储设备。诸如磁盘、闪存或光盘等存储设备被提供和耦合到总线702以便存储信息和指令。
通信接口718可耦合到总线702,以便与处理器704交换信息和命令选择。接口718是传统的串行接口,例如RS-232或RS-422接口。外部终端712或其他计算机系统连接到计算机系统700,并使用接口718向它提供命令。在计算机系统700中运行的固件或软件提供了终端接口或基于字符命令接口,从而外部命令可被送入计算机系统。
交换系统716耦合到总线702,并且具有到一个或多个外部网络元件的输入接口714和输出接口719。外部网络元件可包括耦合到一个或多个主机724的本地网络722,或者是具有一个或多个服务器730的例如因特网728这样的全球网络。交换系统716根据公知的预定协议和协定将到达输入接口714的信息流量交换到输出接口719。例如,交换系统716与处理器合作可确定到达输入接口714的数据分组的目的地,并使用输出接口719将其发送到正确的目的地。所述目的地可包括主机724、服务器730、其他末端站或本地网络722或因特网728中的其他路由和交换设备。
本发明涉及使用计算机系统700来实现这里的方法。根据本发明的一个实施例,响应于处理器704执行包含在主存储器706中的一条或多条指令的一个或多个序列,计算机系统700提供这里的方法的实现。这些指令可从另一计算机可读介质(例如存储设备710)被读入主存储器706。对包含在主存储器706中的指令序列的执行致使处理器704执行这里描述的处理步骤。多处理布置中的一个或多个处理器也可被采用以执行包含在主存储器706中的指令序列。在可替换实施例中,硬连线电路可被用来代替软件指令或与软件指令组合以实现本发明。因此,本发明的实施例并不限于硬件电路和软件的任何特定组合。
这里使用的术语“计算机可读”介质是指参与向处理器704提供指令以供执行的任何介质。这种介质可采取多种形式,包括但不限于非易失性介质、易失性介质和传输介质。非易失性介质包括例如光或磁盘,例如存储设备710。易失性介质包括动态存储器,例如主存储器706。传输介质包括同轴线缆、铜线和光纤,包括包括总线702在内的线路。传输介质还可采取声或光波的形式,例如在无线电波和红外数据通信期间生成的那些。
计算机可读介质的常见形式包括例如软盘、柔性盘、硬盘、磁带或任何其他磁性介质、CD-ROM、任何其他光介质、打孔卡、纸带、具有孔图案的任何物理介质、RAM、PROM和EPROM,以及任何其他存储芯片或光盘匣、如后所述的载波,或计算机可从其读取的任何其他介质。
在向处理器704运送一条或多条指令的一个或多个序列以供执行的过程中可能涉及各种形式的计算机可读介质。例如,指令最初可能被存储在远程计算机的磁盘上。远程计算机可将指令载入其动态存储器,并使用调制解调器通过电话线发送这些指令。计算机系统700本地的调制解调器可接收电话线上的数据,并使用红外发射机将数据转换为红外信号。耦合到总线702的红外检测器可接收在红外信号中携带的数据,并将数据放在总线702上。总线702将数据运送到主存储器706,处理器704从主存储器706获取并执行指令。被主存储器706接收的指令可选地在被处理器704执行之前或之后被存储在存储设备710上。
通信接口718还提供与连接到本地网络722的网络链路720相耦合的双向数据通信。例如,通信接口718可以是综合业务数字网(ISDN)卡或调制解调器,用于提供到相应类型电话线的数据通信连接。作为另一示例,通信接口718可以是局域网(LAN)卡,用于提供到兼容LAN的数据通信连接。还可实现无线链路。在任何这种实现中,通信接口718发送和接收携带代表各种信息的数字数据流的电、电磁或光信号。
网络链路720一般通过一个或多个网络向其他数据设备提供数据通信。例如,网络链路720可通过本地网络722向主计算机724或向由因特网服务提供商(ISP)726操作的数据设备提供连接。ISP 726又通过世界范围的分组数据通信网络(现在一般称为因特网728)来提供数据通信服务。本地网络722和因特网728都使用携带数字数据流的电、电磁或光信息。携带去往和来自计算机系统700的数字数据的通过各个网络的信号和在网络链路720上并且通过通信接口718的信号是传输信息的载波的示例性形式。
计算机系统700可通过一个或多个网络、网络链路720和通信接口718发送消息和接收数据,包括程序代码。在因特网示例中,服务器730可通过因特网728、ISP 726、本地网络722和通信接口718发送被请求的应用程序代码。根据本发明,一个被这样下载的应用提供这里描述对网络数据注入攻击的检测。
处理器704可在代码被接收和/或存储在存储设备710或其他非易失性存储器中以供后来的执行时执行接收到的代码。以此方式,计算机系统700可以载波形式获得应用代码。
4.0扩展和替换在上述说明中,参考本发明的具体实施例描述了本发明。但是很明显,在不脱离本发明的更广的精神和范围的情况下可作出各种修改和改变。因此,说明书和附图应被理解为说明性而非限制性的。
权利要求
1.一种用于防止网络上的攻击的方法,其中所述攻击包括将虚假传输控制协议(TCP)段注入发送者和接收者之间的TCP连接,所述方法包括由计算机实现的以下步骤接收复制TCP ACK消息;当由接收者维护的TCP重传缓冲区为空时,使假复制ACK计数器递增;当假复制ACK计数器等于指定的击发因子时,发送提供正确的顺序值和ACK值的纠正ACK消息。
2.如权利要求1所述的方法,其中所述指定的击发因子是从1到10范围内的值。
3.如权利要求1所述的方法,其中所述步骤由充当所述TCP连接中的数据接收者的末端节点执行。
4.如权利要求1所述的方法,其中所述步骤由网络基础设施元件的操作系统的TCP应用执行。
5.如权利要求1所述的方法,其中所述步骤由被个人计算机、工作站或其他网络末端站的操作系统容宿或与个人计算机、工作站或其他网络末端站的操作系统相关联的TCP进程、堆栈、适配器或代理执行。
6.如权利要求1所述的方法,还包括以下步骤接收所述纠正ACK消息;确定所述正确的顺序值是否小于重组缓冲区中的段的另一顺序值;当所述正确的顺序值小于所述重组缓冲区中的段的所述另一顺序值时,从所述重组缓冲区丢弃所述段。
7.如权利要求6所述的方法,其中所述丢弃步骤包括丢弃所述重组缓冲区中的所有段。
8.一种用于防止网络上的攻击的方法,其中所述攻击包括将虚假传输控制协议(TCP)段注入发送者和接收者之间的TCP连接,所述方法包括由计算机实现的以下步骤接收特定的TCP段;确定所述特定的TCP段和先前被放置在由接收者维护的重组缓冲区中的在先TCP段之间的顺序值间隙;根据指定的拭探值,确定所述顺序值间隙是否太大;如果所述顺序值间隙太大,则执行以下步骤创建和发送携带刚好在最近被正确地确认的顺序值之前的特定顺序值的哑段;接收对所述哑段的确认;确定所述确认中携带的第二顺序值是否小于所述第一TCP段的第三顺序值;以及当所述确认中携带的所述第二顺序值小于所述特定TCP段的所述第三顺序值时,从所述重组缓冲区丢弃所述特定TCP段。
9.如权利要求8所述的方法,其中当重组间隙值大于当时的窗口大小的一半时,所述指定的拭探值成立。
10.如权利要求8所述的方法,其中当重组间隙值大于(a)当时的窗口大小的一半和(b)多个最大允许段大小二者中的较小者时,所述指定的拭探值成立。
11.如权利要求8所述的方法,其中当查询阈值大于当时的带宽和当时的延迟的函数时,所述指定的拭探值成立。
12.如权利要求8所述的方法,其中当查询阈值大于往返时间(RTT)估计、当时的可用带宽值和窗口大小的函数时,所述指定的拭探值成立。
13.如权利要求8所述的方法,其中当查询阈值小于等于重组间隙值并且所述重组间隙值小于等于接收窗口值时,所述指定的拭探值成立。
14.如权利要求13所述的方法,其中所述重组间隙值包括所述重组缓冲区中的第一段的顺序值减去下一预期段值。
15.一种用于防止网络上的攻击的装置,其中所述攻击包括发送具有虚假或不希望的数据段的虚假传输控制协议(TCP)段,所述装置包括用于接收复制TCP ACK消息的装置;用于当由接收者维护的TCP重传缓冲区为空时,使假复制ACK计数器递增的装置;用于当假复制ACK计数器等于指定的击发因子时,发送提供正确的顺序值和ACK值的纠正ACK消息的装置。
16.如权利要求15所述的装置,还包括用于执行权利要求2、3、4、5、6、7、8、9、10、11、12、13或14中任何步骤的装置。
17.一种用于防止网络上的攻击的装置,其中所述攻击包括发送具有虚假或不希望的数据段的虚假传输控制协议(TCP)段,所述装置包括处理器;一个或多个存储的指令序列,所述指令序列可被所述处理器访问,并且当被所述处理器执行时使得所述处理器执行接收复制TCP ACK消息;当由接收者维护的TCP重传缓冲区为空时,使假复制ACK计数器递增;当假复制ACK计数器等于指定的击发因子时,发送提供正确的顺序值和ACK值的纠正ACK消息。
18.如权利要求17所述的装置,还包括存储的指令序列,所述指令序列可被所述处理器访问,并且当被所述处理器执行时,使得所述处理器执行权利要求2、3、4、5、6、7、8、9、10、11、12、13或14中的任何步骤。
19.一种携带用于防止网络上的攻击的一个或多个指令序列的计算机可读介质,其中攻击包括发送具有虚假或不希望的数据段的虚假传输控制协议(TCP)段,其中一个或多个处理器对所述一个或多个指令序列的执行使得所述一个或多个处理器执行接收复制TCP ACK消息;当由接收者维护的TCP重传缓冲区为空时,使假复制ACK计数器递增;当假复制ACK计数器等于指定的击发因子时,发送提供正确的顺序值和ACK值的纠正ACK消息。
20.如权利要求19所述的计算机可读介质,还包括存储的指令序列,所述指令序列可被所述处理器访问,并且当被所述处理器执行时,使得所述处理器执行权利要求2、3、4、5、6、7、8、9、10、11、12、13或14中的任何步骤。
全文摘要
本发明公开了一种用于防止分组交换网络中的TCP数据注入攻击的方法。ACK消息或哑段被发送,以验证重组缓冲区中数据的真实性,并且帮助更快地丢弃虚假数据。这些方法涉及发送者检测虚假数据,并增强了对典型TCP实现所固有的用于处理ACK消息的机制的使用。后一方法可在不修改发送者的TCP实现的情况下实现。此外,接收者的TCP实现维持与RFC 793的兼容性。
文档编号G06F11/22GK1906591SQ200580001579
公开日2007年1月31日 申请日期2005年1月11日 优先权日2004年1月16日
发明者阿纳恩萨·拉迈阿, 兰德尔·斯图尔特, 彼得·李, 帕特里克·梅翰 申请人:思科技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1