本發(fā)明屬于信息處理,更進(jìn)一步涉及信息安全中的一種融入原程序數(shù)據(jù)流的反模糊測(cè)試方法。本發(fā)明可用于軟件安全防護(hù)中,防止惡意人員利用模糊測(cè)試尋找軟件漏洞。
背景技術(shù):
1、模糊測(cè)試是一種自動(dòng)化的軟件測(cè)試技術(shù),廣泛的應(yīng)用于工業(yè)界,旨在發(fā)現(xiàn)潛在的軟件漏洞,從而提高軟件安全性。通過將模糊測(cè)試生成的異常數(shù)據(jù)輸入到被測(cè)試的程序中,觀察該程序的狀態(tài)以及反饋,如其崩潰情況、異常情況、代碼覆蓋率等反饋,以分析尋找程序的錯(cuò)誤和漏洞。模糊測(cè)試的執(zhí)行流程主要可以分為以下步驟:首先,定義輸入格式和生成有效或無效的隨機(jī)輸入數(shù)據(jù);然后,將這些輸入數(shù)據(jù)提供給被測(cè)試的軟件;接著,監(jiān)控軟件的行為,特別是異常行為、崩潰或內(nèi)存泄漏等;最后,記錄和分析異常情況,找出潛在的問題。通過這種方式,模糊測(cè)試能夠有效地發(fā)現(xiàn)許多傳統(tǒng)測(cè)試方法難以捕捉的漏洞和缺陷。然而惡意人員也可以通過利用該技術(shù)尋找漏洞以發(fā)起更復(fù)雜的攻擊或者將漏洞作為商品出售,增加了漏洞被濫用的風(fēng)險(xiǎn)。因而需要一種程序保護(hù)措施,降低模糊測(cè)試的有效性,避免程序漏洞被惡意人員利用。
2、程序數(shù)據(jù)流描述了數(shù)據(jù)在程序中從輸入到輸出的傳遞路徑。它涉及如何在程序的不同部分之間傳遞和處理數(shù)據(jù)。程序數(shù)據(jù)流包括變量和數(shù)據(jù)結(jié)構(gòu)的值如何在各個(gè)函數(shù)、條件判斷、循環(huán)體和其他控制結(jié)構(gòu)之間流動(dòng)。這些數(shù)據(jù)流動(dòng)路徑可以通過程序的代碼分支進(jìn)行動(dòng)態(tài)管理和控制。在程序的執(zhí)行過程中,代碼分支的邏輯決定了不同的數(shù)據(jù)流路徑。當(dāng)程序遇到條件分支時(shí),根據(jù)輸入數(shù)據(jù)或當(dāng)前狀態(tài)的不同,數(shù)據(jù)將沿著不同的路徑流動(dòng)。通過這種方式,程序數(shù)據(jù)流與代碼分支緊密結(jié)合,形成了復(fù)雜的程序行為。
3、反模糊測(cè)試是一種為了對(duì)抗和規(guī)避模糊測(cè)試工具的技術(shù),通過檢測(cè)模糊測(cè)試工具、插入延遲代碼、增加代碼分支、干擾崩潰檢測(cè)和使用哈希比較等手段,增強(qiáng)軟件的抗攻擊性,降低模糊測(cè)試工具發(fā)現(xiàn)漏洞的可能性。這些技術(shù)旨在提高軟件的安全性,使得自動(dòng)化測(cè)試工具更難以發(fā)現(xiàn)潛在的漏洞和缺陷,從而保護(hù)軟件免受未授權(quán)的攻擊和測(cè)試。
4、jinho?jung等人在其發(fā)表的論文“fuzzification:anti-fuzzing?techniques”(28th?usenixsecurity?symposium(usenix?security?19),2019,pp.1913-1930)中提出了一種保護(hù)二進(jìn)制軟件免受模糊測(cè)試技術(shù)攻擊的方法。該方法名為fuzzification,通過引入三種技術(shù)來實(shí)現(xiàn):(1)speedbump,通過將冷路徑中的延遲放大數(shù)百倍,從而使模糊測(cè)試變得更加緩慢;(2)branchtrap,通過隱藏路徑和污染覆蓋率圖來干擾反饋邏輯;(3)antihybrid,通過哈希比較和分組密碼加解密阻礙混合模糊測(cè)試中常用的動(dòng)態(tài)污點(diǎn)分析和符號(hào)執(zhí)行。這些技術(shù)有效減少了模糊測(cè)試工具發(fā)現(xiàn)的路徑數(shù)量和漏洞數(shù)量,且在用戶指定的開銷預(yù)算下保持了程序的正常運(yùn)行性能。但是,該方法仍然存在不足之處在于,干擾覆蓋率反饋的反模糊測(cè)試策略與原程序的數(shù)據(jù)流無關(guān),因此易被自動(dòng)刪除,且時(shí)間開銷較大,占用大量存儲(chǔ)。而與原程序數(shù)據(jù)流有關(guān)的哈希比較和分組密碼加解密方法,產(chǎn)生的代碼分支數(shù)量有限,使得反模糊測(cè)試效果有限。
5、yuekang?li等人在其發(fā)表的論文“vall-nut:principled?anti-greybox-fuzzing”(2021ieee?32nd?international?symposium?on?software?reliabilityengineering(issre),2021,pp.288-300)中提出了一種名為vall-nut的反灰盒模糊測(cè)試方法。該方法通過使用障礙生成器在目標(biāo)程序中植入模糊障礙代碼,削弱灰盒模糊測(cè)試的效果。vall-nut的步驟包括:(1)生成目標(biāo)程序的邊緣級(jí)頻率曲線,以確定錯(cuò)誤處理路徑;(2)注入模糊障礙代碼,這些代碼會(huì)擾亂種子評(píng)估、種子變異和反饋收集機(jī)制;(3)編譯并生成自保護(hù)的二進(jìn)制文件。該方法在多個(gè)實(shí)際程序的實(shí)驗(yàn)中表現(xiàn)出色,平均能減少34%的代碼覆蓋率和76%的崩潰次數(shù)。然而,該方法的局限性在于它所插入的模糊障礙代碼與原程序數(shù)據(jù)流無關(guān),易被數(shù)據(jù)流分析刪除。
6、zhengxiang?zhou等人在其發(fā)表的論文“no-fuzz:efficient?anti-fuzzingtechniques”(security?and?privacy?in?communication?networks,2023,pp.731-751)中提出了一種高效且自動(dòng)的反模糊測(cè)試方法,名為no-fuzz。該方法通過以下步驟實(shí)現(xiàn):(1)被動(dòng)檢測(cè)方法:開發(fā)了一種機(jī)制,能夠精確識(shí)別受保護(hù)程序是否正在經(jīng)歷二進(jìn)制模糊測(cè)試(bof),并在檢測(cè)到模糊測(cè)試時(shí)觸發(fā)緩解策略,比如引入延遲或終止程序執(zhí)行;(2)主動(dòng)干擾方法:通過設(shè)計(jì)最小化的假塊(fake?blocks),攻擊模糊測(cè)試的基本假設(shè),從而阻礙模糊測(cè)試器正常工作。這些假塊被優(yōu)化以實(shí)現(xiàn)最小的存儲(chǔ)開銷,并且利用隨機(jī)字節(jié)指令來擾亂模糊測(cè)試器的代碼覆蓋圖;(3)著陸空間(landing?space)技術(shù):在程序的函數(shù)中引入一段特殊的代碼區(qū)域,當(dāng)執(zhí)行到這段區(qū)域時(shí),控制流會(huì)被隨機(jī)重定向至區(qū)域內(nèi)的某個(gè)指令,以此生成虛假的代碼覆蓋信息,迷惑模糊測(cè)試器。該方法雖然在減少模糊測(cè)試分支覆蓋和阻礙模糊測(cè)試發(fā)現(xiàn)漏洞方面表現(xiàn)出色。但是,該方法仍然存在不足之處,其引入的假塊和著陸空間并沒有融入原程序的數(shù)據(jù)流,導(dǎo)致其假塊和著陸空間易被分析刪除。
7、北京電子科技學(xué)院在其申請(qǐng)的專利文獻(xiàn)“一種新型反模糊測(cè)試方法及裝置”(專利申請(qǐng)?zhí)枺篶n20231036096.5,申請(qǐng)公布號(hào):cn?116383066?a)中提出了一種反模糊測(cè)試方法。該方法包括如下步驟:步驟s1,編寫模板程序,可以選擇使用任意能夠提供注入功能的編程語言來編寫;步驟s2,讀取待加固二進(jìn)制程序,并轉(zhuǎn)化為步驟s1中模板程序的相應(yīng)的變量格式,并替換步驟s1中模板程序的相應(yīng)變量位置;步驟s3,將模板程序進(jìn)行編譯,即可獲得經(jīng)過反模糊加固的二進(jìn)制程序。該方法可以阻止所有基于插樁技術(shù)構(gòu)建的模糊測(cè)試器進(jìn)行模糊測(cè)試,即使可以運(yùn)行其效率也將降低,并且不會(huì)有崩潰反饋,有效的阻止了攻擊者對(duì)目標(biāo)程序進(jìn)行未授權(quán)的模糊測(cè)試,并且由于面向的目標(biāo)更底層,所以相比其他類型的反模糊測(cè)試技術(shù)適用范圍更廣,更加有效。但是,該方法仍然存在的不足之處在于,僅僅提供了模板程序的注入方式,沒有提供編寫融入原代碼數(shù)據(jù)流模板程序的方式。且該裝置將二進(jìn)制程序拷貝到其他內(nèi)存區(qū)域,可能會(huì)導(dǎo)致程序原本存在的軟件保護(hù)措施失效,如地址空間隨機(jī)化(aslr),數(shù)據(jù)執(zhí)行保護(hù)(dep)等,也容易引入新的漏洞,從而破壞了程序的安全措施。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于針對(duì)上述現(xiàn)有技術(shù)中的不足,提出一種融入原程序數(shù)據(jù)流的反模糊測(cè)試方法,用于解決當(dāng)前基于被動(dòng)防御的反模糊測(cè)試策略通常與原程序的數(shù)據(jù)流無關(guān),易被自動(dòng)化刪除,現(xiàn)有與原程序數(shù)據(jù)流有關(guān)的方法,產(chǎn)生的代碼分支數(shù)量有限,使得反模糊測(cè)試效果有限,以及現(xiàn)有的反模糊測(cè)試方法時(shí)間開銷大,且占用大量的存儲(chǔ)以及現(xiàn)有的反模糊測(cè)試裝置難以維護(hù)程序原有的安全措施的問題。
2、實(shí)現(xiàn)本發(fā)明目的的思路是:本發(fā)明采用精心構(gòu)造的多分支的遞歸函數(shù),使得不同值的數(shù)據(jù)經(jīng)過時(shí),會(huì)產(chǎn)生不同且大量的代碼分支。基于覆蓋率反饋的模糊測(cè)試以及結(jié)合符號(hào)執(zhí)行或污點(diǎn)分析的模糊測(cè)試,需要花費(fèi)大量的時(shí)間遍歷代碼分支,且能夠遍歷的代碼分支數(shù)量有限。本發(fā)明針對(duì)該弱點(diǎn)誤導(dǎo)基于覆蓋率反饋的模糊測(cè)試以及結(jié)合符號(hào)執(zhí)行或污點(diǎn)分析的模糊測(cè)試,解決了與原程序數(shù)據(jù)流有關(guān)的方法,產(chǎn)生的代碼分支數(shù)量有限,使得反模糊測(cè)試效果有限的問題。本發(fā)明設(shè)計(jì)了具有約束的遞歸函數(shù)而非隨機(jī)生成的代碼分支,根據(jù)不同的輸入數(shù)據(jù),進(jìn)入不同的分支路徑。具有約束的遞歸函數(shù),能夠引導(dǎo)模糊測(cè)試將更長更冗余的輸入種子選為優(yōu)秀種子。使得反模糊測(cè)試同樣的效果下,本發(fā)明給原程序增加的時(shí)間開銷更少。使用遞歸函數(shù),重復(fù)利用代碼,減少代碼存儲(chǔ)開銷。解決了現(xiàn)有反模糊測(cè)試技術(shù)時(shí)間開銷大,存儲(chǔ)開銷大的問題。本發(fā)明采用將原程序數(shù)據(jù)流的常量和表達(dá)式替換為復(fù)雜函數(shù)調(diào)用形式,使得新增加的代碼與原代碼語義相同,但是執(zhí)行路徑更加廣泛,且參與到程序的輸入輸出流中,解決了當(dāng)前基于被動(dòng)防御的反模糊測(cè)試策略通常與原程序的數(shù)據(jù)流無關(guān),易被自動(dòng)化分析刪除的問題。本發(fā)明設(shè)計(jì)了僅對(duì)源代碼進(jìn)行替換的裝置,通過代碼分析模塊對(duì)源碼信息進(jìn)行讀取與分析,代碼生成模塊,生成保護(hù)措施所需要的函數(shù),代碼替換模塊,將原目標(biāo)代碼替換為含義相同但更加復(fù)雜的代碼,沒有對(duì)內(nèi)存等敏感區(qū)域進(jìn)行大幅度操作修改,解決了現(xiàn)有反模糊測(cè)試方法破壞了原有程序軟件保護(hù)措施的問題。
3、實(shí)現(xiàn)本發(fā)明目的的技術(shù)方案步驟如下:
4、步驟1,分別生成多分支遞歸函數(shù)代碼、映射函數(shù)代碼、運(yùn)算函數(shù)代碼;
5、步驟2,將三種函數(shù)代碼插入源代碼,得到插入后的源代碼文件;
6、步驟3,從插入后的源代碼文件中選取一個(gè)未選過的除了插入的三個(gè)函數(shù)代碼之外的函數(shù);
7、步驟4,判斷所選函數(shù)是否存在注釋,若是,則執(zhí)行步驟3,否則,執(zhí)行步驟5;
8、步驟5,從所選函數(shù)中提取函數(shù)參數(shù)以及函數(shù)代碼;
9、步驟6,用映射函數(shù)代碼替換函數(shù)代碼中的常量;
10、步驟7,用運(yùn)算函數(shù)代碼替換函數(shù)代碼的表達(dá)式;
11、步驟8,對(duì)替換后的源代碼文件編譯后的程序進(jìn)行模糊測(cè)試。
12、本發(fā)明與現(xiàn)有技術(shù)相比較,具有以下優(yōu)點(diǎn):
13、第一,本發(fā)明采用精心構(gòu)造的多分支的遞歸函數(shù),使得不同值的數(shù)據(jù)經(jīng)過時(shí),會(huì)產(chǎn)生不同且大量的代碼分支,誤導(dǎo)基于覆蓋率反饋的模糊測(cè)試以及結(jié)合符號(hào)執(zhí)行或污點(diǎn)分析的模糊測(cè)試,解決了現(xiàn)有技術(shù)與原程序數(shù)據(jù)流有關(guān)方法產(chǎn)生的代碼分支數(shù)量有限,影響反模糊測(cè)試效果,使得本發(fā)明具有提高目標(biāo)程序反模糊測(cè)試效果的優(yōu)點(diǎn)。
14、第二,本發(fā)明設(shè)計(jì)了具有約束的遞歸函數(shù)而非隨機(jī)生成的代碼分支,根據(jù)不同的輸入數(shù)據(jù),進(jìn)入不同的分支路徑??朔爽F(xiàn)有反模糊測(cè)試技術(shù)時(shí)間開銷大,存儲(chǔ)開銷大的問題,使得本發(fā)明具有低時(shí)間開銷,低存儲(chǔ)開銷的優(yōu)點(diǎn)。
15、第三,本發(fā)明采用將原程序數(shù)據(jù)流的常量和表達(dá)式替換為復(fù)雜函數(shù)調(diào)用形式,克服了現(xiàn)有的基于被動(dòng)防御的反模糊測(cè)試策略通常與原程序的數(shù)據(jù)流無關(guān),易被自動(dòng)化分析刪除的缺陷,使得本發(fā)明具有提高反模糊測(cè)試技術(shù)魯棒性的優(yōu)點(diǎn)。
16、第四,本發(fā)明設(shè)計(jì)了僅對(duì)源代碼進(jìn)行替換的方法,通過代碼分析模塊對(duì)源碼信息進(jìn)行讀取與分析,生成保護(hù)措施所需要的函數(shù),將原目標(biāo)代碼替換為含義相同但更加復(fù)雜的代碼,沒有對(duì)內(nèi)存等敏感區(qū)域進(jìn)行大幅度操作修改,解決了現(xiàn)有反模糊測(cè)試方法破壞了原有程序軟件保護(hù)措施的缺陷,本發(fā)明具有保護(hù)程序完整性,提高程序安全性的優(yōu)點(diǎn)。