一种实现ipsec抗重放攻击的方法

文档序号:7669323阅读:1241来源:国知局
专利名称:一种实现ipsec抗重放攻击的方法
技术领域
本发明涉及网络通讯技术,特别涉及一种在多核架构下实现IPSEC抗重 》文攻击的方法。
背景技术
IPSec (IP Security)协议是一种工业标准网络安全协议,为IP网络通信 提供透明的安全服务,保护传输控制协议(Transmission Control Protocol, TCP ) /IP通信免遭窃听和篡改,可以有效抵御网络攻击,同时保持易用性。IPSec 在网络层发挥作用,保护和认证IP报文,并与标准算法独立的开放框架,提 供数据的机密性、数据完整性和源认证功能。IPSec作为一种实施于网络层的 安全协议,具有保证数据来源可靠、保护数据完整、保证数据机密性、防止重 放攻击和完美向前保密(PFS)等诸多优点。
但是重放攻击会导致提供IPSec服务的接收方,为验证数据来源的真实性、 数据的完整性以及保证内容的机密性,而消耗大量的系统资源,对正常的数据 流产生"拒绝服务"(Dos)。
为了抵抗人恶意地发起重放攻击,IPSec报文专门使用了一个序列号(无 符号32比特),以及一个"滑动"的接收窗口。在每个IPSec报文头内,都包含 了 一个独一无二且单调递增的序列号。由密钥交换(Internet Key Exchange, IKE)服务自动协商或手工创建好一个安全关联(Security Association, SA) 后,序列号便会初始化为零,并在进行IPSec输出处理前,令这个值递增。IPSec 服务本身并不提供"重传"功能,如果在同一个安全关联SA "存活"期间, 收到序列号相同的报文,便认为是攻击包,提供IPSec服务的接收方,就会丢 弃这个纟艮文。
现有的实现方案一般的是使用RFC2401维护一个"滑动"窗口。如图1 所示,为现有的32位抗重》文"滑动"窗口示意图。窗口最左端对应于窗口起始 位置的序列号,而最右端对应于将来的第"窗口长度"个报文。接收到的报文必须是新的,且必须落在窗口内部,或靠在窗口右侧。否则,便将其丢弃。而判 断一个报文是否是"新"的,是依据其是否在窗口内出现过,如果其在窗口内从 从未出现过,则认为是新的。如果收到的一个报文靠在窗口右侧,那么只要其 未能通过真实性测试,也会将其丢弃。如通通过了真实性检查,窗口便会向右 移动,将那个报文包括进来。
需要说明的是,虽然报文的接收顺序可能被打乱,但仍会得到正确的处理。 此外,还需注意的是那些接收迟的报文,即在一个有效的报文之后接收,但其 序列号大于窗口的长度,这种报文会被丟弃,所以适当的设置"滑动"窗口的 大小很重要。
以下,举一个例子进行说明
如图1所示,窗口最左端的序列号为S,最右端的序列号为S+31。编号 为S、 S+2、 S+9、 S+10和S+13等报文尚未收到。
如果最近收到的报文S+33通过了真实性检查,窗口便会向右滑动2个位 置,使窗口左侧变成S+2,右侧变成S+33。这样便会造成报文S无可挽回地 丢弃,因为其现在变成靠在滑动接收窗口的左侧。但需要注意的是,报文S+2 如果通过了真实性检查,S+2这个包仍会被收到。如果再次收到S+3的报文, 根据"滑动"窗口中相应的位图(bitmap),就可以"鉴别"出是攻击包。
但是,上述方法存在如下缺点
单个"滑动"窗口技术方案,在单处理单元(CPU)架构下,不需要使用 同步原语,就能保证保存的序列号最大(用于和收到的序列号比较,设置"滑 动"窗口相应的位图),重放窗口也总是沿着正确的方向的"滑动",从而很好 的防止重放攻击,也不会导致性能的下降。但是,在多核架构、且需要提供高 性能IPSec服务的情况下,如何保证在性能不受影响,还能保证能有效检测重 放攻击,当前的这种方案就遇到挑战。
考虑以下"场景"
当接收到的报文因网络延迟等原因顺序被打乱,或者接收到延迟的报文, 每个核或者处理单元处理的任务和负载不一致
多核如果使用同一个"滑动"的接收窗口,来检查是否是重放的报文,为了 保证滑动窗口及序列号的一致性,必须使用同步原语,例如其中一个处理单元滑动"窗口"时,现在大部分实现方案都是利用锁机制这种同步原语,防止其 他的处理单元也来滑动同一个窗口 ,避免使"滑动"窗口中相应的bit位的"错 位"这样的情况发生。因为根据"错位"的位图来"鉴别"报文是否为重放攻 击,可能会导致丢弃正常的报文。
同步原语的使用,虽然能保证序列号的一致性,使窗口正确的"滑动", 从而达到"鉴别"重放攻击包的目的,但是一个处理单元在设置"滑动"窗口
相应的位图,更新序列号时保证保存的序列号最大,方便出站(OUTBOUNT) 使用,另外一个处理单元只能等待上一个处理单元才喿作完成,才能继续操作, 而这种等待,这在高性能的多核平台总会带来严重的性能下降。

发明内容
本发明的目的在于,提供一种在多核架构下实现IPSec抗重放攻击的方法,
能够更精确的检查重放攻击。
本发明的实现IPSec抗重放攻击的方法,在提供IPSec服务的系统中,利
用多个滑动窗口鉴别接收到的报文是否是新的。 其中,所述滑动窗口的个数等于CPU的个数。
其中,根据每个处理单元最后更新的序列号减去当前的序列号,得到相应 的位,判断这个报文是否落在CPU一N的滑动窗口内。
其中,所述判断这个报文是否落在CPU—N的滑动窗口内,包括下列步骤 根据Bc卜(l 811)设置80,其中,Bn=WLs-Cs; Ws为滑动窗口大小, 为机器字长的整数倍;Bn为滑动窗口中相应的位,Bc为滑动窗口的总位图, Cs为当前处理报文的序列号,Ls为最后收到的最大序列号,WLs为当前滑动 窗口的最大序列号,Wn为IPSec处理单于或CPU的个数。
此外,判断这个报文是否落在CPU—N的滑动窗口内,进一步包括下列步

如果在所述滑动窗口内,则比较所述滑动窗口中相应的位是否被设置为 1,如果为1则认为是攻击的报文,就丟弃该报文;如果不为1,说明是新的报 文,进行后继的处理;
如果在所述滑动窗口左侧,因为该报文延迟时间超过滑动窗口的大小, 也要丢弃该^艮文;如果在所述滑动窗口右侧,应向右滑动窗口,滑动的距离等于最后一次 收到的最大序列号和当前报文序列号差值的绝对值。
其中,鉴别攻击包,如果Bc&(1 <<Bn)=l,为重放攻击包,否则是正常 的报文。
本发明的实现IPSec抗重放攻击的方法,包括下列步骤每个处理单元各 自使用其收到的最大的序列号,来确定当前报文在属于自己的滑动窗口的位, 每个处理单元在更新序列号时,需要和出站的序列号做比较,如果当前序号比 要更新的序号大才更新序号。
进一步地,包括下列步骤在报文送达特定的CPU前,进行预处理,指 定具有某一特征的数据由特定CPU来处理。
其中,所述预处理是对IPSec头中明文的序列号进行求模取余运算Pn= Cs modN, N为处理单元或CPU个数,报文头中序列号为Cs, Pn为处理单元或 CPU号,取余的结果可以作为CPU的编号,根据所述编号由固定的CPU进行 处理。
本发明的有益效果是依照本发明的在多核架构下实现IPSec抗重放攻击 的方法,在多核架构上,利用多"滑动"窗口技术,完善IPSec抗重放攻击功 能,从而避免使用单一 "滑动"窗口和锁机制带来,系统性能严重下降的技术 难题。根据IPSec报文头明文的序列号使用预处理模块,把具有特定类型的报 文分派给指定的IPSec处理单元,从而使检查重放攻击更精确的方法。


图1为现有的32位抗重放"滑动"窗口示意图; 图2为本发明的32位抗重放多处理单元多"滑动"窗口示意图; 图3为本发明的设置预处理单元的32位抗重放多处理单元多"滑动"窗口 示意图4为AH报文头格式示意图5为ESP报文头格式示意图。
具体实施例方式
以下,参考附图1~5详细描述本发明的在多核架构下实现IPSEC抗重放 i丈击的方法。无论是在多核还是单核架构下,每个CPU或者处理单元检查重放攻击,
都依赖独一无二、单调递增的序列号。
提供IPSec服务的接收方是在接收到的报文通过真实性检查之后,马上进 行重放检查,需要更新序列号,并完成机密性检查(解密)。设置"滑动"窗口 中相应的位图,如果当前报文的序列号,超过"滑动"窗口的大小,就需要向右 "滑动"窗口。在此期间,存在一个"时间"窗口,其他的处理单元在这个"时间"
窗口内,可能收到报文,如果不使用锁机制,也可以更新序列号,同时滑动窗 口。而依赖序列号检查重放的上一个处理单元,设置当前"滑动"窗口相应的位 图时,因为序列号的递增,发生"错位",会导致后继正常的报文被误认为是"重 放"的报文,被提供IPSec服务的接收方丢弃该报文。
为此,本发明的核心思想是在一个提供IPSec服务的系统中,维护多个 "滑动"窗口,即窗口的个数一般等于处理单元的个数,使每个处理单元都有 属于"自己"的滑动窗口。每个处理单元根据序列号只"滑动"属于自己的窗 口,就可以在不使用锁机制的情况下,达到抵抗重放攻击,又能提高IPSec服 务的总体性能的目的。
如图2所示,为本发明实施例的32位抗重放多处理单元多"滑动"窗口示 意图
如果CPU—0收到的报文S+34,并通过了真实性检查,窗口便会向右滑动 3个位置,使窗口左侧变成S+3,右侧变成S+34,同时在SA上记录最大的序 列号为S + 34。其中,Bn表示相应的位,根据窗口的大小取值不同,例如, 对于64位窗口, Bn取值范围为0 63;对于32位窗口, Bn取值为0-31。 随后第S + 9个报文到达,如果这个报文被随机的分配给CPU—N,由CPU_N 来提供IPSec服务,由于是同一个数据流, 一定会"命中"同一个入站 (臓OUNT) SA。
需要说明的是在同一个SA使用同一个单调递增的序列号,CPU—N在 检查S + 9这个报文是否是重放的攻击包,需要利用"滑动"窗口来"鉴别" 这个报文是否是新的。根据CPUJ)最后更新的序列号S + 33减去当前的序列 号,得到相应的位,判断这个报文是否落在CPU—N的"滑动"窗口内。
如果在窗口内,则比较窗口中相应的位是否被设置为1,如果已经设置为1,是重放的包,如果没有设置为1,表示为正常的报文,可以进行后继的处 理。
如果落在CPU一N的"滑动"窗口左侧,即延迟的报文超过了窗口的大小, 丢弃该^艮文。
如果在右侧应向右滑动窗口,窗口滑动的距离应该等于最后一次收到的最 大序列号和当前才艮文序列号差值的绝对值。
但是,所有的"滑动"窗口都使用了最后收到的报文的序列号做比较,引 起报文在不同CPU上的"错位",因此,会将正常的报文当成是重放攻击包。 要解决"错位"问题,可使用每个处理单元各自使用其收到的最大的序 列号,来确定当前报文在属于自己的"滑动"窗口的位,每个处理单元在更新 序列号时,需要和OUTBOUNT的序列号做比较,如果当前序号比要更新的序 号大才更新序号。假设CPU—N收到包的最大序列号位S + 36,根据公式 Bn=WLs - Cs可以确定S + 9这个报文"落"在窗口内,并且才艮据^^式和Be &(1 <<Bn)=0,表示该报文是"新"的。通过了重放检查,对这个正确的报文进行 后继的处理。
其中,根据如下方法可以保证在一个CPU更新的序号永远是最大的一 般的原子操作指令只能保证序列号为最新,而不能保证为最大。如何保证多个 处理单元使用唯一序列号为最大,各种平台上方法不同。在MIPS体系结构中 可以利用关联加载条件存储(load-linked、 store-conditional)这条特殊的指令, 在基于MIPS的多核架构上,保证多个IPSec处理单元4吏用的唯一序列号正确 的递增。
依照上述方法,虽然能解决"滑动"窗口的"错位"问题,但是也有一个 明显的漏洞,就是如果处理单元是随机的处理收到的报文,攻击者可能在攻击 了为N-1个报文后(N为IPSec处理单元的总数),才被检测出。因为攻击者 可以精确地重放相同序号的报文来"命中"不同的"滑动"窗口。
如图3所示,为本发明的设置预处理单元的32位抗重放多处理单元多"滑 动"窗口示意图。利用IPSec报文头中的序列号(报文头格式如图3、图4所示), 来决定固定的CPU处理特定的IPSec报文。在^JL送达特定的CPU前,做一 定的预处理,指定具有某一特征的数据由特定CPU来处理。预处理模块要做到这点,最简单的方法是对CPU进行编号,如果CPU的实际序号为乱序,比 如2号CPU, 5号CPU, 6号CPU,可是使用数组下标来编号。对IPSec头中 明文的序列号进行取模取余运算,取余的结果可以作为CPU的编号,根据编 号就可以做到特定报文(包括相同序号的报文)总是由固定的CPU来处理。 这样就可以做到攻击者重放的第二个报文,马上被检测出来,被丟弃,从而达 到防重放的目的。例如,有32个CPU,接收到的报文头中序列号为63,那 么取余结果为31,根据公式Pi^CsmodN,该报文就有31号或者使用数组下 标为31的CPU来提供IPSec服务。
以上,对本发明的方法进行了示例性说明。除此,在异构的硬件平台,在 一个提供IPSec服务的系统中,使用多"滑动"窗口,多个序列号技术,也是 与本方法相同的的方法,另一种表现形式。例如即有x86, arm, mips等IPSec 的处理单元,也有ASIC等处理单元。
本技术方案提供一种IPSec抗重放技术方案,并不依赖硬件平台,因此除 在多核,多线程架构上,也适合在任何存在多个IPSec处理单元的架构中使用。 在这些架构上多"滑动"窗口,多个序列号技术都能4艮好运行。
综上所述,依照本发明的方法,在多核架构上,利用多"滑动"窗口技术, 完善IPSec抗"重放"攻击功能,从而避免使用单一 "滑动"窗口和锁机制带 来,系统性能严重下降的技术难题。根据IPSec报文头明文的序列号使用预处 理模块,把具有特定类型的报文分派给指定的IPSec处理单元,从而使检查重 放攻击更精确的方法。
以上是为了使本领域普通技术人员理解本发明,而对本发明所进行的详细 描述,但可以想到,在不脱离本发明的权利要求所涵盖的范围内还可以做出其 它的变化和修改,这些变化和修改均在本发明的保护范围内。
权利要求
1. 一种实现IPSec抗重放攻击的方法,其特征在于,在提供IPSec服务的系统中,利用多个滑动窗口鉴别接收到的报文是否是新的。
2. 如权利要求1所述的实现IPSec抗重放攻击的方法,其特征在于,所述 滑动窗口的个数等于CPU的个数。
3. 如权利要求1所述的实现IPSec抗重放攻击的方法,其特征在于,根据 每个处理单元最后更新的序列号减去当前的序列号,得到相应的位,判断这个 报文是否落在CPU—N的滑动窗口内。
4. 如权利要求3所述的实现IPSec抗重放攻击的方法,其特征在于,所述 判断这个报文是否落在CPU一N的滑动窗口内,包括下列步骤根据Bc卜(l 811)设置8^其中,Bn=WLs-Cs; Ws为滑动窗口大小, 为机器字长的整数倍;Bn为滑动窗口中相应的位,Bc为滑动窗口的总位图, Cs为当前处理报文的序列号,Ls为最后收到的最大序列号,WLs为当前滑动 窗口的最大序列号,Wn为IPSec处理单于或CPU的个数。
5. 如权利要求4所述的实现IPSec抗重放攻击的方法,其特征在于,判 断这个报文是否落在CPU一N的滑动窗口内,进一步包括下列步骤如果在所述滑动窗口内,则比较所述滑动窗口中相应的位是否被设置为 1,如果为l则认为是攻击的报文,就丢弃该报文;如果不为1,说明是新的报 文,进行后继的处理;如果在所述滑动窗口左侧,因为该报文延迟时间超过滑动窗口的大小, 也要丢弃该报文;如果在所述滑动窗口右侧,应向右滑动窗口,滑动的距离等于最后一次收到的最大序列号和当前报文序列号差值的绝对值。
6.如权利要求5所述的实现IPSec抗重放攻击的方法,其特征在于,鉴 别攻击包,如果Bc&(1 <<Bn)=l,为重放攻击包,否则是正常的报文。
7.如权利要求1所述的实现IPSec抗重放攻击的方法,其特征在于,包括 下列步骤每个处理单元各自使用其收到的最大的序列号,来确定当前报文在属于自己的滑动窗口的位,每个处理单元在更新序列号时,需要和出站的序列号做比 较,如果当前序号比要更新的序号大才更新序号。
8. 如权利要求7所述的实现IPSec抗重放攻击的方法,其特征在于,包括 下列步骤在报文送达特定的CPU前,进行预处理,指定具有某一特征的数 据由特定CPU来处理。
9. 如权利要求8所述的实现IPSec抗重放攻击的方法,其特征在于,所述 预处理是对IPSec头中明文的序列号进行求模取余运算Pn= Cs mod N, N为处 理单元或CPU个数,报文头中序列号为Cs, Pn为处理单元或CPU号,取余 的结果可以作为CPU的编号,根据所述编号由固定的CPU进行处理。
全文摘要
本发明提供一种实现IPSec抗重放攻击的方法,其中,在提供IPSec服务的系统中,利用多个滑动窗口鉴别接收到的报文是否是新的。在多核架构上,利用多“滑动”窗口技术,完善IPSec抗重放攻击功能,从而避免使用单一“滑动”窗口和锁机制带来,系统性能严重下降的技术难题。根据IPSec报文头明文的序列号使用预处理模块,把具有特定类型的报文分派给指定的IPSec处理单元,从而使检查重放攻击更精确的方法。
文档编号H04L9/36GK101471784SQ200710304768
公开日2009年7月1日 申请日期2007年12月29日 优先权日2007年12月29日
发明者左世涛 申请人:北京天融信网络安全技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1