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

基于ARMv8架構(gòu)gadget自動(dòng)搜索框架

2016-06-08 06:08:38趙利軍王震宇王奕森
關(guān)鍵詞:指令

趙利軍 王震宇 王奕森 莊 寬

(信息工程大學(xué)數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室 河南 鄭州 450001)

?

基于ARMv8架構(gòu)gadget自動(dòng)搜索框架

趙利軍王震宇王奕森莊寬

(信息工程大學(xué)數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室河南 鄭州 450001)

摘要為了在ARM公司最新發(fā)布的首款支持64位處理器的ARMv8架構(gòu)上實(shí)現(xiàn)ROP(Return_Oriented Programmig)技術(shù),設(shè)計(jì)了ARMv8架構(gòu)上的ROP gadget的自動(dòng)搜索工具。通過(guò)結(jié)合ARMv8架構(gòu)指令系統(tǒng)的特點(diǎn),首先在庫(kù)文件搜索出所有的以RET指令結(jié)尾的短指令序列,并把這些指令序列存儲(chǔ)在gadget庫(kù)中,然后采用一些優(yōu)化策略對(duì)該庫(kù)進(jìn)行優(yōu)化,最后根據(jù)用戶的輸入在庫(kù)中搜索到與用戶輸入功能相同的gadget鏈。通過(guò)對(duì)搜索工具搜索到的gadget的統(tǒng)計(jì),結(jié)果表明gadget集具有圖靈完整性,可以執(zhí)行任意的操作。最后通過(guò)一個(gè)實(shí)例證明了ROP在ARMv8架構(gòu)上的可行性。

關(guān)鍵詞ROP指令序列自動(dòng)搜索ARMv8圖靈完整性

0引言

數(shù)據(jù)執(zhí)行保護(hù)和簽名等技術(shù)有效地阻止了代碼注入式攻擊。2005年Sebastian Krahmer等人提出了一種借用代碼攻擊方法,該方法不再需要向內(nèi)存中注入惡意代碼,而是利用代碼段中的代碼實(shí)現(xiàn)攻擊。return-into-libc[1]技術(shù)是一種典型的借用代碼攻擊,通過(guò)劫持控制流,跳轉(zhuǎn)到C語(yǔ)言函數(shù)庫(kù)libc,復(fù)用libc中已有的函數(shù)。但是return-into-libc攻擊只能順序調(diào)用函數(shù),不能實(shí)現(xiàn)圖靈完備的行為,如分支操作、循環(huán)操作等。

為了彌補(bǔ)return-into-libc攻擊的局限性, 2007年Hova Shacham[2]第一次提出了X86平臺(tái)上的返回導(dǎo)向編程技術(shù)ROP。返回導(dǎo)向編程攻擊的方式不再局限于將漏洞程序的控制流跳轉(zhuǎn)到庫(kù)函數(shù)中,而是利用庫(kù)函數(shù)或可執(zhí)行文件的指令代碼片段實(shí)現(xiàn)攻擊,將復(fù)用的代碼粒度從return-to-libc的函數(shù)級(jí)別縮小到指令序列。 自2007年ROP概念被提出后,關(guān)于ROP攻擊的研究引起了研究人員的廣泛關(guān)注,他們先后在各個(gè)平臺(tái)上對(duì)ROP攻擊進(jìn)行實(shí)驗(yàn)。例如ARM平臺(tái),SPARC平臺(tái)和AVR平臺(tái)。Tim Kornau[3]首次在ARM架構(gòu)上實(shí)現(xiàn)了ROP攻擊并驗(yàn)證了圖靈完整性,而且提出了一套基于REIL語(yǔ)言的自動(dòng)構(gòu)建ROP鏈的算法。2008年,Erik Buchanan[4]等人在SPARC平臺(tái)上驗(yàn)證了ROP圖靈完整性。盧森堡大學(xué)的Ralf-Philipp Weinmann利用ROP技術(shù)實(shí)現(xiàn)了iOS系統(tǒng)的入侵[5]。

ROP技術(shù)至關(guān)重要的一環(huán)就是可用指令序列的自動(dòng)搜索,本文中將這些指令序列定義為gadget。由于庫(kù)文件中的代碼的數(shù)量非常巨大,所以手工搜索gadget將會(huì)非常的耗時(shí),這將嚴(yán)重降低ROP技術(shù)的效率。2011年,Edward J. Schwartz[6]等人提出了一種 X86 平臺(tái)上gadget 自動(dòng)搜索算法,其定義了內(nèi)部語(yǔ)言 QooL 來(lái)實(shí)現(xiàn)漏洞程序到 ROP payload 之間的轉(zhuǎn)換,但是其缺陷是定義的語(yǔ)義只有內(nèi)存操作和邏輯操作,沒(méi)有涉及到條件執(zhí)行和循環(huán)。然而這些技術(shù)只適用于X86架構(gòu),并不適用于其它架構(gòu),特別是RISC架構(gòu)。2010年,Kornau 等人在ARM架構(gòu)上實(shí)現(xiàn)一種基于中間語(yǔ)言 REIL 的 ARM gadget 自動(dòng)搜索算法,首先該算法定位到分支指令,然后根據(jù)語(yǔ)法樹算法把一條指令翻譯成 REIL 語(yǔ)言,最后組合信息成為有用的gadgets。Edward J. Schwartz等人提出的自動(dòng)構(gòu)造ROP攻擊的框架Q是基于短指令序列的,不能繞過(guò)Ping Chen[7]等人的提出的防御機(jī)制。2014年,Chao Yang[8]等人在Schwartz基礎(chǔ)上提出了基于長(zhǎng)指令序列的自動(dòng)構(gòu)造框架,成功地繞過(guò)了Ping Chen等人的防御機(jī)制。

ARMv8架構(gòu)為了獲得低功耗高效率的64位計(jì)算優(yōu)勢(shì),引入了一個(gè)全新的指令字長(zhǎng)為32位的64位指令集A64。上文論述的gadget搜索算法或是針對(duì)ARMv7架構(gòu),或是針對(duì)X86架構(gòu),并沒(méi)有解決ARMv8架構(gòu)gadget搜索關(guān)鍵問(wèn)題:(1) ARMv8 gadget的搜索。ARMv7中用于實(shí)現(xiàn)函數(shù)返回的BX lr指令在A64指令集中已經(jīng)不復(fù)存在。A64指令集中,用于實(shí)現(xiàn)函數(shù)返回的指令為RET {Xm}(當(dāng)Xm省略時(shí)默認(rèn)使用X30),ARMv7不存在該條指令。(2) ARMv8的圖靈完整性。為了支持ARMv8新的指令系統(tǒng)和技術(shù)特性,其運(yùn)行支撐環(huán)境也發(fā)生了顯著的變化。新的動(dòng)態(tài)鏈接庫(kù)中的gadget集是否具有圖靈完整性也需要重新考證。本文通過(guò)對(duì)X86架構(gòu)下的gadget自動(dòng)搜索算法的分析,結(jié)合ARMv8指令集的特征,設(shè)計(jì)了ARMv8架構(gòu)下的gadget自動(dòng)搜索工具,并利用搜索到的指令序列在ARMv8 linux中進(jìn)行了實(shí)驗(yàn)。

1ARMv8架構(gòu)的差異性分析

ARMv8架構(gòu)在指令集設(shè)置、寄存器使用和函數(shù)調(diào)用等方面和我們熟知的架構(gòu)(X86,ARM)截然不同。ARMv8架構(gòu)有兩種工作狀態(tài)-AArch64和AArch32。在這兩種工作狀態(tài)下指令集仍然都是32位的,但是指令的尋址范圍不同了:AArch64狀態(tài)下支持64bit的地址空間,AArch32狀態(tài)下支持32 bit的地址空間,且在每種工作狀態(tài)下ARMv8都有31個(gè)通用寄存器[9]。本文將主要對(duì)AArch64狀態(tài)下ARMV8架構(gòu)的差異性。

1.1子函數(shù)調(diào)用規(guī)則

ARMv8架構(gòu)摒棄了ARMv7架構(gòu)下的7中工作模式-1個(gè)用戶模式和6個(gè)特權(quán)模式,ARMV8架構(gòu)下采用4種工作模式EL0-EL3,EL0相當(dāng)于用戶模式,下面我們將主要對(duì)非特權(quán)模式進(jìn)行分析。

ARMv8架構(gòu)下當(dāng)發(fā)生子函數(shù)調(diào)用時(shí),程序?qū)C中下一條指令的地址保存到寄存器X30中,然后跳轉(zhuǎn)到PC中的地址去執(zhí)行,當(dāng)函數(shù)返回時(shí)程序?qū)?huì)跳轉(zhuǎn)到X30寄存器中的地址處執(zhí)行。當(dāng)子函數(shù)的參數(shù)的個(gè)數(shù)不大于8個(gè)的時(shí)候,則參數(shù)由寄存器X0-X7進(jìn)行參數(shù)傳遞,如果子函數(shù)的參數(shù)大于8個(gè),則大于8個(gè)參數(shù)之外的參數(shù)通過(guò)棧進(jìn)行傳遞。根據(jù)ARMv8架構(gòu)的子函數(shù)的調(diào)用規(guī)則,在ARMv8架構(gòu)中的寄存器分配規(guī)則如表1所示。

表1 函數(shù)調(diào)用時(shí)寄存器分配規(guī)則

從表1中可以看出ARMv7架構(gòu)為15個(gè)通用寄存器,其中LR用來(lái)存放函數(shù)的返回地址,當(dāng)函數(shù)重被調(diào)函數(shù)返回時(shí)從LR寄存器讀取返回地址跳轉(zhuǎn)到條用函數(shù)繼續(xù)執(zhí)行。ARMv8架構(gòu)下為31個(gè)通用寄存器,棧指針寄存器SP獨(dú)立于31個(gè)通用寄存器之外,其中X30相當(dāng)于ARMv7架構(gòu)下的LR寄存器,當(dāng)函數(shù)返回時(shí),程序?qū)?huì)跳轉(zhuǎn)到X30寄存器中的地址執(zhí)行。

ARMv8架構(gòu)下函數(shù)調(diào)用時(shí)的內(nèi)存布局相比于ARM以前的版本有了較大的改變,函數(shù)調(diào)用時(shí)的棧結(jié)構(gòu)如圖1所示。

圖1 函數(shù)調(diào)用棧的分布情況對(duì)比圖

左圖為ARMv7的情形。caller調(diào)用callee之前,棧指針位于sp1位置;進(jìn)入callee后,將棧基址寄存器R11和程序鏈接寄存器LR分別壓棧,LR寄存器保存的是callee的返回地址。接著將棧指針減去一個(gè)常數(shù)(由編譯器根據(jù)具體情況而定),假設(shè)其位于sp3位置。sp2-sp3之間的空間為callee的棧空間。

右圖為ARMv8的情形。caller調(diào)用callee之前,棧指針位于sp1位置;緊挨著sp1位置的兩個(gè)寄存器X29和X30分別存放的是caller棧基址和返回地址。進(jìn)入callee函數(shù)后,首先會(huì)將棧指針減去一個(gè)常數(shù)(由編譯器根據(jù)具體情況而定),假設(shè)位于sp2位置,然后將X29和X30寄存器分別壓棧,此時(shí)棧指針位于sp3位置,X30寄存器保存的是callee的返回地址;sp1-sp3之間的空間為callee的棧空間。

此外,ROP 技術(shù)必須要有方法將棧中的數(shù)據(jù)加載到寄存器X0-X7中。研究發(fā)現(xiàn),ARMv8中使用LDP和LDR指令完成數(shù)據(jù)的出棧操作[10]。

LDR指令實(shí)現(xiàn)單數(shù)據(jù)的讀取,即從當(dāng)前棧頂讀取一個(gè)數(shù)據(jù)加載到目的寄存器,其匯編指令格式為:LDR Xn,[sp],#offset,其含義是從當(dāng)前棧頂讀取一個(gè)數(shù)據(jù)存儲(chǔ)到寄存器Xn,然后棧指針sp加上offset。

LDP完成寄存器組的讀取。其匯編指令格式為:LDP Xn,Xm,[sp],#offset,其含義是從當(dāng)前棧頂連續(xù)讀取兩個(gè)數(shù)據(jù)依次存儲(chǔ)到寄存器Xn和Xm,然后棧指針sp加上offset。

1.2ARMv8架構(gòu)分支指令

通過(guò)對(duì)ARMv8架構(gòu)指令系統(tǒng)的研究[9],總共有5類跳轉(zhuǎn)指令可以影響程序的執(zhí)行流。其功能如表2所示,當(dāng)處理器在AArch64位的工作狀態(tài)下時(shí),表中的寄存器就寫成Xm,當(dāng)工作在AArch32狀態(tài)下時(shí)寄存器就寫成Wm。

表2 ARMv8架構(gòu)分支指令描述表

從表2中可以看出,ARMv8架構(gòu)分支指令可以分成三大類:條件跳轉(zhuǎn)分支指令、非條件直接跳轉(zhuǎn)分支指令和非條件間接跳轉(zhuǎn)分支指令,其中條件跳轉(zhuǎn)分支指令和非條件直接跳轉(zhuǎn)分支指令的目標(biāo)地址的偏移被編碼到指令的編碼中,不利于控制,所以本文不會(huì)使用以條件跳轉(zhuǎn)分支指令和非條件直接跳轉(zhuǎn)分支指令為結(jié)尾的指令序列。

ARMv8架構(gòu)上的可用指令序列都是以支持寄存器間接跳轉(zhuǎn)指令為結(jié)尾的。從表2中可以看出,這些指令主要包括三類:BLR Xm、BR Xm和RET {Xm}。其中,ARMv8中BLR Xm和BR Xm主要用于分支跳轉(zhuǎn)或函數(shù)調(diào)用,BLR指令時(shí)需要將返回地址保存到寄存器X30中,而BR指令不需要將返回地址保存到寄存器X30中;RET {Xm}為函數(shù)返回指令,當(dāng)Xm省略時(shí)默認(rèn)使用X30。本文中主要搜索以RET {Xm}指令為結(jié)尾的指令序列。

2ARMv8 gadget自動(dòng)搜索框架

本文中設(shè)計(jì)的搜索框架如圖2所示。其主要包括兩個(gè)部分;指令序列搜索模塊和gadget組合模塊。gadget搜索模塊完成庫(kù)文件中以RET指令為結(jié)尾的短指令序列的搜索。gadget組合模塊根據(jù)用戶的輸入在指令序列集中搜索到相應(yīng)的gadget鏈。

圖2 ARMv8 gadget自動(dòng)搜索框架

2.1gadget搜索模塊

gadget鏈?zhǔn)荝OP技術(shù)最重要的一部分,所謂 gadget,是指在一個(gè)程序中能搜索到的具有某一特定功能的可用指令序列。該指令序列必須滿足一定的條件:

(1) gadget 中包含的指令條數(shù)通常很短,在個(gè)位數(shù)以內(nèi);

(2) gadget 的末尾都是一個(gè)跳轉(zhuǎn)指令;

(3) 每個(gè) gadget 完成某一功能,如 mov/add/sub/and/neg等。

本文中的gadget搜索框架將主要搜索以RET指令結(jié)尾的指令序列。ARMv8架構(gòu)下的RET指令和X86架構(gòu)下的RET指令在指令編碼,指令語(yǔ)法等方面是完全不同的。ARMv8架構(gòu)RET指令的編碼如圖3所示。

圖3 ARMv8 RET指令編碼格式

Xm為目的地址寄存器,理論上Xm可以為31個(gè)通用寄存器中的任意一個(gè),但是通過(guò)統(tǒng)計(jì)本文發(fā)現(xiàn)ARMv8架構(gòu)下Xm通常為X30寄存器。這樣RET {Xm}指令的編碼格式固定為“xc0x03x5fxd6”。所以本文的搜索算法將主要在目標(biāo)二進(jìn)制文件對(duì)特征碼“xc0x03x5fxd6”進(jìn)行搜索。

當(dāng)定位到分支指令之后,開始以分支指令開始逆向遍歷,其搜索算法如圖4所示,圖4給出的自動(dòng)搜索算法遍歷庫(kù)文件或可執(zhí)行文件的整個(gè)代碼段。算法的第4行通過(guò)對(duì)ARMv8架構(gòu)ELF文件格式的分析,定位到代碼段。該算法的第一層循環(huán)用來(lái)搜索整個(gè)庫(kù)文件來(lái)定位分支指令,當(dāng)搜索到“xc0x03x5fxd6”特征碼時(shí)用第二層循環(huán)開始逆向4字節(jié)遍歷,并把相應(yīng)的指令保存到G.gadget_binary[]中,當(dāng)完成一個(gè)指令流的搜索后,把該指令流的首地址保存到G.address中。當(dāng)發(fā)生以下情況時(shí)算法停止搜索:① 當(dāng)遇到返回指令RET時(shí);② 當(dāng)G.gadget_binary[]中的指令的條數(shù)大于搜索深度maxdepth時(shí)。

圖4 ARMv8 gadget自動(dòng)搜索算法

算法中的maxdepth為用戶預(yù)先設(shè)置好的一個(gè)閾值,這個(gè)值的設(shè)置是必要的,且其值一般設(shè)置為個(gè)位數(shù),本文中將其值設(shè)置為4。如果不設(shè)置閾值或者該值過(guò)大會(huì)給指令序列帶來(lái)巨大的邊界影響。算法的G結(jié)構(gòu)定義如下:

typedef struct gadget_logic_struct

{

int address;

int gadget_binary[4];

其中address用來(lái)存儲(chǔ)每個(gè)指令序列的起始地址,gadget_binary[4]用來(lái)存儲(chǔ)指令序列,當(dāng)指令序列的指令條數(shù)小于4時(shí),使用NOP指令填充。經(jīng)過(guò)上述算法可以得到所有的以RET分支指令結(jié)尾的gadget序列。

2.2gadget組合模塊

gadget組合模塊通過(guò)解析用戶的輸入,在指令序列集中搜索到與用戶輸入具有相同功能的gadget鏈。該模塊主要解決兩個(gè)問(wèn)題。gadget序列的優(yōu)化和寄存器沖突的解決。

2.2.1gadget序列的優(yōu)化

本文的優(yōu)化主要是針對(duì)棧指針寄存器SP偏移的優(yōu)化。2.1節(jié)中搜索到的gadget集中存在很多功能相同,但是其棧指針SP的偏移卻是不同的短指令序列。例如gadget”add x3,x2,x5;ldr x30,[sp],#0x8;ret”和gadget”add x3,x2,x5;ldp x29,x30,[sp],#0x10; ret”,這兩個(gè)gadget完成的功能都是將寄存器X2和寄存器X5中內(nèi)容相加,結(jié)果保存到寄存器X3中,但是第一個(gè)gadget中SP調(diào)整了8個(gè)字節(jié),而第二個(gè)gadget中SP調(diào)整了16個(gè)字節(jié),本文中將會(huì)保留第一個(gè)gadget。本文采用線性掃描方法進(jìn)行解決。即gadget組合模塊從gadget集的開始位置遍歷整個(gè)gadget集,當(dāng)遇到與用戶輸入具有相同功能的gadget,就保存該gadget中SP調(diào)整的大小,當(dāng)遍歷結(jié)束時(shí),選取那個(gè)SP調(diào)整最小的gadget作為gadget鏈中的一個(gè)。這樣在進(jìn)行ROP攻擊時(shí),會(huì)節(jié)省非常多的棧空間,提高了ROP攻擊的效率。本文中的方法雖然效率非常低,但非常有效。

2.2.2寄存器沖突的解決

寄存器沖突指存在兩個(gè)gadgets:G1和G2,G1存儲(chǔ)臨時(shí)數(shù)據(jù)到寄存器A,G2需要初始化寄存器A以完成相應(yīng)的操作,G1和G2之間就存在寄存器沖突。本文的解決策略主要分成兩種情況:一種情況是如果一個(gè)寄存器被某個(gè)gadget無(wú)意的設(shè)置,而且該寄存器又同時(shí)被后面的一個(gè)gadget使用,并且在這兩個(gè)gadget之間沒(méi)有設(shè)置該寄存器的gadget,那么我們就需要這兩個(gè)gadget之間插入load gadget以消除寄存器沖突。例如“mov x1,[x2];mov x0,0xffff0983;ldr x30,[sp],#0x10;ret”和“mov x4,[x0];ldp x29,x30,[sp],#0x20;ret”這兩個(gè)gadget,第一個(gè)gadget的功能是設(shè)置X1的值,然而X0卻被該gadget無(wú)意的設(shè)置,而又同時(shí)在后一個(gè)gadget中被作為源寄存器使用,如果在他們之間沒(méi)有一個(gè)gadget對(duì)進(jìn)行設(shè)置,我們就立即在前一個(gè)gadget后插入load gadget對(duì)X0寄存器進(jìn)行更新;另一種情況是一個(gè)gadget對(duì)寄存器進(jìn)行了初始化用來(lái)完成后面的計(jì)算,而該寄存器卻又被另一個(gè)gadget用于存儲(chǔ)臨時(shí)變量,這將影響該寄存器的正常使用,那么我們就在這兩個(gè)gadget之間增加一個(gè)store gadget以消除寄存器沖突。例如“mov x0,0x7fb724a568;ldp x29,x30,[sp],#0x10;ret”、“add x0,x2,x5;ldp x29,x30,[sp],#0x10;ret”這兩個(gè)gadget,第一個(gè)gadget將X0寄存器賦值為0x7fb724a568,該值被后面的gadget作為一個(gè)基址使用,但是第二個(gè)gadget卻將X0寄存器用來(lái)存儲(chǔ)寄存器X2和X5相加的臨時(shí)結(jié)果,那么我們就在這兩個(gè)gadget之間增加一個(gè)store gadget將一個(gè)gadget的結(jié)果首先存儲(chǔ)起來(lái),等到使用時(shí)再取出。

3ARMv8 ROP實(shí)例

實(shí)驗(yàn)環(huán)境: Linaro ARMv8 Linux,其版本號(hào)為L(zhǎng)inux 3.6.0-1-Linaro-vexpress64。Linaro是ARM公司授權(quán)商,其為ARMv8開發(fā)的工具鏈和快速模型虛擬平臺(tái)能從ARM官網(wǎng)下載[11]。

為了盡快使企業(yè)脫貧,林洋本著精準(zhǔn)扶貧的理念,充分利用國(guó)家出臺(tái)的各項(xiàng)農(nóng)業(yè)扶持政策,大力推進(jìn)農(nóng)業(yè)項(xiàng)目建設(shè)。近3年來(lái),先后建成年產(chǎn)300萬(wàn)標(biāo)準(zhǔn)食用菌菌袋扶貧開發(fā)項(xiàng)目,食用菌種植推廣項(xiàng)目,小型農(nóng)田水利補(bǔ)貼項(xiàng)目,大棚種植冬棗項(xiàng)目等。這些農(nóng)業(yè)項(xiàng)目已收到了良好的社會(huì)效益和經(jīng)濟(jì)效益,本單位職工及周邊農(nóng)村上百人在項(xiàng)目推廣中受益脫貧,群眾紛紛點(diǎn)贊,稱林洋是“帶領(lǐng)群眾脫貧的引路人”。2017年,云城乳業(yè)被市國(guó)資委評(píng)為“項(xiàng)目推進(jìn)先進(jìn)單位”。

本節(jié)將給出Linaro ARMv8 Linux上實(shí)現(xiàn)的ROP實(shí)例。該實(shí)例的ROP shellcode欲實(shí)現(xiàn)的功能是通過(guò)復(fù)用libc.so.6中的write函數(shù)在終端輸出字符串”ARMv8 exploit”,然后復(fù)用libc.so.6中的exit函數(shù)使程序離開。

3.1gadget鏈

根據(jù)用戶的目的,工具搜索到了以下三個(gè)gadget,這3個(gè)gadget來(lái)自ARMv8常用的libc.so.6或ld-linux-aarch64.so.1庫(kù)文件。gadget(1)用于從內(nèi)存加載數(shù)據(jù)到寄存器X0;gadget(2)從內(nèi)存中連續(xù)讀取4個(gè)數(shù)據(jù)依次放入寄存器X1、X2、X3和X4;gadget(3)完成write系統(tǒng)調(diào)用,指令”mov x8, #0x40”將write的系統(tǒng)調(diào)用號(hào)0x40加載到寄存器X8,指令”ldr x30,[sp],#10”將write系統(tǒng)調(diào)用后的程序執(zhí)行的目的地址加載到寄存器X30。

0x7fb7f4c4e4 F84107E0 ldr x0,[sp],#0x10

0x7fb7f4c4e8 F84107FE ldr x30,[sp],#0x10

0x7fb7f4c4ec D65F03C0 ret

gadget(1)

0x7fb7fe835c A8C10BE1 ldp x1,x2,[sp],#0x10

0x7fb7fe8360 A8C113E3 ldp x3,x4,[sp],#0x10

0x7fb7fe8364 A8C27BFD ldp x29, x30, [sp], #0x20

0x7fb7fe8368 D65F03C0 ret

gadget(2)

0x7fb7f65c64 D2800808 mov x8, #0x40

0x7fb7f65c68 D4000001 svc #0

0x7fb7f65c6c F84027FE ldr x30,[sp],#0x10

0x7fb7f65c70 D65F03C0 ret

gadget(3)

通過(guò)對(duì)上面gadget鏈的分析,生成的ARMv8 ROP shellcode內(nèi)容如下:

char shellcode[]=″x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41″″x41x41x41x41x41x41x41x41xe4xc4xf4xb7x7fx00x00x00″″x00x00x00x00x00x00x00x00x41x41x41x41x41x41x41x41″″x5cx83xfexb7x7f x00x00x00x41x41x41x41x41x41x41x41″″x41x41x41x41x41x41x41x41xd0xc4xf4xb7x7f x00x00x00″″x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41″″x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41″″x50xfcxffxffx7fx00x00x00x0dx00x00x00x00x00x00x00″″x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41″″x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41x41″″ARMv8 exploit;

3.2ROP執(zhí)行流

ROP shellcode對(duì)應(yīng)的內(nèi)存布局及工作原理如圖5所示。圖的左側(cè)給出ROP的內(nèi)存安排和內(nèi)存地址的后12位,圖的右側(cè)的虛線代表指令序列的執(zhí)行順序。

通過(guò)一次漏洞利用,將返回地址用gadget(1)的返回地址改寫,程序返回時(shí)將會(huì)跳轉(zhuǎn)到本文設(shè)定的指令序列,程序依次執(zhí)行g(shù)adget(1)和gadget(2),在gadget(1)和gadget(2)執(zhí)行完畢之后X0、X1和X2三個(gè)寄存器已經(jīng)被設(shè)置為write系統(tǒng)調(diào)用所需要的三個(gè)參數(shù),gadget(3)將write系統(tǒng)調(diào)用號(hào)0x40傳遞給寄存器0x40,然后執(zhí)行write系統(tǒng)調(diào)用在終端輸出字符串”ARMV8 exploit”,通過(guò)控制write系統(tǒng)調(diào)用的返回地址,write系統(tǒng)調(diào)用執(zhí)行完畢后程序?qū)?huì)跳轉(zhuǎn)到gadget(1)執(zhí)行,gadget(1)將exit系統(tǒng)調(diào)用的參數(shù)和入口地址分別傳遞給寄存器X0和X30,最后通過(guò)執(zhí)行exit系統(tǒng)調(diào)用使程序離開。在內(nèi)存中,本文沒(méi)有用到的閑置內(nèi)存全部用字符A填充。

圖5 ROP攻擊實(shí)例原理圖

4實(shí)驗(yàn)結(jié)果評(píng)估

本文利用該工具在Linaro ARMv8 Linux 常用的庫(kù)文件libc.so.6和ld-linux-aarch64.so.1中進(jìn)行搜索,實(shí)驗(yàn)結(jié)果如下所示。

libc.so.6庫(kù)文件中搜索深度為4的部分搜索結(jié)果。

ld-linux-aarch64.so.1庫(kù)文件中搜索深度為4的部分搜索結(jié)果。

通過(guò)利用搜索到的結(jié)果統(tǒng)計(jì)出以RET指令結(jié)尾的gadget的數(shù)目如表3所示。

表3 gadget統(tǒng)計(jì)結(jié)果

Erik Buchanan[12]等人首次在X86架構(gòu)上對(duì)gadget的圖靈完整性進(jìn)行了證明,如果一個(gè)gadget集可以滿足基本的賦值操作、算術(shù)和邏輯運(yùn)算、控制流和函數(shù)調(diào)用四個(gè)條件,那么該gadget集就是圖靈完整的,可以執(zhí)行任何操作。通過(guò)統(tǒng)計(jì),本文中搜索工具搜索到的gadget同樣可以滿足上面四個(gè)條件,因此本文工具搜索到的gadget也是圖靈完備的,可以執(zhí)行任意的操作。

5結(jié)語(yǔ)

為了實(shí)現(xiàn)ARMv8架構(gòu)上的ROP技術(shù),本文首次提出了ARMv8上ROP gadget自動(dòng)搜索的框架,它首先在庫(kù)文件搜索出所有的以RET指令結(jié)尾的短指令序列,并把這些指令序列存儲(chǔ)在gadget庫(kù)中,然后對(duì)該庫(kù)進(jìn)行優(yōu)化,最后根據(jù)用戶的輸入在庫(kù)中搜索到與用戶輸入功能相同的gadget鏈。通過(guò)對(duì)搜索工具搜索到的gadget進(jìn)行統(tǒng)計(jì),結(jié)果表明gadget集具有圖靈完整性,可以執(zhí)行任意的操作。本文不僅提出了ARMv8架構(gòu)下的gadget自動(dòng)搜索工具,而且利用搜索到的gadget在ARMVv8 Linux中進(jìn)行了ROP實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明可以利用gadget集在ARMv8架構(gòu)上進(jìn)行ROP攻擊。但是本文的搜索工具是基于語(yǔ)法進(jìn)行搜尋的,在搜索過(guò)程中會(huì)產(chǎn)生許多無(wú)用的gadget,而且無(wú)法反映gadget一些標(biāo)志寄存器的影響,降低了gadget的搜索效率和準(zhǔn)確性。下一步我們將提出一種基于語(yǔ)義的gadget自動(dòng)搜索方法對(duì)這些問(wèn)題進(jìn)行解決。此外,本文使用的ROP shellcode是通過(guò)人工分析形成的, ARMv8 ROP shellcode自動(dòng)生成方法的研究也將成為下一步工作的重點(diǎn)。

參考文獻(xiàn)

[1] Krahmer S.x86-64 buffer overflow exploits and the borrowed code chunks exploitation technique[J].C1:Vulnerable Server application,2005.

[2] Shacham H.The geometry of innocent flesh on the bone:Return-into-libc without function calls (on the x86)[C]//Proceedings of the 14th ACM conference on Computer and communications security.ACM,2007:552-561.

[3] Kornau T.Return oriented programming for the ARM architecture[D].Master’s thesis,Ruhr-Universitat Bochum,2010.

[4] Roemer R,Buchanan E,Shacham H,et al.Return-oriented programming:Systems,languages,and applications[J].ACM Transactions on Information and System Security (TISSEC),2012,15(1):2.

[5] Vincenzo Iozzo,ROP and iPhone.http://blog.zynamics.com/2010/04/16/rop-and-iphone/, Apri,16,2010.

[6] Schwartz E J,Avgerinos T,Brumley D.Q:Exploit Hardening Made Easy[C]//USENIX Security Symposium,2011.

[7] Chen P,Xiao H,Shen X B,et al.DROP:Detecting return-oriented programming malicious code[M]//Information Systems Security.Springer Berlin Heidelberg,2009:163-177.

[8] Yang C,Zheng T,Lin Z.AR Exploit:An Automatic ROP Exploit Based on Long Sequence[C]//Software Security and Reliability-Companion (SERE-C),2014 IEEE Eighth International Conference on.IEEE,2014:50-56.

[9] https://silver.arm.com/download/ARM_and_AMBA_Architecture/AR100-DA-70501-r0p0-00eac5/ARMv8_ISA_PRD03-GENC-010197-30-0.pdf.

[10] https://silver.arm.com/download/ARM_and_AMBA_Architecture/AR10 0-DA-70501-r0p0-00eac5/DDI0487A_a_armv8_arm_errata.pdf.

[11] Linaro.Linaro ARMv8 Project.http://www.Linaro.org/projects/armv8/.

[12] Buchanan E,Roemer R,Shacham H.When good instructions go bad:generalizing return-oriented programming to RISC[C]//Proceedings of the 15th ACM conference on Computer and communications security.ACM,2008:27-38.

AN AUTOMATED GADGET SEARCH FRAMEWORK BASED ON ARMv8 ARCHITECTURE

Zhao LijunWang ZhenyuWang YisenZhuang Kuan

(StateKeyLaboratoryofMathematicalEngineeringandAdvancedComputing,PLAInformationEngineeringUniversity,Zhengzhou450001,Henan,China)

AbstractTo implement ROP (return-oriented programming) technology on the first ARMv8 architecture supporting 64 bits processor which is the latest release of ARM, we designed an automatic search tool for ROP gadget on ARMv8 architecture. By combining the features of instruction system of ARMv8 architecture, it first searches all the short instruction sequences ending with “RET” instruction in library files, and stores these instruction sequences to gadget library, and then uses some optimisation strategy to optimise the library, finally, according to users’ input it finds the gadget chains with same function of users’ input. Through the statistics of gadgets searched by search tool, result showed that the gadget set had the Turing completeness, and could execute any operation. In end of the paper, through an example we proved the feasibility of ROP on ARMv8 architecture.

KeywordsROPInstruction sequenceAutomatic searchARMv8Turing completeness

收稿日期:2014-12-02。國(guó)家高技術(shù)研究發(fā)展計(jì)劃基金項(xiàng)目(200 9AA012200)。趙利軍,碩士生,主研領(lǐng)域:嵌入式設(shè)備安全分析。王震宇,副教授。王奕森,碩士生。莊寬,碩士生。

中圖分類號(hào)TP309.1

文獻(xiàn)標(biāo)識(shí)碼A

DOI:10.3969/j.issn.1000-386x.2016.05.076

猜你喜歡
指令
聽我指令:大催眠術(shù)
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
殺毒軟件中指令虛擬機(jī)的脆弱性分析
巧用G10指令實(shí)現(xiàn)橢圓輪廓零件倒圓角
中斷與跳轉(zhuǎn)操作對(duì)指令串的影響
科技傳播(2015年20期)2015-03-25 08:20:30
基于匯編指令分布的惡意代碼檢測(cè)算法研究
一種基于滑窗的余度指令判別算法
歐盟修訂電氣及電子設(shè)備等產(chǎn)品安全規(guī)定
家電科技(2014年5期)2014-04-16 03:11:28
MAC指令推動(dòng)制冷劑行業(yè)發(fā)展
汽車零部件(2014年2期)2014-03-11 17:46:27
主站蜘蛛池模板: 亚洲第一黄色网| 国产亚洲精品97在线观看| 伊人色综合久久天天| 亚洲视频免费在线看| 毛片免费在线| 色综合天天操| 呦系列视频一区二区三区| 国产91在线|日本| 久久狠狠色噜噜狠狠狠狠97视色 | 超清人妻系列无码专区| 国产精品人成在线播放| 日本高清在线看免费观看| 草草影院国产第一页| 四虎影视永久在线精品| 亚洲国内精品自在自线官| 日本欧美精品| 91精品综合| 欧美国产菊爆免费观看 | 欧美成人手机在线观看网址| 国产成人精品亚洲日本对白优播| 国产亚洲精品无码专| 免费无码又爽又刺激高| 日本高清有码人妻| 色综合天天综合| 亚洲一区二区三区在线视频| 亚洲精品第1页| 丁香婷婷在线视频| 国产九九精品视频| 久久久久无码精品国产免费| 久久精品国产在热久久2019| 欧美精品三级在线| 在线观看av永久| 午夜国产大片免费观看| 九色视频最新网址| 午夜视频日本| av在线无码浏览| 婷婷亚洲视频| 波多野结衣中文字幕一区| 91精品国产一区自在线拍| 热久久这里是精品6免费观看| 国产精品视频公开费视频| 色有码无码视频| 国产亚卅精品无码| 三上悠亚精品二区在线观看| 内射人妻无套中出无码| 亚洲国产精品无码久久一线| 亚欧美国产综合| 天天色天天操综合网| 日韩欧美中文字幕一本| 亚洲一区二区三区香蕉| 高清不卡一区二区三区香蕉| 成人精品在线观看| 免费观看无遮挡www的小视频| 精品久久久久久成人AV| 美女扒开下面流白浆在线试听 | 国产农村妇女精品一二区| 国产亚洲精品91| 国产色偷丝袜婷婷无码麻豆制服| 国产亚洲第一页| 国产99免费视频| 六月婷婷综合| 亚洲无码高清视频在线观看| 国产精品lululu在线观看 | 91久久性奴调教国产免费| 99久久亚洲精品影院| 国产成人91精品| 日韩欧美国产成人| 亚洲成人精品在线| 欧美一级大片在线观看| 四虎亚洲精品| 亚洲天堂区| 国模极品一区二区三区| 中文字幕在线视频免费| 日本人妻一区二区三区不卡影院| 狠狠色丁婷婷综合久久| 亚洲天堂首页| 中文字幕第4页| 亚洲久悠悠色悠在线播放| 九色综合伊人久久富二代| 最新无码专区超级碰碰碰| 国内精品自在欧美一区| 特黄日韩免费一区二区三区|