时间:2024-05-04
张昭俊,韩 俐
(天津理工大学 计算机科学与工程学院,天津 300384)
近年来,新型网络威胁呈现出全球蔓延态势,新型攻击更隐蔽、手段更先进、持续性更强,要求网络安防系统的响应时间更短。传统防护手段,如防火墙、安全网关、安全软件等静态被动式防御手段,具有对威胁感知天然的滞后性和局限性,只有当网络攻击已经或正在发生才能采取防范行动,难以应对大规模有组织、有意图的突发性攻击。当前网络环境中,安全防御所需的花费与攻击者攻破网络的努力严重不对等。防御者需要花费大量的资源为系统添加各种安全防御手段,而攻击者只需找到系统中存在的某一个漏洞,就能发动有效的攻击,使得防御者始终处于不利地位。为应对传统网络安全防护的被动局面,移动目标防御(moving target defense,MTD)[1]作为一种颠覆性的安全防御理念,尝试改变游戏规则的主动防御机制被提出。MTD的思想是通过动态改变基础设施属性,持续地改变攻击面,使网络配置具备随机性和动态性。MTD包含多种实现方式,其中包括对软件多样性的实现[2]、底层指令的变化[3]和网络层的移动目标防御[4]等,能自动地改变一个或多个系统属性,从而使系统攻击面对攻击者是不可预测的。攻击者必须调用大量的资源,分析、探测不断变化的攻击面来获取有用信息,且探测和分析难度随着时间的推移而增大。这无疑增加了攻击者对网络信息获取的复杂度,增加攻击者的攻击难度和代价,打破了现有攻防双方信息的不对称性,使攻防天平向防御方倾斜,让攻击者和防御者处于同等地位,有效提升网络空间安全性。
软件定义网络(software defined network,SDN)[5]是斯坦福大学Clean slate实验室提出的一种新型的基于软件定义的网络架构及技术。SDN的设计理念是将网络的控制平面和数据转发平面进行分离,逻辑上的集中控制层面具备网络全局视角,进行资源的全局调配和优化,提升网络控制的便捷性。SDN重构传统网络架构及安全体系,可以实现高效网络管控和资源调度,其控制与转发平面分离、集中控制、开放可编程、流表转发等特性,有利于提升安全防护灵活性、智能性和协同性,推动网络能力便捷调用,支持网络业务创新,给网络安全领域的发展带来了新机遇。
SDN架构虽然有很多优点,但其所面临的安全性问题成为限制SDN广泛应用的关键因素,数据平面的网络设备只是简单的转发元素,容易引发诸多安全问题[6-7]。在OpenFlow协议[8]中,转发设备需要在控制平面下发流规则前进行数据缓存,因此容易受到存储器饱和攻击。在遭受DoS攻击时,流表存储空间迅速耗尽,后续数据流被丢弃,导致拒绝服务。对OpenFlow交换机的窃听和篡改攻击,非法篡改控制器下发的流规则,导致流规则不一致,丧失可靠性,使网络不稳定。伪交换机长期存在网络中,可以窃听用户通信数据,截获用户口令,错误或拒绝执数据流处理规则,造成拒绝服务攻击。
端口跳变是一种典型的移动目标防御技术[9],传统的端口跳变技术往往是通过算法不断地改变用户数据报协议(user datagram protocol,UDP)/传输控制协议(transmission control protocol,TCP)的端口号,通信双方不断地通过新端口建立连接,使攻击者无法探测到网络通信双方实时有效的通信端口,导致攻击失效。但是这种防御方式只能应对针对终端主机的攻击,对交换机的攻击(如非法交换机的接入)不具备任何防御能力。
该文将MTD和SDN技术优势有机结合,提出基于OpenFlow交换机端口动态混淆的移动目标防御机制,增强网络设备配置参数的随机性和动态性,实现数据在SDN网络架构下的通信安全,增加攻击者的实施难度,降低攻击成功率。
针对计算机网络信息面临巨大的安全威胁,端口跳变技术应运而生。Jajodia等[10]定义了移动目标防御中攻击面的相关概念,并提出了空间随机化、指令集随机化、数据随机化等多种攻击面移动方法。Hong等[11]总结了3种移动目标防御策略,包括混乱化、多样化和冗余化。Kampanakis等[12]提出了SDN架构下针对网络映射和侦察的解决方法。该方法通过对恶意数据报文进行检测,并对这些恶意数据报文进行随机化处理操作。但是该方法建立在有效识别出恶意数据报文的基础之上,如果没有识别出攻击者的恶意数据报文,那么该方法将不会产生任何有效的防御效果。G.Badishi等[13]为缓解DoS攻击,提出了随机端口跳变(RPH)算法,其主要思想是通信双方之间存在两条通信链路,一条用于双方的数据通信,另一条用于传递通知进行端口跳变的ACK消息,此方法中用于跳变同步的ACK消息暴露在通信链路中,容易被攻击者截获和篡改,导致跳变不同步,造成通信中断。Kousaburou Hari[14]通过分析ACK消息丢失或被截获等不同情况,提出了改进的RHP算法,在通信双方部署两套随机端口跳变策略,其中一套策略遭受攻击后,通信双方仍能通过备用端口进行通信。范晓诗等[15]提出了可变时隙端口跳变算法,通过在正常传输条件下延长端口传输时隙,减少端口跳变造成的通信开销,当发现可疑入侵行为时则加快跳变的频率,达到抵抗攻击的效果。Lee等[9]为了缓解DoS/DDoS攻击所带来的危害,提出了一种端口跳变技术,其主要思想是服务器和交换机之间共享一个秘密,保证合法数据流的服务质量水平在可接受范围内的前提下,服务器通信所使用的TCP/UDP端口号随时间和共享秘密的变化而变化。唐秀存等[16]将移动目标防御中的端口跳变技术应用到SDN网络中的DoS攻击防御中,将服务端的端口跳变模块前移到SDN控制器,SDN控制器作为DoS攻击的过滤网关,检查网络连接是否符合当前时隙开放端口,控制数据流进入网络,抵御DoS攻击。胡毅勋等[17]提出了基于OpenFlow的网络层移动目标防御方案,其主要思想是域内通信的网络流量在所经链路上的每一跳交换机都进行源和目的IP地址的改变,实现网络地址的逻辑移动。域间通信流量使用端口跳变,实现跨域通信节点的隐藏。
基于上述事实,SDN与MTD相结合能够有效地防御外部攻击者对网络的攻击和破坏,但是对于SDN内部数据转发层的核心设备——OpenFlow交换机的安全防御却相对较少,SDN内部OpenFlow交换机的安全问题日益突出。该文提出的基于OpenFlow交换机端口混淆的移动目标防御机制,能有效防范伪交换机接入网络造成的破坏。
控制器与OpenFlow交换机初次连接时进行端口变换值和端口变换值生存时间的初始化。控制器和交换机建立连接时,双方在握手过程中通过系统预设的值对端口变换值及端口变换值生存时间进行初始化,同时将真实端口号和变换后的端口号及其生存时间存储在端口变换表中,端口变换表结构如表1所示,以保证控制器和交换机进行端口混淆的同步性和数据转发端口的一致性。
端口变换表主要包含4部分:交换机ID(dpid)、真实端口号(port)、端口变换值(tport)和端口变换值生存时间(pst)。交换机真实端口号是交换机创建时系统默认端口号,端口变换值是通过端口混淆算法生成的混淆端口值,用于在流表项中显示的output端口号。端口变换值生存时间是当前生成的端口变换值的存在时间,决定是否对当前端口变换值进行新一轮混淆。
控制器每次处理Packet_in消息进行规则生成时,根据正确的数据转发端口在端口变换表中查找对应的端口变换值,随后生成相应的流规则,下发到交换机。同时,相应端口号的生存时间衰减。OpenFlow交换机端接收到控制器下发的流规则后,根据流规则中的变换端口号在端口变换表查找到对应的数据转发端口,并执行流规则进行数据转发处理,同时将端口的生存时间衰减。当控制器和交换机端口的生存时间为零,则依据刚处理的数据报文中的相应信息,调用端口混淆算法生成新的端口变换值并存储在端口变换表中,端口变换值的生存时间也一并更新。随后对端口混淆前相应流规则进行删除,确保数据流能根据混淆后的端口信息进行正确转发,保证网络通信正常。控制器端和交换机端处理流程如下所示。
控制器端处理流程:
(1)接收到Packet_in消息。
(2)查找端口变换表,根据正确转发端口确定变换端口。
(3)端口生存时间衰减,判断其是否为零,不为零跳转到步骤(7)。
(4)提取数据流信息,流规则生成并设置超时时间,通过flow_mod消息下发到交换机。
(5)调用2.3节端口混淆算法生成新的端口变换值。
(6)更新端口变换表,跳转到步骤(8)。
(7)流规则生成并通过flow_mod消息下发到交换机。
(8)结束。
交换机端处理流程:
(1)接收到控制器下发的flow_mod消息。
(2)端口变换表中查找相应的端口号。
(3)根据查找到的端口号执行相应的流规则,端口生存时间衰减。
(4)判断端口生存时间是否为零,不为零则跳转到步骤(9)。
(5)提取数据流缓存信息,调用2.3节端口混淆算法生成新的端口变换值。
(6)更新端口变换表。
(7)删除过期流表项。
(8)流规则超时删除对应流表项。
(9)结束。
端口混淆对控制器和交换机之间混淆同步性要求较高,控制器和交换机之间必须使用相同的混淆算法和混淆规律,以及在进行混淆时使用的种子信息,从而保证网络通信正常。否则很容易造成控制器下发的流规则失效,网络通信中断。
传统的端口跳变技术中主要有严格的时间同步机制[9]、ACK报文同步机制[12]和使用基于时间戳的同步方式[18]。严格的时间同步机制在网络拥塞状态和高时延状态下将失去作用,导致跳变不同步,网络通信异常。ACK报文同步机制将同步信息封装在ACK报文中,ACK报文易丢失或被攻击者截获。Zhang等[19]提出了基于端口跳变的SDN环境中DoS缓解机制(PHS-DM),利用时间戳反馈机制实现端口的同步跳变,但此方法部署难度大,实现复杂。
该文提出的端口混淆机制中控制器和交换机之间的同步既没有使用严格的时间同步机制,也没使用ACK报文同步机制,而是采用控制器下发给交换机的流规则消息flow_mod消息的数量实现同步问题。
在控制器与交换机在建立连接过程时,双方通过系统内置的默认值对相应的端口变换值生存时间进行初始化。控制器进行流规则生成时,根据数据转发时交换机的真实端口号查询端口变换表中的变换端口号,随后将此端口变换值生存时间减一,并检查是否为零,如果为零,提取数据包中相关信息,将生成的含有变换端口号的流规则通过flow_mod消息下发到对应的交换机,调用端口混淆算法,生成新的端口变换值,更新端口变换表中的端口变换值及其生存时间。交换机接收到控制器下发的包含流规则的flow_mod消息后,根据流规则中的端口号查找端口变换表,得到真实的端口号,并根据端口号进行数据转发,随后将端口的生存时间减一,判断是否为零,如果为零则根据交换机内缓存的数据流信息提取端口混淆算法中的种子信息,进行端口混淆,更新端口变换表中的端口变换值和生存时间。
该文提出的利用交换机和控制器之间的flow_mod消息实现双方端口混淆同步方法,省却了双方的同步开销。通信信道内只有控制器与交换机间的控制消息,没有其他的数据流干扰,有效降低了flow_mod消息的丢失率。此外,部署与实施更加方便灵活。
控制器和交换机根据进入数据流信息生成端口变换值Portupdate。Portupdate=f(IPseed,Portold,Portseed),其中f是伪随机数生成算法。Portseed为以数据报文中源、目的端口号等信息所生成的端口种子,IPseed为从数据报文中提取出的源、目的IP地址等信息所生成的地址种子。其流程图如图1所示。
图1 端口混淆算法流程
对于数据报文中源IP地址为IPsrc=192.168.1.X,目的IP地址为IPdst=192.168.2.Y的端口变换过程如下:
(1)计算端口种子Portseed,如式(1)所示,其中Portold为上一次端口变换后的通信端口,Portsrc为此次端口变换的数据报文中的源端口号,Portdst为此次端口变换的数据报文中的目的端口号。
Portseed=Portold(Portsrc+Portdst)mod65536
(1)
传统的端口跳变技术中65 536个可能端口中有1 024个标准端口被占用[20],而交换机端口混淆中不存在这种现象,在端口混淆中的可用端口个数为65 536个。
(2)计算IP地址种子IPseed,如式(2)所示。
IPseed=(X+Y)(Portsrc+Portdst)mod256
(2)
(3)根据以上计算的端口种子Portseed和IP种子IPseed计算得出端口变换值Portupdate,如式(3)所示。
Portupdate=(IPseed×Portold+Portseed)mod65536
(3)
(4)端口变换值的检测。检测新生成的端口变换值是否已经被其他策略使用,如已被使用,则将此端口号作为Portold,重新调用端口混淆算法进行新的端口号的生成,直到不再重复为止。
端口混淆算法充分利用网络中通信双方的数据报文中源、目的IP地址和端口号等信息作为端口混淆的种子信息,交换机每次进行端口混淆时种子信息是不确定的,混淆后端口是随机的,网络配置信息动态化、随机化变化。
伪交换机非法接入网络,控制器向交换机下发流表项时,流表项中包含的动作端口号是经过混淆算法计算出来的,伪交换机中不存在端口变换表和端口混淆算法,无法解析出正确的端口进行数据转发,攻击者必须在端口生存时间内计算出正确的端口号并进行转发才能长期潜伏在网络中造成更大的破坏。假设攻击者的计算能力为Sc,n为端口混淆时所有可用端口数量,端口生存时间为t,待处理数据流数为m,攻击者计算出真实端口的成功率R,则:
(4)
从式(4)中可以看出,端口的生存时间越短,当前网络中待处理的数据流越多,攻击者计算出真实端口号的成功率越低。
假设攻击者分析第i个端口时的计算开销为Scali,单个端口的计算开销为Scal,如果端口混淆算法计算所生成的端口号与交换机的真实端口号对应是顺序递增的,则攻击者的计算开销最小为:
(5)
如果通过端口混淆算法生成的端口号对应的交换机的真实端口号是逆序的,则此时攻击者的计算开销最大为:
(6)
综合式(5)、式(6)可知,攻击者的总体开销Ssum为O(n)≤Ssum≤O(n2)。
从系统安全性考虑,可以适当减小端口变换值的生存时间,加快端口变换速率,增强系统防御能力。此外,交换机动态进行端口混淆,在不同的时间内其转发端口也是不同的,攻击者很难确定下次数据转发的端口号,攻击者需要不停地计算转发端口,消耗大量资源,降低了攻击成功率。
使用MATLAB Performance Test测试框架对2.3节提出的端口混淆算法运行时间性能进行测试,解析基于类的测试得到的原始数据,对每一次算法运行时间绘制折线图,如图2所示。
图2 算法运行时间测试
MATLAB通过测量数据集是否达到统计目标决定运行次数,从图2的结果中可以看出,一共对算法进行了8次性能测试。其中前4次测试结果是预备代码[21],后4次测试结果是对代码的正式测试。对测试结果进行3阶拟合,可以明显看出正式测试与预备代码在运行时间上有着不同的分布,预备代码测试时间明显高于正式测试,随着预备代码,算法运行时间变短,正式测试代码运行时间趋于平缓。为避免代码在运行过程中的编译和优化对代码测试性能造成影响,剔除预备代码测试结果,对正式测试结果求均值得到统计意义上的结果,如图3所示。可以看出代码运行时间极短,端口混淆不会增加过多的数据处理时延,能有效满足当前数据传输的需要。
图3 算法运行平均时间
为了测试端口混淆主动防御机制的有效性,该文使用Mininet网络模拟器[22]模拟并搭建简易SDN网络测试网络环境,采用Ryu[23]作为SDN控制器。网络拓扑为两台主机h1、h2连接到同一台OpenFlow交换机,主机h1和h2进行通信。通过Mininet模拟器模拟实验网络环境,交换机初始化时默认使用的端口号为1和2,主机h1与h2通信,主机间能正常通信,查看交换机中流表,其结果如图4所示。
图4 交换机流表项
从图4中可以看出交换机s1中存在3条流表项,最后一条流表项为漏表项,用于将没有匹配到流表项的数据报文通过Packet_in消息上传到控制器,由控制器决定转发策略。前两条流表项为处理主机h1与h2通信的流规则,从中可以看出两条流表项中动作output的端口号均不是1或2,而是交换机中并不存在的端口号,两条流表项均正确匹配并转发数据报文,两主机正常通信。
伪交换机加入网络后,主机h1和h2通过伪交换机进行通信,图5显示的是伪交换机中的流表项。伪交换机中只有两条流表项,第二条为漏表项,第一条是针对主机h2发往主机h1的应答包的流处理规则,伪交换机不能正确解析出actions中的端口号,不能进行正确的转发,从而防止伪交换机对网络的破坏。
图5 伪交换机流表项
从以上实验结果可以看出,没有端口混淆防御机制的伪交换机不能正确解析出控制器下发的含有混淆端口号的流规则,无法根据流表项中的端口号获取网络拓扑,即使攻击者构造出流表项将所有通过伪交换机的流量发往某特定一链路或主机进行DOS攻击,由于无法获取网络拓扑相关信息不能进行有效的网络攻击。而部署端口混淆防御机制的交换机能正确解析出流表项中的端口号进行数据转发,网络通信正常。
针对软件定义网络中所面临的伪交换机安全问题,提出了通过动态混淆交换机端口号的方法实现移动目标防御的机制,该机制充分利用数据报文内IP地址和端口号信息作为端口混淆种子信息,使交换机进行端口混淆时具有充分的随机性。交换机和控制器间通过流规则下发次数实现端口混淆同步,不需要严格的时间同步,也不需要发送额外的同步报文,进一步增强了防御机制的安全性,增加了攻击者获取网络信息的难度,能有效地防范非法交换机对网络的攻击。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!