一种基于SDN的中间设备路径认证方法与流程

文档序号:15466161发布日期:2018-09-18 19:22阅读:294来源:国知局

本发明涉及网络路径管控领域,具体涉及一种基于SDN的中间设备路径认证方法。



背景技术:

比起普通的路由转发设备,中间设备(Middlebox)是可以提供诸如流量工程(Traffic Engineering)和包检测(Packet Inspection)等高级功能的特殊网络设备。由于能够提供众多的针对性功能,弥补了传统网络中的不足,中间设备在目前已经得到了广泛的应用。但是在传统网络当中,配置中间设备之间的转发规则是一个复杂而繁琐的过程,因为用户需要逐一手工配置不同中间设备和交换机上的转发规则,因而直接导致了以下的难点:中间设备的规则管理费时费力,平均来说,每十个中间设备就需要一个6至25人的专业小组负责管理;中间设备的规则配置和维护过程中也极易发生错误,超过50%的管理员认为配置错误是造成中间设备宕机的最为普遍的原因。针对这些不足,Sherry(Making middleboxes someone else’s problem:network processingas a cloud service,SIGCOMM,2012年)等人率先提出将中间设备向外转移到云中来降低管理成本。Sekar(Designand implementation of a consolidated middlebox architecture,in NSDI,2012年)等人在另一个创新性的方法中提出将中间设备不同的功能整合到一个服务器当中,在降低成本的同时,也消除了一些中间设备的冗余模块。然而这些方法在实际当中并未得到广泛应用,这是由于它们需要对现有的中间设备进行根本性的改变而难以实施。

软件定义网络(Software-Defined Networking,SDN)技术却可以在不用改变原有设备的前提下更灵活高效地设置中间设备的规则。与传统网络不同,一个含有中间设备的SDN网络包含三种主要的实体:控制器,交换机和中间设备。控制器集中了网络的控制权,保存有网络拓扑、路由和网络统计数据等全局信息,并与交换机和中间设备之间均有双向的网络通路。在SDN中配置中间设备的网络规则,用户只需要面向控制器提供的接口设置规则,控制器上的应用会将用户提供的规则拆分成交换机可读的转发规则,然后安装在相应的交换机上,最终使得数据包以用户指定的顺序和方式通过各个中间设备。相比于传统网络,SDN提供的统一的规则设置接口大大提高了用户友好性。然而这样的配置方式可能会使交换机的转发产生歧义:交换机上的规则只能简单地匹配数据包头中的某些域以及数据包的进入接口,而中间设备的存在可能会使得某些数据包通过相同的接口两次进入到相同的交换机,根据用户制定的规则,这两次转发的下一跳应该是不同的,但是交换机却难以区分它们。此外,诸如网络地址转换(Network Address Translation,NAT)中间设备还会改写数据包的包头,使得转发歧义的问题更加严重。Fayazbakhsh(Enforcing network-wide policies in the presence of dynamic middleboxactions using flowtags,in NSDI,2014年)等人提出在数据包头上用一个特定的标签标记一个数据包在中间设备中的处理情况,交换机可以根据这个标签将上述情况中相同的数据包发往不同的下一跳,避免了歧义的产生。该方法要求改动中间设备的程序使其能够标记数据包,但是引入的改动较小,是一种易于部署的轻量级方法。

采用此种方法会在没有安全措施的情况下信任标签,使得中间设备绕过攻击成为可能——网络中被攻击者控制的交换机,可以在包头标记后直接转发给下一跳的交换机而不经过相应的中间设备,下一跳交换机却仍然相信这些数据包已经经过了中间设备的处理。绕过中间设备违反了用户制定的规则,并可能引发网络性能下降以及严重的安全威胁。

在已有的文献当中,有的研究提出了能够检测SDN网络中恶意交换机的方法,这些方法主要分为两类:一类是基于网络探针的方法,例如由Chiu等(Rapid detection of disobedient forwardingon compromised openflow switches,in ICNC,2017年)以及Chi等(How to detect acompromisedsdn switch,in NetSoft,2015年)提出的,通过将探针数据包放入SDN网络,根据探针经过的路径是否和预期路径相符,来判断和找出网络中的恶意交换机。然而对于中间设备绕过攻击来说,这种方法是不起作用的。恶意交换机仅仅试图绕过中间设备,而探针仅仅能探测到交换机层面上的路径,因此无法准确判断出路径是否经过了制定的中间设备。此外,恶意交换机也可能在特定的数据包上进行恶意操作,而对探针包进行正常转发,这种情况使得该类方法可能出现假阴性,达不到安全标准的高精确度。另一类方法像Dhawan等(Sphinx:Detectingsecurity attacks in software-defined networks,in NDSS,2015年)和Kamisiński等(Flowmon:Detecting malicious switchesin software-defined networks,in SafeConfig,2015年)等所提出的,采用网络流的统计数据分析的手段。恶意丢包或者恶意延迟数据包的交换机上的统计数据往往进出包数量不一致,或者是平均延迟更长,然而中间设备绕过攻击当中,交换机路径上的统计数据并不会产生上述的浮动。此外,该类方法不能达到包级别的检测粒度以及高度的实时性。



技术实现要素:

本发明提供了一种基于SDN的中间设备路径认证方法,可以检验并强制数据包按照用户既定的顺序和规则经过SDN网络中的各个中间设备,不仅能有效检测SDN当中的中间设备绕过攻击,也能很好地预防此类攻击。

一种基于SDN的中间设备路径认证方法,包括以下步骤:

(1)控制器根据用户规则制定路径,路径上的每两个相邻设备Mi与Mi+1之间共享一个密钥keyi,i+1,路径上最后一个中间设备Mn与出口交换机E之间共享密钥keyn,e,其中1≤i<n;

(2)当有数据包经过网络设备时,若该设备为出口交换机E,跳到步骤(3),若该设备为某一中间设备,跳到步骤(4);

(3)通过自身的多级流表,模拟多段标签认证算法,若认证通过,跳到步骤(11),反之跳到步骤(10);

(4)判断数据包是否设置了确定性标签dtag,若为真,跳到步骤(5),反之,跳到步骤(6);

(5)调用标签认证算法TAGVERIFICATIONmd(·)验证确定性标签dtag以及或然性标签ptag,若通过验证,跳到步骤(6),反之,跳到步骤(10);

(6)通过中间设备内部功能对数据包进行处理,生成确定性标签dtag并写入数据包头;

(7)判断下一跳是否是出口交换机,若是,跳到步骤(8),反之,跳到步骤(9);

(8)调用第一标签生成算法TAGGENERATIONeg(·)生成或然性标签,写入数据包后跳到步骤(11);

(9)调用第二标签生成算法TAGGENERATIONmd(·)生成或然性标签,写入数据包后跳到步骤(11);

(10)丢弃数据包,并告警通知用户;

(11)将数据包送往下一跳。

本发明需在每个数据包头写入标签,标签分为两个部分:确定性标签和或然性标签。确定性标签(Deterministic Tag,dtag)用于标记数据包由中间设备的处理状态,消除数据包的转发歧义。或然性标签(Probabilistic Tag,ptag)用于提供安全性,确保数据包按照用户规则指定的顺序通过各中间设备。本发明采用分布式的方法进行标签的生成和认证:每个中间设备首先认证标签的正确性,即数据包是否经过的上一个中间设备是否正确,然后生成自己的标签并写入数据包,该标签将进一步地在下一个中间设备或者出口交换机上得到认证。

本发明在每个中间设备上增添两个模块:标签生成模块和标签认证模块。在出口交换机上,将部署标签认证模块的相关规则。考虑到出口交换机只能进行匹配-转发的操作,中间设备则可进行加密等复杂运算,因此涵盖到出口交换机的生成和认证算法与单纯涵盖中间设备的算法均会有所不同。

步骤(1)中,这些密钥由控制器在路径生效前分发给各个设备并保存。

对于运行在出口交换机E,首先我们对交换机上的匹配-转发规则进行如下形式化:

D:B→ACTION

其中D表示数据包中的某个域,根据D可以确定唯一的采样函数SampleD(·)。B表示用于匹配的比特串,ACTION则表示匹配成功后交换机执行的动作。上式的完整语义,表示如果SampleD(P)=B,交换机就执行动作ACTION。一个流表就是由多个上述规则构成的集合,而一个交换机上可以有多张流表。

步骤(3)中,所述的多段标签认证算法,可以通过设置多级流表上的规则,通过匹配-转发操作模拟实现,具体如下:

Table0:

Tablej:

Table j+1×2l:

Table j+(k-2)×2l:

Table j+(k-1)×2l:

其中,Di表示第一标签生成算法中函数Samplei(·)采样的域,B表示输入的用于匹配的比特串,j表示当前流表的序号,函数表示采样函数Samplei(·)的采样长度,k表示样本数量,表示散列值进行Shuffle操作后在包头中所占的域,switch to操作表示跳转至某一序号的流表,forward表示将包发往下一跳,算子计算一个采样函数Samplei(·)的采样长度。

步骤(5)中,所述标签认证算法TAGVERIFICATIONmd(·)的具体运行过程如下:

(5-1)读取数据包P中的确定性标签dtag,判断dtag是否合法,即验证

若满足该方程,则进入步骤(5-2),若不满足该方程,则返回非真值;flowtags为生成带有确定性标签数据包的方法;

(5-2)根据dtag,Mi可知其上一跳中间设备Mi-1,可计算:

其中,ptag′为上一跳中间设备应该正确标记的或然性标签,Sample(P)为采样函数;

(5-3)读取数据包P的或然性标签ptag,若ptag,ptag′满足:

ptag=ptag′

则验证通过并跳到步骤(6),反之,则跳到步骤(10)。

步骤(6)中,中间设备调用flowtags应用生成确定性标签并写入数据包头。flowtags方法由S.K.Fayazbakhsh(Enforcing network-wide policies in the presence of dynamic middleboxactions using flowtags,in NSDI,2014年)等人提出。

步骤(8)中,所述第一标签生成算法TAGGENERATIONmd(·)在中间设备Mi且其下一跳设备不为出口交换机(1≤i<n)上运行,具体如下:

(8-1)按照flowtags应用,生成带有确定性标签的数据包

(8-2)计算当前中间设备的或然性标签ptag:

并将ptag写入数据包头。

步骤(9)中,所述第二标签生成算法TAGGENERATIONeg(·)在中间设备Mi且其下一跳设备为出口交换机上运行,具体如下:

(9-1)按照flowtags应用,生成带有确定性标签的数据包

(9-2)采集k+1个不同样本,这些样本的采样位置不能重合,采样长度可以不同:

S0=Sample0(Pdtag),S1=Sample1(Pdtag),...,Sk=Samplek(Pdtag)

(9-3)计算后k个样本的散列值:

其中,Hk为第k个样本的散列值,Hashkey(·)为以key为运算参数的单向散列函数,Sk为采样的第k+1个比特串;

(9-4)连接这些散列值得到一个比特串H:

H=H1||H2||....||Hk

(9-5)通过重排函数Shuffle计算当前中间设备的或然性标签ptag:

ptag=Shuffle(H,Hash(S0))

并将ptag写入数据包头。

本发明有以下的有益效果:

1、本发明第一次提出了能够有效防御SDN下中间设备绕过攻击的解决方法,此前的网络检测和网络路径管控方法则不能对该攻击做出有效的应对。

2、本发明以包为粒度,对网络流进行细粒度的检测,确保了没有任何一个能够违反用户制定的路径规则。

3、本发明能做到实时的包检测,在攻击数据包实际生效之前进行阻止。

4、本发明引入的检测开销局限在数据平面,而不会降低控制平面上的效率。这是由于本发明不要求交换机将数据包的信息上报给控制器,节省了宝贵的控制平面上的带宽资源。

5、本发明能有效抵抗懦夫攻击(Coward-attack),此类攻击的攻击者只有在确保不会被检测到的情况下才会发动攻击。然而由于本发明能进行细粒度,实时性的检测,懦夫攻击显然是无效的。

6、本发明很好的兼容了现有的SDN设备。以往的SDN路径认证方法要求在交换机上进行密码学运算,难以在现有的设备上进行部署。本发明则将密码学运算局限在中间设备上,在交换机上则通过匹配-转发操作进行模拟。

附图说明

图1为本发明基于SDN的中间设备路径认证方法的流程示意图。

具体实施方式

本发明运行在SDN环境。SDN环境的搭建,本发明采用了Open vSwitch为交换机,以OpenDaylight为控制器,在Mininet当中进行模拟运行。中间设备则采用当今使用最为广泛的开源IPS/IDS—Snort,其开源的特性方便对其进行模块添加。在实施本方法前,应在SDN中安装flowtags应用。需要注意的是,下文当中的数学符号,在“发明内容”一节中已有约定,此处不再说明。

如图1所示,一种基于SDN的中间设备路径认证方法,具体包括如下步骤:

S01控制器根据用户规则制定的路径,在每条路径上相邻的中间设备Mi,Mi+1(1≤i<n)之间通过加密信道分发共享密钥keyi,i+1。在每条路径上的最后一个中间设备Mn上,分发密钥keyn,e。

S02每当有数据包经过网络设备时,若该设备为出口交换机E,跳到S03,若该设备为某一中间设备,跳到S04。

S03通过自身的多级流表,模拟多段标签认证算法。若认证通过,跳到S12,反之跳到S11。

多段标签认证算法TAGVERIFICATIONeg(·),可以通过将流表设置成如下形式来实现:

Table0:

Tablej:

Table j+1×2l:

Table j+(k-2)×2l:

Table j+(k-1)×2l:

S04首先判断数据包是否设置了dtag,若为真,跳到S05,反之,跳到S06。

S05调用标签认证算法TAGVERIFICATIONmd(·)验证dtag和ptag,若通过验证,跳到S06,反之,跳到S11。

在中间设备Mi(1≤i≤n)上运行的标签认证算法TAGVERIFICATIONmd(·),具体如下:

a.读取数据包P中的dtag,判断dtag是否合法,即验证

若满足该方程,则进入步骤b。若不满足该方程,则返回非真值。

b.根据dtag,Mi可知其上一跳中间设备Mi-1,可计算:

c.读取数据包P的ptag。若ptag,ptag′满足:

ptag=ptag′

则验证通过。反之,则发出警告通知用户等待处理,或丢弃该数据包

S06中间设备内部功能对数据包进行处理。

S07中间设备调用flowtags应用生成dtag并写入数据包头。

S08判断下一跳是否是中间设备,若是,跳到S09,若是出口交换机,跳到S10。

S09调用第一标签生成算法TAGGENERATIONmd(·)生成ptag,写入数据包后跳到S12。

在中间设备Mi且其下一跳设备不为出口交换机(1≤i<n)上运行的标签生成算法TAGGENERATIONmd(·),具体如下:

a.按照flowtags应用,生成带有确定性标签的数据包:

b.计算ptag:

并将ptag写入数据包头

S10调用第二标签生成算法TAGGENERATIONeg(·)生成ptag,写入数据包后跳到S12。

运行在中间设备Mn上的标签生成算法TAGGENERATIONeg(·),具体如下:

a.同TAGGENERATIONmd(·)算法的第一步。

b.采集k+1个不同样本,这些样本的采样位置不能重合,采样长度可以不同:

c.计算后k个样本的散列值:

d.连接这些散列值得到一个比特串:

H=H1||H2||....||Hk

a.计算ptag:

ptag=Shuffle(H,Hash(S0))

并将ptag写入数据包头。

S11丢弃数据包,并告警通知用户。

S12将数据包送往下一跳。

作为一个具体的测试实例,本发明在DellPowerEdge R730服务器上做了实际测试。测试中,每个中间设备实例—Snort都运行在一个内存8G,占用2个CPU的虚拟机当中。对于Hashkey(·),我们采用了FNV-1a哈希函数作为实例。我们选择了24位在TCP/IP协议中变化最频繁的二进制位作为采样点,并设置了ptag的长度为10位。

测试在SDN网络中发送了5000个实际网络中抓取的数据包。我们统计ptag的分布后,发现无论是TAGGENERATIONmd(·)还是TAGGENERATIONeg(·)算法,其生成的ptag分布均匀,出现频数为4的ptag最多,每个ptag平均出现次数在4-5之间,这和理论上的预估为是相当接近的。这种一致性,说明了ptag分布均匀,不易被攻击者以基于出现频率的方式攻击。对运行时间的统计显示,添加本发明处理模块的中间设备处理单个数据包的平均时间为4.9ms,和添加前的4.6ms对比,时间开销只增加了6.5%。而在出口交换机上,并未统计到有明显的延迟引入。

以上的测试表明,本发明不仅是可行的,而且同时具备了安全性、可靠性和实用性,让实际问题得以解决。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1