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