扈红超, 张帅普, 程国振, 何威振
(1.郑州大学 中原网络安全研究院,河南 郑州 450001;2.郑州大学 网络安全学院,河南 郑州 450001 3.信息工程大学 信息技术研究所,河南 郑州 450001)
随着云原生技术的发展,微服务架构在云环境中的应用也更加广泛[1]。微服务架构[2]将应用程序划分成一组松耦合的细粒度服务,相互独立的同时又相互协作构成微服务链。由于共享微服务的存在使得微服务链之间存在交叉[3],单个服务的性能可以影响整个系统,导致攻击被放大,进而导致更大的经济损失[4]。
正则表达式拒绝服务(regular expression denial of service, ReDoS)攻击者可以设计请求流量,从而利用正则表达式的超线性漏洞发起拒绝服务攻击[5]。该攻击的三要素为可回溯的正则表达式引擎、具有超线性复杂度的正则表达式和非法输入[6]。在云原生环境中ReDoS攻击可以通过共享微服务等特殊微服务获取更大的攻击收益[4]。
目前针对云原生环境中的ReDoS攻击的防御方式主要分为2种:一种利用云原生弹性扩容对受影响的服务进行攻击缓解;另一种在出现ReDoS攻击之后对服务进行漏洞检测和修复。前者可以保证服务的正常运行但无法阻止攻击对资源的消耗;后者能够阻止攻击者对同一漏洞的反复利用,但是会造成服务的中断,同时该种方法采用事后加固的方式进行防御,缺乏主动防御能力。
针对弹性扩容方法的研究主要通过动态伸缩微服务资源来缓解攻击的影响。如Yu等[7]首先讨论了在云原生环境中DoS攻击防御的可能性;其次指出云平台强大的资源调度能力使服务可以在攻击持续期间维持正常运行,从而达到防御目的。Li等[4]基于入侵检测机制将实例资源隔离,分别处理白名单请求和其他请求,通过生成不同数量的容器最大可能地保证二者的服务质量。Yuan等[8]考虑了云环境资源收费的特点,使用线性规划给出了攻击期间保证服务质量的最优资源分配。
针对漏洞检测和修复的研究分为基于静态分析检测技术和基于模糊测试的检测技术[9]。前者的优点是检测速度快,缺点是存在误报以及无法分析包含扩展漏洞的正则表达式;后者的优点是可以较好地支持扩展正则表达式的检测,缺点是无法检测隐藏较深的ReDoS漏洞(即攻击字符串的长前缀生成问题),并且检测效率低。由于上述2种方法在检测效率和实用性上存在不足,多数防御者选择在攻击结束后对危险正则表达式进行修复[5],然而由于正则表达式的广泛应用,多数正则表达式都存在一个或者一个以上的漏洞[10],单个系统也往往存在多个正则表达式。Cloudflare公司的报道[11]指出:当其公司出现ReDoS攻击漏洞后对Web应用防护系统组件中的3 868条正则表达式规则进行了人工检查。并且以上提到的防御方法只能在关闭当前服务的情况下进行,因此会造成服务中断。
综上所述,弹性扩容的防御方法可以保证微服务运行时的质量,但是无法阻止攻击者对同一漏洞的反复利用。针对正则表达式漏洞的检测和修复技术能够在一定程度上阻止攻击,但是存在假阳性、假阴性和效率低等问题。
针对以上问题,本文提出采用移动目标防御(moving target defense, MTD)方法来防御微服务中的ReDoS攻击,MTD作为一种主动防御技术[12],能够动态轮换云原生环境下的异构微服务应用,能够有效增强云原生应用的主动防御能力,因此可以有效防御云原生环境下的ReDoS攻击。首先,本文在对攻防行为进行分析的基础上,在Kubernetes云平台上设计了基于MTD的防御系统框架;其次,基于排队论模型对微服务应用进行建模,提出了基于服务效率的最佳的轮换时机选择方法,为了全方位判断微服务的运行状态,本文基于图论模型对微服务进行评估,提出静态和动态2种指标来指导关键微服务的选择;最后,本文使用Python对提出的微服务轮换算法进行仿真实验。实验结果表明:本文提出的防御方法在保证服务性能的同时成功防御了ReDoS攻击,也降低了防御开销。
本节首先分析了ReDoS的攻击流程,然后给出了本文提出的防御模型。
云原生环境中ReDoS攻击者除了使服务瘫痪之外,扩大攻击的影响也十分重要[13]。ReDoS攻击者的目标是尽可能多地找到存在超线性漏洞正则表达式的微服务,然后选择对整个系统影响最大的微服务发起攻击。图1给出了攻击的流程。
图1 攻击流程
漏洞扫描。攻击者在入侵存在正则表达式超线性漏洞的微服务后对其中的正则表达式进行分析,设计出可以引起正则表达式漏洞的字符串,如图1中的漏洞探测路线。
微服务选择。攻击者筛选出存在漏洞的微服务集合后,通过微服务之间的信息传递收集微服务间的关联信息,对这几个微服务的影响进行评估,以达到最大的攻击收益。如图1中的B。
漏洞利用。向服务发送带有能触发漏洞的字符串请求,进行ReDoS攻击。
假设攻击者总是有办法得到有关微服务漏洞的信息,这在主动防御的攻击假设中是常见的。
MTD作为一种主动防御技术,通过变化的攻击面迷惑对手,其主要特点为多样化、动态性和冗余性[14]。本文基于以上MTD技术的特点,设计了如图2所示的MTD防御模型。异构资源池是关键微服务的异构备份,在检测到服务质量异常时,从异构资源池选出与正在运行的微服务实例异构度最大的备份将微服务替换,从而使得ReDoS攻击者失去目标漏洞导致攻击失败。
图2 防御模型设计
服务质量检测模块。在初始化阶段负责选出关键微服务,运行时该模块负责保证关键微服务的服务质量,当检测到服务效率异常时通知异构备份选择模块进行流量重定向。
异构备份选择模块。该模块主要负责在异构资源池中选出与现有微服务存在最大异构度的模块进行路由重定向和最优备份选择。
为了说明本文提出防御模型的可行性,基于Kubernetes容器云[15]平台给出了模型的具体实现方案。如图3所示。
图3 基于Kubernetes的系统设计实现方案
防御系统工作流程如下。首先统计集群中微服务的相关信息,根据收集的信息生成每个微服务的紧密性、中心性和必要性等度量指标,从而找出关键微服务并对其服务效率进行监控,当出现异常时选出与当前实例异构度最大的备份进行流量重定向,最后根据备份的服务效率选择最优备份进行轮换。
静态指标生成。系统初始化阶段负责从集群拉取当前所有微服务的拓扑快照,获取单个微服务与拓扑相关的静态属性,包括紧密性和中心性。
动态指标生成。运行时阶段定期从集群拉取当前所有微服务的请求到达速率和服务速率,生成微服务的动态属性包括中心度和权重。
关键微服务选择。综合静态指标和动态指标找出关键微服务。
异构备份选择。当关键微服务的服务效率出现异常时选出异构度最大的备份微服务,并根据各备份的服务效率选择最优备份进行替换。
为了平衡防御开销和防御效果,找出关键微服务,本节基于图论给出单个微服务的权重量化指标。
得到微服务的经济权重就可以将关键微服务选择表达为一个整数线性规划。
(1)
目标函数是为了找到k个具有最大权重的服务。约束条件1确保在现有服务之中选择服务。在约束条件2中,xm取1时代表其是共享服务,反之取0。由此得到了由k个具有最大ED值的共享微服务组成的集合,这些服务将作为部署本文提出的异构调度算法的节点。
为了提高备份与实例之间不存在相同漏洞[19]的概率,本节基于异构度给出了每个备份被选择的概率。提取异构备份的P元特征,如操作系统、设计语言、设计团队以及函数库依赖等,表示为{d1,d2,d3,d4}[20]。将2个P元特征对应位置差的平方和定义为2个异构备份的距离。将其作为判断二者之间异构度的标准,距离越大则代表2个异构备份差异越大。
当轮换发生时每个异构备份被选择的概率Pm可由式(2)求出。
式中:s表示特征索引;n表示特征数量。对于微服务Pi,备份Pj与Pi的异构度越大,该备份Pj被选择的概率越高。
为了及时发现服务效率的异常,本节基于排队论M/M/c模型对请求在微服务系统的服务过程进行建模,并给出微服务服务效率的计算公式。建模时用到的相关变量如表1所示。
表1 建模和算法设计时用到的变量
研究人员通过观察得出结论,请求的服务时间具有相同的幂率分布并且与相互到达的时间无关,请求的到达服速率从泊松分布[21]。基于上述结论,本文使用M/M/c排队论模型对该系统进行建模是合理的。这意味着微服务请求到达速率服从多个泊松分布的和,请求的服务速率满足指数分布,请求队列无限长。
在容器云环境中微服务的请求到达速率取决于该微服务上游的容器的数量λn,如式(3)所示。
λn=nλ。
(3)
此外每个容器的服务速率为μ,对于有c个容器并且处在n个微服务链交叉点的微服务来说,服务速率如式(4)所示。
(4)
使用ρ表示到达和服务速率的比值:
(5)
当ρ≤1时,该排队论系统的时系统处在稳态,此时系统中有t个请求的概率可由式(6)计算。
(6)
式中:Q0代表队列中没有请求的概率,可由式(7)求出。
(7)
当服务速率为μ时,平均队列长Lq可由式(8)求出。
(8)
此外,根据Little公式,可以求出服务速率为μ时微服务的平均等待时间:
(9)
由于不同微服务对于性能的需求不同,本文将服务繁忙率B定义为
B=ωT+ηL。
(10)
当检测到服务质量下降时,启动异构轮换算法。
算法1异构轮换算法。
输入:某共享微服务的请求到达和服务繁忙率;
输出:最优缓解策略。
① While (True)
② If (Bn>Bu)
③ type=StartRotate ();
④ If (type==0) then
⑤ num=GetServingContainer (Bn);
⑥ CreateContainer(num);
⑦ Else
⑧ num=GetServingContainer (Bn);
⑨ CreateContainer (num, type);
⑩ Endif;
算法负责监视所有共享微服务的繁忙率Bn,当Bn超过阈值Bu时,启动异构轮换算法,将请求平均分配到异构备份中,通过检测得到最优异构备份进行复制,将服务效率异常的实体进行修复。
算法2最优备份选择算法。
输入:异构备份的请求到达和服务速率;
输出:异构备份的种类。
① forRrequests
② redirectRto HeterogeneousService;
③Bx=GetHeterogeneousBusy ();
④ Endfor;
⑤ ForBninBx
⑥ If (Bn<0.6Bn+1)
⑦ Returnn;
⑧ Else return 0。
当轮换算法startRoate()启动时,会把所有的请求平均重定向到异构微服务备份中,并且计算所有备份异构微服务备份的繁忙率Bx,如果有异构微服务备份的服务繁忙率小于其他微服务的繁忙率,则认为该备份不存在当前攻击的漏洞,返回备份类型;如果所有备份的服务繁忙率无差别,则认为当前攻击是利用交叉点微服务的流量放大作用进行的DDoS攻击,则随机选择该微服务的备份进行复制,达到资源扩容的目的,使服务正常运行。本文认为当存在一个备份的服务繁忙率低于其他备份的60%时,2个备份的服务繁忙率区别较大。
根据Li等[4]的研究设置的ReDoS攻击持续期间请求到达速率期望和攻击未发生时相同,仿真实验拓扑由3条微服务链构成,因为本文关注的是关键微服务的属性,所以对微服务的数量没做过多要求,每条微服务链包含6个微服务,仿真实验拓扑图如图4所示,其中关键微服务处在3条微服务链的交叉点,各链上除共享微服务外请求服务速率分别为μ1=3请求/s,μ2=2请求/s,μ3=2请求/s,请求到达速率分别为λ1=2请求/s,λ2=1请求/s,λ3=1请求/s。共享微服务a的请求服务速率为μa=8请求/s,共享微服务b的请求服务速率为μb=5请求/s。由此可求出共享微服务的队长期望和服务时间期望,实验开始阶段将每个微服务的容器数量设置为1。从而求得Bu。单个微服务可以服务的最大请求服务速率为10请求/s,恶意请求服务时间是正常请求的8倍。异构资源池中异构备份的数量为3个,每个异构备份的P元特征组分别为P1=(0,1,0),P2=(1,0,0),P3=(1,0,1),仿真实验持续期间每50 min模拟一次持续5 min的ReDoS攻击,使用CPU利用率作为防御效果的可视化指标。
图4 仿真实验拓扑图
如图4所示,共有2个共享微服务:共享微服务a和微服务2。为了验证本文提出的经济权重的有效性,根据实验参数设置计算2个微服务的权重,其中β、α、γ的值设置为1。求得BC(a)=1,CC(a)=1/6,DC(a)=4/25,故共享微服务a的权重为ED(a)=24/25;同理求得BC(2)=1/3,CC(2)=1/5,DC(2)=1/25,微服务2的权重为ED(2)=1/15。
本次分别针对微服务a和微服务2进行了仿真攻击,由于串联服务台排队论系统后者的请求到达速率和上一个系统的服务时间有关[17-18],本文选择下游服务CPU利用率变化作经济损失的可视化指标。为了表明影响的一般性,将微服务2、微服务4和微服务10在攻击前后的变化绘制成图5~7曲线图。
图5 微服务2在攻击前后的CPU利用率
对比图5和图6可知,ED值高的微服务在受到攻击时其下游微服务CPU利用率下降较快,这是请求阻塞导致的。由于与服务商按照实例的运行时间计费资源没有充分利用导致用户产生了严重的经济损失。对比图6和图7可知,距离受攻击微服务越远的服务受攻击的影响越小。
图6 微服务4在攻击前后的CPU利用率
图7 微服务10在攻击前后的CPU利用率
本节将从防御开销和防御安全性2个方面将所提出的异构轮换算法与文献[3]提出的缓解算法进行对比。非异构扩容防御的经济损失E计算公式如下:
E=N·cost·T′。
(11)
式中:N为维持服务质量所需的容器数量,根据服务效率不断变化;T′表示备份存活的时间;cost表示单个容器存活单位时间的花费,设为1。
由图8可知,在不考虑异构度只是根据服务质量对ReDoS攻击进行缓解时,随着攻击次数的增加,防御开销呈线性增长,如图8所示,这是由于周期发起的ReDoS攻击具有相似的攻击强度和攻击时间。
图8 累积防御开销随攻击次数的变化
由于开发异构备份的花费比普通备份多,所以异构扩容带来的经济损失E计算公式如式(12)所示。其中α为异构备份相较于普通备份开销的系数。
E=N·αcost·T′。
(12)
当α=6时,异构扩容随着攻击次数的经济损失累加如图9所示,相比于非异构扩容虽然单个异构备份的花费更高,但是由于可以快速地轮换掉存在ReDoS漏洞的微服务使攻击的影响时间变短,并且在之后攻击中没有带来额外的开销,所以带来的经济损失远小于非异构轮换。
图9 异构扩容的累积防御开销随攻击次数的变化
本文提出的防御方法核心思想是当检测到微服务出现异常时启动流量重定向,并根据异构备份的表现选取合适的异构备份进行防御。由图10可知,当攻击开始时,3号异构服务的CPU利用率比其他2个备份服务低,这是由于异构服务3不存在此次ReDoS攻击所针对的正则表达式超线性漏洞,所以3号备份较其他备份的CPU利用率低,故此对该异构备份进行复制。
图10 启动异构度轮换算法各备份的CPU利用率
对比图10和图11中这2种防御方式下CPU的利用率变化情况可知,异构调度不仅能对攻击产生免疫作用提高云平台的安全性(只出现一次CPU利用率的突变),还可以极大地缓解攻击带来的影响(CPU利用率突变时间短)。
图11 不考虑异构轮换算法各备份CPU利用率
本文首先基于图论和微服务架构的特点提出了计算单个微服务权重的公式,并基于MTD技术提出了ReDoS的缓解防御方法。首先,该方法破坏了ReDoS攻击的攻击载体,使其不能持续进行欺诈资源消费。其次,通过仿真实验验证了该防御方法的有效性。该方法的重点是异构微服务备份的选择,未来工作的重点将集中在如何更加细致地分析瓶颈微服务是否出现异常,以及优化异构服务备份的选取策略,同时加深对入侵检测知识的学习。