摘要:本文介紹了軟件脆弱性檢測(cè)方案,分別從污點(diǎn)分析、內(nèi)存定位和測(cè)試數(shù)據(jù)生成三個(gè)方面,分析了軟件脆弱性檢測(cè)關(guān)鍵技術(shù),在此基礎(chǔ)上,基于這些技術(shù),構(gòu)建相關(guān)系統(tǒng),并驗(yàn)證系統(tǒng)在軟件脆弱性檢測(cè)中的應(yīng)用效果。結(jié)論證實(shí),本次開(kāi)發(fā)系統(tǒng)在軟件脆弱性檢測(cè)中有良好的效果,可以推廣使用。
關(guān)鍵詞:軟件;脆弱性;檢測(cè)技術(shù)
計(jì)算機(jī)現(xiàn)已成為人們?nèi)粘9ぷ?、學(xué)習(xí)和生活中,不可或缺的工具之一,計(jì)算機(jī)的各種功能都是通過(guò)應(yīng)用軟件來(lái)予以實(shí)現(xiàn)。如果軟件本身存在漏洞,那么會(huì)對(duì)計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)信息安全性構(gòu)成威脅。所以需要對(duì)軟件進(jìn)行脆弱性測(cè)試,根據(jù)測(cè)試結(jié)果,對(duì)軟件的性能進(jìn)行優(yōu)化,從而使其在滿足計(jì)算機(jī)應(yīng)用需求的前提下,保證系統(tǒng)安全。鑒于此,選擇合理可行的技術(shù),對(duì)軟件進(jìn)行脆弱性檢測(cè)顯得尤為必要。
1 軟件脆弱性檢測(cè)方案
軟件是計(jì)算機(jī)系統(tǒng)的重要組成部分之一,它是由數(shù)據(jù)和指令構(gòu)成,比較常見(jiàn)的有系統(tǒng)軟件,如Windows、LINUX等,應(yīng)用軟件。其中應(yīng)用軟件與計(jì)算機(jī)的使用功能密切相關(guān),尤其是在網(wǎng)絡(luò)、通信技術(shù)不斷發(fā)展的推動(dòng)下,使得大量應(yīng)用軟件都具備了通信能力,與此同時(shí),安全隱患隨之出現(xiàn)。為進(jìn)一步降低網(wǎng)絡(luò)通信軟件的安全威脅,應(yīng)當(dāng)及時(shí)發(fā)現(xiàn)軟件中存在的漏洞,這一目標(biāo)的實(shí)現(xiàn),需要借助相應(yīng)的測(cè)試技術(shù),比較常用的為Fuzzing(模糊測(cè)試)技術(shù)。從目前的情況來(lái)看,F(xiàn)uuing技術(shù)是軟件脆弱性檢測(cè)的主要手段。在對(duì)軟件脆弱性進(jìn)行研究中,具體的思路如下:借助內(nèi)存定位技術(shù),對(duì)軟件程序的內(nèi)部障礙點(diǎn)進(jìn)行準(zhǔn)確定位,在此基礎(chǔ)上,對(duì)軟件程序的脆弱性進(jìn)行間接檢測(cè),當(dāng)發(fā)現(xiàn)軟件中存在漏洞之后,通過(guò)加密數(shù)據(jù)的重新構(gòu)建,完成漏洞驗(yàn)證[1]。具體方案的實(shí)現(xiàn)中,需要運(yùn)用到的關(guān)鍵技術(shù)包括污點(diǎn)分析優(yōu)化技術(shù)、內(nèi)存定位技術(shù)、測(cè)試數(shù)據(jù)生成技術(shù)。
2 軟件脆弱性檢測(cè)關(guān)鍵技術(shù)
2.1 污點(diǎn)分析優(yōu)化技術(shù)
在Fuzzing技術(shù),污點(diǎn)分析是基礎(chǔ)性技術(shù)之一,它能夠?yàn)閮?nèi)存定位、測(cè)試數(shù)據(jù)生成等技術(shù)提供強(qiáng)有力的支撐。然而,從目前的情況來(lái)看,現(xiàn)有的污點(diǎn)分析技術(shù)存在一些缺陷,如耗時(shí)、性能不高等。為此,需要對(duì)該技術(shù)進(jìn)行優(yōu)化。具體的優(yōu)化思路如下:以靜態(tài)分析方法對(duì)污點(diǎn)在計(jì)算機(jī)網(wǎng)絡(luò)中的傳播過(guò)程進(jìn)行優(yōu)化,利用所得的結(jié)果對(duì)動(dòng)態(tài)污點(diǎn)分析進(jìn)行指導(dǎo)。
2.1.1 優(yōu)化流程
當(dāng)需要對(duì)某個(gè)輸入數(shù)據(jù)進(jìn)行分析時(shí),可對(duì)PIN(二進(jìn)制插樁工具)加以利用,通過(guò)跟蹤目標(biāo)軟件處理數(shù)據(jù)的過(guò)程,從而獲得基本塊信息。在這個(gè)過(guò)程當(dāng)中,因?yàn)槌瞬鍢斗治鲋猓恍枰龠M(jìn)行其它操作,所以能夠大幅降低時(shí)間開(kāi)銷(xiāo);借助基本塊信息,以翻譯的方法,可將之轉(zhuǎn)化為T(mén)IR(污染傳播中間表示);隨后可在TIR上對(duì)污點(diǎn)傳播的相關(guān)內(nèi)容進(jìn)行優(yōu)化,如消除死代碼、對(duì)傳播進(jìn)行復(fù)寫(xiě)等,進(jìn)而得到經(jīng)過(guò)優(yōu)化以后的TIR,據(jù)此生成與插樁點(diǎn)信息相對(duì)應(yīng)的歷程函數(shù),以便后續(xù)調(diào)用;再次對(duì)軟件處理輸入數(shù)據(jù)的過(guò)程進(jìn)行跟蹤,按照靜態(tài)分析所得結(jié)果中的分析歷程,完成對(duì)數(shù)據(jù)的動(dòng)態(tài)污點(diǎn)分析 [2]。
2.1.2 傳播優(yōu)化
對(duì)污點(diǎn)分析的優(yōu)化實(shí)質(zhì)上就是對(duì)傳播過(guò)程的優(yōu)化,在具體優(yōu)化時(shí),TIR的位置會(huì)發(fā)生移動(dòng),其目的在于將無(wú)用的傳播過(guò)程去除掉。鑒于此,要對(duì)表達(dá)式中變量的生存周期加以明確,以此來(lái)確保傳播過(guò)程的一致性。由TIR可知,寄存器變量、內(nèi)存變量以及常量是表達(dá)式的基本構(gòu)成要素,而死代碼消除的思路為冗余代碼的消除,復(fù)寫(xiě)傳播可以采用的算法為Copy Prop Taint[3]。
2.1.3優(yōu)化效果
為對(duì)優(yōu)化后的污點(diǎn)分析技術(shù)性能進(jìn)行驗(yàn)證,以隨機(jī)的方式選取應(yīng)用軟件進(jìn)行測(cè)試,利用基本塊信息對(duì)數(shù)據(jù)進(jìn)行優(yōu)化,結(jié)果表明,經(jīng)過(guò)優(yōu)化后的污點(diǎn)分析技術(shù)的時(shí)間開(kāi)銷(xiāo)大幅度減少,性能顯著提升,達(dá)到預(yù)期中的效果。
2.2 內(nèi)存定位技術(shù)
在測(cè)試數(shù)據(jù)生成中,定位解密數(shù)據(jù)是不可或缺的關(guān)鍵性依據(jù)。由于本文所研究的是軟件脆弱性檢測(cè),所以?xún)?nèi)存定位技術(shù)中的內(nèi)存主要是指解密數(shù)據(jù)所在的內(nèi)存,并不是計(jì)算機(jī)系統(tǒng)的內(nèi)存。內(nèi)存定位技術(shù)除了要具有通用性之外,還應(yīng)能夠?qū)崿F(xiàn)快速定位,基于這一前提,對(duì)該技術(shù)進(jìn)行具體分析。下面提出兩種解密內(nèi)存定位方法,一種是通用定位,該方法依托的是循環(huán)1/O,即輸入/輸出;另一種是快速定位,該方法基于的是高依賴(lài)度。
2.2.1通用定位法
本文提出的解密內(nèi)存通用定位的方法基于的是循環(huán)1/O的思路,具體而言,所有的數(shù)據(jù)在進(jìn)行加密和解密時(shí),都需要進(jìn)行若干次迭代,也就是說(shuō),密碼函數(shù)的實(shí)現(xiàn)是以循環(huán)結(jié)構(gòu)為基礎(chǔ),而解密內(nèi)存則是在循環(huán)迭代中生成[4]。鑒于此,可對(duì)動(dòng)態(tài)定位方法加以利用,以此來(lái)實(shí)現(xiàn)密碼函數(shù)循環(huán)結(jié)構(gòu)的定位,進(jìn)而分析該結(jié)構(gòu)中的1/O,收集與解密數(shù)據(jù)有關(guān)的內(nèi)存,最后依據(jù)解密數(shù)據(jù)本身所具備的特性,從而將解密內(nèi)存篩選出來(lái)。具體的定位流程如下:跟蹤密碼函數(shù)的執(zhí)行軌跡,并對(duì)循環(huán)結(jié)構(gòu)中的內(nèi)存參數(shù)進(jìn)行聚合,包括識(shí)別、構(gòu)建和合并,最后完成解密內(nèi)存的篩選。
2.2.2快速定位法
上文中以循環(huán)1/O為依托的定位方法通用性雖然比較強(qiáng),但在實(shí)際應(yīng)用中發(fā)現(xiàn),該方法存在一些不足,即必須對(duì)密碼函數(shù)進(jìn)行預(yù)先定位,以此來(lái)對(duì)后續(xù)的分析范圍進(jìn)行確定。不僅如此,還要對(duì)執(zhí)行軌跡進(jìn)行動(dòng)態(tài)跟蹤,進(jìn)而完成對(duì)循環(huán)結(jié)構(gòu)的識(shí)別,整個(gè)流程的繁瑣程度比較高,進(jìn)一步增大了時(shí)間開(kāi)銷(xiāo)。為縮短時(shí)間開(kāi)銷(xiāo),可以采取快速定位,該方法以高依賴(lài)度為基礎(chǔ),除了能夠?qū)饷軆?nèi)存進(jìn)行快速、準(zhǔn)確定位之外。同時(shí),只需要在污點(diǎn)分析中完成定位即可。相關(guān)研究結(jié)果表明,依賴(lài)度本身具有迭代的特點(diǎn),當(dāng)兩個(gè)內(nèi)存有著較高的依賴(lài)度關(guān)系時(shí),與這兩個(gè)內(nèi)存中任意一個(gè)內(nèi)存相關(guān)的數(shù)據(jù),都與另一個(gè)內(nèi)存具有依賴(lài)關(guān)系。高依賴(lài)度是一個(gè)條件,它的存在能夠使數(shù)據(jù)與內(nèi)存之間相關(guān)聯(lián)。而定位必須確保準(zhǔn)確,所以還要設(shè)置相關(guān)的約束條件,包括解密內(nèi)存的字節(jié)≥4個(gè);生成后能夠被讀取[5];同時(shí)定位多個(gè)高依賴(lài)度內(nèi)存,會(huì)將最先定位到視作為解密內(nèi)存。
2.2.3通用與快速定位的對(duì)比
兩種定位方法都存在一定的優(yōu)缺點(diǎn),但確定都能對(duì)解密內(nèi)存進(jìn)行定位。故此需要二者的適用范圍進(jìn)行明確。通用定位法本身具有較強(qiáng)的通用性特點(diǎn),對(duì)于絕大部分的解密內(nèi)存全部適用。而快速定位法的定位速度較快,能夠節(jié)省時(shí)間開(kāi)銷(xiāo),但卻并不適用于加密前的內(nèi)存和流密碼。鑒于此,若是流密碼,應(yīng)當(dāng)選擇通用定位法,如果為分組密碼,那么可以選用快速定位法。
2.3測(cè)試數(shù)據(jù)生成技術(shù)
在軟件脆弱性檢測(cè)中,測(cè)試數(shù)據(jù)生成是關(guān)鍵,上文的定位方法也是為生成服務(wù)。在此需要著重指出的一點(diǎn)是,以定位的方法獲得解密內(nèi)存只是生成測(cè)試數(shù)據(jù)的基礎(chǔ)條件,僅僅憑借這個(gè)條件,還無(wú)法基于加密的通信軟件,構(gòu)造出相應(yīng)的測(cè)試數(shù)據(jù)。所以,應(yīng)當(dāng)進(jìn)行分解重構(gòu),這樣才能順利完成軟件測(cè)試數(shù)據(jù)的生成。分解是重構(gòu)的依據(jù),分解時(shí),要對(duì)加密和解密內(nèi)存進(jìn)行準(zhǔn)確定位,這是非常關(guān)鍵的環(huán)節(jié)[6] 。除此之外,還需要對(duì)完整性檢查點(diǎn)進(jìn)行定位。在對(duì)完整性進(jìn)行定位的過(guò)程中,可以采用快速定位法,當(dāng)需要將完整性檢查機(jī)制關(guān)閉時(shí),則可繞過(guò)檢查點(diǎn)。在此著重闡明一點(diǎn),通過(guò)對(duì)被測(cè)試軟件程序進(jìn)行修改,將完整性檢查功能禁用的主要目的是為了證明檢查點(diǎn)后有無(wú)漏洞,即以重構(gòu)的方法按預(yù)期目標(biāo)對(duì)樣本進(jìn)行解密。
3 軟件脆弱性檢測(cè)技術(shù)的具體應(yīng)用
依托上文的關(guān)鍵技術(shù),設(shè)計(jì)開(kāi)發(fā)一套用于軟件脆弱性檢測(cè)的系統(tǒng),該系統(tǒng)的特點(diǎn)體現(xiàn)在如下幾個(gè)方面:可以對(duì)加密數(shù)據(jù)在軟件內(nèi)的污點(diǎn)傳播過(guò)程進(jìn)行跟蹤;能夠?qū)饷軆?nèi)存進(jìn)行自動(dòng)定位等[7]。下面重點(diǎn)對(duì)系統(tǒng)的構(gòu)建及應(yīng)用進(jìn)行分析。
3.1系統(tǒng)構(gòu)建
3.1.1系統(tǒng)主要模塊
本次設(shè)計(jì)開(kāi)發(fā)的系統(tǒng)采用較為流行的模塊化設(shè)計(jì)理念,整個(gè)系統(tǒng)由三個(gè)模塊組成,即動(dòng)態(tài)分析模塊、數(shù)據(jù)定位模塊、測(cè)試模塊。各模塊的功能如下:
(1)動(dòng)態(tài)分析模塊的主要功能是以插樁工具分析目標(biāo)軟件,對(duì)分析所得的信息進(jìn)行記錄,該模塊由跟蹤和記錄兩個(gè)子模塊構(gòu)成。
(2)數(shù)據(jù)定位模塊最為重要的功能是定位關(guān)鍵信息,該模塊由以下兩個(gè)子模塊組成:內(nèi)存定位、檢查點(diǎn)定位。
(3)測(cè)試模塊負(fù)責(zé)對(duì)軟件的脆弱性進(jìn)行檢測(cè),這是整個(gè)系統(tǒng)的核心模塊,直接關(guān)系到檢測(cè)結(jié)果的準(zhǔn)確性。
3.1.2模塊設(shè)計(jì)
在本次開(kāi)發(fā)的系統(tǒng)中,測(cè)試模塊是核心。因此,重點(diǎn)對(duì)該模塊的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程進(jìn)行分析。系統(tǒng)的測(cè)試模塊能夠按照定位的解密內(nèi)存,對(duì)軟件進(jìn)行脆弱性測(cè)試,構(gòu)成測(cè)試模塊的子模塊有三個(gè),分別為數(shù)據(jù)構(gòu)造、內(nèi)存測(cè)試和異常樣本修復(fù)。
(1)數(shù)據(jù)構(gòu)造模塊可以將經(jīng)過(guò)定位所得的解密內(nèi)存作為主要對(duì)象,據(jù)此生成能夠用于測(cè)試的具體用例。本系統(tǒng)在數(shù)據(jù)構(gòu)造方面采用的是污點(diǎn)分析的方法,由此能夠解決測(cè)試盲目性的問(wèn)題[7]。其中污點(diǎn)分析是經(jīng)過(guò)優(yōu)化之后的技術(shù),對(duì)傳播過(guò)程的跟蹤,可得到數(shù)據(jù)輸入?yún)^(qū)域,并使測(cè)試用例對(duì)相關(guān)函數(shù)產(chǎn)生直接影響。
(2)內(nèi)存測(cè)試模塊的主要對(duì)象為解密內(nèi)存,針對(duì)該內(nèi)存進(jìn)行模糊測(cè)試,在這一過(guò)程中找出軟件內(nèi)部存在的漏洞,即脆弱點(diǎn)。Fuzzing技術(shù)可以借助恢復(fù)點(diǎn),對(duì)軟件的指定內(nèi)存進(jìn)行自動(dòng)變異,并在軟件運(yùn)行到預(yù)先設(shè)定好的恢復(fù)點(diǎn)時(shí),將軟件程序恢復(fù)到初始的狀態(tài)。在對(duì)恢復(fù)點(diǎn)進(jìn)行確定時(shí),需要利用解密內(nèi)存的生成時(shí)機(jī),并按照測(cè)試深度,對(duì)恢復(fù)點(diǎn)進(jìn)行合理選擇。
(3)在本系統(tǒng)中,異常樣本修復(fù)模塊可用于加密后的樣本重構(gòu),它以通用定位法,對(duì)密碼函數(shù)所讀的內(nèi)存進(jìn)行準(zhǔn)確定位,并使該內(nèi)存與解密內(nèi)存相匹配,進(jìn)而獲得候選緩沖區(qū),再以回溯的方法,對(duì)會(huì)話數(shù)據(jù)進(jìn)行還原,當(dāng)該數(shù)據(jù)在源緩沖區(qū)內(nèi)生成后,可以按變異字段完成篡改,攔截發(fā)送函數(shù),據(jù)此得到的數(shù)據(jù)即為加密后的異常樣本。
3.2具體應(yīng)用
為驗(yàn)證系統(tǒng)在軟件脆弱性方面的檢測(cè)能力,選取一款較為常用的通信軟件,軟件本身為網(wǎng)絡(luò)加密型,應(yīng)用該系統(tǒng)進(jìn)行測(cè)試分析。本次選擇的通信軟件為IRC軟件,該軟件為互聯(lián)網(wǎng)中繼聊天協(xié)議,是一款具有即時(shí)性特點(diǎn)的通信協(xié)議,為使通信過(guò)程的私密性得到有效保障,IRC服務(wù)器采用了數(shù)據(jù)加密技術(shù)。下面選取經(jīng)過(guò)SSL加密的IRC服務(wù)器軟件[8],運(yùn)用本文開(kāi)發(fā)的系統(tǒng),對(duì)其脆弱性進(jìn)行檢測(cè),驗(yàn)證系統(tǒng)的能力。
3.2.1 分解能力測(cè)試
隨機(jī)選取部分加密數(shù)據(jù)作為污染源,利用系統(tǒng)跟蹤軟件對(duì)這部分?jǐn)?shù)據(jù)的處理過(guò)程,依托快速定位法對(duì)解密內(nèi)存進(jìn)行定位,由定位結(jié)果可知,解密數(shù)據(jù)所在內(nèi)存的依賴(lài)度為Ox18。之后輸出若干個(gè)高依賴(lài)度的內(nèi)存,這部分內(nèi)存依賴(lài)度均高于解密內(nèi)存。若是將解密內(nèi)存視作為污染源,則經(jīng)計(jì)算所得的校驗(yàn)值與解密內(nèi)存自帶的校驗(yàn)值相等。由此說(shuō)明,系統(tǒng)具備對(duì)軟件分解的能力。
3.2.2重構(gòu)能力測(cè)試
通過(guò)本文開(kāi)發(fā)的系統(tǒng)對(duì)軟件進(jìn)行脆弱性測(cè)試的過(guò)程中,并未發(fā)現(xiàn)軟件中有異常樣本存在,導(dǎo)致這一情況的主要原因如下:本次選取的IRC協(xié)議過(guò)于簡(jiǎn)單,加之測(cè)試空間有限,致使未能從中挖掘出漏洞;軟件應(yīng)用時(shí)間較長(zhǎng),經(jīng)過(guò)多次升級(jí)和維護(hù),存在漏洞的可能性比較小。雖然通過(guò)測(cè)試未能挖掘到軟件中的漏洞,但卻可以在測(cè)試的過(guò)程中,對(duì)系統(tǒng)重構(gòu)加密樣本的能力進(jìn)行驗(yàn)證。具體方法如下:假設(shè)在服務(wù)端存在一個(gè)需要變異的字段,如果字段經(jīng)過(guò)加密處理后所得的數(shù)據(jù)包能夠通過(guò)完整性檢查,那么表明系統(tǒng)具備重構(gòu)能力。經(jīng)過(guò)驗(yàn)證,系統(tǒng)重構(gòu)后的數(shù)據(jù)包順利通過(guò)完整性檢查,證明重構(gòu)有效。由此可見(jiàn),本次開(kāi)發(fā)的系統(tǒng)在軟件脆弱性測(cè)試中具有良好的效果,可以推廣使用。
4 結(jié)論
綜上所述,軟件脆弱性檢測(cè)是一項(xiàng)較為復(fù)雜的工作,為確保檢測(cè)結(jié)果的準(zhǔn)確性,應(yīng)當(dāng)選取合理可行的技術(shù),并以技術(shù)為支撐,構(gòu)建系統(tǒng),利用系統(tǒng)完成軟件脆弱性檢測(cè),從而發(fā)現(xiàn)軟件中存在的漏洞,及時(shí)進(jìn)行優(yōu)化。
參考文獻(xiàn)
[1]牧濤,楊寧.基于激光技術(shù)的工控網(wǎng)絡(luò)信息脆弱性檢測(cè)方法研究[J].激光雜志,2020 (6):58-62.
[2]鮑海燕.集成化網(wǎng)絡(luò)存儲(chǔ)安全脆弱性區(qū)域的檢測(cè)仿真[J].計(jì)算機(jī)仿真,2019 (9):376-379.
[3]楊超,郭云飛,扈紅超,劉文彥,霍樹(shù)民等.基于符號(hào)執(zhí)行的軟件緩存?zhèn)刃诺来嗳跣詸z測(cè)技術(shù)[J].電子學(xué)報(bào),2019 (6):1194-1200.
[4]王鈞玉.基于熵方法的計(jì)算機(jī)網(wǎng)絡(luò)脆弱性檢測(cè)和優(yōu)化[J].安徽電子信息職業(yè)技術(shù)學(xué)院學(xué)報(bào),2018 (2):1-4,8.
[5]劉玉敏,阮福,魯曉波,脆弱性網(wǎng)絡(luò)用戶信息安全性在線檢測(cè)仿真[J].計(jì)算機(jī)仿真,2018 (8):365-369.
[6]范銘,劉烴,劉均,羅夏樸,于樂(lè)等.安卓惡意軟件檢測(cè)方法綜述[J].中國(guó)科學(xué):信息科學(xué),2020 (8):1148-117 7.
[7]韓錦榮,張?jiān)?,朱子元,孟?基于底層數(shù)據(jù)流分析的惡意軟件檢測(cè)方法[J].信息安全學(xué)報(bào),2020 (4):123-137.
[8]高楊晨,方勇,劉亮,張磊.基于卷積神經(jīng)網(wǎng)絡(luò)的Android惡意軟件檢測(cè)技術(shù)研究[J].四川大學(xué)學(xué)報(bào)(自然科學(xué)版),2020 (4):167 3-680.
作者簡(jiǎn)介
傅偉玉(1980一),女,吉林省人。碩士學(xué)位,江蘇財(cái)經(jīng)職業(yè)技術(shù)學(xué)院,講師。研究方向?yàn)橛?jì)算機(jī)技術(shù),軟件技術(shù)與理論。