王豐峰,張濤,徐偉光,孫蒙
進程控制流劫持攻擊與防御技術(shù)綜述
王豐峰,張濤,徐偉光,孫蒙
(陸軍工程大學(xué),江蘇 南京 210001)
控制流劫持攻擊是一種常見的針對計算機軟件的攻擊,給計算機軟件安全帶來了巨大的危害,是信息安全領(lǐng)域的研究熱點。首先,從攻擊代碼的來源角度出發(fā),闡述了進程控制流劫持攻擊的相關(guān)研究;其次,根據(jù)控制流劫持攻擊技術(shù)的發(fā)展現(xiàn)狀,基于不同防御思想介紹了近年來國內(nèi)外的相關(guān)防御技術(shù);最后對控制流劫持攻防技術(shù)發(fā)展趨勢進行總結(jié)和展望。
軟件安全;控制流劫持攻擊;控制流完整性;隨機化
隨著信息技術(shù)的不斷發(fā)展,計算機軟件在人們的日常生活中扮演著越來越重要的角色。然而,由于軟件開發(fā)者的疏忽以及編程語言固有的局限性,安全漏洞在計算機軟件中普遍存在。自1988年Morries利用緩沖區(qū)溢出漏洞編寫蠕蟲病毒癱瘓了大量網(wǎng)絡(luò)計算機以來[1],網(wǎng)絡(luò)攻擊,尤其是控制流劫持攻擊給國家和社會帶來了巨大的經(jīng)濟損失??刂屏鹘俪止羰且环N常見的針對計算機軟件的攻擊,通??梢酝ㄟ^緩沖區(qū)溢出等漏洞改變進程的控制流從而進行惡意操作。針對控制流劫持攻擊,研究人員提出并實現(xiàn)了許多防護技術(shù),攻防雙方相互依賴,不斷發(fā)展演進,形成了如圖1所示的攻防對抗演進過程。本文總結(jié)了控制流劫持攻擊的基本原理和最新進展,同時依據(jù)防御思想重點介紹了相關(guān)防御技術(shù),并進行了分析比較。因為現(xiàn)階段的防御技術(shù)還存在性能開銷大、兼容性差等方面的問題,不少技術(shù)尚未進行廣泛部署。因此,本文總結(jié)分析控制流劫持攻擊與防御的相關(guān)技術(shù),這對研究人員設(shè)計更加合理實用的防御技術(shù)具有一定的理論價值和實際意義。
控制流劫持攻擊通過構(gòu)造特定攻擊載體,利用緩沖區(qū)溢出等軟件漏洞,非法篡改進程中的控制數(shù)據(jù),從而改變進程的控制流程并執(zhí)行特定惡意代碼,達到攻擊目的[2]。根據(jù)攻擊代碼的來源,可以將控制流劫持攻擊劃分為代碼注入類攻擊和代碼重用類攻擊。
圖1 劫持控制流攻防對抗演進過程
在代碼注入攻擊中,攻擊者通常利用進程的輸入操作向被攻擊進程的地址空間注入惡意代碼,并且通過覆蓋函數(shù)返回地址等手段,使進程非法執(zhí)行注入的惡意代碼,從而劫持進程控制流達到攻擊目的。代碼注入類攻擊成功的根本原因在是馮·諾依曼體系中,指令和數(shù)據(jù)不加區(qū)別混合存儲在同一個存儲器中,導(dǎo)致計算機可能將數(shù)據(jù)誤當(dāng)作指令執(zhí)行。為了抵御代碼注入攻擊,研究人員提出了數(shù)據(jù)執(zhí)行保護(DEP,data execution protection)的防御措施,通過將進程地址空間中的可寫部分設(shè)置為不可執(zhí)行,在很大限度上抵御了代碼注入類攻擊。
與代碼注入類攻擊不同,代碼重用攻擊不需要攻擊者向進程地址空間中注入惡意代碼,它僅利用程序或共享庫中已有的指令來完成攻擊,因此能夠順利繞開DEP保護機制。這種攻擊模式被證實具有圖靈完備性,但危害大、易擴展。其中,最為常見的是面向返回的編程(ROP)攻擊[3]。ROP攻擊可以利用進程已有的代碼片段(稱為gadget),通過棧溢出等漏洞將各個gadget的地址和其他相關(guān)數(shù)據(jù)相結(jié)合,精心構(gòu)造payload,使進程在執(zhí)行函數(shù)返回時,劫持控制流跳轉(zhuǎn)到指定gadget,從而進行惡意操作[4]。ROP攻擊的基本過程[5]如圖2所示,步驟2和步驟3就是構(gòu)造惡意gadget的過程,當(dāng)進程在步驟6進行函數(shù)返回時,則執(zhí)行攻擊者指定的步驟7~步驟9。由于ROP攻擊使用了以ret指令結(jié)尾的gadget鏈導(dǎo)致其容易被檢測出來。Bletsch等[6]提出了JOP攻擊,以jmp或者call指令來串聯(lián)gadget;Checkoway等[7]提出利用pop-jmp指令來代替ret指令,完成重用攻擊。這些ROP攻擊的變種使ROP攻擊更加靈活隱蔽,加大了檢測難度。
盡管傳統(tǒng)的代碼重用攻擊主要針對x86平臺,但是近年來,研究人員在ARM、SPARC等平臺下也實現(xiàn)了對計算機軟件的代碼重用攻擊,證實了代碼重用攻擊在多個平臺上的廣泛存在性[8-11]。Dullien等[12-13]甚至提出了利用中間語義REIL實現(xiàn)一個平臺無關(guān)的gadget搜索框架,使跨平臺的ROP攻擊更加容易,進一步增加了計算機應(yīng)用軟件防御代碼重用類控制流劫持攻擊的難度。
由于ROP攻擊需要攻擊者知道gadget的地址,因此地址空間布局隨機化(ASLR,address space layout randomization)[14]等在進程運行前提供防御措施的靜態(tài)防御技術(shù),可以有效抵御傳統(tǒng)的ROP攻擊。為了克服傳統(tǒng)ROP攻擊的缺陷,Snow等[15]提出了JIT-ROP(just-in-time ROP)的攻擊技術(shù),它通過即時代碼重用恢復(fù)內(nèi)存布局,擊敗了細(xì)粒度運行前隨機化技術(shù)。相比于傳統(tǒng)的ROP技術(shù),JIT-ROP攻擊可以反復(fù)使用內(nèi)存泄露的方法動態(tài)映射應(yīng)用程序的內(nèi)存布局,同時發(fā)現(xiàn)gadget以及API函數(shù),并利用這些gadget進行攻擊。實驗證明,JIT-ROP可以繞開任意粒度的隨機化。JIT-ROP攻擊方法的誕生揭示了運行前隨機化無法在進程運行時動態(tài)引入隨機性的致命缺陷。JIT-ROP技術(shù)最大的特點是尋找并利用gadget的過程都在程序運行時動態(tài)進行的,其攻擊形式多樣,能夠擊敗ASLR技術(shù)。
圖2 ROP攻擊流程
此外,Linux系統(tǒng)中父進程fork()中的子進程總是享有和父進程同樣的地址空間布局,本文將這種模式稱為fork-oriented模式。而許多C/S架構(gòu)的網(wǎng)絡(luò)模型都在使用這樣的運行模式,這會導(dǎo)致BROP(blind ROP)攻擊。BROP攻擊由Bittau等提出,是JIT-ROP攻擊的擴展模式[16]。BROP攻擊可以在不獲得被攻擊進程二進制文件的前提下進行遠(yuǎn)程攻擊,給網(wǎng)絡(luò)中的計算機系統(tǒng)造成巨大危害。攻擊者可以通過不斷向子進程進行嗅探和猜測來獲取關(guān)于地址空間布局的知識并找到足夠的gadget進行惡意攻擊。Bittau等[16]設(shè)計了一個完全自動化的BROP攻擊工具,成功繞過了64 bit的ASLR技術(shù),實現(xiàn)了對nginx的BROP攻擊。
隨著控制流劫持攻擊技術(shù)的不斷發(fā)展,其對軟件安全造成的威脅也日趨嚴(yán)重。因此研究人員提出許多相應(yīng)的防御技術(shù)??傮w上講,根據(jù)防御技術(shù)引入的時間將控制流劫持防御技術(shù)分為運行前靜態(tài)防御和運行時動態(tài)防御兩大類。
運行前靜態(tài)防御技術(shù)一般是通過修改編譯器或加載器在進程運行前進行緩沖區(qū)邊界檢查、棧保護、替換鏈接庫、隨機化等保護措施,來確保運行時控制流不被篡改。數(shù)據(jù)執(zhí)行保護通過區(qū)分?jǐn)?shù)據(jù)和代碼的不同權(quán)限可以有效阻礙代碼注入類攻擊。StackGuard[17]是GCC編譯器的一個補丁,編譯時它通過在緩沖區(qū)和返回地址間加入隨機canary值保護用戶棧。Libsafe[18]是在進程運行前替換易受攻擊的庫函數(shù),從而保護strcpy、printf等存在危險的函數(shù)。FormatGuard[19]通過比較提供給printf函數(shù)實際參數(shù)的數(shù)量與格式字符串調(diào)用參數(shù)的數(shù)量來抵御基于格式錯誤的控制流劫持攻擊。此外還有很多類似的技術(shù),在進程運行前加入防御機制以提高軟件安全性。然而,這些防御方式留給攻擊者充足的時間進行探索和攻擊。
JIT-ROP和BROP等攻擊通過不斷嗅探和猜測,利用進程運行時產(chǎn)生的動態(tài)信息,繞開了靜態(tài)防御的保護,從而篡改進程控制流。這些運行時動態(tài)攻擊方式甚至可以在沒有二進制文件的情況下進行遠(yuǎn)程攻擊,所以運行前防御技術(shù)已經(jīng)無法抵御這種攻擊技術(shù)。運行時動態(tài)攻擊的出現(xiàn),再次打破了攻守雙方的平衡,使軟件防御技術(shù)研究人員將目光轉(zhuǎn)向了運行時動態(tài)防御技術(shù)上。
運行時動態(tài)防御技術(shù)則在進程運行過程中即時地進行安全保護,防止控制流被非法篡改。根據(jù)進程運行時動態(tài)防御思想的不同,本文可以將進程運行時動態(tài)防御技術(shù)分為兩大類:基于可信計算的運行時防御技術(shù)和基于主動變換防御思想的防御技術(shù)。
3.2.1 基于可信計算的運行時防御技術(shù)
可信計算通過確保系統(tǒng)始終在可信狀態(tài)下遷移來確保系統(tǒng)安全,基于可信計算的動態(tài)防御技術(shù)則通過將進程控制流與預(yù)期的正??刂屏鬟M行對比,從而保證進程運行過程始終可信。
基于可信計算的運行時防御技術(shù)的代表是控制流完整性(CFI,control flow integrity)。CFI最早由Martín等[20]提出。CFI基于動態(tài)可信度量,分析程序正??刂屏鳎⒁来藰?gòu)造出針對進程的控制流圖(CFG,control flow graph)。CFI技術(shù)的關(guān)鍵是限制進程運行過程中的控制流轉(zhuǎn)移,從而使進程的控制流只在其原有CFG所限定的范圍內(nèi),保證進程運行過程可信[21]。具體做法是通過分析程序的控制流圖,獲得間接轉(zhuǎn)移指令目標(biāo)的地址,形成一個白名單,然后在進程運行過程中,核對轉(zhuǎn)移目標(biāo)指令是否在正??刂屏鞯陌酌麊沃?。由于JIT-ROP等針對Linux進程的控制流劫持攻擊會改變程序的正常行為,從而違背原有的控制流圖。因此CFI能夠抵御運行時動態(tài)控制流劫持攻擊。
在CFI提出后,該技術(shù)得到了研究人員的廣泛研究,各種CFI防御技術(shù)層出不窮。CFI可以根據(jù)劃分目標(biāo)指令的精細(xì)程度分為細(xì)粒度CFI和粗粒度CFI。嚴(yán)格意義上講,最早Martín提出的CFI技術(shù)是細(xì)粒度CFI。細(xì)粒度CFI仔細(xì)檢查每個間接轉(zhuǎn)移指令的目標(biāo)地址,并與正常控制流圖進行比對,確保每條轉(zhuǎn)移指令只能轉(zhuǎn)到其限定的范圍內(nèi),來保證程序控制流的完整性。Mashtizadeh等[22]提出的CCFI會識別所有影響程序控制流的對象,并且計算這些對象的消息認(rèn)證碼,從而進行指針加密。通過在使用每個控制流元素之前檢查消息認(rèn)證碼,系統(tǒng)可以保證運行時控制流不被非法篡改。Criswell等[23]提出了KCoFI,這是一種在操作系統(tǒng)內(nèi)核上的CFI,KCoFI在驗證進程控制流完整性的基礎(chǔ)上,加入一個對進程進行動態(tài)監(jiān)視的中間軟件層,以進一步保護一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。然而,對進程指令進行精細(xì)的檢查會造成巨大的性能開銷。為了降低系統(tǒng)性能開銷,粗粒度的CFI選擇放寬檢查條件,將同一類轉(zhuǎn)移指令整理到一起進行驗證。例如,CCFIR[24]利用一個專用的“Springborad section”來實現(xiàn)間接分支轉(zhuǎn)移,沒有實現(xiàn)對每一條指令進行精細(xì)檢查;binCFI[25]將間接轉(zhuǎn)移指令進行分類,同一類轉(zhuǎn)移指令歸納到同一目標(biāo)集合中,粗化檢查粒度,提高進程運行效率。由于沒有對每一條轉(zhuǎn)移指令進行檢查,粗粒度CFI會導(dǎo)致系統(tǒng)抵御攻擊的能力下降,攻擊者依舊可以針對粗粒度CFI進行代碼重用攻擊。G?ktas等[26]利用entry point(EP)gadget和call site(CS)gadget成功實現(xiàn)了對粗粒度CFI的攻擊;Conti等[27]提出了名為StackDefiler的系列攻擊,分別利用堆上的漏洞、用戶空間和內(nèi)核空間切換時存在的漏洞以及泄露影子堆棧的地址,完成了在有CFI保護的前提下針對堆棧的攻擊,同時也擊敗了DEP和ASLR保護技術(shù);Carlini等[28]利用對非控制數(shù)據(jù)的攻擊,提出了名為CFB的攻擊技術(shù),并且證明CFB能夠?qū)?xì)的CFI進行有效攻擊。2015年,Otgonbaatar指出[29],即便獲得了細(xì)粒度的控制流完整性,也存在被攻擊的風(fēng)險,這使CFI技術(shù)的防御有效性受到了質(zhì)疑。
為了減少CFI的性能開銷,目前有研究人員開始利用硬件來輔助實現(xiàn)CFI。Pappas等[30]設(shè)計了名為kBouncer 的基于硬件的CFI,該技術(shù)利用Last Brach Register監(jiān)視進程中的跳轉(zhuǎn)指令,以防止進程的異??刂屏?。Qiu等[31]提出了利用一種基于輕量級加密的體系結(jié)構(gòu)(LEA-AES)對間接跳轉(zhuǎn)指令和返回地址進行加解密,從而保證了進程控制流的完整可信。Zhang等[32]設(shè)計了HCIC技術(shù),該技術(shù)利用海明距離匹配和線性加解密機制,通過特定硬件的輔助,在不對編譯器進行修改、不增加新的指令集的條件下,實現(xiàn)了低開銷的CFI。
CFI是建立在對被保護程序深入理解基礎(chǔ)上的防御技術(shù),因此往往需要源代碼或調(diào)試信息。在運行動態(tài)監(jiān)測時,CFI無法完美刻畫進程的CFG,因此可能導(dǎo)致限制程序正常運行或允許程序執(zhí)行非法操作。在運行時CFI需要比對跳轉(zhuǎn)指令的目標(biāo)地址,導(dǎo)致巨大性能開銷。由于存在以上種種問題,雖然CFI已提出十多年時間,仍然沒有在實際系統(tǒng)中得到廣泛部署應(yīng)用。
表1給出上述控制流完整性防御技術(shù)的對比。
3.2.2 基于主動變換防御思想的運行時防御技術(shù)
主動變換防御通過持續(xù)地、動態(tài)地變化來迷惑攻擊者,從而增加其攻擊成本,降低其攻擊成功概率[33]?;谥鲃幼儞Q防御的運行時防御技術(shù)則是在進程運行過程中不斷引入隨機性和多樣性,打破攻擊者構(gòu)造傳統(tǒng)攻擊鏈所依賴的各種有利條件,加大攻擊者攻擊成功的概率。
表1 控制流完整性防御技術(shù)對比
圖3 Pax ASLR基本原理
基于主動變換防御思想的運行時防御技術(shù)的代表是內(nèi)存布局隨機化。隨機化思想最早是在1997年由Forrest等[34]提出的,通過引入多樣性和隨機性來提高計算機系統(tǒng)的穩(wěn)健性。內(nèi)存布局隨機化通過不斷改變進程內(nèi)存布局,實現(xiàn)進程攻擊面的隨機性變換,從而消除了攻擊者的不對稱優(yōu)勢,增加了攻擊者的攻擊難度。此外,由于每一計算機進程在系統(tǒng)中的內(nèi)存布局不同,運行時內(nèi)存布局隨機化還能阻礙攻擊在網(wǎng)絡(luò)中的擴散。
Pax ASLR[14]是早期隨機化技術(shù)的代表,其基本原理如圖3所示。它會對ELF可執(zhí)行文件地址空間中運行時才映射的動態(tài)共享庫位置等映射區(qū)域進行隨機化操作。當(dāng)攻擊者需要知道進程中的gadget地址時,由于內(nèi)存布局被隨機打亂,因此加大了攻擊者的攻擊難度。同時當(dāng)進程被編譯為位置無關(guān)代碼時,Pax ASLR還能隨機化代碼段的基地址,進一步增加了攻擊者攻擊成功的難度。
目前,在許多流行的操作系統(tǒng)中部署了Pax ASLR技術(shù),以提高操作系統(tǒng)的安全性。然而,Pax ASLR是一種粗粒度的隨機化技術(shù),隨機化熵值低并且只隨機化段基地址,因此容易遭受暴力攻擊和信息泄露攻擊[35]。細(xì)粒度隨機化技術(shù)[36-42]不僅隨機化了段基地址,而且打亂進程段內(nèi)對象的相對偏移,增大隨機化引入的熵值,從而有效抵御暴力攻擊和信息泄露攻擊。作為一種解決傳統(tǒng)粗粒度隨機化缺陷的技術(shù),細(xì)粒度隨機化技術(shù)被研究者廣泛采用,并被認(rèn)為可以進一步提高進程的安全性。
然而,JIT-ROP和BROP攻擊的提出,使運行前的細(xì)粒度隨機化技術(shù)在面對運行動態(tài)攻擊時沒有了用武之地。針對JIT-ROP和BROP攻擊的一種有效保護方法是在運行時對地址空間進行再隨機化操作。運行時再隨機化技術(shù)通過在進程運行過程中不斷對進程地址空間進行再隨機化布局,減小了單一地址空間布局的存在時間,縮短攻擊者的攻擊周期,使攻擊者無法掌握足夠的知識來完成一次完整的攻擊,運行時隨機化示意如圖4所示。
圖4 運行時隨機化示意
Giuffrida等[42]提出了操作系統(tǒng)中細(xì)粒度隨機化技術(shù)的設(shè)計和運行時再隨機化的思想,并在Minix3微內(nèi)核中成功部署了運行時內(nèi)核級地址空間布局隨機化技術(shù)。Chen等[43]提出了JIT-ASR技術(shù),該技術(shù)使用虛擬內(nèi)存管理,可以在運行時通過修改代碼地址的虛擬頁碼和頁表來不斷改變程序的地址空間。侯宇[44]分析了ROP攻擊的原理,并在此基礎(chǔ)上設(shè)計了一種稱為Chameleon的防御機制,Chameleon在虛擬地址轉(zhuǎn)換為物理地址中間加了一個中間層,從而將取指異或訪存和進程地址空間隨機化有機結(jié)合起來。Chen等[45]提出了Remix技術(shù),通過LLVM編譯器框架將代碼函數(shù)分割成許多基本塊,并對進程地址空間中的函數(shù)基本塊進行基于時間模型的運行時再隨機化。這些運行時隨機化技術(shù)大都需要修改內(nèi)核模塊來支持進程再隨機化操作,實現(xiàn)難度大,兼容性有限,并且都選擇基于時間的再隨機化,會造成一些不必要的性能開銷。Hawkins等[46]提出的Mixr運行時再隨機化系統(tǒng)可以在不依賴源代碼以及不修改系統(tǒng)內(nèi)核和加載器等組件的基礎(chǔ)上進行,然而該技術(shù)由于在運行時需要反復(fù)進行動態(tài)鏈接導(dǎo)致性能開銷過大。
上述運行時隨機化技術(shù)都是基于時間的再隨機化模型,即每隔一段時間進行一次隨機化操作[46]。由于運行時地址空間再隨機化操作會給程序性能帶來影響。在沒有受到危險操作時,過于頻繁的隨機化會帶來巨大的性能開銷,而隨機化頻率過低則給攻擊者留下攻擊的機會?;跁r間的再隨機化模型無法消除這一矛盾。Bigelow等[47]提出了實時再隨機化(TASR)技術(shù),在輸入/輸出系統(tǒng)調(diào)用之間引入隨機性,從而使攻擊者獲得的內(nèi)存信息無效。TASR提出了一種將隨機化與潛在的運行時信息泄露相結(jié)合的方法,視成對的輸入/輸出操作為危險操作,當(dāng)有成對輸入/輸出操作時,則觸發(fā)隨機化。由于只在面臨危險操作時進行隨機化,TASR減少了不必要的隨機化開銷。雷嘯[48]改進了TASR技術(shù)過于寬泛的危險操作的判斷,提出了安全敏感區(qū)的概念,只有當(dāng)進程write操作訪問安全敏感區(qū)時才在后續(xù)read操作前觸發(fā)隨機化,進一步減少了性能開銷。Morton等[49]提出了當(dāng)攻擊者在內(nèi)存中公開了可能有用的可執(zhí)行g(shù)adget時,才觸發(fā)防御機制,以確保攻擊者不能利用這些字節(jié)來劫持運行時進程的控制流。這些基于潛在風(fēng)險的隨機化方案,減少了不必要的再隨機化操作,對于大部分進程而言,該方案要優(yōu)于基于時間的再隨機化方案。
針對BROP攻擊,Lu等[50]提出的RuntimeASLR技術(shù)對父進程fork出的子進程進行地址空間布局進行再隨機化,從而抵御復(fù)制探測攻擊。RuntimeASLR的技術(shù)核心是一個自動的、整體的指針跟蹤機制,Lu認(rèn)為這是未來進行指針識別和運行時動態(tài)保護的有用工具。然而,RuntimeASLR技術(shù)只適合nginx這類fork-oriented程序,并且只支持x86體系架構(gòu)。
除了在運行時對內(nèi)存布局進行隨機置換外,還有研究人員提出加載多個進程映像并在運行時進行隨機切換,從而使攻擊者獲取的運行時內(nèi)存信息無效。Davi等[51]提出了Isomeron技術(shù),在一個虛擬地址空間中,Isomeron同時加載了兩份不同的進程映像。在程序運行時,一旦發(fā)生了函數(shù)調(diào)用,就隨機決定接下來執(zhí)行哪個程序副本。Williams-King等[52]提出了稱為Shuffler的防御機制。Shuffler在幾毫秒內(nèi)對進程地址空間進行運行時再隨機化,并“原子地”從一個隨機化的代碼副本切換到另一個隨機化的代碼副本。Williams-King等還考慮了Shuffler本身可能存在的攻擊面,通過對自身的地址空間進行再隨機化,可以減小防御工具本身攻擊面對安全性帶來的影響。由于gadget的地址在每個副本中不一樣,且攻擊者也無法預(yù)測接下來運行哪個副本。因此這樣的方法能有效抵御JIT-ROP和BROP攻擊。
表2 進程運行時再隨機化技術(shù)對比
表3 進程運行時動態(tài)防御技術(shù)對比
表2給出進程運行時再隨機化技術(shù)的對比。表3給出進程控制流劫持運行時動態(tài)防御技術(shù)的總體對比。
在信息安全領(lǐng)域中,如何抵御控制流劫持攻擊一直是一個熱點問題,尤其Snow提出JIT-ROP攻擊之后,以這種新型控制流劫持攻擊為基礎(chǔ)的攻擊模式不斷被提出,對計算機進程構(gòu)成巨大威脅。BROP攻擊的提出更是突破了傳統(tǒng)控制流劫持攻擊對目標(biāo)二進制的依賴,實現(xiàn)了“盲的”控制流劫持攻擊,使傳統(tǒng)的軟件靜態(tài)被動防御機制變得形同虛設(shè)。
控制流劫持攻擊是計算機軟件面臨的巨大威脅,隨著新型代碼重用類攻擊的誕生和演化,控制流劫持攻防對抗不斷升級??刂屏鹘俪止艏夹g(shù)的發(fā)展也面臨著許多挑戰(zhàn)和新的發(fā)展方向。首先, JIT-ROP和BROP攻擊所采用的方法并不高效,需要多次嘗試和足夠時間來“積累知識”。然而,攻擊時間越長,防御者越可能對攻擊做出反應(yīng)。因此快速獲取成功完成攻擊所需要的信息是未來控制流劫持攻擊的研究重點。其次,在二進制文件不可得的情況下進行控制流劫持攻擊是一個難點。而BROP攻擊則揭示了fork-oriented應(yīng)用進程所存在的安全漏洞,為今后攻擊二進制信息不可得的應(yīng)用進程拓寬了思路。最后,隨著ARM等其他平臺的廣泛應(yīng)用,針對這些平臺的防御技術(shù)不斷升級。借鑒現(xiàn)有控制流劫持攻擊的研究成果,實現(xiàn)對其他平臺的控制流劫持攻擊也值得研究人員關(guān)注。目前,運行時動態(tài)防御技術(shù)是抵御JIT-ROP和BROP攻擊的有效手段,筆者依據(jù)其背后防御思想的不同分成了基于可信計算和基于主動變換防御思想的運行時防御技術(shù)。
基于可信計算的CFI技術(shù)通過限制程序的控制流來保證程序被正確地執(zhí)行。然而,細(xì)粒度的CFI也被研究人員證實存在防御缺陷;進程動態(tài)控制流圖難以精確刻畫;同時CFI還存在性能開銷大、依賴調(diào)試信息等問題。如何在低性能開銷的基礎(chǔ)上,構(gòu)造正確合理的CFG是制約CFI技術(shù)進一步發(fā)展的瓶頸,也是CFI未來主要的一個研究方向。與此同時,結(jié)合硬件來降低CFI開銷,并提高CFG覆蓋率和準(zhǔn)確率也是一個值得探索的方向。
基于主動變換防御的運行時動態(tài)隨機化技術(shù),通過在進程內(nèi)部引入隨機性來抵御運行時動態(tài)代碼重用攻擊。運行時再隨機化通過不斷對進程地址空間進行再隨機化布局,改變程序自身的屬性,打斷了攻擊者對進程地址空間的原始認(rèn)知,使攻擊者先前積累的有關(guān)進程地址空間的知識無效化,從而抵御代碼重用攻擊。相比CFI,運行時隨機化能夠有效阻礙攻擊的擴散,同樣也值得深入研究。內(nèi)存布局隨機化技術(shù)會使進程出現(xiàn)“帶傷運行”的情況,存在造成進程非正常運行的可能性,如何降低隨機化操作對進程帶來的“傷害”,具有重要的現(xiàn)實意義。此外,運行時內(nèi)存隨機化對進程的保護能力與其隨機化粒度之間的關(guān)系,隨機化最合理的觸發(fā)時間等問題仍然缺乏相應(yīng)的研究,這使運行時隨機化的發(fā)展陷入無法在保護力度和性能損耗之間取得一個最為合理平衡的困境,因此對運行時內(nèi)存隨機化進行費效評估也是一個值得研究的方向。
最后,現(xiàn)階段的控制流完整性和地址空間隨機化技術(shù)大多是針對x86平臺,在ARM等其他平臺上鮮有類似研究。然而,如第2節(jié)所述,控制流劫持攻擊在許多平臺中都可以實現(xiàn),并且同樣可以達到執(zhí)行任意惡意代碼的目的。因此在ARM等其他平臺上的或者跨平臺的運行時動態(tài)保護技術(shù)同樣亟待研究和解決。
[1] 邵思豪, 高慶, 馬森, 等. 緩沖區(qū)溢出漏洞分析技術(shù)研究進展[J]. 軟件學(xué)報, 2018, 29(5): 1179-1198.
SHAO S H, GAO Q, MA S, et al. Progress in research on buffer overflow vulnerability analysis technologies[J]. Journal of Software, 2018, 29(5): 1179-1198
[2] 張超. 針對控制流劫持攻擊的軟件安全防護技術(shù)研究[D]. 北京:北京大學(xué), 2013.
ZHANG C. Research on software security defense against control-flow hijacking attacks[D]. Beijing: Beijing University, 2013.
[3] ROEMER R, BUCHANAN E, SHACHAM H, et al. Return-oriented programming: systems, languages, and applications[J]. ACM Transactions on Information & System Security, 2012, 15(1): 1-34.
[4] 喬向東, 郭戎瀟, 趙勇. 代碼復(fù)用對抗技術(shù)研究進展[J]. 網(wǎng)絡(luò)與信息安全學(xué)報, 2018, 4(3): 1-12.
QIAO X D, GUO R X, ZHAO Y. Research progress in code reuse attacking and defending[J]. Chinese Journal of Network and Information Security, 2018, 4 (3): 1-12.
[5] DAVI L, SADEGHI A R, WINANDY M. ROPdefender: a detection tool to defend against return-oriented programming attacks[C]// The 6th ACM Symposium on Information, Computer and Communications Security. 2011: 40-51.
[6] BLETSCH T, JIANG X, FREEH V W, et al. Jump-oriented programming: a new class of code-reuse attack[C]//The 6th ACM Symposium on Information, Computer and Communications Security. 2011: 30-40.
[7] CHECKOWAY S, DAVI L, DMITRIENKO A, et al. Return-oriented programming without returns[C]//ACM Conference on Computer & Communications Security. 2010: 559-572.
[8] 錢逸. 基于ARM架構(gòu)的ROP攻擊與防御技術(shù)研究[D]. 上海: 上海交通大學(xué), 2012.
QIAN Y. ROP attack and defense technology based on ARM[D]. Shanghai: Shanghai Jiaotong University, 2012.
[9] BUCHANAN E, ROEMER R, SHACHAM H, et al. When good instructions go bad: Generalizing return-oriented programming to RISC[C]//The 15th ACM Conference on Computer and Communications Security. 2008: 27-38.
[10] DAVI L, DMITRIENKO A, SADEGHI A, et al. Return-oriented programming without returns on ARM[R]. Ruhr-University Bochum, 2010.
[11] KORNAU T. Return oriented programming for the ARM architecture[D]. Ruhr: Ruhr-Universit?t Bochum. 2010.
[12] DULLIEN T, PORST S. REIL: a platform-independent intermediate representation of disassembled code for static code analysis[J]. Cansecwest, 2009.
[13] DULLIEN T, KORNAU T, WEINMANN R. A framework for automated architecture independent gadget search[C]//Usenix Conference on Offensive Technologies. 2010: 1.
[14] PaX team: PaX address space layout randomization (ASLR)[EB].
[15] SNOW K Z, MONROSE F, DAVI L, et al. Just-in-time code reuse: on the effectiveness of fine-grained address space layout randomization[C]//2013 IEEE Symposium on Security and Privacy. 2013: 574-588.
[16] BITTAU A, BELAY A, MASHTIZADEH A, et al. Hacking blind[C]//2014 IEEE Symposium on Security and Privacy. 2014: 227-242.
[17] COWAN C, PU C, MAIER D, et al. StackGuard: automatic adaptive detection and prevention of buffer-overflow attacks[C]// USENIX Security Symposium. 1998, 98: 63-78.
[18] TSAI T, SINGH N. Libsafe: transparent system-wide protection against buffer overflow attacks[C]//International Conference on Dependable Systems and Networks. IEEE, 2002: 541.
[19] COWAN C, BARRINGER M, BEATTIE S, et al. FormatGuard: automatic protection from printf format string vulnerabilities[C]//USENIX Security Symposium. 2001, 91.
[20] MARTíN A, BUDIU M, ERLINGSSON, úLFAR, et al. Control-flow integrity[C]//ACM Conference on Computer & Communications Security. 2005: 340.
[21] 武成崗, 李建軍. 控制流完整性的發(fā)展歷程[J]. 中國教育網(wǎng)絡(luò), 2016 (4): 52-55.
WU C G, LI J J. The evolution of control flow integrity[J]. China Education Network. 2016(4): 52-55.
[22] MASHTIZADEH A J, BITTAU A, MAZIERES D, et al. Cryptographically enforced control flow integrity[J]. arXiv preprint arXiv:1408.1451, 2014.
[23] CRISWELL J, DAUTENHAHN N, ADVE V. KCoFI: complete control-flow integrity for commodity operating system kernels[C]//2014 IEEE Symposium on Security and Privacy. 2014: 292-307.
[24] ZHANG C, WEI T, CHEN Z, et al. Practical control flow integrity and randomization for binary executables[J]. IEEE Symposium on Security & Privacy, 2013: 559-573.
[25] ZHANG M, SEKAR R. Control Flow Integrity for {COTS} Binaries[C]//Presented as part of the 22nd Security Symposium. 2013: 337-352.
[26] G?KTAS E, ATHANASOPOULOS E, BOS H, et al. Out of control: overcoming control-flow integrity[J]. Security & Privacy, 2014: 575-589.
[27] CONTI M, CRANE S, DAVI L, et al. Losing control: on the effectiveness of control-flow integrity under stack attacks[C]//The 22nd ACM SIGSAC Conference on Computer and Communications Security. 2015: 952-963.
[28] CARLINI N, BARRESI N, MATHIAS P, et al. Control-flow bending: on the effectiveness of control-flow integrity[C]//Usenix Conference on Security Symposium. 2015: 161-176.
[29] OTGONBAATAR U. Evaluating modern defenses against control flow hijacking[D]. Massachusetts: Massachusetts Institute of Technology. 2015.
[30] PAPPAS V, POLYCHRONAKIS M, KEROMYTIS A D. Transparent {ROP} exploit mitigation using indirect branch tracing[C]//Presented as Part of the 22nd {USENIX} Security Symposium ({USENIX} Security 13). 2013: 447-462.
[31] QIU P, LYU Y, ZHANG J, et al. Control flow integrity based on lightweight encryption architecture[J]. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2018, 37(7): 1358-1369.
[32] ZHANG J, QI B, QIN Z, et al. HCIC: Hardware-assisted control-flow integrity checking[J]. IEEE Internet of Things Journal, 2018, 6(1): 458-471.
[33] 蔡桂林, 王寶生, 王天佐, 等. 移動目標(biāo)防御技術(shù)研究進展[J]. 計算機研究與發(fā)展, 2016 , 53 (5): 968-987.
CAI G L, WANG B S, WANG T Z, et al. Research and development of moving target defense technology[J]. Journal of Computer Research and Development, 2016, 53 (5): 968-987.
[34] FORREST S, SOMAYAJI A, ACKLEY D H. Building diverse computer systems[C]//The Sixth Workshop on Hot Topics in Operating Systems (Cat. No. 97TB100133). 1997: 67-72.
[35] SHACHAM H, PAGE M, PFAFF B, et al. On the effectiveness of address-space randomization[C]//The 11th ACM Conference on Computer and Communications Security. 2004: 298-307.
[36] KIL C, JUN J, BOOKHOLT C, et al. Address space layout permutation (ASLP): towards fine-grained randomization of commodity software[C]//2006 22nd Annual Computer Security Applications Conference (ACSAC'06). 2006: 339-348.
[37] HISER J, NGUYEN-TUONG A, Co M, et al. ILR: Where'd my gadgets go[C]//2012 IEEE Symposium on Security and Privacy. 2012: 571-585.
[38] IYER V, KANITKAR A, DASGUPTA P, et al. Preventing overflow attacks by memory randomization[C]//2010 IEEE 21st International Symposium on Software Reliability Engineering. 2010: 339-347.
[39] BHATKAR S, DUVARNEY D C, SEKAR R. Address obfuscation: an efficient approach to combat a broad range of memory error exploits[C]//USENIX Security Symposium. 2003, 12(2): 291-301.
[40] BHATKAR S, DUVARNEY D C, SEKAR R. efficient techniques for comprehensive protection from memory error exploits[C]// USENIX Security Symposium. 2005: 17.
[41] BACKES M AND NURNBERGER S. Oxymoron: making fine-grained memory randomization practical by allowing code sharing[C]//Usenix Conference on Security Symposium. 2014: 433-447.
[42] GIUFFRIDA C, KUIJSTEN A, TANENBAUM A S. Enhanced operating system security through efficient and fine-grained address space randomization[C]//Presented as Part of the 21st {USENIX} Security Symposium ({USENIX} Security 12). 2012: 475-490.
[43] CHEN X, XUE R, Wu C. Timely address space rerandomization for resisting code reuse attacks[J]. Concurrency and Computation: Practice and Experience, 2017, 29(16): e3965.
[44] 侯宇. 基于動態(tài)隨機化和只可執(zhí)行內(nèi)存的JIT-ROP防御研究[D]. 南京: 南京大學(xué), 2016.
HOU Y. Defence against JIT-ROP based on dynamic randomization and executable only memory[D]. Nanjing: Nanjing University, 2016
[45] CHEN Y, WANG Z, WHALLEY D, et al. Remix: on-demand live randomization[C]//The sixth ACM Conference on Data and Application Security and Privacy. 2016: 50-61.
[46] HAWKINS W, NGUYEN-TUONG A, HISER J D, et al. Mixr: flexible runtime rerandomization for binaries[C]//The 2017 Workshop on Moving Target Defense. 2017: 27-37.
[47] BIGELOW D, HOBSON T,RUDD R, et al. Timely rerandomization for mitigating memory disclosures[C]//ACM Sigsac Conference on Computer & Communications Security, 2015: 268-279.
[48] 雷嘯. 內(nèi)存信息泄露的運行中隨機化防御方法的研究與改進[D]. 南京: 南京大學(xué), 2017.
LEI X. Research and improvement of runtime randomization de fense method against memory information leakage[D]. Nanjing: Nanjing University. 2017.
[49] MORTON M, KOO H, LI F, et al. Defeating zombie gadgets by re-randomizing code upon disclosure[C]//International Symposium on Engineering Secure Software and Systems. 2017: 143-160.
[50] LU K, NURNBERGER S, BACKES M, et al. How to make ASLR win the clone wars: runtime re-randomization[C]//Network & Distributed System Security Symposium. 2016.
[51] DAVI L, LIEBCHEN C, SADEGHI A R, et al. Isomeron: code randomization resilient to (just-in-time) return-oriented programming[C]//Network & Distributed System Security Symposium. 2015.
[52] WILLIAMS-KING D, GOBIESKI G, WILLIAMS-KING K, et al. Shuffler: fast and deployable continuous code re-randomization[C]// 12th {USENIX} Symposium on Operating Systems Design and Implementation ({OSDI} 16). 2016: 367-382.
Overviewofcontrol-flow hijacking attack and defense techniquesfor process
WANG Fengfeng, ZHANG Tao, XU Weiguang, SUN Meng
Army Engineering University, Nanjing 210001, China
Control flow hijacking attack is a common attack against computer software, which brings great harm to computer software security and is a research hotspot in the field of information security. Firstly, from the perspective of the source of attack code, the related research was expounded on process’s control flow hijacking attack. Secondly, according to the newest development status of control flow hijacking attack technology, the related defense technologies at home and abroad were introduced based on different defense ideas. Finally, the development trend of control flow hijacking offensive and defensive technology were summarized.
software security, control flow hijacking attacks, control flow integrity, randomization
s: The Natural Science Foundation of Jiangsu Province for Excellent Yong Scholars (No.BK20180080)
TP309.2
A
10.11959/j.issn.2096?109x.2019058
王豐峰(1994? ),男,江蘇昆山人,陸軍工程大學(xué)碩士生,主要研究方向為系統(tǒng)安全。
張濤(1973? ),男,甘肅涇川人,博士,陸軍工程大學(xué)教授,主要研究方向為操作系統(tǒng)安全、數(shù)據(jù)庫安全、智能終端軟件安全等。
徐偉光(1984? ),男,安徽宿州人,博士,陸軍工程大學(xué)講師,主要研究方向為移動目標(biāo)防御、密碼學(xué)、區(qū)塊鏈等。
孫蒙(1984? ),男,山東齊河人,博士,陸軍工程大學(xué)副教授,主要研究方向為網(wǎng)絡(luò)安全與機器學(xué)習(xí)、智能語音處理等。
2019?01?23;
2019?03?19
王豐峰,princewff@163.com
江蘇省優(yōu)秀青年基金資助項目(No.BK20180080)
論文引用格式:王豐峰, 張濤, 徐偉光, 等. 進程控制流劫持攻擊與防御技術(shù)綜述[J]. 網(wǎng)絡(luò)與信息安全學(xué)報, 2019, 5(6): 10-20.
WANG F F, ZHANG T, XU W G, et al. Overview of control-flow hijacking attack and defense techniques for process[J]. Chinese Journal of Network and Information Security, 2019, 5(6): 10-20.