專利名稱:一種基于動態(tài)二進制翻譯框架的代碼復用攻擊檢測系統(tǒng)的制作方法
技術領域:
本發(fā)明屬于計算機安全領域,具體是一種基于動態(tài)二進制翻譯框架的代碼復用攻擊檢測系統(tǒng)。
背景技術:
軟件規(guī)模的不斷擴展使得漏洞數(shù)量日益增多,互聯(lián)網(wǎng)的普及使得基于軟件漏洞的攻擊呈現(xiàn)范圍廣、方式多、蔓延快等特點,對用戶的安全造成嚴重威脅。早期針對緩沖區(qū)溢出漏洞的主要攻擊方式是代碼注入,攻擊者本地或者遠程向進程地址空間注入可執(zhí)行的二進制代碼,改變程序的控制流使進程執(zhí)行這段代碼,目前存在大量針對代碼注入攻擊的防御機制。代碼復用攻擊(Code Reuse Attack)是當前較為常見的攻擊方式,是代碼注入攻 擊的演化,無需攻擊者注入惡意代碼,利用動態(tài)庫或者程序中的合法函數(shù)和指令發(fā)動有效攻擊?;?R0P(Return OrientedProgramming)以及 JOp (Jump-Oriented Programming)技術的代碼復用攻擊,分別利用以RET和JMP指令結(jié)束的指令序列,可實現(xiàn)任意目的的攻擊。目前,黑客們已成功在各種平臺、設備、軟件中實施代碼復用攻擊,代碼復用攻擊自動化構造技術的出現(xiàn)使得代碼復用攻擊已成為威脅最大的一種攻擊方式。二進制翻譯技術能夠?qū)⒁环N平臺的二進制可執(zhí)行文件翻譯為同平臺或者其他平臺中可執(zhí)行的二進制代碼,使可執(zhí)行程序能突破平臺的限制,增強了軟件和處理器之間的適應性。動態(tài)二進制翻譯指在程序的執(zhí)行過程中對源程序進行實時翻譯,實時監(jiān)控整個翻譯和執(zhí)行過程,是追蹤程序控制流常采用的一種技術。動態(tài)二進制探測(Instrumentatation)技術利用動態(tài)二進制翻譯技術,在程序中加入額外代碼收集程序行為信息或者改變程序行為。探測技術可運用在程序各階段,作用在二進制代碼的級別,不需要源代碼的支持,覆蓋所有被執(zhí)行的客戶代碼并對代碼進行分析,很容易地區(qū)分程序的數(shù)據(jù)和代碼,主要應用于程序行為分析、程序漏洞的檢測和防御,程序安全性保證等方面?,F(xiàn)有防御機制或者檢測系統(tǒng)存在這樣那樣的不足,如需源代碼支持,性能開銷大等缺點。本發(fā)明結(jié)合動態(tài)二進制翻譯框架,設計了一種代碼復用攻擊的檢測系統(tǒng),解決了目如檢測系統(tǒng)中存在的不足。
發(fā)明內(nèi)容
本發(fā)明提出了一種基于動態(tài)二進制翻譯框架的代碼復用攻擊檢測系統(tǒng),該系統(tǒng)能保證非惡意程序的正常執(zhí)行,檢測和終止惡意攻擊的運行。它包括翻譯器、探測器、Cache以及跳臺四個模塊。翻譯器負責程序的翻譯工作,以基本塊為單位,截獲程序的指令流逐條對程序的二進制指令解碼翻譯。采用同平臺翻譯技術和“翻譯-執(zhí)行”模式,每翻譯完一個基本塊,執(zhí)行該基本塊。
探測器通過執(zhí)行C代碼或者添加匯編代碼到目標代碼中,提供指令的正常執(zhí)行、安全性檢測以及指令的優(yōu)化,分為常規(guī)探測和攻擊檢測。常規(guī)探測為基礎部分,保證程序正常運行;攻擊檢測為核心,主要處理程序中存在控制流轉(zhuǎn)移的潛在危險指令。Cache 一方面分配內(nèi)存空間緩存翻譯過后的目標代碼,降低重復翻譯引入的開銷;一方面建立并維護Cache中的映射表,映射表保存著基本塊源地址和翻譯地址之間的映射關系。跳臺(Trampoline)實質(zhì)上是由嵌入內(nèi)存中的匯編指令序列構成,通過調(diào)用跳臺首地址執(zhí)行嵌入的匯編指令序列,主要用于實現(xiàn)函數(shù)調(diào)用、其他跳臺調(diào)用、指令的優(yōu)化等,保證程序的翻譯和執(zhí)行工作有序進行。與已有的漏洞檢測技術或者攻擊檢測系統(tǒng)相比,本發(fā)明具有如下特點a)無需程序源代碼支持。很多傳統(tǒng)檢測方法或系統(tǒng)需要程序提源代碼,而目前操 作系統(tǒng)中的大部分程序不提供源代碼,大大限制了檢測機制的適用范圍。本發(fā)明基于動態(tài)二進制翻譯技術,截獲程序的二進制指令并翻譯為同平臺的可執(zhí)行目標代碼,為非開源程序提供安全性檢測。b)運行的高效性。程序通過檢測系統(tǒng)翻譯和檢測后再運行,必將導致性能開銷急劇增長,本發(fā)明提出Cache緩存翻譯后的目標代碼,設置局部Cache和跳轉(zhuǎn)目標預測機制優(yōu)化目標代碼的執(zhí)行性能,保證程序的運行效率。
圖I為本發(fā)明系統(tǒng)結(jié)構示意圖;圖2為本發(fā)明中翻譯器組件工作流程圖;圖3為本發(fā)明中Cache機制的結(jié)構示意圖;圖4為本發(fā)明提出的核心組件攻擊檢測器的結(jié)構示意圖;圖5為本發(fā)明提出的影子棧內(nèi)存布局;
具體實施例方式下面結(jié)合附圖以及實例對本發(fā)明的具體實施方式
作進一步的詳細說明。如圖I所示,從體系結(jié)構的層次上看,本發(fā)明所應用的計算機系統(tǒng)主要由應用程序,檢測系統(tǒng),內(nèi)核空間組成。應用程序交由檢測系統(tǒng)翻譯和檢測后,由內(nèi)核空間執(zhí)行程序。檢測系統(tǒng)包括翻譯器、探測器、Cache、跳臺四個模塊。本發(fā)明檢測系統(tǒng)的工作流程如下(I)應用程序被加載到本發(fā)明的檢測系統(tǒng),檢測系統(tǒng)完全接管應用程序的控制權,完成系統(tǒng)初始化工作,如Cache內(nèi)存空間分配,跳臺的創(chuàng)建及初始化等。(2)翻譯器截取程序的二進制指令流,以基本塊為單位,采用“翻譯-執(zhí)行”模式,每翻譯完一個基本塊,執(zhí)行該基本塊?;緣K指以控制流分支指令結(jié)束的指令序列。(3)探測器中的探測函數(shù)接受翻譯器傳遞過來基本塊相關信息,依據(jù)系統(tǒng)對指令的不同處理要求,添加模擬執(zhí)行、安全檢測、性能優(yōu)化等機制到目標代碼。(4)探測函數(shù)處理結(jié)束后控制權轉(zhuǎn)交翻譯器繼續(xù)剩余指令的翻譯。為保證程序的正常運轉(zhuǎn),一個基本塊翻譯快結(jié)束時,將創(chuàng)建一個基本塊跳臺,包含下個基本塊的信息和可執(zhí)行代碼,用于調(diào)用其他跳臺有序啟動基本塊的翻譯和執(zhí)行。
(5)基本塊翻譯結(jié)束后,將基本塊的源地址SRC和目標地址DST傳遞給Cache管理,并將控制流轉(zhuǎn)移到目標代碼執(zhí)行,目標代碼執(zhí)行完畢繼續(xù)翻譯新的基本塊。下面結(jié)合圖2詳細說明翻譯器的執(zhí)行流程。以處理某個基本塊為例,翻譯器將首先通過Cache查詢該基本塊是否已翻譯,如果已翻譯過,則直接跳轉(zhuǎn)到目標代碼中執(zhí)行,否則逐條開始翻譯基本塊中的指令。指令流的翻譯通過枚舉翻譯表實現(xiàn),指令解碼后通過預設的探測函數(shù)添加目標代碼,如此反復直至該基本塊的翻譯結(jié)束。目前大多數(shù)處理器支持變長指令,為保證解碼的正確性,本發(fā)明在翻譯器初次匹配成功后,將繼續(xù)讀取二進制指令數(shù)據(jù),看是否還存在匹配情況。本發(fā)明的二進制翻譯為同平臺的翻譯,只處理存在控制流轉(zhuǎn)移的指令,故本發(fā)明探測器中設計的探測函數(shù)分為兩類,一類簡單處理解碼后的匯編指令,如復制指令、忽略指 令等操作;一類是為該指令添加大量的額外目標代碼,用于模擬指令執(zhí)行,獲取指令的行為,指令安全檢測以及性能優(yōu)化等。Cache負責建立和維護基本塊源地址SRC和翻譯地址DST之間的映射關系,圖3描述了 Cache的布局。基本塊的翻譯啟動前,Cache接收到翻譯器的查找請求,通過映射表查找函數(shù)匹配SRC,如果SRC存在,跳轉(zhuǎn)到DST地址處執(zhí)行目標代碼;否則將Cache空閑塊首地址DST返回翻譯器,并在映射表中建立SRC和DST之間的映射關系。內(nèi)存地址分布的特殊性使得映射表的建立和維護可通過Hash機制實現(xiàn)快速查找和插入。但Hash表的沖突或者碰撞現(xiàn)象是無法避免的,為解決Hash表的碰撞沖突,本發(fā)明Cache模塊采用線性探查法,遇到碰撞時繼續(xù)匹配下一個單元,如果映射表全部無法匹配到SRC,則SRC不在映射表中。為保證程序翻譯和執(zhí)行工作的有序進行,本發(fā)明在基本塊翻譯快結(jié)束時創(chuàng)建包含下個基本塊所有信息和可執(zhí)行代碼的跳臺,用于調(diào)用其他跳臺實現(xiàn)新基本塊的翻譯和執(zhí)行。由于程序首個基本塊無法通過調(diào)用跳臺執(zhí)行目標代碼,本發(fā)明采用的方法是,在翻譯函數(shù)結(jié)束時修改函數(shù)的返回地址為基本塊的目標代碼地址,有效實現(xiàn)程序控制流轉(zhuǎn)移。下面結(jié)合圖4來描述探測器的核心部分,也是本發(fā)明的核心部分攻擊檢測。攻擊檢測由ELF動態(tài)分析,指令識別,ROP攻擊檢測、控制流攻擊檢測以及攻擊報告五部分組成。ELF動態(tài)分析在系統(tǒng)初始化時完成所有工作,包含ELF文件基本信息獲取和共享對象中所有函數(shù)地址信息獲取。本發(fā)明將共享對象映射到內(nèi)存中,依據(jù)ELF文件結(jié)構,獲取共享對象中所有函數(shù)地址范圍等信息,為控制流攻擊檢測工作提供信息支持。翻譯器解碼二進制指令流后交由探測函數(shù)處理,潛在危險指令的探測函數(shù)內(nèi)都將調(diào)用安全檢測函數(shù)保證指令的安全性。檢測器的安全檢測工作過程如下(I)指令識別器甄別潛在危險指令的類型,確定指令為CALL、RET還是JMP指令,為本發(fā)明選擇檢測機制提供支持。(2)根據(jù)被檢測指令的類型,本發(fā)明主要提供兩種檢測機制R0P攻擊檢測和控制流攻擊檢測。(3)如果ROP攻擊檢測或者控制流攻擊檢測發(fā)現(xiàn)惡意攻擊,提示用戶出現(xiàn)攻擊,終止程序運行。為檢測利用CALL和RET指令發(fā)起的攻擊,本發(fā)明ROP攻擊檢測提出,在內(nèi)存區(qū)域分配一塊相對隔離空間作為影子棧。影子棧保存函數(shù)的返回地址以及該地址對應的翻譯地址,圖5描述了影子棧和系統(tǒng)棧的內(nèi)存布局。如果為CALL指令,將CALL指令返回地址TOSH到影子棧的內(nèi)存空間,同時將返回地址的翻譯地址PUSH到影子棧;如果為RET指令,出棧并比較系統(tǒng)棧和影子棧棧頂元素RIP是否一致。ROP攻擊檢測提出的影子棧存在一個前提,CALL和RET指令需滿足對稱性,但程序中的一些異常會導致本發(fā)明出現(xiàn)誤報現(xiàn)象。本發(fā)明采取的解決辦法是,系統(tǒng)棧和影子棧出現(xiàn)不一致時,調(diào)用重新認證函數(shù)進一步的判斷不一致是否為正常情況導致。例如,Linux采用 動態(tài)解析技術解析庫函數(shù)地址,庫函數(shù)的調(diào)用和返回由JMP指令和RET指令實現(xiàn),此時系統(tǒng)棧和影子棧的棧頂元素將出現(xiàn)不一致,本發(fā)明產(chǎn)生誤報。針對這種情況,本發(fā)明通過控制流的追蹤,將由庫函數(shù)第一次調(diào)用導致的異常標記為合法,同時將系統(tǒng)棧和影子棧的棧頂元素出棧,繼續(xù)執(zhí)行。控制流攻擊檢測負責JMP指令安全性的檢測。,本發(fā)明采用的方法是,依據(jù)間接JMP指令的跳轉(zhuǎn)目標一般在同一函數(shù)內(nèi)或者共享對象內(nèi)這一現(xiàn)象,判斷JMP指令源地址SRC和跳轉(zhuǎn)目標地址DST之間是否滿足在同一函數(shù)或者同一共享對象內(nèi)。由于庫函數(shù)動態(tài)鏈接過程的間接JMP指令跳轉(zhuǎn)目標存在特殊性,本發(fā)明保存GOT的副本,標記庫函數(shù)調(diào)用導致的GOT變化,排除正常修改GOT的情況及時更新GOT副本合法修改處,與原GOT對比檢測非法的GOT修改。程序的翻譯、目標代碼的添加、安全機制的引入等都將導致程序執(zhí)行的效率降低,為保證程序在本發(fā)明系統(tǒng)中高效地運行,本發(fā)明基于前期大量程序運行情況的分析,多次引入局部小型Cache機制緩存最近使用過的一些信息,實現(xiàn)間接跳轉(zhuǎn)目標預測、符號表快速查找等性能優(yōu)化機制。同時聯(lián)合快速的查找機制,如Hash查找、折半查找等算法保證局部Cache匹配失敗后程序的執(zhí)行效率。間接跳轉(zhuǎn)目標預測解決程序存在大量間接跳轉(zhuǎn)目標相同時,重復性的映射表查找工作引入的開銷。該機制使用局部的Cache緩存最后幾次間接JMP指令的相關信息,如源地址SRC、跳轉(zhuǎn)目標地址DST、跳轉(zhuǎn)目標翻譯地址等,映射表查找前先在局部Cache中匹配是否為該指令的跳轉(zhuǎn)目標最近查詢過。為減少該機制預測失敗次數(shù)過多導致的方面效果,當跳轉(zhuǎn)目標預測失敗的次數(shù)達到系統(tǒng)預定義的最大失敗次數(shù),本發(fā)明將停止間接跳轉(zhuǎn)目標的預測,轉(zhuǎn)而直接采用Hash查找算法實現(xiàn)映射表的快速查找。符號表快速查找機制結(jié)合局部Cache和快速查找算法,解決JMP指令安全性檢測時的大量符號表匹配操作引起的性能開銷。局部Cache使用LRU(最近最少使用置換策略)及時更新局部Cache,Cache查找失敗后采用折半查找算法實現(xiàn)符號表的快速查找。
權利要求
1.一種基于動態(tài)ニ進制翻譯框架的代碼復用攻擊檢測系統(tǒng),其特征在于應用程序被加載到檢測系統(tǒng)中翻譯運行,包含翻譯器、探測器、Cache、跳臺四個模塊 翻譯器負責程序的翻譯工作,以基本塊為單位,截獲程序的指令流逐條對程序的ニ進制指令解碼翻譯。采用同平臺翻譯技術和“翻譯-執(zhí)行”模式,每翻譯完ー個基本塊,執(zhí)行該基本塊; 指令解碼后,探測器通過執(zhí)行C代碼或者添加匯編代碼到指令對應的目標代碼中,提供指令的正常執(zhí)行、安全性檢測以及指令的優(yōu)化,分為常規(guī)探測和攻擊檢測;常規(guī)探測為基礎部分,保證程序正常運行;攻擊檢測為核心,主要處理程序中存在控制流轉(zhuǎn)移的潛在危險指令; 生成的目標代碼由Cache管理,Cache —方面分配內(nèi)存空間緩存翻譯過后的目標代碼,降低重復翻譯引入的開銷;一方面建立并維護映射表,映射表保存著基本塊源地址和翻譯地址之間的映射關系,為查詢基本塊是否翻譯過提供支持; 跳臺(Trampoline)用于保證程序的翻譯和執(zhí)行工作有序進行,同時為指令安全性檢測提供支持;跳臺實質(zhì)上是由嵌入內(nèi)存中的匯編指令序列構成,通過調(diào)用跳臺首地址執(zhí)行嵌入的匯編指令序列,主要用于實現(xiàn)函數(shù)調(diào)用、其他跳臺調(diào)用、指令的優(yōu)化等,保證程序的翻譯和執(zhí)行工作有序進行。
2.根據(jù)權利I所述的系統(tǒng),其特征在于探測器的攻擊檢測包含ELF動態(tài)分析、指令識另O、ROP攻擊檢測、控制流攻擊檢測、指令識別五部分 ELF動態(tài)分析依據(jù)ELF文件格式遍歷程序,獲取程序共享對象中的所有函數(shù)地址范圍信息,為檢測潛在危險指令安全性提供信息支持; 指令識別器甄別指令的類型,即識別指令為CALL、RET還是JMP指令,進而決定攻擊檢測器選取何種檢測機制; ROP攻擊檢測提出影子棧思想,保存返回地址的副本,監(jiān)測返回地址是否被篡改,處理利用CALL和RET指令發(fā)動的攻擊; 控制流攻擊檢測通過判斷指令源地址SRC和跳轉(zhuǎn)目標地址DST的合法性,檢測利用JMP指令發(fā)動的攻擊; 攻擊報告用于當檢測到代碼復用攻擊或其他類型攻擊時,向用戶報告攻擊并終止程序的運行。
全文摘要
本發(fā)明屬于計算機安全領域,公開了一種基于動態(tài)二進制翻譯框架的代碼復用攻擊檢測系統(tǒng)。檢測系統(tǒng)包括翻譯器、探測器、Cache、跳臺四個模塊。翻譯器以基本塊為單位逐條解碼程序的二進制數(shù)據(jù);探測器處理解碼后的指令,常規(guī)探測是基礎,保證正常運行,攻擊檢測為核心,獲取和檢測指令的行為;Cache建立基本塊的源和翻譯地址之間的映射關系,并緩存翻譯后生成的基本塊目標代碼;跳臺管理程序的控制流,保證程序的翻譯和執(zhí)行有序進行,并為同類型指令提供檢測和優(yōu)化機制。本發(fā)明能處理非開源的程序,為程序的安全執(zhí)行提供保障。
文檔編號G06F21/00GK102662830SQ20121007356
公開日2012年9月12日 申請日期2012年3月20日 優(yōu)先權日2012年3月20日
發(fā)明者劉超, 孫建華, 陳浩 申請人:湖南大學