本發(fā)明涉及靜態(tài)分析漏洞挖掘領(lǐng)域,特別涉及一種基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法及系統(tǒng)。
背景技術(shù):
1、隨著計算機(jī)、互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,各類軟件與應(yīng)用程序給人們的生產(chǎn)生活帶來了極大的便利,伴隨而來的是軟件中隱藏的安全漏洞所帶來的安全隱患。許多安全漏洞與不安全的函數(shù)調(diào)用有關(guān),包括標(biāo)準(zhǔn)庫函數(shù)與api的誤用等。通過對函數(shù)調(diào)用的軌跡進(jìn)行分析,可以發(fā)現(xiàn)不安全的函數(shù)調(diào)用模式,從而發(fā)現(xiàn)漏洞。當(dāng)前,對函數(shù)調(diào)用的軌跡進(jìn)行分析主要有靜態(tài)與動態(tài)兩種方法。動態(tài)分析方法需要運(yùn)行程序,雖然準(zhǔn)確率較高,但存在代碼覆蓋率較低的問題,難以及時發(fā)現(xiàn)漏洞。靜態(tài)分析方法能夠基于事先定義的安全規(guī)則對程序中的所有函數(shù)調(diào)用軌跡進(jìn)行快速的分析,但由于安全規(guī)則的定義難以做到足夠完備,在漏洞挖掘時常出現(xiàn)大量漏報與誤報,應(yīng)用在工程實際中的存在一定困難。
技術(shù)實現(xiàn)思路
1、本發(fā)明主要解決與函數(shù)不安全調(diào)用相關(guān)的漏洞發(fā)現(xiàn)不完全的問題。
2、本發(fā)明第一方面提出了一種基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,包括:
3、利用大模型結(jié)合外部知識庫識別待測程序代碼中的危險函數(shù);
4、采用人機(jī)協(xié)同的方法對提取的危險函數(shù)調(diào)用軌跡進(jìn)行分析,獲取疑似存在漏洞的目標(biāo)函數(shù)調(diào)用軌跡;
5、從疑似存在漏洞的目標(biāo)函數(shù)調(diào)用軌跡中提取與漏洞相關(guān)的上下文信息,并填充至漏洞規(guī)則模板,利用填充后生成的規(guī)則對程序進(jìn)行掃描,完成漏洞挖掘。
6、作為一種優(yōu)選方案,所述利用大模型結(jié)合外部知識庫識別待測程序代碼中的危險函數(shù),具體包括:
7、查找待測程序代碼中所有函數(shù)調(diào)用,從中篩選出標(biāo)準(zhǔn)庫函數(shù);
8、對待測程序代碼進(jìn)行成分分析,確定待分析程序使用的開發(fā)框架與依賴庫;
9、采用大模型對確定的開發(fā)框架與依賴庫進(jìn)行分析,確定漏洞相關(guān)的api,并從所有函數(shù)調(diào)用篩選出對應(yīng)的api的主調(diào)函數(shù);
10、采用大模型對篩選出的標(biāo)準(zhǔn)庫函數(shù)和api的主調(diào)函數(shù)進(jìn)行功能識別,判斷其是否為待測程序中的敏感函數(shù);
11、匯總篩選出的標(biāo)準(zhǔn)庫函數(shù)、api的主調(diào)函數(shù)以及敏感函數(shù),得到所有危險函數(shù)。
12、作為一種優(yōu)選方案,所述采用人機(jī)協(xié)同的方法對提取的危險函數(shù)調(diào)用軌跡進(jìn)行分析,獲取疑似存在漏洞的目標(biāo)函數(shù)調(diào)用軌跡,具體包括:
13、生成函數(shù)調(diào)用圖,并以目標(biāo)函數(shù)調(diào)用為中心,確定符號執(zhí)行的入口點與執(zhí)行范圍;
14、利用約束下的符號執(zhí)行生成目標(biāo)函數(shù)調(diào)用軌跡;
15、對生成的目標(biāo)函數(shù)調(diào)用軌跡進(jìn)行特征編碼;
16、采用主動學(xué)習(xí)的方法對特征向量進(jìn)行學(xué)習(xí),對目標(biāo)函數(shù)調(diào)用軌跡中存在漏洞的可能性進(jìn)行打分;
17、將分?jǐn)?shù)高于預(yù)設(shè)閾值的函數(shù)調(diào)用軌跡視為疑似存在漏洞的目標(biāo)函數(shù)調(diào)用軌跡。
18、作為一種優(yōu)選方案,所述利用約束下的符號執(zhí)行生成目標(biāo)函數(shù)調(diào)用軌跡,具體包括:
19、從入口點函數(shù)開始進(jìn)行符號執(zhí)行,使用符號化變量作為函數(shù)的參數(shù);當(dāng)遇到函數(shù)調(diào)用時,如果該函數(shù)位于確定的符號執(zhí)行范圍內(nèi),則進(jìn)入該函數(shù),否則忽視調(diào)用指令并生成一個符號值作為調(diào)用的返回值,以此生成目標(biāo)函數(shù)的調(diào)用軌跡。
20、作為一種優(yōu)選方案,所述采用主動學(xué)習(xí)的方法對特征向量進(jìn)行學(xué)習(xí),對目標(biāo)函數(shù)調(diào)用軌跡中存在漏洞的可能性進(jìn)行打分,具體包括:
21、在未找到正樣本之前,將最偏遠(yuǎn)的負(fù)樣本的特征向量反饋給用戶,判斷其是否存在漏洞,從在特征空間中改變漏洞樣本的概率分布;
22、在找到正樣本之后,選擇距離正樣本最近,距離負(fù)樣本最遠(yuǎn)的樣本反饋給用戶,判斷其是否存在漏洞,從而在特征空間中改變漏洞樣本的概率分布;
23、重復(fù)在特征空間中改變漏洞樣本的概率分布的過程,直至分析完所需的樣本數(shù)量;
24、根據(jù)漏洞樣本的概率分布計算每個函數(shù)調(diào)用軌跡中存在漏洞的可能性進(jìn)行打分。
25、作為一種優(yōu)選方案,所述漏洞規(guī)則模板包括:
26、漏洞驗證模板,針對不同類型的漏洞所編寫的相應(yīng)驗證模板;
27、污點分析模板,定義有污點傳播規(guī)則,用于驗證漏洞的可達(dá)性。
28、作為一種優(yōu)選方案,利用漏洞驗證模板的驗證包括:
29、對疑似存在漏洞的目標(biāo)函數(shù)調(diào)用軌跡的漏洞類型進(jìn)行初步判斷;
30、選用相應(yīng)的漏洞驗證模板,根據(jù)疑似存在漏洞的目標(biāo)函數(shù)調(diào)用軌跡的上下文信息對漏洞驗證模板進(jìn)行填充;
31、利用填充后的漏洞驗證模板生成定制化的漏洞挖掘規(guī)則對程序進(jìn)行掃描,完成對漏洞的存在性確認(rèn)。
32、作為一種優(yōu)選方案,利用污點分析模板的驗證包括:
33、根據(jù)疑似存在漏洞的目標(biāo)函數(shù)調(diào)用軌跡的上下文信息對污點分析模板中的源和漏進(jìn)行填充;
34、運(yùn)行填充后的污點分析規(guī)則,判斷源與漏之間是否存在污點傳播路徑,從而確定該疑似存在漏洞的目標(biāo)函數(shù)調(diào)用是否會被不受信任的用戶輸入影響,完成漏洞的可達(dá)性驗證。
35、作為一種優(yōu)選方案,所述標(biāo)準(zhǔn)庫函數(shù)為c語言標(biāo)準(zhǔn)文檔中定義的實現(xiàn)內(nèi)存分配與復(fù)制、字符串操作、文件操作功能的標(biāo)準(zhǔn)庫函數(shù);所述api的主調(diào)函數(shù)包括與數(shù)據(jù)讀取、網(wǎng)絡(luò)通信、系統(tǒng)調(diào)用等功能相關(guān)的api的主調(diào)函數(shù);所述敏感函數(shù)為實現(xiàn)網(wǎng)絡(luò)通信、數(shù)據(jù)交互功能的敏感函數(shù)。
36、本發(fā)明第二方面提出了一種基于大模型的函數(shù)調(diào)用軌跡漏洞人機(jī)協(xié)同挖掘系統(tǒng),包括存儲器和處理器,所述存儲器上存儲有能夠被處理器加載并執(zhí)行如第一方面所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法對應(yīng)的計算機(jī)程序。
37、本發(fā)明以危險函數(shù)的調(diào)用軌跡為漏洞挖掘的抓手,利用大模型,采用人機(jī)協(xié)同的方式,將漏洞挖掘者納入到靜態(tài)漏洞挖掘的環(huán)路中,充分發(fā)揮漏洞挖掘者對漏洞產(chǎn)生機(jī)理的認(rèn)知優(yōu)勢提高漏洞挖掘的效率和準(zhǔn)確率。能夠覆蓋緩沖區(qū)溢出、空指針引用、內(nèi)存泄露等漏洞類型。相比現(xiàn)有技術(shù)擁有以下有益效果和優(yōu)點:
38、1.利用大模型準(zhǔn)確識別程序中的危險函數(shù),篩選出后期漏洞挖掘過程中需要重點關(guān)注的函數(shù),從而有效提升漏洞挖掘的效率;
39、2.引入人機(jī)協(xié)同的思想,在主動學(xué)習(xí)算法的輔助下,充分利用用戶的經(jīng)驗知識以最少的步驟篩選出程序中可能導(dǎo)致漏洞的函數(shù)調(diào)用,既保證了漏洞挖掘的準(zhǔn)確率,也提高了漏洞挖掘的效率;
40、3.由漏洞挖掘者從疑似存在漏洞的危險函數(shù)調(diào)用路徑中提取與漏洞有關(guān)的關(guān)鍵信息填充預(yù)先定義的漏洞規(guī)則模板,形成定制化的漏洞挖掘規(guī)則用于漏洞的確認(rèn),能夠有效緩解傳統(tǒng)基于規(guī)則的靜態(tài)漏洞檢測方法誤報率高的問題。
1.一種基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,所述利用大模型結(jié)合外部知識庫識別待測程序代碼中的危險函數(shù),具體包括:
3.根據(jù)權(quán)利要求1或2所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,所述采用人機(jī)協(xié)同的方法對提取的危險函數(shù)調(diào)用軌跡進(jìn)行分析,獲取疑似存在漏洞的目標(biāo)函數(shù)調(diào)用軌跡,具體包括:
4.根據(jù)權(quán)利要求3所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,所述利用約束下的符號執(zhí)行生成目標(biāo)函數(shù)調(diào)用軌跡,具體包括:
5.根據(jù)權(quán)利要求3所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,所述采用主動學(xué)習(xí)的方法對特征向量進(jìn)行學(xué)習(xí),對目標(biāo)函數(shù)調(diào)用軌跡中存在漏洞的可能性進(jìn)行打分,具體包括:
6.根據(jù)權(quán)利要求1所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,所述漏洞規(guī)則模板包括:
7.根據(jù)權(quán)利要求6所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,利用漏洞驗證模板的驗證包括:
8.根據(jù)權(quán)利要求6所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,利用污點分析模板的驗證包括:
9.根據(jù)權(quán)利要求2所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法,其特征在于,所述標(biāo)準(zhǔn)庫函數(shù)為c語言標(biāo)準(zhǔn)文檔中定義的實現(xiàn)內(nèi)存分配與復(fù)制、字符串操作、文件操作功能的標(biāo)準(zhǔn)庫函數(shù);所述api的主調(diào)函數(shù)包括與數(shù)據(jù)讀取、網(wǎng)絡(luò)通信、系統(tǒng)調(diào)用功能相關(guān)的api的主調(diào)函數(shù);所述敏感函數(shù)為實現(xiàn)網(wǎng)絡(luò)通信、數(shù)據(jù)交互功能的敏感函數(shù)。
10.一種基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘系統(tǒng),其特征在于,包括存儲器和處理器,所述存儲器上存儲有能夠被處理器加載并執(zhí)行如權(quán)利要求1~9中任一項所述的基于大模型的人機(jī)協(xié)同靜態(tài)漏洞挖掘方法對應(yīng)的計算機(jī)程序。