用于SYN/FIN对应关系的秘密散列 【技术领域】
本发明通常涉及基于计算机的系统,更特别是涉及在这种系统中检测与安全有关的攻击的方法。
背景技术
近年来对网址的攻击已经造成了网络业务的严重破坏。这些攻击可以采用多种形式的任何一种,包括,但不仅限于SYN洪水式(SYNflooding)攻击。
在SYN洪水式攻击中,攻击者使受攻击网址过载达到它无法应付到来的业务。这种攻击通常集中在基于TCP业务的固有特性。
实质上,TCP在建立连接时依靠三次握手协议。希望与主机建立连接的客户向主机发送同步信号(SYN),主机用SYN确认(ACK)应答来响应客户。然后客户返回确认,连接建立。握手协议在图1说明。
完成连接以后,客户向主机转发一结束(FIN)分组,表示不再有其它的数据或分组指向主机,此后连接结束。
在SYN洪水式攻击中,攻击者通常利用错误或无效的源地址,以使当主机返回SYN/ACK消息时它无法到达有效的客户。在TCP协议下,主机存储半开式连接,即三次协议的第三段(leg)在一时间段内或者直到系统超时出现还未完成的连接。如果在此时间间隔内在该主机网址建立了许多新的半开式连接,则分配用来保持这些连接的内存将被堵塞,并最终无法再接收SYN分组。在这个阶段,服务器或主机将崩溃或不再响应任何新的连接,该网址将停止使用。因为主机无法再接收数据,所以攻击者已经成功地产生了所谓的业务拒绝攻击。业务拒绝攻击正逐渐变成安全威胁的主要形式,迄今这个问题都非常难以解决。已经建议了多种对策,具体表现为防火墙和路由器过滤、操作系统改进、协议改进和侵入检测。
在安全攻击领域存在大量的现有技术,在1997年IEEE Symp.Security and Privacy会刊中C.Schuba,I.Krsul,M.Kuhn,E.Spafford,A.Sundaram和D.Zamboni发表的名称为“对TCP业务拒绝攻击地分析(Analysis of a denial of service attack on TCP)”论文中详细描述了该问题。Schuba等人的论文描述了该问题和代理业务的经典解决方案:TCP中继和半透明的TCP网关。在这两种解决方案中,防火墙截断TCP连接、保持TCP状态机的状态和引入新的分组来避免攻击。
根据该论文的代理解决方案必须为每次连接保持相应TCP状态机的状态。该机制需要大量的资源而且本身会成为新的业务拒绝攻击的目标。因此,计算开销的高成本使得该解决方案不适用于网络路由器或交换机。
更接近本发明的第二种现有技术由Proc.Infocom 2002中H.Wang,D.Zhang和K.G.Shin发表的“检测SYN洪水式攻击(Detecting SYN flooding attacks)”描述。根据Wang等人的方法依靠TCP连接中SYN和FIN分组的计数参数(argument)。这些分组应当成对进入任何运转正常的连接。因此,SYN分组的数目应当大致与FIN分组的数目匹配。这种方法的简易性在于无需状态和较低的计算开销,这使得检测机制本身免于洪水式攻击。这种简易性允许在连接终端主机与互联网的叶路由器中执行检测。
根据Wang等人的计数器机制具有一个主要的缺点。如果攻击者确切得知此方法所述的检测协议,他们可以简单地用同步SYN和无关的甚至无效的FIN分组完全淹没(overflooding)路由器来阻挠此方案。因此SYN计数器和FIN计数器应当大致相同。但是,受攻击的TCP/IP栈将会对无效FIN分组尚未结束的许多半开式连接开放。这相应于最初的业务拒绝攻击。
2001年11月20日授予Porras等人的美国专利6,321,338“网络监测(Network Survelillance)”也提供了一种现有技术。根据Porras等人的专利,提供了一种网络监测的方法,包括接收由网络实体处理的网络分组,和从监视数据传输、误差或网络连接的网络分组的测量值中建立至少一个长期和至少一个短期的统计档案(profile)。比较统计档案来确定统计档案的差别是否表示可疑的网络行为。
除了上述的细节以外,此专利还公开了事件流,例如ICMP分组的强度测量值特别适合于检测洪水式攻击。此外,该专利还公开了使SYN与SYN_ACK消息相关的强度测量值、SYN/RST消息或TCP/FIN消息的容量分析对于检测端口的可用性或扫描攻击有用。
第二项重要的专利是1999年9月28日授予Denker的美国专利5,958,053“具有改进安全性的通信协议(Communications protocolwith improved security)”。根据Denker的专利,其发明包括两个新的第一级协议和若干第二级协议的实施例。该发明的两个新的第一级协议包括TCP2B协议和TCP 2E协议。在TCP2B协议中,客户和服务器都表示利用TCP首部的一个或多个比特来支持此协议。根据TCP2B协议在ACK消息中客户重发它请求的选项,因此服务器在连接请求以后不必存储这些选项。在TCP 2E协议中,服务器保存列出了近来观察符合TCP装置地址的朋友表(Friends Table)。如果客户的地址在朋友表中,则连接请求根据TCP处理。否则服务器向客户发送一确认消息提醒客户发送复位(RST)消息。然后客户的地址加入到朋友表中。
此专利公开了将散列函数用于仅为服务器所知的信源和信宿IP地址、端口号加上密钥来区分SYN分组。另外,此专利还公开了包括计数器的散列表,该计数器对应于各个客户以检测SYN洪水式攻击中将会出现的不成功的尝试。在从相应的业务收到SYN消息以后每个计数器减一,在从客户收到ACK后在客户和服务器之间建立成功的连接时每个计数器加一。
业务拒绝攻击经常利用TCP建立SYN消息来用伪造的连接尝试淹没目标攻击。为了检测到这种攻击,已经开发了许多基于统计数字的试探法,这些试探法计数SYN比FIN消息并将偏离(skew)标记为攻击。遗憾的是,攻击者可以用与SYN一样多的FIN淹没同时使FIN与SYN无关来蒙蔽这些系统。
如果检测系统愿意维护所有SYN的表并且只计数对应于有效SYN的FIN,则也可以检测到。但遗憾的是,在高带宽的应用中,不可能维护如此之大的连接表。
美国专利5,958,053提供的解决方案只根据IP地址和端口号监视连接。不进行只基于IP地址的全局(global)监视。
发明人已知的最好的现有技术方案观察业务量和积累根据SYN比FIN的统计数字,如果存在差异则标记为攻击。在外出的SYN和进入的SIN之间没有对应关系的检验。这为精明的攻击者留下了可以利用的隐患,因为攻击者可以用SYN分组和不对应的FIN分组来淹没受攻击者。受攻击者积累半开式连接,检测器受到了蒙蔽。
【发明内容】
本发明通过维护SYN和FIN之间的对应关系、关闭安全漏洞来改进现有技术。
该解决方案还提供一种相干的方式处理复位分组。
因此,通常,本发明通过利用将SYN消息映射到对应的FIN消息的散列函数来检测SYN洪水式攻击。
因此,根据本发明的第一个方面,提供了一种在数字通信系统中的路由器检测异常不成功的连接尝试次数的方法,该方法包括步骤:a)为路由器在预定时间间隔期间收到的每个具有连接标记建立(SYN和SYN/ACK)的分组和为每个连接结束(FIN)分组,利用作为输入参数的信源和信宿IP地址、端口号和密钥的散列函数计算一值;b)在收到具有连接标记建立(SYN和SYN/ACK)的分组后使该值唯一识别的全局(global)计数值和桶(bucket)计数值加一;c)在收到连接结束(FIN)分组后,全局计数值和桶计数值减一,只要这些计数值严格为正;和d)响应全局计数值在连续时间间隔内的行为确定出现异常不成功的连接尝试次数。
根据本发明的第二个方面,提供了一种在数字通信系统中位于LAN和一网络之间的路由器检测异常不成功的连接尝试次数的方法,该方法包括步骤:a)为路由器在预定时间间隔期间收到的每个连接建立(SYN)和连接结束(FIN)分组,利用作为输入参数的信源和信宿IP地址、端口号和密钥的散列函数计算一值;b)在从路由器的LAN端收到连接建立(SYN)分组后使该值唯一识别的全局计数值和桶计数值加一;c)在从路由器的网络端收到连接结束(FIN)分组后,全局计数值和桶计数值减一,只要这些计数值严格为正;和d)响应全局计数值在连续时间间隔内的行为确定出现异常不成功的连接尝试次数。
根据本发明的再一个方面,提供了一种在数字通信系统中位于LAN和一网络之间的路由器检测异常不成功的连接尝试次数的方法,该方法包括步骤:a)为路由器在预定时间间隔期间收到的每个连接建立(SYN)和连接结束(FIN)分组,利用作为输入参数的信源和信宿IP地址、端口号和密钥的散列函数计算一值;b)在从路由器的网络端收到连接建立(SYN)分组后使该值唯一识别的全局计数值和桶计数值加一;c)在从路由器的LAN端收到连接结束(FIN)分组后,全局计数值和桶计数值减一,只要这些计数值严格为正;和d)响应全局计数值在连续时间间隔内的行为确定出现异常不成功的连接尝试次数。
根据本发明的再一个方面,提供了一种在数字通信系统中位于LAN和一网络之间的路由器检测异常不成功的连接尝试次数的方法,该方法包括步骤:a)为路由器在预定时间间隔期间收到的每个信令分组(SYN、SYN/ACK、FIN、RST),利用作为输入参数的信源和信宿IP地址、端口号和密钥的散列函数计算一值;b)为从路由器的LAN端和网络端到来的每个分组类型,使特定的桶计数值加一;c)维护全局计数值超过在步骤b)定义的所有桶计数值;和d)响应全局计数值在连续时间间隔内的行为确定出现异常不成功的连接尝试次数,其中桶计数值在时间间隔结束时复位。
【附图说明】
现在将参照附图更详细地描述本发明,其中:
图1说明TCP启动协议;
图2是实现本发明的高层说明;
图3是说明本发明一个实施方式的流程图。
【具体实施方式】
图1说明用于启动从客户到主机或服务器连接的TCP/IP协议,客户向服务器发送连接启动(SYN)消息,服务器用SYN/ACK消息回复客户。客户返回完全打开连接的确认消息。
在完成对话以后,客户向主机或服务器发送FIN或连接结束消息,服务器确认该消息并返回一确认来正式结束连接。
如前所述,如果连接启动消息的第三段,即从客户到服务器的确认在服务器没有收到,则服务器维护半开式连接的记录,多个这种半开式消息会淹没服务器,从而导致业务崩溃和中断。
预计本发明将在互联网边缘的路由器找到特殊的应用,该路由器提供从局域网到互联网或一般网络的接入。它还可以用于交换机、防火墙、主机等。图2是此应用的高层图,表示包括用于实现本发明方法机制的路由器。
SYN洪水式攻击可以通过用散列表维护连接状态来有效地检测。这种系统可以比现有技术中已知的其它方法更有效。相关的散列函数必须是抗碰撞的,即如果发现在同一捅中散列两个对联(couplets)则计算必定是不可行的。这可以通过利用密钥函数实现。
因此,在本发明中,进入的信令分组(SYN、SYN/ACK、FIN、RST)由加密散列函数映射到桶,统计数字可以在每个桶中维护,而不是整个系统。一个简单的计数器对SYN加一对FIN减一用于每个桶。这样,至少可以是SYN和FIN之间统计对应,而且因为不知道映射函数,攻击者没有途径伪造FIN映射到同一桶(无法对应同一个SYN)。这依赖攻击者只有两种选择的假设:或者完成三次握手,最终连接,或者不完成三次握手并为客户留下半开式连接。
映射函数可以散列【信源IP、信宿IP、信宿端口、密钥】到n个桶。n的选择是对检验器更高的要求和系统有效性之间的折中。举个例子,n=100将会冒攻击下过多统计碰撞的危险(即,系统不会检测到正在进行的攻击);n=106在碰撞方面要好得多;但是,它的存储要求对于小路由器(举例)来说会太大。事实上,可以使用支持插入、成员查询和可选择的,删除的任何有效的数据结构(例如,具有密钥散列函数的Bloom滤波器)。主要问题在于具有这样一种有效的数据结构,即错误的确定成员查询非常低。这就是该表容量巨大的原因。
密钥参数允许散列算法已知,但是【IP,端口】和桶之间的对应关系必须隐瞒攻击者。因此,密钥将是只为检测系统所知的随机数。
全局计数器必须保持跟踪所有开放的连接。它将是判定是否存在攻击的逻辑中心。
业务拒绝攻击正逐渐变成安全威胁的主要形式,这个问题看起来非常难以解决,因为攻击是TCP/IP基础设施的固有特性。本发明提供了比已知方法更有效和强壮的检测业务拒绝攻击的方式。
因此,本发明涉及一种检测洪水式类型业务拒绝攻击的方法,其中SYN消息通过利用包括使用密钥作为额外安全性的散列算法与FIN消息匹配。该方法还涉及一种说明相应的复位消息、维护SYN、FIN和复位消息的全局计数值的方法,从而这些计数值将用于进一步检测业务攻击。
本发明依赖一种测量路由器在预定时间间隔收到的连接建立分组(SYN)和连接结束分组(FIN)的方法。分组中的信息,例如信源和信宿IP地址、端口号和密钥用于使用散列函数计算一值。在收到连接建立分组后,全局计数值和桶计数值加一。如果与全局计数值和桶计数值有关的连接结束分组或FIN分组为正,则全局计数值和桶计数值减一。根据全局计数值在连续时间间隔的行为确定由异常不成功连接尝试所示的业务拒绝攻击。
通常,桶计数值在时间间隔结束时复位,该时间间隔可以是连续的滑动窗口或不重叠的滑动窗口。
确定业务拒绝攻击的方法依赖利用任何一个累加和、移动平均数、或滤波器导数来检测全局计数值的变化。
图3是表示本发明一个实施例的全图。
在前面的讨论中,大型散列表用于确保对于成员查询的少数错误的确定应答。但是,基于加密散列函数的小型散列表也很有用,如果通过路由器的业务量重要的话。在这种情况下,散列表用于将业务分成独立的不可预计的流。在这种情况下,只有桶计数值用于攻击检测。通常,上面段落所述的方法(确定业务拒绝攻击的方法依赖利用任何一个累计总和、移动平均数、或滤波器导数来检测全局计数值的变化)用于每个桶计数器而不是用于所有计数器。
尽管已经描述和说明了具体的实施例,但是显然对于本领域技术人员来说,可以引入各种改变而没有偏离基本的概念。但是,应当理解在可能程度内的这些改变都落入所附权利要求书所限定的本发明的全部范围内。