孙鹏
(中国电子科技集团公司电子科学研究院,北京100041)
摘要:当前互联网上出现越来越多的基于源地址欺骗的网络攻击,这类攻击很难被追查,对网络安全造成巨大威胁。在传统网络条件的限制下,实现源地址验证会遇到很多困难。得益于软件定义网络( SDN)带来的网络革新,网络控制变得更加便捷。面向SDN架构,利用可编程控制器对源地址验证方法进行重新设计和实现,提出两种面向SDN的源地址验证方法:一种是将无状态的lP地址与底层不可变标记如MAC地址、端口号绑定起来,在交换机中形成(MAC地址,端口号,源lP地址)三元组流表的过滤规则;另一种是利用最短路径算法计算路由路径,向路径上交换机下发(源lP地址,目的lP地址,入端口,出端口)四元组流表作为过滤准则。最后进行仿真实验,比较两种方案的实验结果。
0 引言
软件定义网络( Software-Defined Networking,SDN)诞生于美国斯坦福大学的Clean Slate项目,以MICKE-OWN N教授为首的团队提出OpenFlow概念…用于校园网的试验创新,将传统的控制平面和转发平面相分离,以网络操作系统的形式和自由可编程的方法统一管理网络设备,提高网络控制灵活性、开放性,符合未来互联网的发展需求,使其一经提出便成为学术界和产业界的热点概念。
传统网络转发基于TCP/IP协议栈,源主机将自己的源地址填入报文首部,路由器只根据目的地址进行转发而不对源地址的真实性做出检查。这使得攻击者很容易假冒他人身份,向报文中填人虚假的源地址,发动诸如DDoS攻击、IP地址欺骗、TCP SYN flood攻击等网络攻击,源地址验证技术便是解决这个问题的方法之一。
在此背景下,研究SDN工作机制,将SDN与现有技术结合是发展SDN的一个重要方向,将源地址验证技术在SDN上实现,对于SDN的推广和网络安全具有积极意义。
1 源地址验证相关技术
目前学术界已提出多种源地址验证技术,依据设计方法和工作思路的不同,主要分为源地址端到端验证机制、源地址路径过滤验证机制和事后追踪机制。
1.1 源地址端到端验证机制
此类验证机制主要是在端节点处对源地址进行验证工作,使得报文接收端在接收报文时就能验证源地址的真实性,可以通过在报文的发送端添加签名,在接收端根据签名验证报文源地址真实性。典型的代表技术有IPSec,APPA和SPM等。
1.2源地址路径过滤验证机制
此类验证机制主要是在数据包转发路径上依据不同的准则进行验证工作,转发路径上的中间节点如路由器、交换机等具有源地址验证、过滤的功能,在接收端未受到伤害时将攻击报文清除。典型的代表方法有Ingress Filter,uRPF( unicast Reverse Path Forward-ing) ,DPF( Route-Based Packet Filter), HCF'7]( HopCounter Filter)和SAVA( Source Address ValidationArchitecture)等。
1.3事后追踪机制
此类机制无法保护终端不受网络攻击,但在攻击后,可以对攻击包的源头进行溯源,定位攻击报文的真实源头,主要采用报文标记、路由器H志等方式找到攻击报文源头,典型代表有PI,PPM和DPM等。
1.4本文用到的验证方法
本文使用的两种方法均属于源地址路径过滤验证机制,基于域内源地址验证架构,在自治域内,在报文传播路径上用不同的过滤规则对报文进行过滤,以达到源地址验证目的,两种方案如下。
方案1绑定MAC地址和IP地址。
如今比较流行的联网方式是把主机通过局域网组织在一起,然后通过交换机、路由器和Internet相连,这样就出现了如何识别用户、防止盗用的问题。由于IP地址只是逻辑上的标识,可以随意修改,不能用来标识用户;而MAC地址是物理上的标识,固化在网卡里,是
很难被冒用的。针对IP地址时常被盗用和伪造的问题,将IP和MAC地址绑定起来便是解决的办法之一,事先获得主机的IP地址、MAC地址和路由器接口信息,将无状态的IP地址和底层的MAC地址、交换机Port绑定起来,形成(MAC地址,Port,IP地址的)过滤表项,根据过滤表对伪造IP源地址报文进行过滤。其中Port为交换机端口,即使有人盗用了IP地址和MAC地址,他也不可能拥有真实的路由连接端口,从而在物理通道上隔离盗用者。
如图1所示,交换机事先获得主机A的源地址IP-src,MAC地址以及主机与交换机相连的端口Portl,在交换机中添加一个( MAC1,Portl,IPsrc)过滤表项,当真实源地址的报文到达交换机时,检查过滤规则,验证源地址为真实,通过报文并转发;当伪造源地址报文到达交换机时,与过滤表项规则不匹配,验证失败,丢弃不匹配的报文。
将MAC地址和IP地址绑定,实现起来很简单,配置容易,不过当一台主机重新申请IP地址,或者设备更换网卡,造成IP地址和MAC地址变动时,需要向网络管理员提交更改后的地址,网络管理员做好登记,再手动进行更改绑定表,耗时且步骤繁琐。现有网络体系下,很难自动快速地更新( MAC,Port,IP)绑定表,这是该方案的不足之处。
方案2计算路径过滤。
在域内收敛的情况下,从某个源主机发往某目的主机的报文所走的路由路径是一定的,通过获取路由接口信息和邻居互联信息,进行路由计算,事先计算出域内某一台主机到另一台主机的路径,而伪造源地址的报文所走路径与事先计算的路径并不相符。如图2所示,从主机A发往主机B的数据包,计算出其所走的路由路径为:主机A→交换机1→交换机2→交换机3→主机B,当主机C伪造主机A的IP地址向主机B发送数据包,所走实际路由路径为:主机C→交换机4→交换机2→交换机3→主机B。对比可以发现,伪造源地址数据包所走路径和计算好的正确路径并不相符,因此在转发路径上可以用某种过滤规则过滤掉。
这是一个轻量级且效果显著的方案,过滤报文所增加的工作仅仅是在路由器中增加一条过滤规则和多进行一次或者两次路由表查找。如果仅仅是在单个路由器部署,过滤效果会很有限,因为一个路由器连接的链路有限,如果在域内多个路由器部署,对于抵抗DDoS攻击,效果将会十分明显,在自治域内17%交换机部署这个方案,可有效过滤80%的源IP地址伪造数据包。
在现有的网络体系架构下实现这个方案还面临着诸多困难。计算路径所需要的全局拓扑信息、链路状态信息、路由过滤表等,由于各个厂商的路由信息管理库规范不统一,从现有路由器上获取这些信息变得十分困难;计算路径后,配置路由表规则需要人工手动远程登录路由器,用命令行的方式配置路由表,效率低下且易出错;当域内主机或者交换机发生变化时,也缺乏一个及时有效的自动更新路由表的机制。因此,在现有的网络体系架构下,计算路径过滤方案实现起来难度很大。
2 SDN特点及两个方案的阐述
2.1 SDN的特点
SDN将网络设备的控制面和转发面分离,控制面独立出来成为单独的网络控制器,其上运行网络操作系统,向上为应用层提供可编程接口API,从而构建开放的可编程网络环境;向下通过南向接口和虚拟化技术,统一管理网络设备。图3所示的SDN架构图中,交换机利用基于安全连接的OpenFlow协议与远程控制器通信。
基于OpenFlow的交换机需要维护流表这样一个重要的部件,其功能是进行数据包快速匹配和转发,相当于传统交换机的路由表。流表有包头、计数器、动作、优先级、超时等规则,包头进行相关的规则匹配,包括人端口、IP地址、MAC地址、以太网类型、VLAN ID和TCP端门号等,计数器进行字节统计工作,动作则包括丢弃、转发、排队和设置域等。控制器上运行网络操作系统,常见的控制器有NOX,POX,Beacon,Floodlight等(下文以POX为例进行讲解)。
SDN这种全新的网络架构,如何实现上述两种源地址验证方案,能否克服两方案的不足,又能带来哪些优势呢?
2.2方案1:绑定MAC地址和IP地址
1)要进行MAC地址和lP地址绑定,首先要获取各个主机MAC地址、IP地址和交换机接口Port信息。SDN -大优势就是拥有全局视图能力,POX控制器通过监听Link_Event,Host_Event,Connection_Up,Connec-tion_Down事件,进行链路探测,发送LLDP报文,获取链路连接信息,保存各个主机和交换机相连的Port信息保存;通过ARP洪范机制进行MAC地址自学习,获取各个主机MAC地址;通过数据包第一次到达交换机的Packet_in消息,记录下各个主机的IP地址。
2)在POX控制器获取了以上信息后,用元组形式的数据结构在控制器中记录下每台主机的MAC,IP,Port信息,从而以Flow_mod的形式下发形式为( MAC,IP,Port)的三元组流表至交换机。
3)当同主机数据包再次到达交换机,进行流表查找和匹配工作,如果与( MAC,Port.,IP)形式的流表不匹配,则丢弃报文,若匹配则进行转发。方案1流程如图4所示。
在SDN架构下,该方案实现简单,最大的优势是POX控制器可以监听链路状况,在有主机加入,lP地址变更、MAC地址变更和交换机变更等情况时,通过监听的Link_Event,Host_Event,Connection_Down等事件可以得到及时上报,并在控制器中自动更新( MAC,Port,IP)表。
2.3方案2:计算路径过滤
这个方案主要包含路由计算和流表生成两个部分。POX控制器通过监听事件Link _Fvent,Host_Event,Con-nection_Up,Connection_Down,获取域内整个拓扑路由器邻居互联信息,记录每个交换机、相邻交换机及相邻交换机对应的连接端口;以最短路径算法为基础,计算出自治域内任意两个主机之间的路由路径,并给出该路径上经过每个交换机入口及对应的出口,形式为:host→( port,switch,port)→…→host。其中,host为主机,port为交换机端口,switch为交换机,向路径上的交换机下发形式为( IPsrc,IPdst,In_Port,Out_Port)的四元组流表,以此作为过滤规则,过滤伪造源地址报文。
路由计算采用最短路径Floyd算法,算法过程如下。
1)将拓扑中各交换机依次编号为1,2,3,…,n,计算邻接矩阵Do,其中,dij代表交换机i到交换机j的距离,如果两交换机之间没有链路相连通,则令doij=∞。
2)对于每一对交换机i和j,看看是否存在一个节点m使得从i到m再到j比已知路径dm-1ij更短,如果有则更新它,将最短路径记为dmij,相应递推式为
每当计算一个节点,就记下它所走的路径,当算法结束时,矩阵Dn元素dij表示交换机i到交换机j的最短距离。
Floyd算法计算核心代码如下所示。
代码中:“d[i][j]”代表交换机i到交换机j的距离;“switchs”为路由器顶点列表;“path”为路径矩阵。
其中,对于矩阵D1,D2,…,Dn,对角线的元素都无需计算,并且,对所有的i=1,2,…,n,dm-1im=dmim,dmmi=dm-1mi,所以在矩阵D的计算中,第k行和第k列均无需计算,在矩阵Dm中,不仅是对角线元素无需计算,第m行和第m列也无需计算,所以总共仅需计算(m-1)×(n-2)个元素。
Floyd算法必须计算,n个矩阵D1,D2,…,Dn,其中每个矩阵包含n2个元素,因此总共要计算N3个元素,并且每一次计算都要做一次加法运算和一次取较小值运算,所以算法时间复杂度为0(2n~3),计算初始化路径矩阵“path[][]”时间复杂度为O(n~2),算法空间
复杂度为O(n~2),Floyd算法可以用迭代Ⅳ次的Dijk-stra算法来代替,但Floyd算法实现起来代码比Dijkstra算法精简一些。
3)流表生成和下发。根据源地址和目的地址计算出路径,向路径上的交换机下发( IPsrc,IPdst,In_Port,Out_Port)形式的流表。
方案2不仅计算路由还生成流表,将两者结合起来,一步到位,生成的流表不仅可以实现路由转发,功能还可以验证过滤源地址。相比于方案1,能进行路由选路算法,功能更加完备。
3 实验和结果分析
本文针对这两个源地址验证方案,进行仿真实验,实验环境如下:PC为13 M330@2.13 CHz CPU,内存2G;操作系统为Ubuntu 12. 04 LTS;Python 2.7,POX 0.2carp,Mininet 2.1.0。
本文使用虚拟化网络仿真平台Mininet,它可虚拟数百个节点的虚拟网络,节点类型和拓扑结构可以自定义,并且支持OpenFlow协议,具体网络拓扑如图5所示。
在POX控制器上运行针对两个方案编写的Py-thon代码,以发包脚本和Mininet自带发包机制为输入,进行3种测试:1)各主机之间正常发送IP包;2)伪造拓扑内主机源地址发送IP包;3)随机伪造源地址发送IP包。将测试的10次数据取平均值。
表1所示为两个方案在数据包初次到达和数据包正常转发的时延情况,从表1中可知,两方案在数据包初次到达比正常转发延时分别长1. 001 ms和3.215ms,其原因为初始时交换机没有流表,需要将数据包以Packet_in的形式提交至控制器,控制器依据相应策略生成流表,之后数据包正常转发;数据包初次到达,方案2比方案1时延长2. 542 ms,由于方案2数据包初次到达交换机,被移交至控制器,控制器解析数据包包头,提取源目的地址,进行Floyd选路算法,而方案1控制器中只需进行统计、生成流表,无需进行路由选路,所以时延稍小。
比较两种方案生成流表数目,如图6所示,从图中可以看出,方案2比方案l生成流表数目多,是因为方案l流表数目和主机数目相关,本实验拓扑主机数目较少,但当整个域内主机数目增加时,流表数目将会相应地增加;方案2流表数目在各交换机之间相差大,交换机S2,S3相比于交换机Sl,S5更多,是由于选路算法导致,居中的交换机在多条路由路径上,并且还要生成反向流表,因此流表数目较多;在域内主机数目逐渐变大时,方案1流表数目将会超过方案2。
4结束语
本文利用现有的两种源地址验证方法,在SDN架构下进行重新设计和实现,利用可编程控制器POX和虚拟化实验平台Mininet进行验证,根据实验结果对两种方案进行对比。方案1,在域内主机数量增多时流表数目会明显增大,需要设计新的流表下发策略,在关键节点下发,减少流表规模;方案2,在网络节点复杂时可能出现误判、漏判等,需要优化选路算法,这些将是后续工作的重点。
SDN还处于发展初期,架构、协议、接口、应用等都处在研究阶段,本文将传统源地址验证技术与SDN相结合,在SDN架构上实现源地址验证,以期为SDN的发展做一点有益的探索。
上一篇:机载高速互连网络适航审定要求分析
下一篇:返回列表