[發明專利]基于漏洞指紋的脆弱性代碼克隆檢測方法及其裝置有效
| 申請號: | 201710789364.6 | 申請日: | 2017-09-05 |
| 公開(公告)號: | CN107688748B | 公開(公告)日: | 2019-09-24 |
| 發明(設計)人: | 魏強;劉臻;林超;麻榮寬;柳曉龍 | 申請(專利權)人: | 中國人民解放軍信息工程大學 |
| 主分類號: | G06F21/57 | 分類號: | G06F21/57;G06F21/56 |
| 代理公司: | 鄭州大通專利商標代理有限公司 41111 | 代理人: | 周艷巧 |
| 地址: | 450000 河*** | 國省代碼: | 河南;41 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 漏洞 指紋 脆弱 代碼 克隆 檢測 方法 及其 裝置 | ||
1.一種基于漏洞指紋的脆弱性代碼克隆的檢測方法,其特征在于,包含如下步驟:
步驟1)、選定用于構建指紋的漏洞v,從公開漏洞信息數據庫中查詢漏洞補丁信息,獲取補丁中對應的脆弱性代碼樣本;
步驟2)、構建代碼解析器;
步驟3)、利用代碼解析器對脆弱性代碼樣本進行預處理,得到規范化的中間表示;
步驟4)、將中間表示分割為大小為s行的代碼塊,通過哈希函數計算代碼塊的特征值,并組合生成漏洞指紋;
步驟5)、利用代碼解析器對待檢測代碼進行預處理,通過滑動窗口方法并利用哈希函數計算待檢測代碼的特征值,得到其特征值序列seqf;
步驟6)、將漏洞指紋映射為n位的位圖bitmapv,利用位圖bitmapv識別特征值序列seqf中是否存在脆弱性代碼的克隆,若存在,則對其進行記錄并輸出;
步驟1)中的獲取補丁中對應的脆弱性代碼樣本,具體是指:獲取補丁中對應的所有diff文件,將得到的diff文件作為脆弱性代碼樣本;
步驟4)包含如下內容:
步驟41)、根據diff文件確定漏洞補丁中的代碼改動,選擇代碼塊大小為s行;
步驟42)、對于預處理后得到的中間表示,將刪除的s行代碼塊記為blockD,將添加的s行代碼塊記為blockA,在刪除或添加的代碼塊小于s行時對其進行填充或者分隔成多個連續的代碼塊,將最后一個代碼塊用上下文填充;
步驟43)、使用散列函數計算每個blockD和blockA的特征值,特征值前用添加標記或刪除標記以區分;將特征值按類型分別組合到添加的特征序列seqA和已刪除的特征序列seqD中,組成一個diff文件對應的特征向量Vdiff=[seqA,seqD];
步驟44)、針對漏洞修補程序中所有diff文件執行上述步驟41)~43),得到對應的特征向量Vdiff1、Vdiff2…Vdiffn,對于補丁中的n個diff文件的漏洞v,所有特征向量共同組成漏洞指紋Fv={Vdiff1,Vdiff2…Vdiffn}。
2.根據權利要求1所述的基于漏洞指紋的脆弱性代碼克隆的檢測方法,其特征在于,步驟2)中構建代碼解析器,是指:使用ANTLR,根據C/C++詞法及語法定義生成面向C/C++的代碼解析器。
3.根據權利要求1所述的基于漏洞指紋的脆弱性代碼克隆的檢測方法,其特征在于,步驟3)中預處理前,先將代碼進行小寫轉化,并刪除多余空格、制表符、換行符和所有注釋,將縮進樣式更改為Lisp。
4.根據權利要求1所述的基于漏洞指紋的脆弱性代碼克隆的檢測方法,其特征在于,步驟3)中預處理,包含:對代碼中的函數和參數名稱、變量標識符、數據類型、字符串常量、及函數調用名分別做統一替換。
5.根據權利要求1或4所述的基于漏洞指紋的脆弱性代碼克隆的檢測方法,其特征在于,步驟3)中預處理,包含:通過函數聲明并記錄所有形式的參數名稱,使用符號_PARAM替換函數體中的每一個參數,同時用符號_FUNCDEC替換該函數聲明中的函數名稱;使用符號_DATA替換函數內定義的所有變量;使用符號_TYPE替換在ISO C標準中聲明的所有數據類型,同時替換代碼中所有的自定義結構體,替換過程中保留結構體聲明中的關鍵字struct;使用符號_STR替換字符串常量;使用符號_FUNCTION替換每個函數調用,保留用法與參數值。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國人民解放軍信息工程大學,未經中國人民解放軍信息工程大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710789364.6/1.html,轉載請聲明來源鉆瓜專利網。





