[發明專利]一種二進制程序漏洞自動化定位方法有效
| 申請號: | 201310104953.8 | 申請日: | 2013-03-28 |
| 公開(公告)號: | CN103198260A | 公開(公告)日: | 2013-07-10 |
| 發明(設計)人: | 陳愷;張穎君;趙險峰 | 申請(專利權)人: | 中國科學院信息工程研究所 |
| 主分類號: | G06F21/57 | 分類號: | G06F21/57;G06F17/30 |
| 代理公司: | 北京君尚知識產權代理事務所(普通合伙) 11200 | 代理人: | 余長江 |
| 地址: | 100093 *** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 二進制 程序 漏洞 自動化 定位 方法 | ||
1.一種二進制程序漏洞自動化定位方法,其步驟為:
1)運行待檢測二進制程序,記錄從該程序開始運行到出錯過程中所有指令;
2)根據所記錄的指令構建漏洞依賴樹,并根據所構建漏洞依賴樹從所記錄指令中檢測指令中的漏洞指令;其中,構建所述漏洞依賴樹的過程中,每增加若干個節點檢查是否出現漏洞候選節點,如果出現,則產生該漏洞候選節點的臨時補丁;
3)觀察該臨時補丁是否有效,如果有效則停止構建漏洞依賴樹,并作為定位到漏洞位置的依據;否則繼續構建漏洞依賴樹。
2.如權利要求1所述的方法,其特征在于所述漏洞依賴樹中的節點表示該程序中的指令,指令之間通過邊連接。
3.如權利要求1或2所述的方法,其特征在于所述漏洞依賴樹的構建方法為:
1)初始化一工作集wl為空集;對所記錄指令中每一執行路徑,從該執行路徑的最后一條指令開始,順次取出一指令i;
2)將指令i對應的指令地址加入漏洞依賴樹v,將由指令i使用的變量加入工作集wl;
3)初始化一變量branchNum=0;
4)如果指令i不為空且工作集wl不為空,則進行以下循環:如果指令i是依賴輸入數據的分支指令,則branchNum=branchNum+1,即對依賴于外部輸入的分支進行計數,i指向前一條指令,繼續循環過程;如果當前指令i定義的變量var和wl有交集,則從wl中移除這個變量var,并在wl中加入當前指令i使用的變量;計算邊長度edgeLen=branchNum-j為指令j到樹根的長度,指令j為漏洞依賴樹中使用var的節點;然后在漏洞依賴樹v中增加節點i,在漏洞依賴樹v中增加邊(j,i),其長度為edgeLen。
4.如權利要求1或2所述的方法,其特征在于所述每增加若干個節點檢查是否出現漏洞候選節點的方法為:a)每增加若干個節點后,檢測所述漏洞依賴樹中連接每一新增加節點的入邊和出邊,如果其長度的比值大于設定閾值則將此節點作為漏洞候選節點;b)選擇所增加若干個節點中改變變量范圍值超過設定比例的節點,將此節點作為漏洞候選節點。
5.如權利要求1或2所述的方法,其特征在于所述記錄從該程序開始運行到出錯過程中所有指令的方法為:首先設定一閾值;然后從該程序開始運行到出錯過程中,對每條指令進行記錄,包括每個分支指令和選用的分支進行記錄,當記錄指令超過設定閾值時則新記錄的指令將覆蓋最先記錄的指令,進行循環記錄。
6.如權利要求1或2所述的方法,其特征在于如果該程序的指令指針依賴于外部輸入,或者內存引用依賴于外部輸入,或者指定的異常函數被觸發,則判定該程序出錯。
7.如權利要求1所述的方法,其特征在于所述臨時補丁的生成方法為:利用指令的執行條件,實現不執行這條指令即可得到程序運行不出錯結果的臨時補丁。
8.如權利要求7所述的方法,其特征在于如果函數A調用函數B出現問題,但該函數B也被其他函數調用且沒出現問題,則對函數A打補丁。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國科學院信息工程研究所,未經中國科學院信息工程研究所許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310104953.8/1.html,轉載請聲明來源鉆瓜專利網。





