[發明專利]一種用于漏洞檢測的檢測對象程序特征提取方法無效
| 申請號: | 201010286663.6 | 申請日: | 2010-09-20 |
| 公開(公告)號: | CN101937395A | 公開(公告)日: | 2011-01-05 |
| 發明(設計)人: | 曾慶凱 | 申請(專利權)人: | 南京大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 南京天翼專利代理有限責任公司 32112 | 代理人: | 陳建和 |
| 地址: | 210093 江*** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 用于 漏洞 檢測 對象 程序 特征 提取 方法 | ||
1.用于漏洞檢測的檢測對象程序特征提取方法,其特征是包括主要步驟如下:
1)漏洞載入流程,建立漏洞模型的數據結構;漏洞模型由漏洞狀態機的狀態的集合和操作的集合構成,狀態表示狀態機的狀態,每個狀態有狀態號、類型和特征屬性;
操作表示引起狀態發生變化的動作,每個操作具有操作號、動作、特征、檢測對象指示、原狀態和新狀態屬性;操作的動作指具體的程序動作;
操作的特征有產生、轉移和使用等值;?軟件漏洞模型檢測對象為程序中漏洞相關操作所涉及的需檢測的變量,軟件漏洞模型檢測對象指示為操作涉及的參數編號;狀態、操作的集合分別存儲在數據庫中的一個表中:狀態表和操作表;為方便模型檢測處理,在內存中建立由操作動作進行檢索的操作轉換表;每個操作動作對應一個鏈表,鏈表的結點為一個操作,表示一個原狀態到新狀態的轉換關系:
步驟20:起始狀態;步驟21:在數據庫操作表中取一個操作的記錄;步驟22:若取到轉步驟23,否則轉步驟26;步驟23判斷取得該操作動作的操作轉換表表頭是否已存在;若已存在轉步驟24,否則轉步驟25;步驟24:創建一個操作結點,結點的操作號、特征和檢測對象指示分別為該操作的操作號、特征和檢測對象指示;把此結點連接到對應的操作動作操作轉換表的鏈表尾部,轉步驟21;步驟25:創建該操作動作的操作轉換表表頭,創建一個操作結點,結點的操作號、特征和檢測對象指示分別為該操作的操作號、特征和檢測對象指示;把此結點作為該操作動作的第一個結點,轉步驟21;步驟26為結束狀態,操作轉換表建立完成;
2)程序載入特征分析提取流程,對經過gcc編譯的軟件代碼進行抽象,構造用于漏洞模型檢測的、基于檢測對象的程序特征序列:
把程序控制流圖中與漏洞狀態相關的程序特征信息,即操作序列提取出來,并以函數為單位進行組織;每個函數組織成若干個由檢測對象索引的操作序列鏈表;鏈表的每個結點表示一個與漏洞狀態相關的操作或函數;一方面過濾去除與漏洞檢測無關的語句,另一方面,使函數簡化控制流到語句級,并使操作序列化,便于檢測處理;
程序特征提取處理從main函數開始進行,其流程如下,步驟31:起始狀態;步驟32:為初始化處理:設置所有函數的訪問標記為OFF,值為0;置提取處理函數為函數main,函數的輸入檢測對象集合和本地檢測對象集合都為空;步驟33:對提取處理函數進行函數程序特征提取;步驟34:存儲提取的程序特征到磁盤,將全部函數的程序特征,包括檢測對象集合、含輸入檢測對象集合和本地檢測對象集合及其操作序列鏈表寫入磁盤保存;步驟36:結束狀態,此時,所有函數的操作序列鏈表已經建立完成,作為程序操作序列分析之用;
步驟33的函數程序特征提取流程的詳細步驟是,表示對處理函數進行函數程序特征提取的過程;步驟40:起始狀態;步驟41:在程序控制流圖中取出處理函數并構造其數據結構;步驟41a判斷處理函數的訪問標記為ON,值為1,是則轉步驟4e,否則轉步驟42;步驟42:函數處理初始化:創建該函數的語句塊鏈表表頭,此時表頭也是鏈表表尾,以及操作序列鏈表表頭;為函數的輸入檢測對象集合中每個檢測對象,建立原始對象的操作序列,初始無結點,和關系集合、關系集合的初始化為空;步驟43:語句塊鏈表當前語句塊向后移一次,而首次執行是使當前語句塊指向函數的頭語句塊;步驟44:判斷語句塊是否為空,是則轉步驟4e,否則轉步驟45;步驟45:進行當前語句塊的分析提取處理;步驟46:判斷當前語句塊的后繼是否是順序結構,是則轉步驟47,否則轉步驟48;步驟47:取出順序結構的下一后繼語句塊放入語句塊鏈表表尾,后繼語句塊置標記DONE、值為1;若后繼語句塊已標記DONE,不再放入,轉步驟4d;步驟48:判斷當前語句塊的后繼是否是if結構,是則轉步驟49,否則轉步驟4a;步驟49:取出if語句為真和為假時的后繼語句塊依次放入語句塊鏈表表尾,后繼語句塊置標記DONE;若后繼語句塊已標記DONE,不再放入,轉步驟4d;步驟4a:判斷當前語句塊的后繼是否是switch結構,是則轉步驟4b,否則轉步驟4d;步驟4b:取出switch分支語句中的一個語句塊放入語句塊鏈表表尾,分支后繼語句塊置標記DONE;若后繼語句塊已標記DONE,不再放入;步驟4c:對取出的switch分支語句判斷是否所有語句塊都已處理完畢,是則轉步驟4d,否則轉步驟4b;步驟4d:判斷語句塊鏈表當前語句塊是否是鏈尾、此時函數的操作序列鏈表已經建成,是則轉步驟4e,?否則轉步驟43;步驟4e:設置處理函數的訪問標記為ON(值為1);步驟4f:為函數處理結束狀態;此時,提取處理函數的檢測對象集合、包括輸入檢測對象集合和本地檢測對象集合及其操作序列鏈表已經建立完成;
步驟45的一個語句塊的語句操作提取處理流程的詳細步驟是:步驟50:起始狀態;步驟51:順序取出該語句塊的一條語句為當前語句;步驟52:判斷是否取到,若取到轉步驟53,否則轉步驟5e;步驟53:查操作轉換表,判斷該語句是否為產生型操作、語句為操作轉換表中操作且操作的特征為產生型,是則轉步驟54,否則轉步驟55;步驟53a:該操作的檢測對象指示所指的參數為新產生的檢測對象;判斷新產生的原始對象是否已在本地檢測對象集合中;是則轉步驟55,否則轉步驟54;步驟54:將該原始對象加入到函數的本地檢測對象集合中;建立該原始對象的操作序列,操作序列的首結點為本語句的操作;建立該原始對象的關系集合,且初始化為空;步驟55:判斷該語句是否為賦值,且右值表達式中含有檢測對象、包括輸入檢測對象和本地檢測對象;是則轉步驟56,否則轉步驟57;步驟56:被賦值變量為關系檢測對象,右值中檢測對象為傳遞檢測對象;找到傳遞檢測對象所屬的原始對象、傳遞檢測對象在原始對象的關系集合中,加入關系檢測對象到原始對象的關系集合中;步驟57:查操作轉換表,判斷該語句操作是否在漏洞狀態機的操作集合中;是則轉步驟58,否則轉步驟59;步驟58:創建該語句操作的操作鏈表結點:置結點的操作為該語句的操作,檢測對象為操作的檢測對象指示所指的參數;找到該檢測對象所屬的原始對象,將該語句的操作加到原始對象的序列尾部;步驟59:判斷該語句是否為函數調用,是則轉步驟5a,否則轉步驟5b;步驟5a:?函數調用語句處理;步驟5b:轉步驟51;步驟5e為結束狀態;
步驟5a為函數調用語句處理流程的詳細步驟;步驟60是起始狀態;步驟61:函數調用檢測對象集合初始化為空;步驟62:順序取調用函數的一個參數;步驟63:判斷是否取到,若沒取到,則轉步驟66;步驟64:判斷參數是否為檢測對象,若不是則轉步驟62,是則轉步驟65;步驟65:查找該檢測對象的原始對象,將本語句的函數調用加到原始對象的操作序列尾部;將此檢測對象對應的形參加入到函數調用檢測對象集合,轉步驟62;步驟66:若函數調用檢測對象集合為空,則轉步驟69;步驟67:置提取處理函數為被調用函數,輸入檢測對象集合為函數調用檢測對象集合;步驟68:對提取處理函數進行程序特征抽取,即步驟45一個語句塊的語句操作提取處理流程的處理流程;步驟69:結束狀態,函數調用處理結束。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于南京大學,未經南京大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201010286663.6/1.html,轉載請聲明來源鉆瓜專利網。





