999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于表達式樹的gadget 語義分析技術(shù)

2021-01-15 07:17:42王永杰
計算機工程 2021年1期
關(guān)鍵詞:指令語義功能

蔣 楚,王永杰

(國防科技大學 電子對抗學院,合肥 230037)

0 概述

自1988年第一例緩沖區(qū)溢出漏洞攻擊——莫里斯蠕蟲爆發(fā)以來,針對內(nèi)存漏洞的攻擊方法便層出不窮,相應的防護手段也不斷推陳出新[1],內(nèi)存漏洞的攻防博弈成為網(wǎng)絡空間安全領域的熱點問題之一。

在早期的代碼注入攻擊中,滲透測試人員利用溢出漏洞向內(nèi)存中注入惡意代碼并篡改保存在內(nèi)存中的跳轉(zhuǎn)地址,使程序的控制流轉(zhuǎn)向所注入的惡意代碼中。為了解決這一問題,現(xiàn)代操作系統(tǒng)開始引入一種名為數(shù)據(jù)執(zhí)行保護(Data Execution Prevention,DEP)的保護機制,其將內(nèi)存中的數(shù)據(jù)和代碼進行嚴格區(qū)分,滲透測試人員注入的惡意代碼只能被當作數(shù)據(jù)解析而無法被執(zhí)行,從而使得常規(guī)的代碼注入攻擊難以發(fā)揮作用。

隨著攻防技術(shù)的相互促進與發(fā)展,代碼重用攻擊(Code Reuse Attack,CRA)開始興起[2-4],滲透測試人員利用內(nèi)存漏洞改變程序的執(zhí)行流程,通過將內(nèi)存空間中已有的分散代碼片段(稱為gadget)進行鏈接,構(gòu)造出具備特定功能的程序邏輯從而實現(xiàn)攻擊的目的,能夠達到與傳統(tǒng)代碼注入攻擊相同的效果。

代碼重用攻擊在實施過程中較為繁雜,通常需要一些工具輔助人工來完成gadget 序列的構(gòu)建,學術(shù)界也提出了很多自動化的構(gòu)建方案,但都存在諸多問題使其難以得到廣泛應用。短期內(nèi),代碼重用攻擊在實施過程中存在的問題將使得攻擊成本增加,惡意攻擊者不得不付出大量的時間來構(gòu)建攻擊載荷,從長遠來看,這也不利于防御機制的進一步發(fā)展。因此,加快代碼重用攻擊的實現(xiàn)過程,快速構(gòu)建攻擊載荷,能夠方便滲透測試人員對系統(tǒng)進行評估測試,從而構(gòu)建更加安全有效的防御系統(tǒng)。

本文提出一種基于表達式樹的gadget 語義分析方法,通過表達式樹變體描述gadget 修改寄存器和內(nèi)存讀寫的情況,從而提高gadget 語義分析的效率,加快gadget 序列的構(gòu)建過程。

1 研究背景

1.1 代碼重用攻擊

代碼重用攻擊是一種利用漏洞改變程序在內(nèi)存中的原有代碼執(zhí)行流程以實現(xiàn)攻擊目的的漏洞利用技術(shù)。以一個存在棧溢出漏洞的程序為例,在傳統(tǒng)的攻擊方法中,滲透測試人員需要向棧中注入惡意代碼,并修改程序的返回地址,使程序的控制流轉(zhuǎn)移到惡意代碼的起始地址,這種方法稱為代碼注入攻擊。但是,現(xiàn)代操作系統(tǒng)已經(jīng)廣泛采用數(shù)據(jù)不可執(zhí)行(DEP)等防御機制,代碼注入攻擊對此難以實現(xiàn)攻擊目的,因此,代碼重用攻擊成為當前的主流攻擊方式。

代碼重用攻擊和代碼注入攻擊之間既有一些共性特征也存在差異,它們都是利用計算機內(nèi)存漏洞的攻擊方式,均會篡改一些影響程序執(zhí)行的關(guān)鍵數(shù)據(jù),如棧中的返回地址、函數(shù)指針等,以此實現(xiàn)超出程序設計者預期的功能邏輯。兩者的區(qū)別在于滲透測試人員執(zhí)行惡意代碼的方法不同,代碼重用攻擊無需向內(nèi)存中注入外部代碼,只需重用程序中已經(jīng)存在的指令片段,這些指令片段能夠完成一定的計算和賦值等功能,因此也被稱為gadget,通過多個gadget 的拼接,滲透測試人員可以實現(xiàn)一些特定的意圖。代碼重用攻擊通常會使程序的控制流轉(zhuǎn)向特定的gadget,并按設定的順序依次執(zhí)行g(shù)adget,其實現(xiàn)過程如圖1 所示。

圖1 代碼重用攻擊的實現(xiàn)過程Fig.1 Implementation of code reuse attack

對于現(xiàn)代操作系統(tǒng)中某個存在緩沖區(qū)溢出問題的程序,為了繞過ASLR 和DEP 保護,滲透測試人員需要進行以下3 個步驟:

1)利用內(nèi)存信息泄露漏洞得到需要調(diào)用的函數(shù)的地址和存在問題的緩沖區(qū)位置。

2)構(gòu)建gadget 序列以調(diào)用該函數(shù)。

3)根據(jù)gadget 序列構(gòu)造攻擊載荷并傳遞給程序。

上述過程的核心是選擇合適的gadget 序列。滲透測試人員在實現(xiàn)某些功能前需要初始化一些寄存器,例如,在64 位Windows 操作系統(tǒng)中進行函數(shù)調(diào)用前需要在RCX、RDX、R8 和R9 寄存器以及棧中設置參數(shù)。對于每一個需要初始化的寄存器,都要找到一個能夠?qū)ζ溥M行修改的gadget,因此,在典型的代碼重用攻擊中要調(diào)用某個函數(shù),構(gòu)造的gadget 序列通常要包含:

1)寄存器寫gadget,向RCX、RDX、R8 和R9 寄存器中寫入指定的值。

2)能夠調(diào)用特定函數(shù)的gadget。

要從程序中找到這些gadget,需要確定gadget 的部分語義,例如能否修改棧頂指針、能否修改特定的寄存器、是否有函數(shù)調(diào)用以及調(diào)用了哪個函數(shù)等信息。gadget 序列的構(gòu)建過程還會受到一些因素的影響,其中,最主要的影響是多個gadget 使用同一寄存器或同一內(nèi)存空間的情況,這會導致寄存器或某一內(nèi)存空間在賦值和使用時出現(xiàn)數(shù)據(jù)不一致的問題,這也被稱為gadget 的副作用。由于gadget 副作用的存在,手工構(gòu)造gadget 序列的過程極為繁瑣復雜。自SHACHAM提出ROP[3]以后,自動化構(gòu)建gadget序列的研究就開始展開,但截至目前,gadget 工具的自動化效果并不理想,多數(shù)工具只實現(xiàn)了自動化搜索gadget 并進行語義分析的功能。對于ROP 及其變種,gadget 搜索主要通過指令特征定位到特定的指令位置,再通過切片的方式實現(xiàn),該方法的優(yōu)化存在局限性。

1.2 gadget 語義分析技術(shù)研究現(xiàn)狀

由于機器指令的指令集過于復雜,并且與硬件結(jié)合過于緊密,直接對其進行分析時難度較大。因此,現(xiàn)有工具通常會將gadget 的指令轉(zhuǎn)換成IR(Intermediate Representation),再以形式化的方法來確定gadget 所執(zhí)行的操作。

SCHWARTZ 等人設計了能夠?qū)ΧM制文件自動生成ROP 載荷的工具Q[5-6],其主要思想是將搜索到的gadget 以一種更容易處理的中間形式表示,使用編譯器編譯時的指令匹配思路,結(jié)合中間形式在gadget 集合中選擇合適的gadget 來實現(xiàn)用戶描述功能。Q 將gadget 按功能進行分類,并設計一種QooL語言,與gadget 的類別相對應。Q 在判定某個gadget是否屬于特定功能的gadget 類別時,采用程序驗證領域中程序最弱前置條件的計算方法[7-9],具體如下:gadget L 和后置條件B 的最弱前置條件WP(L,B)是一個能夠判斷gadget 在執(zhí)行后能否滿足條件O 的布爾值,如果WP(L,B)恒為真,則gadget 屬于后置條件B 對應的類別。這種將語義進行分類的思想也被許多gadget 工具所采用。

BARFgadget[10]用2 種方式實現(xiàn)gadget 分類和驗證的功能,其仿照Q 將gadget 按功能分類,并為每一個類別定義一些判斷條件。在分類功能中,創(chuàng)建一個隨機化的初始狀態(tài),通過BARF 中的IR 模擬器執(zhí)行二進制代碼對應的REIL 指令以得到執(zhí)行g(shù)adget后的狀態(tài),確定gadget 讀寫了哪些寄存器以及是否修改了內(nèi)存和標志位,并根據(jù)這些信息對gadget 的功能進行初步分類;在驗證功能中,根據(jù)預先定義的約束條件,通過約束求解的方式進一步驗證gadget是否具有前一階段確定的功能類別。

PSHAPE[11]使用VEX 作為中間語言,并結(jié)合VEX 指令的特點,將PUT、ST 和GET 指令中的寄存器進行展開,用由寄存器構(gòu)成的表達式替換臨時變量,展開的過程中根據(jù)寄存器的傳遞關(guān)系,每次更新寄存器的最終值并且記錄寄存器解引用的情況。Ropper 和PSHAPE 的思路基本一致,針對PUT、ST和GET 3 種操作寄存器和內(nèi)存的指令,提取指令所依賴的表達式,最后使用約束求解器求解棧指針的偏移。angrop 基于angr 框架開發(fā),其充分利用了angr 提供的功能,將寄存器符號化,創(chuàng)建一個空白的初始狀態(tài),使用符號執(zhí)行得到執(zhí)行g(shù)adget 后的狀態(tài),根據(jù)新狀態(tài)中寄存器和內(nèi)存的值獲取gadget 讀寫寄存器和內(nèi)存的情況。

ROPgenerator[12]使用REIL 作為中間語言,在將gadget 的指令轉(zhuǎn)換成REIL 指令后,會對每一條指令進行分析,所有對寄存器和內(nèi)存的操作會被作為有向圖的一個節(jié)點,節(jié)點中包含操作的表達式,通過節(jié)點之間的邊來表示寄存器之間的依賴關(guān)系,在遇到條件指令時,在邊上添加條件的約束信息。最后,從有向圖中提取出條件和表達式的鍵值對以得到gadget 的語義摘要。

BOP(Block Oriented Programming)[13]是一種非控制數(shù)據(jù)攻擊,其gadget 是遵循程序原有執(zhí)行流的代碼塊,但若要實現(xiàn)特定意圖,還需程序能夠執(zhí)行到具有特定語義的基本塊上,并且在執(zhí)行時滿足一些特定的約束。自動化工具BOPC 對程序的基本塊進行了抽象,其將寄存器符號化,在angr 框架上進行符號執(zhí)行,通過對符號執(zhí)行后狀態(tài)的判斷來得到gadget 的關(guān)鍵信息。

1.3 問題分析

代碼重用攻擊的實施過程較為繁雜,通常需要一些工具輔助人工來完成gadget 鏈的構(gòu)建,當前已經(jīng)有很多自動化的構(gòu)建工具,本文總結(jié)6 種經(jīng)典gadget 工具的所用技術(shù)和實現(xiàn)方法,如表1 所示。

表1 6 種現(xiàn)有工具的gadget 語義分析技術(shù)實現(xiàn)原理Table 1 The implementation principle of six existing tools’gadget semantic analysis technology

以上gadget 工具采用的gadget 語義分析技術(shù)主要基于靜態(tài)分析和動態(tài)符號執(zhí)行,一般而言,前者具有更高的效率,后者更容易實現(xiàn)。實際中在進行g(shù)adget 語義分析時,主要面臨如下2 個問題:

1)gadget 語義分析主要服務于gadget 鏈的構(gòu)建,其關(guān)注的核心內(nèi)容與其他領域不同,而在當前學術(shù)界公開發(fā)表的論文中,與gadget 語義分析相關(guān)的文獻資料較少,因此,分析確定gadget 的語義是首先要解決的問題。

2)在多數(shù)情況下,gadget 的數(shù)量可能達到數(shù)十萬,而單個gadget 也可能是大段的代碼塊,需要盡可能地優(yōu)化gadget 的語義分析方法,因此,對現(xiàn)有g(shù)adget 語義分析方法進行改進,加快語義分析的進程,也是gadget 語義分析時需要解決的問題。

針對上述第一個問題,本文分析現(xiàn)有g(shù)adget 工具的源碼,根據(jù)各工具分析的gadget 語義,定義gadget 語義摘要的概念,以明確gadget 語義分析的內(nèi)容;針對第二個問題,本文提出一種基于表達式樹的gadget 語義分析技術(shù),用一種表達式樹變體描述寄存器和內(nèi)存讀寫的表達式信息,以提高語義分析的效率。

gadget 序列的自動化生成需要完成gadget 的搜索、gadget 語義摘要的計算與gadget 的選擇和拼接等功能。gadget 搜索已經(jīng)廣泛應用于工程實踐中,對于ROP 及其變種[14-16],采用的算法大多基于Galileo方法[3],很難有優(yōu)化的空間[17];對于gadget 的選擇和拼接,由于某一階段gadget 的選擇可能會影響之后所有的gadget 選擇,并且使用不同的gadget 選擇策略會產(chǎn)生不同的效果,對gadget 長度的影響難以估量,因此,很難用一種通用且有效的方法實現(xiàn)自動化;對于gadget 的語義分析,其內(nèi)容不夠明確,當前gadget 工具使用的語義分析方法或是設計的結(jié)構(gòu)過于復雜,依托的框架也過于龐大,因此存在優(yōu)化的可能性。

本文明確gadget 語義分析的內(nèi)容,提出一種基于表達式樹的方法,以描述寄存器和內(nèi)存讀寫的表達式信息。在該方法中,對描述表達式信息的數(shù)據(jù)結(jié)構(gòu)進行優(yōu)化,使其能夠快速得到表達式所依賴的寄存器。在各個工具實現(xiàn)的搜索功能和語義摘要的計算功能各不相同的情況下,設計一個實驗系統(tǒng)進行對比與分析。

2 基于表達式樹的gadget 語義摘要計算

2.1 gadget 語義摘要

在實際的代碼重用攻擊過程中,構(gòu)建一個可用的gadget 鏈并不需要gadget 蘊含的全部語義信息。事實上,自動化構(gòu)建gadget 鏈通常會采用啟發(fā)式算法,只需考慮gadget 副作用的影響和部分關(guān)鍵語義,如系統(tǒng)調(diào)用、控制流轉(zhuǎn)移等信息,明確需要分析的gadget 語義,并對其進行簡化或提煉即能夠加快語義分析的進程。為了進一步明確構(gòu)建gadget 序列過程中需要確定的語義,本文分析常用gadget 工具的源代碼,如表2 所示,其中,“√”表示工具分析了語義,“×”表示未分析。

表2 6 種典型開源gadget 工具的語義信息Table 2 Semantic information of six typical open source gadget tools

在表2 中,regw、memr 和memw 分別表示寄存器寫、內(nèi)存讀和內(nèi)存寫操作,expr 表示能否為相應的寄存器或內(nèi)存進行定量分析,生成能夠被解析的表達式,sp offset 表示棧指針的偏移值,transfer 表示控制流轉(zhuǎn)移情況,包括系統(tǒng)調(diào)用syscall、庫函數(shù)調(diào)用libcall 和條件轉(zhuǎn)移cond。

由于多數(shù)gadget 工具沒有實現(xiàn)gadget 鏈構(gòu)建功能,因此在上述工具中,只有使用符號執(zhí)行進行語義分析的2 個工具angrop 和BOPC 對控制流轉(zhuǎn)移情況進行了分析。在實際確定控制流轉(zhuǎn)移情況的過程中,如果目的地址是一個常量,可以通過單條指令的機器碼結(jié)合指令的地址計算得到;如果目的地址是一個寄存器或內(nèi)存,可以通過寄存器和內(nèi)存的表達式得到。

為進一步明確gadget 語義,本文定義gadget 的語義摘要為:用于表述gadget 核心語義和功能的關(guān)鍵信息,包括寄存器和內(nèi)存的讀寫情況以及棧指針的偏移。其中,寄存器的讀寫情況包括被修改的寄存器名、最后一次寫入的值及其依賴的寄存器或內(nèi)存空間,內(nèi)存的讀寫情況包括被讀取或?qū)懭氲膬?nèi)存空間的位置、內(nèi)存地址、寫入的值及其依賴的寄存器或內(nèi)存空間。

2.2 特殊表達式樹設計

通過對現(xiàn)有g(shù)adget 工具的源碼進行分析,得出多數(shù)gadget 工具對gadget 進行表達式分析時使用的數(shù)據(jù)結(jié)構(gòu)不易于處理,尤其對于較長的gadget,分析效率會降低,原因是現(xiàn)有g(shù)adget 工具表示寄存器數(shù)值的方式過于簡單,或是使用簡單的表達式替換,這使得gadget語義分析不能很好地解析寄存器或內(nèi)存的表達式。此外,現(xiàn)有g(shù)adget工具使用較為復雜的圖結(jié)構(gòu),在維護寄存器和內(nèi)存讀寫情況的過程中需要遍歷多個節(jié)點,并通過多次計算來確定依賴寄存器或內(nèi)存的信息,在gadget數(shù)量較多時其影響較為顯著。

gadget 工具能從部分二進制文件(如一些大于10 MB 的共享庫)中搜索到較多的gadget,這時需要計算大量的語義摘要,因此,要盡可能地加快語義摘要的計算速度。符號執(zhí)行或模擬執(zhí)行的方法將耗費較長時間,現(xiàn)有工具所使用的靜態(tài)分析技術(shù)同樣存在優(yōu)化的空間。

為了能夠支持多種平臺,gadget 工具一般會將gadget 翻譯成中間語言,再對中間語言進行語法分析,在語法分析中較為突出的一個問題就是對數(shù)學表達式的描述和分析,通常使用表達式樹來解決該問題。為了說明中間語言轉(zhuǎn)換成表達式樹的可行性,本文以VEX、REIL 兩類使用最為廣泛的中間語言為例,對其中常用的幾種指令進行表達式形式轉(zhuǎn)換。

表3 所示為VEX 中最常見的8 種指令及其表達式形式,將GET、PUT、LD、ST 和ITE 這5 種指令轉(zhuǎn)換成賦值表達式,其中,ITE 是條件賦值指令,類似于C 語言的條件運算符。將算術(shù)指令和類型轉(zhuǎn)換指令轉(zhuǎn)換成算術(shù)表達式,多數(shù)運算操作都是一元或者二元運算,部分浮點運算操作使用了3 個或者4 個操作數(shù),并調(diào)用了VEX中的輔助函數(shù)(helper function),但通常對gadget 的語義分析只關(guān)心通用寄存器,而輔助函數(shù)沒有副作用,不會影響寄存器的值,因此,不需要精確地定義其表達式,可以將它轉(zhuǎn)換成多叉樹的形式。

表3 VEX 的常見指令及其表達式形式Table 3 Common instructions of VEX and their expressions

表4 所示為REIL 中最常見的7 種指令及其表達式形式,將STR、LDM、STM、BISZ 和JCC 這5 種指令轉(zhuǎn)換成賦值表達式,其中,BISZ 是條件賦值指令,類似于C 語言的條件運算符,JCC 是條件跳轉(zhuǎn)指令,可以看作是對IP 的條件賦值。將算術(shù)指令和邏輯指令轉(zhuǎn)換成算術(shù)表達式,所有的運算操作都是二元運算,可以很容易地轉(zhuǎn)換成樹的形式。

表4 REIL 的常見指令及其表達式形式Table 4 Common instructions of REIL and their expressions

在傳統(tǒng)的表達式樹中,每一個葉節(jié)點對應一個操作數(shù),每一個非葉節(jié)點對應一個數(shù)學運算,整個表達式樹會對應一個算數(shù)表達式,而無需考慮特定的子表達式樹。但是,gadget 的語義分析可能涉及多個寄存器或中間變量,多數(shù)情況下需要考慮中間變量的表達式,還需要記錄表達式對應的目標變量,因此,本文對傳統(tǒng)的表達式樹進行一些修改,設計一種特殊的表達式樹以表示gadget 的語義,具體為:樹中有Val 和Expr 兩類節(jié)點,Val 節(jié)點可以是寄存器或內(nèi)存的初值、常量值和運算符,Expr 節(jié)點是一棵子表達式樹,每一棵子表達式樹對應一條IR 指令,其根節(jié)點必定是一個代表運算符的Val 節(jié)點,Expr 節(jié)點中保存了目標變量的信息,這樣一個gadget 就轉(zhuǎn)化成一棵或多棵表達式樹。

由于一個gadget 可能多次修改某一寄存器或內(nèi)存空間,因此需要區(qū)分每一次修改寄存器的情況,將寄存器或內(nèi)存的初始值標記為如同“eax_0”的形式,即在寄存器名或內(nèi)存地址后加下劃線“_”和修改次數(shù)“0”。以指令“add eax,ebx”對應的VEX IR 為例,如圖2 所示,可以得到如圖3 所示的表達式樹,其中,圓圈代表Val 節(jié)點,方框代表Expr 節(jié)點。

圖2 “add eax,ebx”對應的VEX 指令Fig.2 VEX instruction corresponding to“add eax,ebx”

圖3 “add eax,ebx”的VEX 指令對應的表達式樹Fig.3 The expression tree corresponding to VEX instruction of“add eax,ebx”

與傳統(tǒng)的表達式樹相同,本文表達式樹能夠通過訪問葉節(jié)點來確定表達式的操作數(shù),進而得到gadget 的副作用信息,獲取表達式所依賴的寄存器或內(nèi)存空間。與傳統(tǒng)表達式樹的不同之處在于,該表達式樹維護了表達式對應的目標變量,并能通過Expr 節(jié)點方便地提取某個中間變量對應的表達式值,這為獲取部分變量的約束提供了便利。特別地,當gadget 的長度較長時,構(gòu)造的表達式樹深度也會增加,在極端情況下會近似成為一條鏈表,這時確定依賴寄存器的效率會大幅降低。為了能夠快速得到依賴寄存器的信息,本文采用以空間換時間的思路,在將IR 指令轉(zhuǎn)化成表達式樹的過程中,為每一個Expr 節(jié)點維護依賴寄存器的信息。

2.3 語義分析的執(zhí)行流程

本文提出一種基于表達式樹的gadget 語義摘要計算方法,在將二進制轉(zhuǎn)化成中間語言IR 后,根據(jù)中間語言需要滿足SSA(Static Single Assignment)的特點構(gòu)造2.2 節(jié)所述的表達式樹,根據(jù)該表達式樹生成gadget 語義摘要,執(zhí)行流程如圖4 所示。

圖4 gadget 語義摘要計算流程Fig.4 Calculation procedure of semantic summary of gadget

在生成表達式樹以后,為每一個寄存器和中間變量構(gòu)建一個鍵為名稱、值為表達樹的鍵值對,為每一個寄存器構(gòu)建一個修改次數(shù)的計數(shù)器,此時獲取特定寄存器或中間變量的值只需要先通過鍵值對訪問對應的表達式樹,然后解析表達式樹即可。在解析樹時先通過葉節(jié)點訪問該寄存器或中間變量的依賴寄存器信息,再將對應的Expr 節(jié)點轉(zhuǎn)換回數(shù)學表達式作為約束條件進行求解即可得到對應的寄存器值。對于棧寄存器的偏移值,從棧寄存器對應的Expr 節(jié)點出發(fā),自頂向下遍歷Expr 節(jié)點并收集約束條件,即可通過約束求解器求出偏移值。

2.4 SemExpr 的設計與實現(xiàn)

當前有多種方案能夠?qū)崿F(xiàn)IR 翻譯和分析功能,如S2E、BARF 和angr 等框架。其中,S2E使用QEMU 進行整個計算機模擬,但這需要較多的系統(tǒng)資源;BARF 使用REIL[18]作為中間語言,當前REIL難以支持很多指令,其中包括gadget 中比較常見的指令,如retf,因此,BARF 在功能上略顯不足;angr 使用VEX IR[19]作為中間語言,相對于REIL,VEX 支持的指令集更多,相對于匯編語言,VEX 提取語義信息更快捷,因此,其更適合計算gadget 的摘要信息,并且已經(jīng)有angrop、Ropper 和PSHAPE 等開源工具,這使得angr 的實現(xiàn)和評估更為簡單。

本文在Ropper 的基礎上構(gòu)建原型系統(tǒng)SemExpr,如圖5 所示,其中主要包括pyvex 和Z3 兩個開源項目。pyvex 是python 版本的IR 翻譯工具,能夠?qū)⒍M制文件轉(zhuǎn)換成VEX IR;Z3 是一個高效的SMT(Satisfiability Modulo Theories)求解器,集成了多種約束求解算法。

圖5 SemExpr 的結(jié)構(gòu)及執(zhí)行流程Fig.5 Structure and execution procedure of SemExpr

SemExpr由3 個模塊構(gòu)成,加載模塊使用了Ropper原有的加載代碼,能夠讀取PE 文件和ELF 文件的代碼段;搜索模塊會根據(jù)指定的命令行參數(shù),搜索以ret、jmp指令或系統(tǒng)調(diào)用結(jié)尾的gadget,并去掉重復的gadget;語義模塊會對gadget 進行分析,得到gadget 的表達式樹以及各寄存器的表達式,生成約束條件,根據(jù)約束條件計算sp 的偏移值。系統(tǒng)執(zhí)行流程如下:

1)加載二進制文件,解析文件頭,得到代碼段中的字節(jié)序列和對應的地址。

2)根據(jù)命令行參數(shù),從第1 步所得字節(jié)序列中搜索具有特定機器碼的位置,通過Galileo算法得到gadget,將所有的gadget放到一個集合中以去除相同的gadget。

3)為每個gadget 創(chuàng)建一個圖結(jié)構(gòu),利用pyvex 得到gadget 的VEX IR 形式,根據(jù)VEX IR 指令具有IRStmt、IRExpr 和IROp 3 層結(jié)構(gòu)的特點,在IROp 中得到能夠被Z3 解析的表達式形式,在IRExpr 中構(gòu)建單個的表達式樹結(jié)構(gòu)并根據(jù)表達式形式構(gòu)建約束條件,在IRStmt 中將構(gòu)建的單個表達式樹添加到gadget 對應的圖中。

4)找到sp 對應的表達式樹,遍歷該表達式樹,得到樹中的全部約束條件。

5)將約束條件作為輸入,使用Z3 進行求解,得到sp 的偏移值。

6)返回gadget 的語義摘要信息。

3 實驗與評估

3.1 實驗系統(tǒng)的設計與實現(xiàn)

現(xiàn)有g(shù)adget 工具基于Galileo 算法均實現(xiàn)了各自的gadget 搜索功能,但其搜索參數(shù),如指令長度限制和字節(jié)數(shù)限制各不相同,并且在搜索后還定義了不同的篩選策略,因此,它們搜索得到的gadget 數(shù)量也不盡相同。此外,各個工具計算的語義摘要內(nèi)容略有不同,導致難以對各工具進行對比實驗和評估。

針對上述問題,本文設計一個如圖6 所示的實驗系統(tǒng)gadgetAnalysis,以評估本文設計的gadget 語義摘要計算方法的性能。該實驗系統(tǒng)由搜索模塊、轉(zhuǎn)換模塊和語義模塊構(gòu)成,其中,搜索模塊用于搜索gadget,在實現(xiàn)時對gadget 搜索工具ROPgadget[20]進行略微修改,使用戶能夠設定gadget 長度的上下限;轉(zhuǎn)換模塊用于將ROPgadget 的搜索結(jié)果轉(zhuǎn)換成各工具能夠分析的數(shù)據(jù)結(jié)構(gòu),部分工具會在確定語義前對gadget 進行篩選,為了提高對比實驗的準確性,本文將篩選部分全部去除;語義模塊能夠?qū)λ阉鞯降膅adget 進行分析,確定gadget 的語義,實現(xiàn)時將各gadget 工具的語義分析部分進行提取和修改,只計算本文定義的語義摘要,但是對于PSHAPE,其使用基于字符串替換的語義分析,最后只能得到嵌套的VEX 形式的表達式,不能用于gadget 序列構(gòu)建。

圖6 gadgetAnalysis 系統(tǒng)結(jié)構(gòu)Fig.6 System structure of gadgetAnalysis

3.2 結(jié)果與分析

選取Windows 和Linux 下常見的共享庫和軟件,設定gadget 的指令數(shù)為2~10,統(tǒng)計各工具計算語義摘要的時間以及能夠處理的gadget 數(shù)量,進行10 次實驗取平均值得到如表5 所示的結(jié)果。根據(jù)表5 的實驗結(jié)果,從計算時間、能處理的gadget 數(shù)量和能否生成可用的表達式3 個方面衡量各工具的性能,結(jié)果如表6 所示。從表6 可以看出,angrop 計算時間最長,由于其使用了符號執(zhí)行,計算的語義最多,面對一些特殊的指令時反而無法處理,因此能處理的gadget 數(shù)量最少;ROPgenerator 雖然計算時間最短,但受限于REIL 指令,其能處理的gadget 數(shù)量較少;PSHAPE 計算時間較短,能處理的gadget 數(shù)量也最多,但其生成的表達式不能被解析;Ropper 能處理的gadget 數(shù)量較多,但其計算時間較長;相較于Ropper,SemExpr 在計算時間上取得了明顯改進,其能取得較好的效果。

表5 各gadget 工具計算語義摘要的時間和能夠處理的gadget 數(shù)量Table 5 The time that each gadget tool requires to calculate the semantic summary and the number of gadgets that can be processed

表6 各gadget 工具性能對比Table 6 Performance comparisons of each gadget tool

4 結(jié)束語

本文針對當前自動化方案構(gòu)造gadget序列時效率較低的問題,對主流gadget 工具計算的語義信息進行提煉,并定義gadget語義摘要的概念,提出一種基于表達式樹的gadget語義摘要計算方法。以VEX、REIL 2種中間語言為例,說明中間語言轉(zhuǎn)換成表達式樹的可行性,并實現(xiàn)一種原型系統(tǒng)SemExpr。在此基礎上,本文設計用于測量gadget 語義摘要計算效率的實驗系統(tǒng)gadgetAnalysis,仿真結(jié)果驗證了SemExpr在計算gadget語義摘要時具有較好的性能。在對gadget進行語義分析后,如何根據(jù)語義分析的信息來拼接gadget 以構(gòu)建具有特定功能的gadget 鏈,是代碼重用攻擊實現(xiàn)自動化的瓶頸之一。對于該問題,目前只能通過一些啟發(fā)式算法來構(gòu)建具備簡單功能的gadget 序列,設計算法構(gòu)建具有指定復雜邏輯的gadget序列將是下一步的研究方向。

猜你喜歡
指令語義功能
聽我指令:大催眠術(shù)
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
語言與語義
ARINC661顯控指令快速驗證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
關(guān)于非首都功能疏解的幾點思考
“上”與“下”語義的不對稱性及其認知闡釋
認知范疇模糊與語義模糊
中西醫(yī)結(jié)合治療甲狀腺功能亢進癥31例
辨證施護在輕度認知功能損害中的應用
主站蜘蛛池模板: 日韩精品一区二区三区视频免费看| 亚洲色图欧美激情| 2021亚洲精品不卡a| 在线观看国产精美视频| 国产精品露脸视频| 亚洲精品无码高潮喷水A| 亚洲一道AV无码午夜福利| 亚洲AV无码一二区三区在线播放| 99re在线视频观看| 日韩无码黄色| 高清色本在线www| 伊人久久大香线蕉综合影视| 中文字幕免费视频| 日韩中文字幕亚洲无线码| 亚洲天堂网2014| 999国内精品久久免费视频| 伊人91在线| 国产精品福利一区二区久久| 久久婷婷五月综合97色| 亚洲欧洲日韩久久狠狠爱| 国产成人永久免费视频| 日韩免费中文字幕| 福利视频99| 久久精品午夜视频| 亚洲色大成网站www国产| 亚洲精品日产AⅤ| 99re免费视频| 国产二级毛片| 国模沟沟一区二区三区| 狠狠色综合网| 国产欧美日韩另类精彩视频| 露脸真实国语乱在线观看| 日本黄色不卡视频| 不卡无码网| 国产美女一级毛片| 天天激情综合| 97视频在线精品国自产拍| 666精品国产精品亚洲| 97视频在线精品国自产拍| 亚洲精品你懂的| 香蕉视频在线观看www| 久久综合丝袜日本网| www.99在线观看| 五月婷婷精品| 国产美女91呻吟求| a色毛片免费视频| 国产精品lululu在线观看| 久久国产av麻豆| 亚洲va欧美va国产综合下载| 99精品视频在线观看免费播放 | 国产精品视频导航| 54pao国产成人免费视频| 91在线国内在线播放老师| 丁香五月婷婷激情基地| 欧美三级视频网站| 中文字幕不卡免费高清视频| 欧洲熟妇精品视频| 青青操视频在线| 亚洲资源在线视频| 57pao国产成视频免费播放| 国产乱子伦无码精品小说| 秘书高跟黑色丝袜国产91在线| 欧美精品H在线播放| 亚洲一区免费看| 欧美成人亚洲综合精品欧美激情| 欧美一级高清片欧美国产欧美| 国产精品深爱在线| 亚洲欧美日韩中文字幕在线一区| AV网站中文| 国产成人做受免费视频| 国产色爱av资源综合区| 亚洲男人的天堂网| 日韩在线网址| 国产一区二区免费播放| 18禁黄无遮挡网站| 国产成人精品日本亚洲77美色| 欧美色99| 色香蕉网站| 久久久久亚洲AV成人人电影软件| 亚洲第一视频免费在线| 男人天堂亚洲天堂| 国产精品女同一区三区五区|