丁冉 丁峰 周芳
隨著我軍信息系統(tǒng)正在向網(wǎng)絡(luò)信息體系方向發(fā)展,系統(tǒng)結(jié)構(gòu)由傳統(tǒng)樹(shù)狀層次化向“云+端”模式轉(zhuǎn)型,該使用模式在帶來(lái)靈活、高效、便捷的同時(shí),也帶來(lái)了一些應(yīng)用上的問(wèn)題,云中資源一旦發(fā)生故障會(huì)影響網(wǎng)絡(luò)上依賴此資源的系統(tǒng)運(yùn)行.隨著賽博對(duì)抗威脅日益嚴(yán)重,未來(lái)處于“云”端[1-2]的信息服務(wù)云環(huán)境,遭受賽博攻擊、物理毀傷,發(fā)生節(jié)點(diǎn)失效、故障不可避免.因此,為了充分驗(yàn)證信息系統(tǒng)在復(fù)雜戰(zhàn)場(chǎng)對(duì)抗環(huán)境下的自適應(yīng)調(diào)整、自重構(gòu)與任務(wù)持續(xù)保障等能力,亟需在試驗(yàn)環(huán)境下模擬云環(huán)境實(shí)際運(yùn)行過(guò)程中可能出現(xiàn)的內(nèi)部故障和外部威脅場(chǎng)景[2].
故障注入技術(shù)是信息系統(tǒng)可靠性驗(yàn)證中的關(guān)鍵技術(shù),它是通過(guò)人為手段直接把故障引入目標(biāo)系統(tǒng)中,加速目標(biāo)系統(tǒng)發(fā)生故障和失效的過(guò)程[2].通過(guò)模擬強(qiáng)對(duì)抗戰(zhàn)場(chǎng)環(huán)境,利用非法數(shù)據(jù)對(duì)軍事信息系統(tǒng)進(jìn)行攻擊,從而檢驗(yàn)系統(tǒng)能否在惡劣環(huán)境中持續(xù)穩(wěn)定工作,進(jìn)而不斷完善抗毀頑存能力.非法數(shù)據(jù)生成的難點(diǎn)是: 構(gòu)造的非法數(shù)據(jù)一方面要體現(xiàn)合法特征,能夠通過(guò)軟件輸入進(jìn)行校驗(yàn),另一方面要保持足夠非法特征,可以引發(fā)深層次缺陷.因此,如何高效生成“半合法數(shù)據(jù)”成為關(guān)鍵問(wèn)題.
針對(duì)這一問(wèn)題,提出了一種基于業(yè)務(wù)數(shù)據(jù)變異的故障注入方法,從已有功能測(cè)試腳本中自動(dòng)提取業(yè)務(wù)系統(tǒng)輸入數(shù)據(jù)的語(yǔ)法規(guī)格,結(jié)合能夠體現(xiàn)特定威脅的變異特略,采用數(shù)據(jù)類型引導(dǎo)的自動(dòng)生成算法從變異算子庫(kù)中選擇適合的變異算子,形成變異規(guī)則,最后將合法數(shù)據(jù)作為“種子”,逐一應(yīng)用變異規(guī)則自動(dòng)生成“半合法數(shù)據(jù)”,并將半合法數(shù)據(jù)自動(dòng)注入系統(tǒng).
從云環(huán)境故障注入的角度,從故障數(shù)據(jù)產(chǎn)生、故障注入[3-5]兩方面,提出基于業(yè)務(wù)數(shù)據(jù)與環(huán)境變異的故障注入技術(shù)途徑,向云環(huán)境與其他應(yīng)用系統(tǒng)注入非法/異常業(yè)務(wù)數(shù)據(jù),致使云環(huán)境中核心資源節(jié)點(diǎn)出現(xiàn)功能故障.技術(shù)途徑如圖1所示.
圖1 基于業(yè)務(wù)數(shù)據(jù)變異的故障注入方法
業(yè)務(wù)數(shù)據(jù)變異是指將輸入輸出數(shù)據(jù)的內(nèi)容變?yōu)榉欠?異常數(shù)據(jù),環(huán)境變異是指改變被攻擊對(duì)象的運(yùn)行環(huán)境,包括服務(wù)器宕機(jī)或依賴服務(wù)失效等,從而造成被攻擊對(duì)象故障.總體來(lái)說(shuō),業(yè)務(wù)數(shù)據(jù)變異和運(yùn)行環(huán)境變異都是以變異算子庫(kù)為核心的變異方法,具體實(shí)施過(guò)程分兩步驟: 故障數(shù)據(jù)產(chǎn)生、故障注入.
故障數(shù)據(jù)產(chǎn)生包括3 個(gè)階段: 第1 階段是從被測(cè)系統(tǒng)接口規(guī)格模型和測(cè)試數(shù)據(jù)中提取輸入數(shù)據(jù),生成數(shù)據(jù)模型,該數(shù)據(jù)模型能夠嚴(yán)格反映被測(cè)系統(tǒng)的輸入數(shù)據(jù)結(jié)構(gòu)和取值約束; 第2 階段是變異規(guī)則的生成,定義一系列接口變異算子及其相關(guān)的變異算子選擇策略,變異規(guī)則的生成以數(shù)據(jù)模型為輸入,在特定策略的指導(dǎo)下從變異算子庫(kù)中選擇適合的變異算子,從而生成變異規(guī)則集合;第3 階段是變異數(shù)據(jù),采用變異規(guī)則生成變異數(shù)據(jù).圖2展示了接口數(shù)據(jù)變異測(cè)試生成技術(shù)的完整過(guò)程.
圖2 變異數(shù)據(jù)生成過(guò)程
在故障數(shù)據(jù)模型[6]生成方面,為了支持?jǐn)?shù)據(jù)的提取,首先定義了基于樹(shù)文法(Tree Grammar) 的數(shù)據(jù)模型[7],即TDM(Test Data Model).一個(gè)TDM 表示為一個(gè)文法G.語(yǔ)言L(G)是由所有符合文法G 的測(cè)試數(shù)據(jù)組成的集合,即合法數(shù)據(jù)的集合.{d|d?L(G)}則是非法數(shù)據(jù)的集合.采用形式化方法定義數(shù)據(jù)模型可以更有效支持魯棒性測(cè)試[8]數(shù)據(jù)的自動(dòng)化生成.
在變異算子設(shè)計(jì)方面,借鑒變異測(cè)試的思想,針對(duì)故障注入目標(biāo)和數(shù)據(jù)類型的特點(diǎn),設(shè)計(jì)相應(yīng)變異算子.變異算子的定義為:變異算子是一個(gè)利用轉(zhuǎn)換函數(shù)進(jìn)行變異測(cè)試的思想,進(jìn)行故障注入的函數(shù).該函數(shù)使用變異參數(shù)p,對(duì)種子數(shù)據(jù)td(td∈L(G))中由f指定的數(shù)據(jù)字段進(jìn)行修改,從而產(chǎn)生一個(gè)非法數(shù)據(jù)td(td′?L(G)或者td′∈L(G),但部分字段值處于約束邊界).每個(gè)變異算子需要作用在一種數(shù)據(jù)類型之上.本文針對(duì)XSD 中數(shù)據(jù)類型設(shè)計(jì)了14 種變異算子,如表1所示.
表1 主要變異算子的定義
在變異算子參數(shù)選擇策略方面,本文針對(duì)不同的數(shù)據(jù)類型和約束,定義相應(yīng)變異算子參數(shù)選擇函數(shù),具體參數(shù)選擇策略包括:
第1 種: 針對(duì)值域約束的選擇策略.對(duì)于包含VAL(D)約束的產(chǎn)生式,PS 函數(shù)采用邊界值原則選擇參數(shù).在約束VAL(D)中,D 有兩種形式: 取值列表和取值區(qū)間.對(duì)于前者,隨機(jī)選取一個(gè)列表內(nèi)的值和一個(gè)列表外的值.對(duì)于后者,選取區(qū)間的邊界值和略超出區(qū)間的值.
第2 種: 針對(duì)值長(zhǎng)度約束的選擇策略.對(duì)于包含LEN(L)約束的產(chǎn)生式,PS 函數(shù)通常會(huì)選擇處于L 下限、L 上限,以及一系列超過(guò)L 上限的值作為串長(zhǎng)度,以檢測(cè)被測(cè)系統(tǒng)中與緩沖區(qū)溢出有關(guān)的缺陷.
第3 種: 針對(duì)可選性約束的選擇策略.對(duì)于包含OPT(F)約束的產(chǎn)生式,PS 函數(shù)針對(duì)F 中的每個(gè)字段選擇相關(guān)MO 改變字段值的存在狀態(tài).
第4 種: 針對(duì)序列類型的選擇策略.XSD 數(shù)據(jù)類型中存在有序序列sequence 和無(wú)序序列g(shù)roup.對(duì)于前者,可采用兩種策略打破原有的元素順序關(guān)系:1)隨機(jī)選擇其中的元素,使用MO-DisorderField 變異算子改變其順序; 2) 隨機(jī)選擇其中的元素,使用MODuplicateElement 和MO-DeleteElement 變異算子改變其數(shù)量.對(duì)于無(wú)序序列,則只能采用第2 種方式.
在變異規(guī)則生成方面,提出基于數(shù)據(jù)模型的變異規(guī)則生成算法.該算法以待變異的種子數(shù)據(jù)作為輸入,遍歷其中的每個(gè)字段,根據(jù)字段類型選擇適合的變異算子和參數(shù),產(chǎn)生相應(yīng)變異規(guī)則.算法輸出是變異規(guī)則集合(簡(jiǎn)稱MRS),函數(shù)FindMOs 用來(lái)從變異算子庫(kù)中搜索適用于該字段的所有變異算子,函數(shù)ChooseMO 則依據(jù)某種策略從中選擇所使用的變異算子.所支持的選擇策略包括: 順序輪換、隨機(jī)選擇、基于權(quán)重的隨機(jī)選擇和基于反饋的選擇.該算法將持續(xù)生成變異規(guī)則,直到其數(shù)量達(dá)到用戶設(shè)定的期望值.基于數(shù)據(jù)模型的變異規(guī)則生成算法如下所示.
有了非正常的數(shù)據(jù),即可進(jìn)行故障注入.本文針對(duì)威脅攻擊的特點(diǎn),提出了一種環(huán)境故障注入測(cè)試模型.該模型主要包括3 個(gè)組成部分: 故障注入配置模型[9]、交互過(guò)程模型[10]和環(huán)境故障模型[11].
故障注入配置模型: 定義了測(cè)試系統(tǒng)的靜態(tài)結(jié)構(gòu),描述了故障注入器(FIE)、被測(cè)系統(tǒng)(SUT)和其他系統(tǒng)組件的邏輯連接關(guān)系.該模型以UML 2.0 部署模型[12-13]為基礎(chǔ),對(duì)其中的節(jié)點(diǎn)定義進(jìn)行了擴(kuò)展,劃分為如下3 種類型: FIE、SUT 和普通節(jié)點(diǎn)(代表被測(cè)系統(tǒng)的通信對(duì)端,可以是一個(gè)測(cè)試組件,也可以是一個(gè)真實(shí)的系統(tǒng)組件).通過(guò)該模型,FIE 可以確定在測(cè)試中需要監(jiān)控的哪些節(jié)點(diǎn)之間的通信過(guò)程.
交互過(guò)程模型: 定義了測(cè)試的動(dòng)態(tài)行為,每一幅模型圖對(duì)應(yīng)一個(gè)測(cè)試用例,描述了被測(cè)系統(tǒng)與其他組件的一個(gè)消息交換過(guò)程,以及在這個(gè)過(guò)程中FIE 的故障注入活動(dòng).在該模型中,UML 順序圖中的異步消息[14]用來(lái)表示W(wǎng)eb 服務(wù)的協(xié)議消息(如SOAP 消息[15]).從FIE 的角度來(lái)看,協(xié)議消息可進(jìn)一步分為測(cè)試期望消息和測(cè)試動(dòng)作消息.測(cè)試期望消息代表FIE 要接收的消息,順序圖中測(cè)試期望消息的序列確定了FIE 希望接收到的消息序列.如果收到的消息和這個(gè)序列不符,即可判定當(dāng)前測(cè)試用例執(zhí)行失敗;測(cè)試動(dòng)作消息代表FIE 要發(fā)出的消息,屬于在收到某條測(cè)試期望消息后要執(zhí)行的操作,既可以轉(zhuǎn)發(fā)一條之前收到的消息,也可以構(gòu)造并發(fā)送一條新的消息.
環(huán)境故障模型: 定義如何在交互過(guò)程中產(chǎn)生和注入故障.該模型中的每個(gè)故障都會(huì)關(guān)聯(lián)到一條測(cè)試期望消息,稱為“觸發(fā)消息”[16].當(dāng)收到這條消息后,相應(yīng)的測(cè)試動(dòng)作就會(huì)被觸發(fā),以對(duì)正常的交互過(guò)程進(jìn)行干擾,從而模擬出相應(yīng)的環(huán)境故障.
本方法針對(duì)Web 服務(wù)的運(yùn)行環(huán)境特征和典型網(wǎng)絡(luò)故障模式,設(shè)計(jì)并實(shí)現(xiàn)了消息丟失故障、消息重復(fù)故障、消息亂序故障、消息延時(shí)故障等環(huán)境,以消息丟失故障為例,從故障描述、故障原理、故障實(shí)現(xiàn)、故障處理方式等4 方面進(jìn)行描述:
故障描述: 消息丟失是網(wǎng)絡(luò)通信過(guò)程中的常見(jiàn)故障之一,主要是指在通信的兩端中,一方向另一方發(fā)送消息后,接收方?jīng)]有收到這一消息,即消息在傳輸過(guò)程中由于某種原因發(fā)生了丟失.
故障原因:1)在網(wǎng)絡(luò)轉(zhuǎn)發(fā)節(jié)點(diǎn)上丟失;2)在接收端被丟棄;3)被轉(zhuǎn)發(fā)時(shí)發(fā)生地址段數(shù)據(jù)錯(cuò)誤,消息未被發(fā)送到正確的地址.
模型描述: 如表2所示.
表2 模型描述
故障實(shí)現(xiàn): 在收到消息PI 后,根據(jù)腳本將該消息丟棄.輸出消息的集合為空.
故障處理方式: 被測(cè)系統(tǒng)在發(fā)送出消息后,對(duì)該消息維持一個(gè)計(jì)時(shí)器,當(dāng)計(jì)時(shí)器超時(shí)后,如果仍未收到期望的回復(fù)消息,則將該消息重新發(fā)送.
在現(xiàn)有商用云平臺(tái)故障注入研究中,主要針對(duì)虛擬機(jī)管理器、云平臺(tái)管理軟件進(jìn)行故障注入,缺乏一個(gè)完整針對(duì)云平臺(tái)各個(gè)層次的故障注入方法.
本文針對(duì)上述存在問(wèn)題,設(shè)計(jì)了針對(duì)信息服務(wù)云環(huán)境IaaS 層、PaaS 層、SaaS 層等多層次、可擴(kuò)展的故障注入平臺(tái).該平臺(tái)涵蓋計(jì)算資源、通信網(wǎng)絡(luò)、平臺(tái)、數(shù)據(jù)、服務(wù)共5 類18 種故障,全面覆蓋云環(huán)境3 層注入需求.同時(shí),設(shè)計(jì)了14 種數(shù)據(jù)變異算子,提出了緩沖區(qū)溢出等3 類故障模擬手段,能夠驗(yàn)證系統(tǒng)能否在強(qiáng)對(duì)抗環(huán)境下持續(xù)、穩(wěn)定的工作.
表3 信息服務(wù)云環(huán)境故障類型
該平臺(tái)以模塊化形式組成,包括5 個(gè)功能模塊:故障注入控制模塊、故障負(fù)載生成模塊、故障分發(fā)模塊、故障注入模塊(含故障注入器)、故障注入統(tǒng)計(jì)分析模塊.
故障控制模塊: 用于為試驗(yàn)人員提供圖形或腳本的方式進(jìn)行控制,發(fā)送故障注入開(kāi)始、暫停、恢復(fù)等控制命令.故障注入控制模塊讀取兩種形式的輸入: 一是讀取故障注入腳本的輸入,在設(shè)定的時(shí)間往預(yù)定的位置注入故障; 二是根據(jù)需要在特定時(shí)間點(diǎn),通過(guò)圖形界面的接口進(jìn)行故障導(dǎo)調(diào)干預(yù).
故障負(fù)載編輯模塊: 為了統(tǒng)一、規(guī)范化描述云平臺(tái)中各層故障類別,設(shè)計(jì)了5 元組的故障描述模型:<故障層次、故障工具、故障位置、故障時(shí)間、故障參數(shù)>,生成故障注入描述的腳本文件.
圖3 故障注入平臺(tái)功能設(shè)計(jì)
故障分發(fā)模塊: 根據(jù)生成的故障負(fù)載的IP 地址等信息分發(fā)到各個(gè)具體物理服務(wù)器和虛擬主機(jī)節(jié)點(diǎn)的故障注入器.
故障注入模塊: 接收故障分發(fā)模塊下發(fā)的故障注入腳本,當(dāng)故障注入任務(wù)滿足發(fā)生的條件時(shí),調(diào)用對(duì)應(yīng)的故障注入模塊,并傳遞對(duì)應(yīng)參數(shù),觸發(fā)故障注入程序運(yùn)行.
故障統(tǒng)計(jì)分析: 將收集故障注入信息并存儲(chǔ)于數(shù)據(jù)庫(kù),用于后續(xù)的信息服務(wù)云環(huán)境能力評(píng)估與統(tǒng)計(jì)分析.
故障注入平臺(tái)能夠完成故障模擬數(shù)據(jù)的自動(dòng)化生成以及注入,主要包括變異規(guī)則配置、變異數(shù)據(jù)生成和故障注入3 個(gè)部分.
1)變異規(guī)則配置是為用戶提供可視化的數(shù)據(jù)變異規(guī)則配置,針對(duì)用戶實(shí)際使用需求,提供兩類不同的配置方式: 普通模式和專家模式,其中普通模式旨在提供更容易的使用方式,用戶只需選擇變異算子即可完成配置,專家模式則主要面向領(lǐng)域知識(shí)較為豐富的使用者,為該類使用人員提供細(xì)粒度的配置能力.
變異規(guī)則配置界面如圖4所示,從圖4可知,普通模式下通過(guò)從左側(cè)選擇變異規(guī)則到右側(cè)即可完成配置,專家模式下則需要為協(xié)議報(bào)文的字段選擇合適的變異算子.
2)變異數(shù)據(jù)生成是指根據(jù)變異規(guī)則配置內(nèi)容以及數(shù)據(jù)格式要求,在變異生成引擎的驅(qū)動(dòng)下快速產(chǎn)生大量異常數(shù)據(jù),從后續(xù)威脅注入提供支撐.
3) 故障注入是指利用生成的異常數(shù)據(jù),通過(guò)被注入系統(tǒng)對(duì)外提供的接口(如網(wǎng)絡(luò)接口、函數(shù)接口等),將異常數(shù)據(jù)自動(dòng)化注入被測(cè)軟件中,從而觀測(cè)軟件是否能在惡劣環(huán)境下正常工作.
圖5顯示了向服務(wù)注入故障的時(shí)序過(guò)程,該過(guò)程采用序列圖進(jìn)行展示.
為了能夠?qū)υ摴收献⑷敕椒ㄟM(jìn)行驗(yàn)證,以某工程的實(shí)際態(tài)勢(shì)處理軟件為對(duì)象進(jìn)行驗(yàn)證.試驗(yàn)環(huán)境如圖6所示,由圖可知,使用模擬器生成大量的態(tài)勢(shì)測(cè)試數(shù)據(jù),實(shí)時(shí)態(tài)勢(shì)信息經(jīng)過(guò)網(wǎng)絡(luò)向資源管理服務(wù)中心上報(bào)態(tài)勢(shì)信息,態(tài)勢(shì)信息經(jīng)過(guò)實(shí)時(shí)信息分發(fā)服務(wù)轉(zhuǎn)發(fā)至態(tài)勢(shì)服務(wù),由態(tài)勢(shì)信息服務(wù)進(jìn)行信息的抽取、轉(zhuǎn)換,最終投遞到綜合態(tài)勢(shì)顯示軟件.在這一環(huán)境中使用故障注入工具向?qū)崟r(shí)信息分發(fā)服務(wù)注入異常數(shù)據(jù),如果實(shí)時(shí)信息分發(fā)這類較為成熟的軟件發(fā)生問(wèn)題,則證明了本方法研究的可行性和工具的實(shí)用性.
圖4 變異規(guī)則配置界面
圖5 變異數(shù)據(jù)注入過(guò)程序列圖
采用本文研制的故障注入工具,并設(shè)置相關(guān)的變異規(guī)則,實(shí)現(xiàn)了對(duì)XX 報(bào)文的變異,具體變異規(guī)則設(shè)置如表4所示.
表4 變異規(guī)則設(shè)置
圖6 業(yè)務(wù)數(shù)據(jù)變異試驗(yàn)場(chǎng)景
圖7 實(shí)時(shí)信息分發(fā)服務(wù)崩潰效果圖
圖8 態(tài)勢(shì)服務(wù)崩潰效果圖
通過(guò)在實(shí)驗(yàn)室內(nèi)部搭建實(shí)驗(yàn)環(huán)境,并設(shè)計(jì)了800組攻擊數(shù)據(jù).在上述場(chǎng)景下開(kāi)展試驗(yàn),發(fā)現(xiàn)了實(shí)時(shí)信息分發(fā)服務(wù)在部分情況下會(huì)發(fā)生崩潰問(wèn)題,通過(guò)分析注入過(guò)程以及注入數(shù)據(jù)發(fā)現(xiàn),如果頻繁收到信息訂閱報(bào)文時(shí),實(shí)時(shí)信息分發(fā)的訂閱關(guān)系會(huì)發(fā)生問(wèn)題,進(jìn)而導(dǎo)致軟件崩潰,軟件崩潰后無(wú)法自動(dòng)重啟,導(dǎo)致態(tài)勢(shì)信息中斷,無(wú)法順利上報(bào).
本文提出了一種基于業(yè)務(wù)數(shù)據(jù)變異的故障注入方法,能夠根據(jù)變異算子構(gòu)建“半合法數(shù)據(jù)”來(lái)模擬產(chǎn)生云環(huán)境中各類資源故障與異常事件.同時(shí),提供故障注入能力,依托仿真或云環(huán)境接口調(diào)用等手段實(shí)現(xiàn)故障注入.實(shí)驗(yàn)結(jié)果表明,該方法能夠滿足大部分通信網(wǎng)絡(luò)、云環(huán)境原型等層面的故障注入需求,支撐云環(huán)境能力評(píng)估試驗(yàn).