【摘 要】ROP攻擊是現(xiàn)在黑客最常用的攻擊技術手段之一,本文主要介紹了流行的黑客攻擊技巧--ROP的出現(xiàn)原因和它的機制和和工作機理,并詳細介紹了目前國內外流行的防御和檢測手段(DROP、ROPDefender、ROPGuard),讓大家對ROP攻擊和防御有一個清晰的識。
【關鍵詞】ROP攻擊 DROP 防御
1 引言
在傳統(tǒng)的緩沖區(qū)溢出攻擊中[1],攻擊者只需要將函數(shù)返回值改寫為其預先在堆棧中注入的shellcode的起始地址,即可實現(xiàn)執(zhí)行任意惡意代碼的目的。傳統(tǒng)注入漏洞的橫行,世界安全研究人員和系統(tǒng)工作者提出一種W⊕X的技術來對抗這種攻擊。W⊕X可以簡單概括為:內存區(qū)域的數(shù)據(jù)不可以對用戶既可寫又可執(zhí)行,這意味著攻擊者不可以執(zhí)行自己寫入的數(shù)據(jù),所以W⊕X技術可以有效阻礙傳統(tǒng)的緩沖區(qū)溢出攻擊。Windows系統(tǒng)中對應的防護技術叫做的DEP[2]即Data Execution Prevention,跟W⊕X技術類似。
但是攻擊者們很快就找到一種可以突破這種防護措施的技術,叫做return-into-libc[3],libc是Linux系統(tǒng)中的GNU標準C語言庫,由于W⊕X的限制,黑客不能執(zhí)行注入到漏洞進程中的代碼,但是發(fā)現(xiàn)可以調用系統(tǒng)函數(shù)庫中存在的函數(shù),通過特殊的函數(shù)組合,同樣可以達到控制系統(tǒng)的目的。但是這種攻擊方式存在明顯的不足,一是攻擊者只能調用libc中函數(shù),攻擊代碼功能受限;二是這種攻擊方式比較容易防御。
2 ROP攻擊原理
在一般程序里面,都包含著大量的返回指令(ret),他們基本位于函數(shù)的尾部,或是函數(shù)中部需要返回的地方。而從函數(shù)開始的地方到ret指令之間的這一段序列稱為二進制指令代碼塊(gadgets)。這些二進制指令序列使其組合成完成一些諸如讀寫內存、算術邏輯運算、控制流程跳轉、函數(shù)調用等操作。于是,攻擊者可以通過利用內存空間中各個gadgets以某種順序執(zhí)行,達到進行任意操作的目的。而為了使各個gadgets“拼接”起來,攻擊者需要構造一個特殊的返回棧。首先讓指向攻擊者構造的棧(stack)的指針跳到第一個gadget 中,執(zhí)行其中的代碼序列后ret回棧中,然后再跳到第二個gadget ,執(zhí)行后就到第三個gadgets ……只要棧足夠大,就能達到攻擊者想要的效果。
為了自動化的編寫ROP攻擊載荷,有黑客編寫了一套可以自動化尋找gadgets的工具,叫做ROPGadget[4],該工具已經開源,并且可以直接在Github網站上下載。
3 ROP防御
3.1 DROP
DROP[5]是由南京大學陳平提出的ROP攻擊檢測系統(tǒng),根據(jù)ROP攻擊載荷具有以下兩個特點,即:
a.ROP鏈是以一串gadgets相串聯(lián)的,并且均以ret指令結尾。
b.ROP將惡意代碼隱藏于正常代碼之中,因為其只包含數(shù)據(jù)和指令地址值。
DROP可以有效檢測大部分的ROP惡意代碼,但是它也具備自己的局限性,它的缺點一是目前只能應用于Linux平臺,另外一點是DROP只能檢測使用ret指令的ROP攻擊載荷,對于使用了jmp技術的攻擊代碼DROP不具備檢測能力。
3.2 ROPDefender
ROPDefender是由德國波鴻魯爾大學的研究人員提出一種ROP惡意代碼檢測工具。 ROPDefender具有不依賴程序源碼特性,且相比CFI提高了20倍左右的效率。
ROPDefender特點是檢測特征較為單一,黑客可以采用其它手段繞過,另外它占用兩倍于源程序的系統(tǒng)資源,效率是影響其廣泛的使用的瓶頸。
4 結論
ROP攻擊是return-into-libc攻擊的一種演化攻擊形式,它具有靈活多變、難以檢測的特點,本文在第一部分對ROP攻擊的根本原理進行了分析,并在第二部分對比介紹了國際上較為流行的ROP檢測方式,DROP、ROPDefender、ROPGuard、ILR均包含其優(yōu)點和不足。但是信息安全攻擊技術在不斷快速變化和更新,因此不可能存在一種萬能防御框架。
ROPGuard是目前在保證檢測效率的前提下,效率最高的一種檢測技術,并且目前已經成功在微軟EMET中集成,普通用戶可以免費安裝EMET并開啟防護,可以最大程度上防御ROP攻擊。
參考文獻
[1]A.One, “Smashing the stack for fun and profit,”Phrack magazine, vol. 7, p. 365, 1996
[2]S. Andersen and V. Abella,“Data Execution Prevention. Changes to Functionality in Microsoft Windows XP Service Pack 2, Part 3: Memory Protection Technologies,”ed, 2004
[3]S. Designer,“return-to-libc” attack,”Bugtraq, Aug, 1997
[4]J. Salwan,“ROPgadget,”ed, 2012
[5]P. Chen, H. Xiao, X. Shen, X. Yin, B. Mao, and L. Xie, “DROP: Detecting return-oriented programming malicious code,”in Information Systems Security, ed:Springer, 2009, pp. 163-177