魏 歡
(1.南昌航空大學(xué),南昌330063;2.安徽工業(yè)經(jīng)濟職業(yè)技術(shù)學(xué)院,合肥230051)
軟件安全隱患是自計算機誕生就存在的一個問題。隨著計算機技術(shù)的發(fā)展,軟件的安全問題也越來越受到人們的重視。多媒體后期處理軟件是日常生活中應(yīng)用較為廣泛的軟件,它能按照指定的要求,完成對文字、圖片、聲音、視頻等文件的后期處理[1]。在網(wǎng)絡(luò)環(huán)境下,這些軟件容易受到攻擊,導(dǎo)致文件缺失,因此需要對這些多媒體后期處理軟件進行安全性能測試。傳統(tǒng)的安全性能測試方法對于惡意代碼變種檢測的命中率低,且很大程度上依賴于人工檢測,因此本文設(shè)計了一種新的多媒體后期處理軟件安全性能測試方法。
多媒體后期處理軟件安全性能測試標準是軟件安全性需求提取、軟件安全性分析、安全性測試和評估的基礎(chǔ),本文對幾種安全性能測試標準進行分析[2-3],設(shè)計了適用于多媒體后期處理軟件的安全性能測試框架,如圖1所示。
本文在該安全性能測試框架的基礎(chǔ)上,對多媒體后期處理軟件安全性能測試方法進行研究。
多媒體后期處理軟件的安全性測試,關(guān)注的是軟件在運行過程中是否會造成多媒體文件丟失與損壞以及失效等情況。通過對失效軟件與系統(tǒng)外部環(huán)境的狀態(tài)檢測,可以發(fā)現(xiàn)軟件安全性缺陷,因此需要對后期處理軟件進行安全性能測試建模[4-5]。本文利用故障樹模型作為多媒體后期處理軟件的安全性能測試模型。故障樹模型最早是美國貝爾實驗室對信息工程領(lǐng)域系統(tǒng)安全性進行分析的一種技術(shù)。隨著人們對軟件工程安全性的重視,故障樹模型也在不斷進化。對于軟件中某一危險分析的故障樹模型如圖2所示。
圖2中,H表示危險,也為故障樹模型的頂事件。G1到G4為中間事件,A1到A5表示基本事件,為故障樹的葉子節(jié)點。通過對故障樹模型的分析,可以發(fā)現(xiàn)導(dǎo)致危險H發(fā)生的原因為G1+G2,同理可以推導(dǎo)出G1到G4發(fā)生的直接原因,最后可以推導(dǎo)出
利用故障樹對軟件工作環(huán)境進行分析,確定導(dǎo)致其出現(xiàn)安全問題的原因。在故障樹模型中,割集是模型中導(dǎo)致頂事件發(fā)生的基本事件的集合,最小割集是割集的子集,也是軟件安全問題出現(xiàn)的直接原因[6]。假設(shè)用xi表示軟件中的第i個文件失效,那么導(dǎo)致軟件發(fā)生危險的最小割集為
可以計算出軟件出現(xiàn)安全問題的概率為
故障樹模型的定量計算是在定性分析的基礎(chǔ)上進行的,通過定性分析,確定造成安全問題發(fā)生的事件。安全問題出現(xiàn)的概率取決于基本事件,通過對安全問題事件中每個基本事件發(fā)生概率的計算,得到安全問題的出現(xiàn)概率,至此完成多媒體后期處理軟件安全性能測試建模。
圖1 多媒體后期處理軟件安全性能測試框架
圖2 故障樹模型
惡意代碼主要是指在進行軟件編程時,設(shè)置一些沒有作用卻具有潛在威脅的代碼。惡意代碼的檢測包括檢測新惡意代碼和惡意代碼變種。代碼語義、代碼行為和代碼結(jié)構(gòu)都是惡意代碼的特征,對于軟件中的惡意代碼,惡意代碼變種的比例會遠遠高于新惡意代碼[7-8]?;谶@種情況,本文選用逆向工程技術(shù),在二進制機器碼中恢復(fù)高級語言的結(jié)構(gòu)以及語義。在一般情況下,逆向工程主要分為反編譯和反匯編,反編譯是利用匯編語言和流圖恢復(fù)高級語言的過程,反匯編分為靜態(tài)反匯編和動態(tài)反匯編,靜態(tài)反匯編是指在反匯編過程中代碼被分析,但不執(zhí)行;動態(tài)反匯編是指在程序中已經(jīng)輸入與執(zhí)行了代碼。具體過程如圖3所示。
圖3 編譯逆向工程示意圖
本文用到的逆向工程技術(shù)是靜態(tài)反匯編過程,原理為:根據(jù)對多種流圖結(jié)構(gòu)的分析以及對反匯編代碼的閱讀與理解,充分掌握代碼相關(guān)功能,并獲取其存在的安全缺陷。首先通過函數(shù)調(diào)用圖來對代碼結(jié)構(gòu)和行為特性進行靜態(tài)表示,然后利用二分法計算近似的圖編輯距離。圖編輯距離主要是指在一個圖轉(zhuǎn)換為另一個圖過程中所需要的所有編輯操作。將所有圖編輯距離構(gòu)成一個集合,利用集合中的元素來衡量圖的相似度[9],檢測過程如圖4所示。
圖4 惡意代碼檢測過程
上述過程中的圖相似度匹配問題即最小代價的二分圖匹配問題,利用匈牙利算法匹配兩個規(guī)模不等的圖,其核心是建立二分圖法代價矩陣,矩陣的構(gòu)造如圖5所示。
圖5 二分圖匹配的代價矩陣
基于上述所構(gòu)建的二分圖匹配的代價矩陣,采用匈牙利算法進行最小代價的二分圖匹配,計算實際的圖編輯距離:NodeCost為節(jié)點代價,EdgeCost為邊代價,其中節(jié)點代價為
C(σRV)為插入節(jié)點的代價,C(σIV)為連接兩個空節(jié)點的代價,C(σR)為圖形節(jié)點重命名代價。邊代價可以表示為
|Eg|為刪除邊代價,|Eh|為添加邊代價。匈牙利算法主要用于線性任務(wù)分配問題,從二分圖匹配的代價矩陣出發(fā),使完全匹配變成最大匹配,滿足二分圖的最大匹配問題[10-11]。利用構(gòu)建的故障樹模型,葉子節(jié)點數(shù)量越多,過濾出不相干節(jié)點的能力越強,進而提高惡意代碼檢測效率。
軟件的漏洞主要來源于軟件設(shè)計缺陷以及編碼漏洞,如果軟件漏洞遭到惡意代碼的攻擊,勢必會對軟件安全造成極大威脅,軟件漏洞的定位對于軟件修復(fù)與升級工作具有重要意義。因此,提出了基于規(guī)則網(wǎng)絡(luò)特征進行補丁比對和漏洞定位方法。以逆向工程得到的軟件函數(shù)調(diào)用圖為基礎(chǔ)[12-13],將軟件看作由多個節(jié)點和邊構(gòu)成的規(guī)則網(wǎng)絡(luò),如圖6所示。
圖6 規(guī)則網(wǎng)絡(luò)
將待測試軟件的函數(shù)調(diào)用圖視為一個規(guī)則網(wǎng)絡(luò),用該網(wǎng)絡(luò)的特征量來表示軟件的圖結(jié)構(gòu)特征[14]。需要提取的規(guī)則網(wǎng)絡(luò)特征量主要包括平均路徑長度、節(jié)點分布以及網(wǎng)絡(luò)中的集聚系數(shù)、介數(shù)以及連通集團,其中平均路徑長度的計算式為
i、j為網(wǎng)絡(luò)中任意兩點,Sij為最短路徑集合,SL(Sij)為最短路徑的長度,n為節(jié)點數(shù)量。完成上述特征量計算后,生成并對比結(jié)構(gòu)化簽名,根據(jù)連通集團遞歸分裂原理獲取兩個補丁之間的結(jié)構(gòu)差異,進而定位漏洞產(chǎn)生的粗略函數(shù)級位置[15],在此基礎(chǔ)上通過對控制流程圖級的分析進行漏洞位置的精準定位。漏洞定位流程如圖7所示。
圖7 漏洞定位流程圖
至此完成了多媒體后期處理軟件安全性能測試方法設(shè)計。
為了驗證本文設(shè)計的多媒體后期處理軟件安全性能測試方法的有效性,需要進行實驗。首先確定實驗環(huán)境和所用工具,如表1所示。
表1 實驗環(huán)境和工具
設(shè)置實驗對象,在某多媒體后期處理軟件中設(shè)置主要包括以下幾種類型的代碼:蠕蟲、木馬、后門等惡意代碼和非惡意代碼共4 510個樣本。其中,節(jié)點個數(shù)區(qū)間分布如表2:
表2 節(jié)點個數(shù)區(qū)間分布
在上述實驗環(huán)境下,使用本文方法與傳統(tǒng)方法對該軟件進行安全性能測試,統(tǒng)計惡意代碼的命中率,并將實驗結(jié)果進行對比。
本文實驗主要對惡意代碼命中率進行對比,命中率為檢測樣本中K個最近鄰居是同類型惡意代碼的數(shù)量與總數(shù)K的比值,從惡意代碼庫中隨機選取8個樣本,進行對比測試,結(jié)果如表3:
表3 檢測結(jié)果對比
統(tǒng)計上述隨機選取樣本的惡意代碼命中率,并計算平均命中率。本文方法的平均命中率為82.4%,傳統(tǒng)方法的平均命中率為70.4%,驗證了本文設(shè)計的多媒體后期處理軟件安全性能測試方法的優(yōu)越性。
本文設(shè)計的多媒體后期處理軟件安全性能測試方法主要是從測試角度出發(fā),發(fā)現(xiàn)軟件本身或運行環(huán)境中的潛在危險,建立安全性能測試的故障樹模型,利用該模型對軟件工作環(huán)境進行定性分析,確定出現(xiàn)安全問題的原因并計算安全問題出現(xiàn)的概率。利用編譯逆向工程的靜態(tài)反編匯過程,解決最小代價的二分圖匹配問題,利用二分圖法代價矩陣濾出不相干節(jié)點,進而提高惡意代碼檢測效率。基于規(guī)則網(wǎng)絡(luò)特征進行補丁比對,找到補丁之間的結(jié)構(gòu)差異完成漏洞的定位。實驗結(jié)果表明,本文方法在提高惡意代碼的變種檢測命中率方面具有有效性。