李传煌,唐晶晶,陈泱婷,雷睿,陈超,王伟明
(浙江工商大学信息与电子工程学院(萨塞克斯人工智能学院),浙江 杭州 310018)
近年来,互联网行业高速发展,网络技术被应用在金融、政务、交通等诸多领域。但互联网给生产生活带来极大便利的同时也带来了许多安全问题,形式多样的网络攻击层出不穷,分布式拒绝服务(distributed denial of service,DDoS)攻击、数据泄露以及渗透攻击等新型的网络攻击对提供计算、存储、网络服务的云计算等虚拟化网络环境构成了巨大的威胁。因此,如何依据目前的网络威胁有针对性地构建新型安全防御方案成为了亟须解决的问题。
端到端服务的交付通常需要多种服务功能(service function,SF),包括传统的网络服务功能(如防火墙、IP网络地址转换器等)及特定于应用程序的服务功能。服务功能链(service function chain,SFC)指SF有序排列的集合,它能够处理分类后的数据包、数据帧或数据流[1]。传统网络中的SFC与物理拓扑的紧密连接造成SFC变更时将产生较高的网络开销与潜在的利润损失[2],而软件定义网络(software defined network,SDN)[3-5]和网络功能虚拟化(network functions virtualization,NFV)[6-8]技术的运用使上述问题得以方便解决,SFC再次成为当前研究和应用的热点[9]。NFV技术构建各种虚拟SF资源池,SDN技术用控制转发分离的方式动态集中调度流量,进而实现定制化和灵活化的对接。
随着基于SDN和NFV技术的SFC使用量增涨,其安全性的需求日益增大。SF是SFC的关键组成部分,SFC域中的所有数据流必须经过特定的SF。如果SF被控制,攻击者可以通过被挟持的SF随意篡改、丢弃数据,甚至通过拒绝服务(denial of service,DoS)攻击[10]使服务功能转发器(service function forwarder,SFF)瘫痪[11],不但SF不能完成指定功能,且整个SFC域可能面临崩溃。本文针对SFC中的SF安全问题,根据拟态安全防御理论中的动态异构冗余(dynamic heterogeneous redundancy, DHR)模型[12],提出了一种建立在数据转发层面的MSFC防御架构。
拟态安全防御类似生物的拟态伪装,防御者通过控制网络、运行环境、软/硬件组成等元素的动态变化以达到自身不易被成功攻击的目的。拟态安全防御[13](mimic security defense, MSD)是在主动或被动的触发条件下,动态随机地选择多个执行对应功能的硬件变体和软件变体。因此,系统具备动态性、随机性、冗余性、异构性以及非持续性等特点。系统的上述特点使内部攻击者和外部攻击者都无法准确获取系统内部元件的运行环境以及状态信息,因此无法根据后门和漏洞建立稳定的攻击链,从而达到提升系统安全性的目的。所以,拟态安全防御本质是一种结合被动防御与主动防御的新型防御体系。目前的拟态研究,包括拟态控制器[14-15]、拟态Web服务器等在控制层面建立拟态构架,而在数据转发层面的研究较少。
本文在提出的MSFC防御架构的基础上,进一步提出一种基于判决反馈的动态调度方法,以判决器反馈的异常执行体信息、执行体的异构度以及系统的实际负载量作为调度影响因素,使调度方法可以根据网络变化进行自适应调整,从而提升系统的安全性。此外,该调度方法基于判决反馈对调度时间进行调整,以达到系统花费与安全性的最佳平衡,降低系统的资源开销。
在SFC安全研究方面,现有的防御方案总结见表1。
表1 防御方案总结
被动防御主要有SF安全加固和SFC安全编排与部署两类方案。SF安全加固方法通过增设安全模块降低风险。文献[16]提出了一种验证SFC中策略是否正确执行的安全策略分析模型,并基于该安全模型设计了一种可以应对同一SFC中SF的错误交互导致的安全漏洞等网络潜在威胁的软件工具,但该方案同时将额外造成大量的时间与资源开销。SFC安全编排与部署方法通过对SF的逻辑结构、部署方式等进行调整提升安全性。文献[17]通过分析不考虑节点同质性问题的SFC现有冗余备份部署方法,提出了一种异构备份部署方案。该方案可以确保备份服务器节点、虚拟网络功能(virtual network function,VNF)节点与原始节点之间的异构性,并根据该方案构建了具有异构备份的SFC部署模型。但由于未知漏洞的普遍性,攻击者仍能大范围利用漏洞攻破SFC。
被动的防御方案无法有效防御基于未知漏洞的攻击方式,而主动防御则是一类不依赖攻击行为先验知识的防御机制,主要有移动目标防御(moving target defense,MTD)[18]和拟态安全防御两方面。其中,MTD利用动态性、随机性、多样性思想对多个层面进行改造[19],增加了系统环境的不确定性,从而加大攻击难度。文献[20]通过静态代码分析对指令操作数分类并与随机掩码进行异或操作,从数据层面提升了攻击者的漏洞利用难度,但该方法计算复杂,从设计层面实现开销较大。在拟态安全防御方面,为了建立基于“有毒带菌”的软/硬件设备的高安全性系统,邬江兴院士带领团队首创了“拟态安全防御”概念,设置多个功能等价的异构冗余执行体共同处理相同的数据,并对执行体进行基于负反馈的动态调度,以动态性、异构性、冗余性代替被动防御的静态性、相似性、单一性,从而达到系统安全风险可控的要求。
异构执行体的动态调度是拟态防御架构中最重要的环节,它负责构建当前的执行体服务集,实现执行体组件的动态变化,使整个架构保持异构冗余特性。因此,调度算法决定了架构的安全质量。目前,拟态调度方法的研究主要在于保证拟态系统的高异构性以及探测攻击并动态调整调度方法两个方面。文献[21]提出了一种完全随机的调度算法,通过伪随机数确定异构执行体的冗余度和编号并进行调度,但该方法的随机性使防御效果并不稳定。文献[22]提出了一种基于执行体异构度的调度方法,每次调度都尽可能选取与在线执行体集合相比异构度大的执行体,以确保拟态系统的异构性保持较高水平,降低了执行体间的共同漏洞,增大了攻击者的攻击代价与难度。文献[23]提出将NFV中SFC的攻防过程建模为斯坦科尔伯格博弈模型,通过动态地轮换存在安全威胁的VNF节点,有效地提升了SFC的安全性。但不同于控制层面的拟态,MSFC防御架构须考虑每个执行体的性能。若采用文献[22-23]的方法,可能出现几次调度选取的执行体速度都不满足网络负载要求的情况,从而导致更严重的安全问题。文献[24]提出了一种基于生物种群模型的负反馈调度方法,将不同类型的执行体和攻击者建模为不同的生物种群,结合生物种群模型中的生存力以及系统的负载量计算每个执行体的选取系数,并以此为依据选取新的执行体集合。该方法通过动态选择被攻击次数较少的执行体,提升了系统的安全性。但由于忽略了系统的异构性,只能有效防御普通的静态攻击者,对存在记忆能力且能够对相近目标实施快速攻击的适应型攻击者有一定局限性[25]。对于这类攻击者,系统的异构性越小,则被成功攻击的概率越高。因此,本文基于判决反馈提出了一种能够保证系统异构性,且在线执行体集合可以随网络变化自适应调整的调度方法。
MSFC防御架构将以主动防御的方式确保SF执行体正常执行对应的服务功能,MSFC防御架构如图1所示。
图1 MSFC防御架构
(1)SFF
具有转发功能的设备,负责根据网络服务头(network service header,NSH)信息对数据进行转发。
(2)控制器
负责定义SFC,将流规则安装在SFF中以及将分类策略下发给分类器。
(3)分类器
负责根据控制层下发的分类策略给数据包加上相应的NSH信息,使数据包进入SFC域后可以按照规定的服务功能路径转发。
(4)拟态SF
拟态SF组成如图2所示,包括调度器、分发器、缓存器、判决反馈器、控制分析器以及异构SF执行体池6个部分。
图2 拟态SF组成
MSFC防御架构工作流程如图3所示。
图3 MSFC防御架构工作流程
步骤1进入SFC域的数据包将先到达分类器,分类器依据控制层下发的分类策略为数据包加上对应的NSH信息,根据NSH信息将数据包转发至下一SFF。
步骤2SFF收到数据包后依据NSH信息判断是否需要经过它所连接的SF,需要则进行步骤4,反之则进行步骤3。
步骤3判断数据包是否将离开SFC域,离开则SFF脱掉数据包的NSH并将其转发至SFC域外的网络设备;反之则直接转发至下一SFF,回到步骤2。
步骤4将数据包转发至分发器,分发器去除其NSH,将数据包复制多份并转发给各个在线SF执行体。执行体执行相应服务功能后将执行结果依次转发给判决反馈器。
步骤5控制分析器根据判决反馈器发送的判决结果下线异常SF执行体。
步骤6调度器根据执行体动态调度方法,每隔一定的调度时间从异构SF执行体池中选择异构度大的未上线SF执行体上线并将所有在线SF执行体下线。
MSFC防御架构以SFC架构[1]为基础,参考了DHR模型,通过引入异构冗余SF执行体池,用多种异构SF执行体同时执行服务功能的方式代替传统由单一SF执行体执行服务功能的模型,保证系统的可靠性;通过基于判决反馈的执行体动态调度方法对SF执行体进行动态调度,保证系统的安全性;通过对异常SF执行体的及时下线,保证系统的内部纯洁性。其中,异构执行体的动态调度是拟态防御架构中最重要的环节,调度算法决定了架构的安全质量。因此,本文基于架构进一步提出了执行体动态调度方法以提升安全性。
本节给出执行体动态调度方法相关符号和定义。
定义1异构因子比较函数。设执行体池共有m个执行体 SF = {SF1, SF2,⋅⋅⋅, SFm},每个SFi由各种硬件、操作系统和软件等e种异构元素组成每个异构元素划分为可以比较的最小单位其中,Ig表示SFi第g类异构元素的异构因子种类数。定义异构因子比较函数为:
定义2单个执行体间异构度。根据定义1,定义SFi与SFj的异构度α( SFi,SFj)为:
其中,用gδ表示第g类异构元素的权值,δgk表示第g类异构元素第k类异构因子的权值,从而区分不同种类异构元素以及单个异构元素中不同种类异构因子的关键性。
定义3整体异构度。根据定义2,设有n个在线执行体 SFo ={SFo1,SFo2,⋅⋅⋅, SFon},定义SFo的整体异构度为:
定义4置信度。定义置信度集合B={bSF1,bSF2,⋅⋅⋅,bSFm}表示SF执行体的可信赖程度,每个SF执行体的置信度都会随着实际网络情况的变化而改变,集合中所有元素的初始值相同。
定义5执行速度影响值。定义集合U={uSF1,uSF2,⋅⋅⋅,uSFm},uSFi表示SFi在执行体池中的相对执行速度。定义变量εuSFi表示SFi的执行速度影响值,依据网络流量变化更新,且ε>0。
定义6系统负载及异常执行体总数增长量。定义Δdl与Δda分别代表系统负载量和异常执行体总数较前一个调度周期的增长量。在调度周期内,若Δdl与Δda同时极大增长,则SF执行体缓存溢出概率较大;若Δdl无明显变化,Δda极大增长,则SF执行体被攻击成功概率较大。上述情况均会造成输出的执行结果异常。
设执行体池由l种执行不同类型服务功能的SF执行体组成 SF = {S1,S2,⋅⋅⋅,Sl},假设下一个调度周期需要第i类服务功能,当SFo为前一个周期的在线执行体集合时,设置集合W表示在集合Si中,所有不属于SFo的元素的集合。
(1)计算异构度
实际中受异构元素种类的限制,为了选出最佳SF执行体集合,加入异构元素间相对异构度的影响。对于∀SFi∈U,计算SFi与集合SFo中所有元素的异构度γi(SFi,SFo),计算式如下:
(2)更新置信度
运行环境不同,SF执行体池中的每个异构SF执行体的防御能力也有所差异。调度器需依据网络环境变化实时更新执行体置信度,并选择较难被成功攻击的SF执行体。
若调度器接收SFi为异常SF执行体,则立即将其置信度设置为0。比较集合SF中所有元素与SFi的异构度,根据异构度对SF执行体的置信度进行更新。设置δn为置信度更新因子,且δn>0。由定义2可知,两个SF执行体间的异构度最大值。设置为异构度区分边界,则对集合SF中每个SFj的置信度作如下更新:
若调度器接收SFi为正常SF执行体,则对集合SF中每个SFj的置信度作如下更新:
(3)计算执行速度影响值
实际网络流量大小在不同时段是不同的。在流量使用高峰时段,执行速度慢的SF执行体即使未被成功攻击,也可能出现缓存队列的溢出使其输出结果与正常SF执行体不匹配,因而被判定为异常SF执行体。当大部分在线SF执行体的执行速度不满足网络要求时,系统甚至可能直接崩溃。因此,调度器需要考虑SF执行体的执行速度,即调度算法必须能随网络流量的变化进行适当调整。
在MSFC防御架构中,数据包先到达分发器,再由分发器复制并转发给各个SF执行体,因此可以将分发器的负载量变化作为实际网络流量的变化。设在一个调度周期内,分发器的总负载量增加c,则执行速度影响值计算如下:
(4)计算可信赖度并更新执行速度影响值
每次调度都根据需要的服务功能类型确定从哪个集合选取SF执行体。假设选取的集合为Sk,对于 ∀S Fi∈Sk,根据调度过程(1)计算的异构度、调度过程(2)计算的置信度和调度过程(3)计算的执行速度影响值,可计算SFi的基础选择度如下:
根据定义6,若SF执行体缓存溢出,则需增大执行速度对可信赖度计算的影响;若SF执行体被攻击者成功攻击,则需增大置信度和异构度对可信赖度计算的影响。设置系统负载量与异常执行体个数的增长阈值分别为lξ与aξ,且将Δdl与Δda超出增长阈值的情况都视作极大增长。对于∀S Fi∈Sk,SFi的可信赖度计算方式如下:
进一步,对执行速度影响值ε进行如下更新:
依据前后两个调度周期的系统负载量和异常执行体总数的变化,以基础选择度为基准计算下一调度周期SF执行体的可信赖度,能够使执行体调度与网络变化的结合更加紧密。
(5)选取执行体集合
假设在线SF执行体集合共需要l个SF执行体。调度器计算集合W中所有元素的可信赖度后,对其进行由高到低排序,选出可信赖度靠前的2l个SF执行体形成新的SF执行体集合Si*={S Fd1,SFd2, ⋅⋅⋅,SFd2l}。为了提高所选在线SF执行体集合的整体异构度,以最大化攻击者的攻击难度,对Si*中所有SF执行体进行遍历,组合得到包含l个SF执行体的集合并计算其整体异构度。最后,选择整体异构度最大者作为新的在线SF执行体集合。
(6)更新调度周期
系统的安全性将随调度周期的减小而增加,但同时将带来更高的系统资源消耗。因为网络环境的变化,难以确定固定的调度时间Ts使系统资源消耗与安全性达到最佳平衡。
设置集合T= {Ts1,Ts2,…,Tsk},k→+∞,其中,Tsi表示第(i−1)次调度到第i次调度对应的时间间隔。考虑异常SF执行体信息最能体现网络变化,将异常SF执行体个数ir作为siT的调整依据。若ir大于设定阈值nξ,则认为当前系统需要通过降低调度时间以提升安全性;反之,则认为仅依靠调度算法的内部调节就可以降低异常SF执行体个数。设siT的最大取值为ξmax,τ表示异常执行体个数为零的次数,从首次出现该情况开始累加,一旦出现个数不为零的情况则立即将τ置零,待异常执行体个数再次为零时重新开始累加,则对下一调度周期进行如下更新:
根据前一个调度周期内异常SF执行体的总数对调度时间动态调整,使得防御系统可以在合适的系统代价始终保持较高水准的安全性。
调度算法根据SF执行体的可信赖度从异构SF执行体池中选择满足要求的SF执行体集合。因为影响SFi可信赖度的所有因素都会随着网络变化而实时变化,所以SFi的可信赖度可以动态更新,又因为SFi与集合SFo的异构度是可信赖度计算影响因素之一,所以该调度方法既能保持动态性和随机性,又能保证选出的SF执行体集合与集合SFo维持一定水平的异构度。
定时地替换在线执行体,可以在保持系统异构性的同时降低每个执行体的暴露时间,系统结构信息的不确定性提升,漏洞被发现的风险降低。因为系统处于不断更新的状态且一直保持较高的异构度,所以可以清除适应型攻击者的前期努力及潜在漏洞。在发现被感染的异常执行体后,系统还可以通过调度直接将其下线,达到有效阻断攻击者对异常执行体持续控制的目的。
假设下一个调度周期需要第i类服务功能。具体见算法1(符号沿用4.2节的标记)。
输入在线SF执行体集合SFo,执行第i类服务功能的SF执行体集合Si,执行速度影响因子ε,SF执行体间的相对执行速度集合U,SF中所有元素的置信度集合B,系统负载量Δdl,异常执行体总数较前一个调度周期对应值的增长量Δda
输出下一个调度周期的执行体集合 SFonext
计算Si中非在线SF的基础可信赖度
本节对在数据转发层设计的调度方法进行仿真分析,测试其有效性。通过Open vSwitch虚拟交换机实现分类器与SFF,数据层拓扑如图4所示,同时将物理计算机以物理连接的方式分别连接到分类器、SFF3所挂载的物理接口以模拟源目的特征组,最后在物理服务器安装多台虚拟机以构建拟态SF。虚拟机集合表示如下:
图4 数据层拓扑
V1及V2安装CentOS操作系统且设置V1完成控制分析器功能,V2完成分发器、缓存器、判决反馈器功能。V3~V12设置为防火墙与负载均衡的SF执行体池,其中,V3~V7安装不同操作系统与防火墙组合,V8~V12安装不同操作系统与负载均衡组合,SF执行体池构建见表2。将服务器中所有虚拟机设置相同的虚拟机端口组,将拟态SF加入SFC中,从而完成实验平台的搭建。
表2 SF执行体池构建
使用Java语言定义不同异构元素的SF执行体类,同时针对不同的异构元素设置对应的漏洞类,将对应的漏洞对象作为SF执行体类的成员变量。当SF执行体类实例化时,赋予不同类型的SF执行体对象不同的最大可承受负载量,即在不发生异常的情况下设备能够处理的最大数据量,以完成异构SF执行体集合的构建。
为验证本文调度算法能在网络负载量增长时选取合适的执行体集合,假设系统初始调度时间为T,在时间间隔5T内,分别用随机调度算法[21]、异构度调度算法[22]以及本文的判决反馈动态调度算法从异构执行体池中获取执行体集合。将获取的执行体集合中所有不满足负载量要求的执行体视为异常执行体,得到异常执行体的总数与负载量关系。依据获取的数据得到实验仿真结果,异常执行体的总数与负载量关系如图5所示。
图5 异常执行体的总数与负载量关系
由仿真结果可知,随着负载量的不断增大,使用随机调度算法与异构度调度算法的系统异常执行体总数明显大于使用判决反馈动态调度算法的系统异常执行总数,且差距随着负载量的增大而增大。这是由于当系统负载量较小时,大多数SF执行体都满足系统负载要求,此时3种算法系统的异常执行体总数差距不大。随着系统负载量的增加,不满足系统负载要求的SF执行体不断增多,使用判决反馈动态调度算法的系统相较于另两种能尽量避免选择不符合负载要求的SF执行体,减少异常执行体总数。
为验证判决反馈动态调度算法能在网络负载量急剧变化时及时做出相应调整,设置初始负载量为所有SF执行体都能满足的值,并以5T为测量间隔进行仿真。设定负载量在第二个调度周期内发生唯一的一次增长,记录使用3种不同的调度算法时,异常执行体的总数与负载量增长值的关系,并依据获取的数据得到实验仿真结果,异常执行体的总数与负载量增长值的关系如图6所示。
图6 异常执行体的总数与负载量增长值的关系
仿真结果表明,当负载量增长值在25 MB/s以内时,使用3种调度算法的系统异常执行体总数相差无几;当负载量增长值大于25 MB/s时,使用随机调度算法与异构度调度算法的系统异常执行体总数的增速呈上升趋势,而使用判决反馈动态调度算法的系统异常执行体总数的增速呈下降趋势。因为当负载量增长值在25 MB/s以内时,未达到Δda>ξa、Δdl>ξl的条件,此时本文提出的调度算法并未受到执行速度影响因子的干涉,且此时执行体池中不符合负载要求的执行体不多,所以3种调度算法对应系统的异常执行体总数相差不多。当负载增长值大于25 MB/s时,满足 Δda>ξa、Δdl>ξl的条件,此时判决反馈动态调度算法将受到执行速度影响因子的干涉,进而选取执行速度较快的SF执行体,因此异常执行体总数的增速相对下降。而其他两种调度算法未将负载值增量作为影响因素,且执行体池中不符合负载要求的执行体逐渐增多,因此异常执行体总数的增速必然相对增加。
为验证判决反馈动态调度算法能够适应攻击者不同强度的攻击,通过模拟适应型攻击者的攻击模式,以5T为测量时间间隔,以不同的攻击频率模拟实际网络中攻击者不同的攻击强度,对运行上述3种调度算法的系统进行模拟攻击。最终得到系统被成功攻击的概率与攻击强度的关系,并依据获取的数据得到实验仿真结果,系统被成功攻击的概率与攻击强度关系如图7所示。
图7 系统被成功攻击的概率与攻击强度关系
仿真结果表明,随机调度算法与异构度调度算法的系统被成功攻击的概率随着攻击强度的增强而不断增加。异构度调度算法将与前一调度周期的在线SF执行体集合间的异构度作为调度依据,所以该算法对应的系统被成功攻击的概率上升较慢。当攻击强度小于15次/min,未达到动态调整调度时间的触发条件时,判决反馈动态调度算法考虑了与前一调度周期的在线SF执行体集合间的异构度以及与异常执行体的异构度,所以该算法的系统被成功攻击的概率略小于异构度算法;攻击强度大于15次/min时,该算法动态减小调度时间,以花费更多系统资源的代价提升系统安全性,所以系统被成功攻击的概率瞬间锐减且该概率的上升速率明显降低。
系统被成功攻击的概率与系统资源的总调度花费成反比,针对同一段系统运行时间t,若将系统调度时间Ts设置为较大值,则系统被成功攻击的平均概率较高但是总调度花费较低;反之系统被成功攻击的平均概率较低但是总调度花费较高。为验证判决反馈动态调度算法能依据网络环境的变化适当的调整系统调度时间,通过模拟适应型攻击者的攻击模式,以不同的攻击频率模拟实际网络中攻击者不同的攻击强度,对运行在同种调度方法下设置调度时间分别固定为T=3 s,T=9 s以及设置动态调度时间在3~9 s的系统进行了模拟攻击。最终得到系统被成功攻击的概率与攻击强度的关系,并依据获取的数据得到实验仿真结果,系统被成功攻击的概率与攻击强度的关系如图8所示。同样地,得到不同调度时间系统平均调度资源花费关系如图9所示。
图8 系统被成功攻击的概率与攻击强度的关系
图9 不同调度时间系统平均调度资源花费
图8显示,随着攻击强度的增长,系统被成功攻击的概率不断上升。当调度时间为9 s时,系统被成功攻击的概率明显大于动态选取调度时间和调度时间为3 s的概率,且差距随着攻击强度增加不断增大。调度时间在3~9 s动态调整,则该系统被成功攻击的概率介于调度时间为3~9 s的系统,且与前者系统十分接近。图9显示,动态选取调度时间与调度时间为9 s的系统平均调度资源花费较低,调度时间为3 s的系统平均调度资源花费较高。实验结果表明,本文根据异常SF执行体个数动态调整系统调度时间的方法可以使系统在保持一定安全性的同时尽量花费较小的调度代价。
面对SFC的安全性问题,本文提出了数据转发层面的MSFC防御架构,研究基于判决反馈的动态调度方法以判决器反馈的异常执行体信息、执行体的异构度以及系统的实际负载量作为调度影响因素,使得调度方法可以根据网络实际变化进行自适应调整。此外,该调度方法基于判决反馈对调度时间进行调整,以达到系统花费与安全性的最佳平衡,降低了系统的资源开销。仿真结果表明,该调度方法可以在平衡系统花费与安全性的基础上,选出更符合当前网络需求的高异构度执行体集合,从而提升了系统的安全性和可靠性并减少了系统开销。但本文提出的调度方法并未考虑执行体选取的时延问题。在后续研究中,将对该方法进行相关优化,尽可能在保持系统安全性和高效性的同时降低执行体选取时延,使之具有更好的实用性。