扈紅超, 張帥普, 程國振, 何威振
(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攻擊的攻擊載體,使其不能持續進行欺詐資源消費。其次,通過仿真實驗驗證了該防御方法的有效性。該方法的重點是異構微服務備份的選擇,未來工作的重點將集中在如何更加細致地分析瓶頸微服務是否出現異常,以及優化異構服務備份的選取策略,同時加深對入侵檢測知識的學習。