?

進程控制流劫持攻擊與防御技術綜述

2019-12-13 00:57王豐峰張濤徐偉光孫蒙
網絡與信息安全學報 2019年6期
關鍵詞:細粒度攻擊者進程

王豐峰,張濤,徐偉光,孫蒙

進程控制流劫持攻擊與防御技術綜述

王豐峰,張濤,徐偉光,孫蒙

(陸軍工程大學,江蘇 南京 210001)

控制流劫持攻擊是一種常見的針對計算機軟件的攻擊,給計算機軟件安全帶來了巨大的危害,是信息安全領域的研究熱點。首先,從攻擊代碼的來源角度出發,闡述了進程控制流劫持攻擊的相關研究;其次,根據控制流劫持攻擊技術的發展現狀,基于不同防御思想介紹了近年來國內外的相關防御技術;最后對控制流劫持攻防技術發展趨勢進行總結和展望。

軟件安全;控制流劫持攻擊;控制流完整性;隨機化

1 引言

隨著信息技術的不斷發展,計算機軟件在人們的日常生活中扮演著越來越重要的角色。然而,由于軟件開發者的疏忽以及編程語言固有的局限性,安全漏洞在計算機軟件中普遍存在。自1988年Morries利用緩沖區溢出漏洞編寫蠕蟲病毒癱瘓了大量網絡計算機以來[1],網絡攻擊,尤其是控制流劫持攻擊給國家和社會帶來了巨大的經濟損失??刂屏鹘俪止羰且环N常見的針對計算機軟件的攻擊,通??梢酝ㄟ^緩沖區溢出等漏洞改變進程的控制流從而進行惡意操作。針對控制流劫持攻擊,研究人員提出并實現了許多防護技術,攻防雙方相互依賴,不斷發展演進,形成了如圖1所示的攻防對抗演進過程。本文總結了控制流劫持攻擊的基本原理和最新進展,同時依據防御思想重點介紹了相關防御技術,并進行了分析比較。因為現階段的防御技術還存在性能開銷大、兼容性差等方面的問題,不少技術尚未進行廣泛部署。因此,本文總結分析控制流劫持攻擊與防御的相關技術,這對研究人員設計更加合理實用的防御技術具有一定的理論價值和實際意義。

2 進程控制流劫持攻擊技術研究現狀

控制流劫持攻擊通過構造特定攻擊載體,利用緩沖區溢出等軟件漏洞,非法篡改進程中的控制數據,從而改變進程的控制流程并執行特定惡意代碼,達到攻擊目的[2]。根據攻擊代碼的來源,可以將控制流劫持攻擊劃分為代碼注入類攻擊和代碼重用類攻擊。

圖1 劫持控制流攻防對抗演進過程

2.1 代碼注入類攻擊

在代碼注入攻擊中,攻擊者通常利用進程的輸入操作向被攻擊進程的地址空間注入惡意代碼,并且通過覆蓋函數返回地址等手段,使進程非法執行注入的惡意代碼,從而劫持進程控制流達到攻擊目的。代碼注入類攻擊成功的根本原因在是馮·諾依曼體系中,指令和數據不加區別混合存儲在同一個存儲器中,導致計算機可能將數據誤當作指令執行。為了抵御代碼注入攻擊,研究人員提出了數據執行保護(DEP,data execution protection)的防御措施,通過將進程地址空間中的可寫部分設置為不可執行,在很大限度上抵御了代碼注入類攻擊。

2.2 代碼重用類攻擊

與代碼注入類攻擊不同,代碼重用攻擊不需要攻擊者向進程地址空間中注入惡意代碼,它僅利用程序或共享庫中已有的指令來完成攻擊,因此能夠順利繞開DEP保護機制。這種攻擊模式被證實具有圖靈完備性,但危害大、易擴展。其中,最為常見的是面向返回的編程(ROP)攻擊[3]。ROP攻擊可以利用進程已有的代碼片段(稱為gadget),通過棧溢出等漏洞將各個gadget的地址和其他相關數據相結合,精心構造payload,使進程在執行函數返回時,劫持控制流跳轉到指定gadget,從而進行惡意操作[4]。ROP攻擊的基本過程[5]如圖2所示,步驟2和步驟3就是構造惡意gadget的過程,當進程在步驟6進行函數返回時,則執行攻擊者指定的步驟7~步驟9。由于ROP攻擊使用了以ret指令結尾的gadget鏈導致其容易被檢測出來。Bletsch等[6]提出了JOP攻擊,以jmp或者call指令來串聯gadget;Checkoway等[7]提出利用pop-jmp指令來代替ret指令,完成重用攻擊。這些ROP攻擊的變種使ROP攻擊更加靈活隱蔽,加大了檢測難度。

2.3 代碼重用類攻擊的改進

盡管傳統的代碼重用攻擊主要針對x86平臺,但是近年來,研究人員在ARM、SPARC等平臺下也實現了對計算機軟件的代碼重用攻擊,證實了代碼重用攻擊在多個平臺上的廣泛存在性[8-11]。Dullien等[12-13]甚至提出了利用中間語義REIL實現一個平臺無關的gadget搜索框架,使跨平臺的ROP攻擊更加容易,進一步增加了計算機應用軟件防御代碼重用類控制流劫持攻擊的難度。

由于ROP攻擊需要攻擊者知道gadget的地址,因此地址空間布局隨機化(ASLR,address space layout randomization)[14]等在進程運行前提供防御措施的靜態防御技術,可以有效抵御傳統的ROP攻擊。為了克服傳統ROP攻擊的缺陷,Snow等[15]提出了JIT-ROP(just-in-time ROP)的攻擊技術,它通過即時代碼重用恢復內存布局,擊敗了細粒度運行前隨機化技術。相比于傳統的ROP技術,JIT-ROP攻擊可以反復使用內存泄露的方法動態映射應用程序的內存布局,同時發現gadget以及API函數,并利用這些gadget進行攻擊。實驗證明,JIT-ROP可以繞開任意粒度的隨機化。JIT-ROP攻擊方法的誕生揭示了運行前隨機化無法在進程運行時動態引入隨機性的致命缺陷。JIT-ROP技術最大的特點是尋找并利用gadget的過程都在程序運行時動態進行的,其攻擊形式多樣,能夠擊敗ASLR技術。

圖2 ROP攻擊流程

此外,Linux系統中父進程fork()中的子進程總是享有和父進程同樣的地址空間布局,本文將這種模式稱為fork-oriented模式。而許多C/S架構的網絡模型都在使用這樣的運行模式,這會導致BROP(blind ROP)攻擊。BROP攻擊由Bittau等提出,是JIT-ROP攻擊的擴展模式[16]。BROP攻擊可以在不獲得被攻擊進程二進制文件的前提下進行遠程攻擊,給網絡中的計算機系統造成巨大危害。攻擊者可以通過不斷向子進程進行嗅探和猜測來獲取關于地址空間布局的知識并找到足夠的gadget進行惡意攻擊。Bittau等[16]設計了一個完全自動化的BROP攻擊工具,成功繞過了64 bit的ASLR技術,實現了對nginx的BROP攻擊。

3 進程控制流劫持防御技術研究現狀

隨著控制流劫持攻擊技術的不斷發展,其對軟件安全造成的威脅也日趨嚴重。因此研究人員提出許多相應的防御技術??傮w上講,根據防御技術引入的時間將控制流劫持防御技術分為運行前靜態防御和運行時動態防御兩大類。

3.1 運行前靜態防御技術

運行前靜態防御技術一般是通過修改編譯器或加載器在進程運行前進行緩沖區邊界檢查、棧保護、替換鏈接庫、隨機化等保護措施,來確保運行時控制流不被篡改。數據執行保護通過區分數據和代碼的不同權限可以有效阻礙代碼注入類攻擊。StackGuard[17]是GCC編譯器的一個補丁,編譯時它通過在緩沖區和返回地址間加入隨機canary值保護用戶棧。Libsafe[18]是在進程運行前替換易受攻擊的庫函數,從而保護strcpy、printf等存在危險的函數。FormatGuard[19]通過比較提供給printf函數實際參數的數量與格式字符串調用參數的數量來抵御基于格式錯誤的控制流劫持攻擊。此外還有很多類似的技術,在進程運行前加入防御機制以提高軟件安全性。然而,這些防御方式留給攻擊者充足的時間進行探索和攻擊。

JIT-ROP和BROP等攻擊通過不斷嗅探和猜測,利用進程運行時產生的動態信息,繞開了靜態防御的保護,從而篡改進程控制流。這些運行時動態攻擊方式甚至可以在沒有二進制文件的情況下進行遠程攻擊,所以運行前防御技術已經無法抵御這種攻擊技術。運行時動態攻擊的出現,再次打破了攻守雙方的平衡,使軟件防御技術研究人員將目光轉向了運行時動態防御技術上。

3.2 運行時動態防御技術

運行時動態防御技術則在進程運行過程中即時地進行安全保護,防止控制流被非法篡改。根據進程運行時動態防御思想的不同,本文可以將進程運行時動態防御技術分為兩大類:基于可信計算的運行時防御技術和基于主動變換防御思想的防御技術。

3.2.1 基于可信計算的運行時防御技術

可信計算通過確保系統始終在可信狀態下遷移來確保系統安全,基于可信計算的動態防御技術則通過將進程控制流與預期的正??刂屏鬟M行對比,從而保證進程運行過程始終可信。

基于可信計算的運行時防御技術的代表是控制流完整性(CFI,control flow integrity)。CFI最早由Martín等[20]提出。CFI基于動態可信度量,分析程序正??刂屏?,并依此構造出針對進程的控制流圖(CFG,control flow graph)。CFI技術的關鍵是限制進程運行過程中的控制流轉移,從而使進程的控制流只在其原有CFG所限定的范圍內,保證進程運行過程可信[21]。具體做法是通過分析程序的控制流圖,獲得間接轉移指令目標的地址,形成一個白名單,然后在進程運行過程中,核對轉移目標指令是否在正??刂屏鞯陌酌麊沃?。由于JIT-ROP等針對Linux進程的控制流劫持攻擊會改變程序的正常行為,從而違背原有的控制流圖。因此CFI能夠抵御運行時動態控制流劫持攻擊。

在CFI提出后,該技術得到了研究人員的廣泛研究,各種CFI防御技術層出不窮。CFI可以根據劃分目標指令的精細程度分為細粒度CFI和粗粒度CFI。嚴格意義上講,最早Martín提出的CFI技術是細粒度CFI。細粒度CFI仔細檢查每個間接轉移指令的目標地址,并與正??刂屏鲌D進行比對,確保每條轉移指令只能轉到其限定的范圍內,來保證程序控制流的完整性。Mashtizadeh等[22]提出的CCFI會識別所有影響程序控制流的對象,并且計算這些對象的消息認證碼,從而進行指針加密。通過在使用每個控制流元素之前檢查消息認證碼,系統可以保證運行時控制流不被非法篡改。Criswell等[23]提出了KCoFI,這是一種在操作系統內核上的CFI,KCoFI在驗證進程控制流完整性的基礎上,加入一個對進程進行動態監視的中間軟件層,以進一步保護一些關鍵數據結構。然而,對進程指令進行精細的檢查會造成巨大的性能開銷。為了降低系統性能開銷,粗粒度的CFI選擇放寬檢查條件,將同一類轉移指令整理到一起進行驗證。例如,CCFIR[24]利用一個專用的“Springborad section”來實現間接分支轉移,沒有實現對每一條指令進行精細檢查;binCFI[25]將間接轉移指令進行分類,同一類轉移指令歸納到同一目標集合中,粗化檢查粒度,提高進程運行效率。由于沒有對每一條轉移指令進行檢查,粗粒度CFI會導致系統抵御攻擊的能力下降,攻擊者依舊可以針對粗粒度CFI進行代碼重用攻擊。G?ktas等[26]利用entry point(EP)gadget和call site(CS)gadget成功實現了對粗粒度CFI的攻擊;Conti等[27]提出了名為StackDefiler的系列攻擊,分別利用堆上的漏洞、用戶空間和內核空間切換時存在的漏洞以及泄露影子堆棧的地址,完成了在有CFI保護的前提下針對堆棧的攻擊,同時也擊敗了DEP和ASLR保護技術;Carlini等[28]利用對非控制數據的攻擊,提出了名為CFB的攻擊技術,并且證明CFB能夠對精細的CFI進行有效攻擊。2015年,Otgonbaatar指出[29],即便獲得了細粒度的控制流完整性,也存在被攻擊的風險,這使CFI技術的防御有效性受到了質疑。

為了減少CFI的性能開銷,目前有研究人員開始利用硬件來輔助實現CFI。Pappas等[30]設計了名為kBouncer 的基于硬件的CFI,該技術利用Last Brach Register監視進程中的跳轉指令,以防止進程的異??刂屏?。Qiu等[31]提出了利用一種基于輕量級加密的體系結構(LEA-AES)對間接跳轉指令和返回地址進行加解密,從而保證了進程控制流的完整可信。Zhang等[32]設計了HCIC技術,該技術利用海明距離匹配和線性加解密機制,通過特定硬件的輔助,在不對編譯器進行修改、不增加新的指令集的條件下,實現了低開銷的CFI。

CFI是建立在對被保護程序深入理解基礎上的防御技術,因此往往需要源代碼或調試信息。在運行動態監測時,CFI無法完美刻畫進程的CFG,因此可能導致限制程序正常運行或允許程序執行非法操作。在運行時CFI需要比對跳轉指令的目標地址,導致巨大性能開銷。由于存在以上種種問題,雖然CFI已提出十多年時間,仍然沒有在實際系統中得到廣泛部署應用。

表1給出上述控制流完整性防御技術的對比。

3.2.2 基于主動變換防御思想的運行時防御技術

主動變換防御通過持續地、動態地變化來迷惑攻擊者,從而增加其攻擊成本,降低其攻擊成功概率[33]?;谥鲃幼儞Q防御的運行時防御技術則是在進程運行過程中不斷引入隨機性和多樣性,打破攻擊者構造傳統攻擊鏈所依賴的各種有利條件,加大攻擊者攻擊成功的概率。

表1 控制流完整性防御技術對比

圖3 Pax ASLR基本原理

基于主動變換防御思想的運行時防御技術的代表是內存布局隨機化。隨機化思想最早是在1997年由Forrest等[34]提出的,通過引入多樣性和隨機性來提高計算機系統的穩健性。內存布局隨機化通過不斷改變進程內存布局,實現進程攻擊面的隨機性變換,從而消除了攻擊者的不對稱優勢,增加了攻擊者的攻擊難度。此外,由于每一計算機進程在系統中的內存布局不同,運行時內存布局隨機化還能阻礙攻擊在網絡中的擴散。

Pax ASLR[14]是早期隨機化技術的代表,其基本原理如圖3所示。它會對ELF可執行文件地址空間中運行時才映射的動態共享庫位置等映射區域進行隨機化操作。當攻擊者需要知道進程中的gadget地址時,由于內存布局被隨機打亂,因此加大了攻擊者的攻擊難度。同時當進程被編譯為位置無關代碼時,Pax ASLR還能隨機化代碼段的基地址,進一步增加了攻擊者攻擊成功的難度。

目前,在許多流行的操作系統中部署了Pax ASLR技術,以提高操作系統的安全性。然而,Pax ASLR是一種粗粒度的隨機化技術,隨機化熵值低并且只隨機化段基地址,因此容易遭受暴力攻擊和信息泄露攻擊[35]。細粒度隨機化技術[36-42]不僅隨機化了段基地址,而且打亂進程段內對象的相對偏移,增大隨機化引入的熵值,從而有效抵御暴力攻擊和信息泄露攻擊。作為一種解決傳統粗粒度隨機化缺陷的技術,細粒度隨機化技術被研究者廣泛采用,并被認為可以進一步提高進程的安全性。

然而,JIT-ROP和BROP攻擊的提出,使運行前的細粒度隨機化技術在面對運行動態攻擊時沒有了用武之地。針對JIT-ROP和BROP攻擊的一種有效保護方法是在運行時對地址空間進行再隨機化操作。運行時再隨機化技術通過在進程運行過程中不斷對進程地址空間進行再隨機化布局,減小了單一地址空間布局的存在時間,縮短攻擊者的攻擊周期,使攻擊者無法掌握足夠的知識來完成一次完整的攻擊,運行時隨機化示意如圖4所示。

圖4 運行時隨機化示意

Giuffrida等[42]提出了操作系統中細粒度隨機化技術的設計和運行時再隨機化的思想,并在Minix3微內核中成功部署了運行時內核級地址空間布局隨機化技術。Chen等[43]提出了JIT-ASR技術,該技術使用虛擬內存管理,可以在運行時通過修改代碼地址的虛擬頁碼和頁表來不斷改變程序的地址空間。侯宇[44]分析了ROP攻擊的原理,并在此基礎上設計了一種稱為Chameleon的防御機制,Chameleon在虛擬地址轉換為物理地址中間加了一個中間層,從而將取指異或訪存和進程地址空間隨機化有機結合起來。Chen等[45]提出了Remix技術,通過LLVM編譯器框架將代碼函數分割成許多基本塊,并對進程地址空間中的函數基本塊進行基于時間模型的運行時再隨機化。這些運行時隨機化技術大都需要修改內核模塊來支持進程再隨機化操作,實現難度大,兼容性有限,并且都選擇基于時間的再隨機化,會造成一些不必要的性能開銷。Hawkins等[46]提出的Mixr運行時再隨機化系統可以在不依賴源代碼以及不修改系統內核和加載器等組件的基礎上進行,然而該技術由于在運行時需要反復進行動態鏈接導致性能開銷過大。

上述運行時隨機化技術都是基于時間的再隨機化模型,即每隔一段時間進行一次隨機化操作[46]。由于運行時地址空間再隨機化操作會給程序性能帶來影響。在沒有受到危險操作時,過于頻繁的隨機化會帶來巨大的性能開銷,而隨機化頻率過低則給攻擊者留下攻擊的機會?;跁r間的再隨機化模型無法消除這一矛盾。Bigelow等[47]提出了實時再隨機化(TASR)技術,在輸入/輸出系統調用之間引入隨機性,從而使攻擊者獲得的內存信息無效。TASR提出了一種將隨機化與潛在的運行時信息泄露相結合的方法,視成對的輸入/輸出操作為危險操作,當有成對輸入/輸出操作時,則觸發隨機化。由于只在面臨危險操作時進行隨機化,TASR減少了不必要的隨機化開銷。雷嘯[48]改進了TASR技術過于寬泛的危險操作的判斷,提出了安全敏感區的概念,只有當進程write操作訪問安全敏感區時才在后續read操作前觸發隨機化,進一步減少了性能開銷。Morton等[49]提出了當攻擊者在內存中公開了可能有用的可執行gadget時,才觸發防御機制,以確保攻擊者不能利用這些字節來劫持運行時進程的控制流。這些基于潛在風險的隨機化方案,減少了不必要的再隨機化操作,對于大部分進程而言,該方案要優于基于時間的再隨機化方案。

針對BROP攻擊,Lu等[50]提出的RuntimeASLR技術對父進程fork出的子進程進行地址空間布局進行再隨機化,從而抵御復制探測攻擊。RuntimeASLR的技術核心是一個自動的、整體的指針跟蹤機制,Lu認為這是未來進行指針識別和運行時動態保護的有用工具。然而,RuntimeASLR技術只適合nginx這類fork-oriented程序,并且只支持x86體系架構。

除了在運行時對內存布局進行隨機置換外,還有研究人員提出加載多個進程映像并在運行時進行隨機切換,從而使攻擊者獲取的運行時內存信息無效。Davi等[51]提出了Isomeron技術,在一個虛擬地址空間中,Isomeron同時加載了兩份不同的進程映像。在程序運行時,一旦發生了函數調用,就隨機決定接下來執行哪個程序副本。Williams-King等[52]提出了稱為Shuffler的防御機制。Shuffler在幾毫秒內對進程地址空間進行運行時再隨機化,并“原子地”從一個隨機化的代碼副本切換到另一個隨機化的代碼副本。Williams-King等還考慮了Shuffler本身可能存在的攻擊面,通過對自身的地址空間進行再隨機化,可以減小防御工具本身攻擊面對安全性帶來的影響。由于gadget的地址在每個副本中不一樣,且攻擊者也無法預測接下來運行哪個副本。因此這樣的方法能有效抵御JIT-ROP和BROP攻擊。

表2 進程運行時再隨機化技術對比

表3 進程運行時動態防御技術對比

表2給出進程運行時再隨機化技術的對比。表3給出進程控制流劫持運行時動態防御技術的總體對比。

4 結束語

在信息安全領域中,如何抵御控制流劫持攻擊一直是一個熱點問題,尤其Snow提出JIT-ROP攻擊之后,以這種新型控制流劫持攻擊為基礎的攻擊模式不斷被提出,對計算機進程構成巨大威脅。BROP攻擊的提出更是突破了傳統控制流劫持攻擊對目標二進制的依賴,實現了“盲的”控制流劫持攻擊,使傳統的軟件靜態被動防御機制變得形同虛設。

控制流劫持攻擊是計算機軟件面臨的巨大威脅,隨著新型代碼重用類攻擊的誕生和演化,控制流劫持攻防對抗不斷升級??刂屏鹘俪止艏夹g的發展也面臨著許多挑戰和新的發展方向。首先, JIT-ROP和BROP攻擊所采用的方法并不高效,需要多次嘗試和足夠時間來“積累知識”。然而,攻擊時間越長,防御者越可能對攻擊做出反應。因此快速獲取成功完成攻擊所需要的信息是未來控制流劫持攻擊的研究重點。其次,在二進制文件不可得的情況下進行控制流劫持攻擊是一個難點。而BROP攻擊則揭示了fork-oriented應用進程所存在的安全漏洞,為今后攻擊二進制信息不可得的應用進程拓寬了思路。最后,隨著ARM等其他平臺的廣泛應用,針對這些平臺的防御技術不斷升級。借鑒現有控制流劫持攻擊的研究成果,實現對其他平臺的控制流劫持攻擊也值得研究人員關注。目前,運行時動態防御技術是抵御JIT-ROP和BROP攻擊的有效手段,筆者依據其背后防御思想的不同分成了基于可信計算和基于主動變換防御思想的運行時防御技術。

基于可信計算的CFI技術通過限制程序的控制流來保證程序被正確地執行。然而,細粒度的CFI也被研究人員證實存在防御缺陷;進程動態控制流圖難以精確刻畫;同時CFI還存在性能開銷大、依賴調試信息等問題。如何在低性能開銷的基礎上,構造正確合理的CFG是制約CFI技術進一步發展的瓶頸,也是CFI未來主要的一個研究方向。與此同時,結合硬件來降低CFI開銷,并提高CFG覆蓋率和準確率也是一個值得探索的方向。

基于主動變換防御的運行時動態隨機化技術,通過在進程內部引入隨機性來抵御運行時動態代碼重用攻擊。運行時再隨機化通過不斷對進程地址空間進行再隨機化布局,改變程序自身的屬性,打斷了攻擊者對進程地址空間的原始認知,使攻擊者先前積累的有關進程地址空間的知識無效化,從而抵御代碼重用攻擊。相比CFI,運行時隨機化能夠有效阻礙攻擊的擴散,同樣也值得深入研究。內存布局隨機化技術會使進程出現“帶傷運行”的情況,存在造成進程非正常運行的可能性,如何降低隨機化操作對進程帶來的“傷害”,具有重要的現實意義。此外,運行時內存隨機化對進程的保護能力與其隨機化粒度之間的關系,隨機化最合理的觸發時間等問題仍然缺乏相應的研究,這使運行時隨機化的發展陷入無法在保護力度和性能損耗之間取得一個最為合理平衡的困境,因此對運行時內存隨機化進行費效評估也是一個值得研究的方向。

最后,現階段的控制流完整性和地址空間隨機化技術大多是針對x86平臺,在ARM等其他平臺上鮮有類似研究。然而,如第2節所述,控制流劫持攻擊在許多平臺中都可以實現,并且同樣可以達到執行任意惡意代碼的目的。因此在ARM等其他平臺上的或者跨平臺的運行時動態保護技術同樣亟待研究和解決。

[1] 邵思豪, 高慶, 馬森, 等. 緩沖區溢出漏洞分析技術研究進展[J]. 軟件學報, 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] 張超. 針對控制流劫持攻擊的軟件安全防護技術研究[D]. 北京:北京大學, 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] 喬向東, 郭戎瀟, 趙勇. 代碼復用對抗技術研究進展[J]. 網絡與信息安全學報, 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架構的ROP攻擊與防御技術研究[D]. 上海: 上海交通大學, 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] 武成崗, 李建軍. 控制流完整性的發展歷程[J]. 中國教育網絡, 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] 蔡桂林, 王寶生, 王天佐, 等. 移動目標防御技術研究進展[J]. 計算機研究與發展, 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] 侯宇. 基于動態隨機化和只可執行內存的JIT-ROP防御研究[D]. 南京: 南京大學, 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] 雷嘯. 內存信息泄露的運行中隨機化防御方法的研究與改進[D]. 南京: 南京大學, 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? ),男,江蘇昆山人,陸軍工程大學碩士生,主要研究方向為系統安全。

張濤(1973? ),男,甘肅涇川人,博士,陸軍工程大學教授,主要研究方向為操作系統安全、數據庫安全、智能終端軟件安全等。

徐偉光(1984? ),男,安徽宿州人,博士,陸軍工程大學講師,主要研究方向為移動目標防御、密碼學、區塊鏈等。

孫蒙(1984? ),男,山東齊河人,博士,陸軍工程大學副教授,主要研究方向為網絡安全與機器學習、智能語音處理等。

2019?01?23;

2019?03?19

王豐峰,princewff@163.com

江蘇省優秀青年基金資助項目(No.BK20180080)

論文引用格式:王豐峰, 張濤, 徐偉光, 等. 進程控制流劫持攻擊與防御技術綜述[J]. 網絡與信息安全學報, 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.

猜你喜歡
細粒度攻擊者進程
基于貝葉斯博弈的防御資源調配模型研究
債券市場對外開放的進程與展望
改革開放進程中的國際收支統計
正面迎接批判
正面迎接批判
在線評論情感分析研究綜述
基于型號裝備?角色的IETM訪問控制研究
基于web粒度可配的編輯鎖設計
基于文本挖掘的微博文本情緒分析技術研究
社會進程中的新聞學探尋
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合