亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于控制流圖邏輯結構對比的編譯器驗證方法

文檔序號:6335685閱讀:383來源:國知局
專利名稱:基于控制流圖邏輯結構對比的編譯器驗證方法
技術領域
本發(fā)明涉及一種基于控制流圖邏輯結構對比的編譯器驗證方法,屬于編譯器驗 證技術領域。
背景技術
編譯器作為任何軟件的產(chǎn)生器,其安全性、可靠性和穩(wěn)定性起著至關重要的作 用。特別是在那些對軟件的可靠性要求非常高的特殊環(huán)境里面,必須保證編譯器編譯出 來的代碼是對程序源代碼的正確、真實的反映,保證編譯器在編譯過程中邏輯上的正確 性以及行為上的透明性。編譯器系統(tǒng)可信驗證主要包括兩方面,一方面是編譯器的邏輯正確性,即編譯 器編譯的程序在邏輯上符合程序源代碼的描述,與程序源代碼的邏輯一致;另外一方面 是編譯器的安全性和可靠性,指編譯器在編譯程序過程中不會人為地插入惡意代碼,導 致目標程序運行不可靠或者達到某些其他惡意的目的。編譯器的驗證技術現(xiàn)在主要處于理論驗證階段,大多采用形式化的方法來證明 編譯器正確性和可信性。如形式化驗證工具Coq proof assistant,它在開發(fā)過程中形式化 驗證編譯器可信性;可出具證明的編譯器(certified compiler),該方法不是從編譯器本身 入手,而是從保證被編譯程序的正確性入手,它需要編譯器在編譯源程序時候同時生成 一個形式化的證明,該證明能保證,對某個源程序S,編譯器生成的目標程序T是S的一 個正確轉(zhuǎn)化。編譯器安全漏洞是指人為的編譯器后門,為了針對其進行排除和驗證,一方面 需要依賴形式化驗證技術保障編譯器的邏輯正確性,另一方面需要利用多遍交叉編譯、 目標文件結構化比較、目標文件反編譯邏輯比較等理論和方法完成對安全性和可靠性的 驗證。由此提出了一種實踐性較強的檢測編譯器安全漏洞的方案,稱為“多遍交叉編 譯”,它是一種全自動的方案,支持多種編程語言,且不需要復雜的數(shù)學證明技術。然 而,其不足在于,它不僅需要一個額外的開源編譯器作為參考,而且它只能證明編譯器 源代碼及其二進制代碼是對應的;它不能保證編譯器源代碼不存在漏洞。如果編譯器源 代碼本身就存在漏洞,它不能檢測出漏洞的存在。綜上,這些形式化驗證方法雖然在理論上比較完善,然而在實際應用中存在以 下幾個主要問題1.理論性太強,可行性較差形式化驗證方法在實現(xiàn)上難道非常大,基本停留 在理論階段,往往在實際應用中并不可行;2.驗證范圍較小現(xiàn)有的形式化驗證技術,一般僅能應用于某個語言子集或者 僅能證明編譯器某些特性或某個部分的正確性,無法在工程中推廣。3.都沒有能夠很好地解決編譯器對于惡意代碼注入的問題。

發(fā)明內(nèi)容
為了解決這些問題,本發(fā)明提供了一種全新的方法,可以驗證編譯器的安全問 題。本發(fā)明通過提取程序源代碼和目標代碼的控制流圖,然后使用同構圖的算法對它們 進行對比,如果它們一致的話則證明編譯器沒有插入邏輯炸彈;如果不一致,則證明編 譯器可能插入了邏輯炸彈,可以在控制流圖不一致的結點位置進行手動檢查,從而可能 發(fā)現(xiàn)編譯器的后門。本發(fā)明采用的技術方案如下一種基于控制流圖邏輯結構對比的編譯器驗證方法,其特征在于包括以下步驟1)構造源代碼的控制流圖;2)構造目標代碼的控制流圖;3)使用同構圖算法對以上兩者的控制流圖進行比對。在所述步驟1)中,首先對源代碼進行詞法分析和語法分析,在分析的過程中, 根據(jù)源代碼中語句的語法結構構造出程序的控制流圖。在所述步驟2)中,根據(jù)目標代碼中影響控制流圖結構的指令,將目標代碼劃分 為塊,利用所述指令的語義構造其控制流圖。在所述步驟3)中,從兩者的控制流圖的起始結點開始,按照廣度優(yōu)先遍歷的算 法對兩者的控制流圖同時進行遍歷。本發(fā)明具有以下優(yōu)點1.可有效地檢測編譯器惡意代碼問題;2.采用基于控制流圖分析和同構比較算法,準確程度高。


圖1是循環(huán)結構流程示意圖;圖2是跳轉(zhuǎn)結構流程示意圖;圖3是對兩個控制流圖同時進行遍歷的算法。
具體實施例方式本發(fā)明提供了一種基于控制流圖邏輯結構對比的編譯器驗證方法,它通過提取 程序源代碼和目標代碼的控制流圖,然后使用同構圖的算法對它們進行對比,如果它們 一致的話則證明編譯器沒有插入邏輯炸彈;如果不一致,則證明編譯器可能插入了邏輯 炸彈,可以在控制流圖不一致的結點位置進行手動檢查,從而可能發(fā)現(xiàn)編譯器的后門。惡意代碼由兩部分組成,一部分是觸發(fā)部分,另一部分是負荷部分。這兩部分 中,觸發(fā)部分是根據(jù)一定的觸發(fā)條件觸發(fā)惡意的代碼,然后執(zhí)行負荷部分。編譯器如果 要在目標代碼中插入惡意代碼,那么觸發(fā)部分必須有一個前提是它包含一定的條件判斷語 句,即觸發(fā)部分會改變目標代碼的控制流圖;而負荷部分如果要進行一些惡意的活動,它 必須調(diào)用系統(tǒng)的應用編程接口 API,比如向網(wǎng)絡傳輸數(shù)據(jù)的惡意后門程序必定會調(diào)用系統(tǒng) 的sendO這樣的socketAPI進行數(shù)據(jù)的傳輸,這樣的行為也會改變控制流圖的結構?;谶@兩點前提,考慮將源代碼和目標代碼的控制流圖提取出來,然后使用同 構圖的算法對它們進行對比。通過對比后的情況來確定兩個控制流圖的邏輯結構是否一致,也就是確定編譯器在編譯的過程是否改變程序的結構。如果不一致,則在控制流圖 不一致的結點位置進行手動檢查,從而可能發(fā)現(xiàn)編譯器的安全漏洞。所以本發(fā)明首先通過Lex&Yacc對編譯前的源代碼分別進行詞法分析和語法分 析,根據(jù)程序中語句的語法結構構造出程序的控制流圖。結構語句有if/else,for, while 和函數(shù)調(diào)用等,此處選取while做為實例來說明控制流圖的構造過程它在YACC 的語法規(guī)則中表示為WHILE’ (,expression,),statement。按 照YACC的語法規(guī)則參數(shù)來看,規(guī)則里面的“expression”為參數(shù)$3,“statement”的 參數(shù)為$5,它對控制流圖的影響是產(chǎn)生循環(huán)結構,產(chǎn)生如圖1所示流程圖。對于編譯后的目標代碼,根據(jù)其中的影響控制流圖結構的指令,如jmp、je、 jg、jle、jig、call等跳轉(zhuǎn)指令和函數(shù)調(diào)用指令將代碼劃分為若干塊,并利用這些指令的語 義構造其控制流圖,如圖2左邊所示的目標代碼,產(chǎn)生圖2右邊所示的流圖。在構造了源代碼和目標代碼的控制流圖后,使用同構圖算法對它們進行對比。 普通的同構圖算法是個NP問題,但這里構造的控制流圖是一個特殊的圖,它由一個起始 結點和一個結束結點構成,并且最多有兩個弧的有向圖。通過改造同構圖算法,比較源 代碼和目標代碼的控制流圖是否同構。改造的同構圖算法首先從控制流圖的起始結點開始,按照廣度優(yōu)先遍歷的算法 對兩個控制流圖Gl和G2同時進行遍歷。每遍歷到一個結點,假設分別為Gl和G2中 的nl和n2,便判斷它們是否同構。下面對照圖3說明具體的操作如果nl或者n2的id不為0,并且如果nl或者n2的id相等則返回同構;如果 不相等,那么說明曾經(jīng)有一結點已經(jīng)被標識或者該遍歷路徑無法完成同構,則返回不同 構;然后判斷nl和n2的弧的數(shù)量是否相等,如果不相等,則表示該遍歷路徑無法同構, 返回不同構;如果相等,則假設nl和n2是同構路徑上的兩個相映射的結點,為它們產(chǎn)生 一個唯一的標識ID,并且賦值給nl和n2的id。如果nl和n2的弧數(shù)量只有一個,那么 對它們唯一的弧指向的結點進行遞歸同構運算,并且返回運算值;如果nl和n2的弧數(shù)量 有兩個,那么任意配對兩個弧指向的結點進行遞歸同構運算,如果形成同構,則返回同 構,如果不形成同構,則交換弧的配對方式再進行遞歸同構運算,并記錄返回值;如果 還是不能形成同構,則該圖的確無法形成同構,返回值設置為不可同構。如果nl和n2 的弧數(shù)量為0,則表示該節(jié)點為結束節(jié)點,同構運算遞歸結束。清空nl和n2的id并且 返回返回值。我們用以上方法來驗證GCC編譯器,一個是原始的GCC (稱為GCC-orgi)和一 個經(jīng)過修改的、會在編譯過程中插入惡意代碼的GCC(GCC-back),我們在詞法分析階段 通過改寫輸入緩沖區(qū)的方法達到插入惡意代碼的目的。分別用兩個編譯器對測試程序進行測試,測試程序包括UNIX登錄程序login、 用戶終端程序bash、UNIX密碼更改程序passwd和OpenSSH的網(wǎng)絡加密庫Iibssl等UNIX/
Linux系統(tǒng)中較為關鍵的安全程序。通過測試數(shù)據(jù)發(fā)現(xiàn)控制流圖邏輯結構的比較的準確程
度非常高,通常在90%左右。在現(xiàn)有的編譯器驗證基礎上,通過使用控制流圖邏輯結構對比的方法,能夠比 較完善地證明和驗證現(xiàn)有編譯器的安全性和可靠性,并且能夠在實踐中得到應用和體 現(xiàn)。
權利要求
1.一種基于控制流圖邏輯結構對比的編譯器驗證方法,其特征在于包括以下步驟1)構造源代碼的控制流圖;2)構造目標代碼的控制流圖;3)使用同構圖算法對以上兩者的控制流圖進行比對。
2.如權利要求1所述的基于控制流圖邏輯結構對比的編譯器驗證方法,其特征在于在所述步驟1)中,首先對源代碼進行詞法分析和語法分析,然后根據(jù)源代碼中語句 的語法結構構造出程序的控制流圖。
3.如權利要求1所述的基于控制流圖邏輯結構對比的編譯器驗證方法,其特征在于在所述步驟2)中,根據(jù)目標代碼中影響控制流圖結構的指令,將目標代碼劃分為 塊,利用所述指令的語義構造其控制流圖。
4.如權利要求1所述的基于控制流圖邏輯結構對比的編譯器驗證方法,其特征在于在所述步驟3)中,從兩者的控制流圖的起始結點開始,按照廣度優(yōu)先遍歷的算法對 兩者的控制流圖同時進行遍歷。
全文摘要
本發(fā)明涉及一種基于控制流圖邏輯結構對比的編譯器驗證方法,其包括以下步驟1)構造源代碼的控制流圖;2)構造目標代碼的控制流圖;3)使用同構圖算法對以上兩者的控制流圖進行比對。本發(fā)明具有以下優(yōu)點可有效地檢測編譯器惡意代碼問題;采用基于控制流圖分析和同構比較算法,準確程度高。
文檔編號G06F9/45GK102012862SQ20101053988
公開日2011年4月13日 申請日期2010年11月9日 優(yōu)先權日2010年11月9日
發(fā)明者于鵬珊, 付小朋, 任永青, 程勝 申請人:北京神舟航天軟件技術有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1