本發(fā)明實施例涉及網(wǎng)絡信息安全,特別是涉及一種基于程序分析的java模糊測試方法。
背景技術(shù):
1、現(xiàn)有針對java的模糊測試方法在系統(tǒng)級測試時,大部分代碼的運行覆蓋率偏低,且無法在較短時間內(nèi)通過模糊測試方式提高。存在測試時間充足的情況下,對被測目標測試覆蓋率偏低的問題。
2、公開號為cn118427830a、名稱為“基于模糊測試的java反序列化漏洞挖掘方法、設備及介質(zhì)”的發(fā)明專利,公開了基于模糊測試的java反序列化漏洞挖掘方法,所述方法包括:通過雙向追蹤污點分析技術(shù),分別將java反序列化入口函數(shù)與危險函數(shù)作為起點進行搜索,查找潛在漏洞調(diào)用鏈,并獲取對應執(zhí)行路徑中的函數(shù)信息;基于trustrank算法的函數(shù)權(quán)值分配策略,確定對應的函數(shù)類型,并計算每種函數(shù)類型對應的trustrank權(quán)重系數(shù),以按照trustrank權(quán)重系數(shù)由高到低的順序?qū)瘮?shù)進行排序;所述函數(shù)類型包括危險函數(shù)、路徑函數(shù)、可疑函數(shù)及分支函數(shù);基于所述函數(shù)調(diào)用信息以及對應的trustrank權(quán)重系數(shù),并通過灰盒模糊測試,對所述漏洞調(diào)用鏈進行模糊測試,以確定所述漏洞調(diào)用鏈對應的有效性,完成對java反序列化漏洞的挖掘。然而該方法較為復雜,測試效率不高。
3、因此,有必要提供一種基于程序分析的java模糊測試方法,以解決上述問題。
技術(shù)實現(xiàn)思路
1、本發(fā)明提供一種基于程序分析的java模糊測試方法,通過程序分析可以獲得的接口參數(shù)以及接口調(diào)用順序的測試用例數(shù)據(jù),可以大幅增加模糊測試較難探索到的業(yè)務邏輯,從而增加被測對象的覆蓋率,基于覆蓋率的提升,模糊測試探索到的路徑增多,又可以促使更多的未逾期缺陷被發(fā)現(xiàn)。
2、本發(fā)明實施例提供一種基于程序分析的java模糊測試方法,包括:
3、獲取被測程序的二進制文件包;
4、對所述二進制文件包進行ast解析;
5、解析所述二進制文件包的語法樹的各層節(jié)點,獲得所有類、所有方法下的所有條件分支;
6、通過所述各層節(jié)點調(diào)用的反向推導,解析所述二進制文件包各分支判斷參數(shù)的調(diào)用鏈路關(guān)系;
7、判斷所述調(diào)用鏈路關(guān)系是單接口調(diào)用或跨接口調(diào)用。
8、優(yōu)選地,當所述調(diào)用鏈路關(guān)系是單接口調(diào)用時,對所述單接口進行魔數(shù)解析,判斷所述魔數(shù)是常量或配置文件字段;
9、當所述魔數(shù)是常量字段時,將常量映射至接口變量;
10、當所述魔數(shù)是配置文件字段時,將對應變量映射至所述配置文件字段。
11、優(yōu)選地,還包括:
12、生成單接口的測試數(shù)據(jù)與變更指定配置文件字段的調(diào)用方式。
13、優(yōu)選地,還包括:
14、當所述調(diào)用鏈路關(guān)系是跨接口調(diào)用時,對接口關(guān)系進行解析;
15、通過二進制反編譯方法所述二進制文件包反編譯出程序源代碼;
16、對所述源代碼中包含的java代碼文件以及各類xml資源包文件進行解析。
17、優(yōu)選地,判斷所述源代碼中是否有sql操作;
18、當所述源代碼中有sql操作時,則通過解析將對所述sql操作的方式、字段映射至接口,將解析出來的緩存操作與接口的關(guān)系存入接口關(guān)系分析池中;
19、當所述源代碼中沒有sql操作時,則判斷所述源代碼中是否有緩存操作。
20、優(yōu)選地,所述判斷所述源代碼中是否有緩存操作包括:
21、當所述源代碼中有緩存操作時,則通過解析將對緩存操作的方式、字段映射至接口,將解析出來的緩存操作與接口的關(guān)系存入所述接口關(guān)系分析池中;
22、當所述源代碼中沒有緩存操作時,則判斷所述源代碼中是否有文件操作。
23、優(yōu)選地,所述判斷所述源代碼中是否有文件操作包括:
24、當所述源代碼中有文件操作時,則通過解析將對文件操作的方式、字段映射至接口,將解析出來的文件操作與接口的關(guān)系存入所述接口關(guān)系分析池中;
25、當所述源代碼中沒有文件操作時,則判斷所述源代碼中是否有消息操作。
26、優(yōu)選地,所述判斷所述源代碼中是否有消息操作包括:
27、當所述源代碼中有消息操作時,則通過解析將對消息操作的方式、字段映射至接口,將解析出來的消息操作與接口的關(guān)系存入所述接口關(guān)系分析池中;
28、當所述源代碼中沒有消息操作時,則對所述接口關(guān)系分析池中保存的接口關(guān)系數(shù)據(jù)進行動態(tài)運行探索。
29、優(yōu)選地,還包括對所述接口關(guān)系分析池中保存的接口關(guān)系數(shù)據(jù)進行動態(tài)運行探索;
30、使用路徑探索算法對接口調(diào)用關(guān)系的所有組合進行廣度優(yōu)先的探索生成;
31、將生成的接口調(diào)用關(guān)系、接口測試數(shù)據(jù)與配置步驟進行運行測試并收集運行覆蓋率。
32、優(yōu)選地,還包括以下步驟:
33、如果該接口調(diào)用關(guān)系、接口測試數(shù)據(jù)與配置步驟有產(chǎn)生新的路徑,則為有效的測試用例;
34、如果未產(chǎn)生新的路徑,則繼續(xù)通過算法生成新的測試用例進行測試,直至對接口關(guān)系分析池完成探索;
35、輸出所有有效的測試用例。
36、與現(xiàn)有技術(shù)相比,本發(fā)明實施例的技術(shù)方案具有以下有益效果:
37、本發(fā)明實施例提供的一種基于程序分析的java模糊測試方法,包括:獲取被測程序的二進制文件包;對所述二進制文件包進行ast解析;解析所述二進制文件包的語法樹的各層節(jié)點,獲得所有類、所有方法下的所有條件分支;通過所述各層節(jié)點調(diào)用的反向推導,解析所述二進制文件包各分支判斷參數(shù)的調(diào)用鏈路關(guān)系;判斷所述調(diào)用鏈路關(guān)系是單接口調(diào)用或跨接口調(diào)用,通過程序分析可以獲得的接口參數(shù)以及接口調(diào)用順序的測試用例數(shù)據(jù),可以大幅增加模糊測試較難探索到的業(yè)務邏輯,從而增加被測對象的覆蓋率,基于覆蓋率的提升,模糊測試探索到的路徑增多,又可以促使更多的未逾期缺陷被發(fā)現(xiàn)。
1.一種基于程序分析的java模糊測試方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的基于程序分析的java模糊測試方法,其特征在于,當所述調(diào)用鏈路關(guān)系是單接口調(diào)用時,對所述單接口進行魔數(shù)解析,判斷所述魔數(shù)是常量或配置文件字段;
3.根據(jù)權(quán)利要求2所述的基于程序分析的java模糊測試方法,其特征在于,還包括:
4.根據(jù)權(quán)利要求3所述的基于程序分析的java模糊測試方法,其特征在于,還包括:
5.根據(jù)權(quán)利要求4所述的基于程序分析的java模糊測試方法,其特征在于,判斷所述源代碼中是否有sql操作;
6.根據(jù)權(quán)利要求5所述的基于程序分析的java模糊測試方法,其特征在于,所述判斷所述源代碼中是否有緩存操作包括:
7.根據(jù)權(quán)利要求5所述的基于程序分析的java模糊測試方法,其特征在于,所述判斷所述源代碼中是否有文件操作包括:
8.根據(jù)權(quán)利要求7所述的基于程序分析的java模糊測試方法,其特征在于,所述判斷所述源代碼中是否有消息操作包括:
9.根據(jù)權(quán)利要求5-8任一項所述的基于程序分析的java模糊測試方法,其特征在于,還包括對所述接口關(guān)系分析池中保存的接口關(guān)系數(shù)據(jù)進行動態(tài)運行探索;
10.根據(jù)權(quán)利要求9所述的基于程序分析的java模糊測試方法,其特征在于,還包括以下步驟: