基于編程模式和模式匹配的漏洞聚類方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計(jì)算機(jī)程序安全領(lǐng)域,提供一種基于編程模式和模式匹配的漏洞聚類 方法。
【背景技術(shù)】
[0002] 脆弱性(Vulnerability)是系統(tǒng)具體實(shí)現(xiàn)或安全策略上存在的缺陷和不足。軟件 脆弱性的存在給系統(tǒng)服務(wù)的可持續(xù)性和數(shù)據(jù)的安全性帶來(lái)了巨大的危害,是威脅信息系統(tǒng) 安全的主要因素。黑客、蠕蟲病毒和木馬等都利用安全脆弱性來(lái)實(shí)現(xiàn)對(duì)計(jì)算機(jī)系統(tǒng)的入侵 或自身傳播。
[0003] 計(jì)算機(jī)系統(tǒng)在社會(huì)生活中的應(yīng)用日益廣泛,安全脆弱性的數(shù)目呈迅速遞增之勢(shì), 從發(fā)現(xiàn)到首次被利用的時(shí)間間隔越來(lái)越短,安全漏洞的風(fēng)險(xiǎn)等級(jí)節(jié)節(jié)升高。如何應(yīng)對(duì)安全 漏洞給信息系統(tǒng)帶來(lái)的威脅,已成了計(jì)算機(jī)安全領(lǐng)域的重大問(wèn)題之一。除了利用己知脆弱 性,有的黑客善于挖掘并利用一些尚未公布的脆弱性以達(dá)到他們不可告人的目的,而相比 于此,安全研究者們?cè)诖嗳跣匝芯抗ぷ鞯挠绊懛矫骘@得被動(dòng)和滯后。所以加大對(duì)脆弱性的 研究力度是非常有必要的,以便對(duì)各類脆弱性采取更為主動(dòng)合理的處理方式。如何來(lái)檢測(cè) 一個(gè)現(xiàn)有軟件的安全性是解決安全問(wèn)題的頭等大事。從問(wèn)題的源頭就開始關(guān)注安全,越早 發(fā)現(xiàn)軟件存在的脆弱性問(wèn)題,那么造成的損失就越小。因此,對(duì)計(jì)算機(jī)軟件脆弱性分析方法 的研究具有重要的理論和實(shí)用價(jià)值。
[0004] 當(dāng)前,根據(jù)分析對(duì)象不同可將脆弱性分析方法分為兩類:源代碼分析和二進(jìn)制分 析。源代碼分析是對(duì)程序的源代碼進(jìn)行手動(dòng)或自動(dòng)的代碼審計(jì),根據(jù)審查人員的經(jīng)驗(yàn)來(lái)審 查代碼中是否包含常見(jiàn)已知漏洞或者潛在安全缺陷;二進(jìn)制分析是在不運(yùn)行程序的情況下 對(duì)軟件匯編代碼進(jìn)行分析,以發(fā)現(xiàn)一些潛在的漏洞,它直接反映了機(jī)器執(zhí)行程序的實(shí)際過(guò) 程,比源代碼分析更底層但更難以分析,需要通過(guò)特定的逆向平臺(tái)對(duì)軟件程序進(jìn)行反匯編, 得到相應(yīng)的反匯編文本。
[0005] 專利申請(qǐng)"一種基于屬性提取的軟件漏洞挖掘系統(tǒng)及方法"(【申請(qǐng)?zhí)枴?CN201410577779)提供一種基于屬性提取的軟件漏洞挖掘系統(tǒng)及方法,包括以下步驟:提 取待測(cè)軟件關(guān)鍵代碼的步驟;對(duì)待測(cè)軟件在虛擬機(jī)環(huán)境中執(zhí)行,并采用虛擬機(jī)故障注入引 擎與關(guān)鍵代碼進(jìn)行測(cè)試交互,記錄測(cè)試結(jié)果;將測(cè)試結(jié)果結(jié)合挖掘經(jīng)驗(yàn)知識(shí)庫(kù)進(jìn)行推理。該 發(fā)明的不足在于,漏洞發(fā)掘非常依賴于經(jīng)驗(yàn)知識(shí)庫(kù)的完備,若知識(shí)庫(kù)不包含相關(guān)信息,則難 以檢測(cè)出新類型的漏洞。
[0006] 專利申請(qǐng)"一種用于漏洞發(fā)掘的動(dòng)態(tài)符號(hào)執(zhí)行路徑搜索方法"(【申請(qǐng)?zhí)枴?CN201410230479)提供如下方法,在使用動(dòng)態(tài)符號(hào)執(zhí)行對(duì)被測(cè)程序的可能執(zhí)行路徑進(jìn)行搜 索的過(guò)程中,標(biāo)記實(shí)際執(zhí)行被測(cè)程序時(shí)觸發(fā)漏洞的路徑,對(duì)于路徑探索過(guò)程中生成的每一 個(gè)新的測(cè)試用例,計(jì)算該測(cè)試用例執(zhí)行路徑與上次觸發(fā)漏洞路徑的相關(guān)度r,并以此計(jì)算該 測(cè)試用例對(duì)應(yīng)執(zhí)行路徑的權(quán)重分?jǐn)?shù)score,在下次執(zhí)行測(cè)試時(shí)選擇score值最大的測(cè)試用 例執(zhí)行。該發(fā)明的不足在于,漏洞發(fā)掘依賴于合適的測(cè)試用例的設(shè)計(jì),難以設(shè)計(jì)出適用于不 同程序類型的一組用例,故難以保證效率和準(zhǔn)確性。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明主要解決的技術(shù)問(wèn)題在于,為了更有效率、更準(zhǔn)確的比較程序漏洞代碼的 相似性,以更好的將代碼進(jìn)行聚類,并發(fā)現(xiàn)潛在的漏洞代碼,提出了這樣一種漏洞聚類方 法。本發(fā)明主要研究源代碼分析,屬于靜態(tài)分析方法。
[0008] 本發(fā)明涉及的相關(guān)術(shù)語(yǔ)解釋如下:
[0009] 編程模式:在本發(fā)明中,編程模式是指,反應(yīng)了一個(gè)函數(shù)的源代碼中,函數(shù)名、變量 名、保留字三者組合而成的向量,可以從一定程度上反應(yīng)該函數(shù)的功能;
[0010] 模式塊向量:在本發(fā)明中,模式塊向量是指,反應(yīng)了一個(gè)函數(shù)對(duì)于指定多種編程模 式的"傾向"程度的向量,這是根據(jù)數(shù)學(xué)方法得到的結(jié)果;
[0011] 截?cái)嗥娈愔捣纸猓浩娈愔捣纸馐蔷仃囂卣髦捣纸庠诜欠结樓闆r下的推廣,用來(lái)計(jì) 算描述一般矩陣重要特征的分析方法;很多情況下,前面一小部分的奇異值之和占據(jù)了所 有奇異值總和的絕大部分,故可以截?cái)嗲耙徊糠值钠娈愔祦?lái)過(guò)濾"噪音",得到矩陣重要的 信息,這就是截?cái)嗥娈愔捣纸猓?br>[0012] 歐幾里得距離:是一個(gè)通常采用的距離定義,指在m維空間中兩個(gè)點(diǎn)之間的真實(shí) 距離,或者向量的自然長(zhǎng)度(即該點(diǎn)到原點(diǎn)的距離);
[0013] 模式匹配:在本發(fā)明中,模式匹配是指,通過(guò)計(jì)算若干函數(shù)的模式塊與目標(biāo)函數(shù)的 模式塊的歐幾里得距離,找到與目標(biāo)函數(shù)模式塊最相近的函數(shù)。
[0014] 本發(fā)明具體采用如下技術(shù)方案:
[0015] -種基于編程模式和模式匹配的漏洞聚類的方法,其流程圖如圖1所示,具體包 括以下步驟:
[0016] 步驟1.編程模式提取,其流程如圖2所示;記已知存在漏洞的函數(shù)為函數(shù)F,對(duì)于 一個(gè)包含(C f-I)個(gè)函數(shù)的程序源代碼,進(jìn)行如下步驟的操作:
[0017] 步驟1-1 :將函數(shù)F置于所述程序源代碼中,此時(shí)程序源代碼包含有Cf個(gè)函數(shù),統(tǒng) 計(jì)插入函數(shù)F后的程序源代碼中出現(xiàn)的不同關(guān)鍵詞并記其總數(shù)量為C n,所述關(guān)鍵詞類型包 括保留字、函數(shù)名、變量名;
[0018] 步驟1-2 :為該程序源代碼的每個(gè)函數(shù)創(chuàng)建一個(gè)維度為Cn的列向量Mpi = 1,2,… Cf,列向量Mi中的每個(gè)元素與步驟1-1所統(tǒng)計(jì)的不同關(guān)鍵詞--對(duì)應(yīng),若列向量M ;對(duì)應(yīng)的 函數(shù)中包含有相應(yīng)關(guān)鍵詞,則列向量M1中相應(yīng)位置的元素值記為1,否則記為零;將創(chuàng)建的 Cf個(gè)列向量合并為一個(gè)C n X Cf的矩陣M ;
[0019] 步驟1-3 :選取特征數(shù)值D,0〈D < Cf,數(shù)值D代表之后步驟從源代碼中提取出的模 式種類的數(shù)量的最大值;D值過(guò)小則不能提供足夠的精度,過(guò)大則不能提供更高的精度;
[0020] 步驟1-4 :對(duì)矩陣M進(jìn)行截?cái)嗥娈愔捣纸釳 = USVt,并取前D個(gè)奇異值,分解之后 得到矩陣U、S、V ;其中,矩陣U為Cn*D階矩陣,矩陣S為D*D階對(duì)角矩陣,矩陣V為Cf*D階 矩陣;
[0021] 矩陣V的每一個(gè)行向量與所述程序源代碼中的每一個(gè)函數(shù)一一對(duì)應(yīng),即矩陣V的 每一個(gè)行向量即代表所述程序源代碼中的一個(gè)函數(shù)的模式塊,由此得到C f個(gè)與程序源代碼 的函數(shù)一一對(duì)應(yīng)的模式塊向量,提取其中與函數(shù)F對(duì)應(yīng)的模式塊向量;
[0022] 步驟2.模式匹配聚類,其流程圖如圖3所示;對(duì)于步驟1中提取出的Cf個(gè)函數(shù)的 模式塊,進(jìn)行如下步驟的操作:
[0023] 步驟2-1 :針對(duì)程序源代碼中除函數(shù)F之外的函數(shù)所對(duì)應(yīng)的模式塊向量,計(jì)算每個(gè) 模式塊向量F1與函數(shù)F的模式塊向量的歐幾里得距離;
[0024] 步驟2-2 :設(shè)定歐氏距離閾值δ,將與函數(shù)F的模式塊向量的歐幾里得距離小于等 于閾值S的模式塊向量對(duì)應(yīng)的函數(shù)提取出來(lái),即將程序源代碼中與帶有漏洞的函數(shù)F具有 較近歐氏距離即較高相似度的函數(shù)聚類為一類,