版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ROP攻擊9.1ROP攻擊的發(fā)展9.2ROP攻擊的變種9.3思考與練習(xí)
9.1ROP攻擊的發(fā)展
利用緩沖區(qū)溢出漏洞進(jìn)行攻擊變得日益普遍,這是因?yàn)榫彌_區(qū)溢出漏洞具有極大的破壞力和隱蔽性,它可以導(dǎo)致程序運(yùn)行失敗、系統(tǒng)死機(jī)或重啟。更為嚴(yán)重的是,攻擊者可以利用它執(zhí)行非授權(quán)指令,甚至可以取得系統(tǒng)的超級(jí)特權(quán),進(jìn)行各種非法操作。而利用緩沖區(qū)溢出漏洞的攻擊包括多種類型,其中就包括了注入代碼型與代碼重用型攻擊。由此發(fā)展的多種攻擊有緩沖區(qū)溢出攻擊、格式化字符串漏洞攻擊、return-into-libc攻擊和ROP攻擊等。
1.緩沖區(qū)溢出攻擊
緩沖區(qū)溢出攻擊是幾種最常見(jiàn)的利用程序缺陷實(shí)施攻擊的方法之一。
緩沖區(qū)溢出是指當(dāng)程序向緩沖區(qū)內(nèi)填充數(shù)據(jù)時(shí),數(shù)據(jù)長(zhǎng)度超過(guò)了緩沖區(qū)本身的容量,溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上。理想的情況是:程序會(huì)檢查數(shù)據(jù)長(zhǎng)度,不允許輸入長(zhǎng)度超過(guò)緩沖區(qū)長(zhǎng)度。但是絕大多數(shù)程序都會(huì)假設(shè)數(shù)據(jù)長(zhǎng)度總是與所分配的儲(chǔ)存空間相匹配,這就為緩沖區(qū)溢出創(chuàng)造了條件。
緩沖區(qū)溢出漏洞具有極大的破壞力和隱蔽性。緩沖區(qū)溢出攻擊的隱蔽性主要表現(xiàn)在:
(1)一般程序員很難發(fā)覺(jué)自己編寫的程序中存在緩沖區(qū)溢出漏洞,從而疏忽檢測(cè);
(2)攻擊者所發(fā)送的溢出字符串在形式上跟普通的字符串幾乎無(wú)區(qū)別,傳統(tǒng)的防御工具(如防火墻)不會(huì)認(rèn)為其為非法請(qǐng)求,從而不會(huì)進(jìn)行阻攔;
(3)通過(guò)緩沖區(qū)溢出注入的ShellCode代碼執(zhí)行時(shí)間一般較短,在執(zhí)行中系統(tǒng)不一定報(bào)告錯(cuò)誤,并且可能不會(huì)影響到正常程序的運(yùn)行;
(4)攻擊者通過(guò)緩沖區(qū)溢出改變程序執(zhí)行流程,使ShellCode代碼能夠執(zhí)行本來(lái)不被允許或沒(méi)有權(quán)限的操作,而防火墻認(rèn)為其是合法的;
(5)攻擊的隨機(jī)性和不可預(yù)測(cè)性使得防御攻擊變得異常艱難,在沒(méi)有攻擊時(shí),存在漏洞的程序并不會(huì)有什么變化(這和木馬有著本質(zhì)的區(qū)別),這也是緩沖區(qū)溢出很難被發(fā)現(xiàn)的原因;
(6)緩沖區(qū)溢出漏洞的普遍存在,使得針對(duì)這種漏洞的攻擊防不勝防(各種補(bǔ)丁程序也可能存在著這種漏洞)。
在緩沖區(qū)溢出攻擊中,顧名思義,就是利用緩沖區(qū)溢出的方式,攻擊者可以將自己的數(shù)據(jù)寫到內(nèi)存的任何地方。
例如,StackGuard是一種較早的防御緩沖區(qū)溢出攻擊的方法。它會(huì)在函數(shù)調(diào)用棧寫入返回地址的時(shí)候,加入一個(gè)叫canary的值,當(dāng)函數(shù)調(diào)用結(jié)束返回時(shí),程序會(huì)檢測(cè)這個(gè)canary,如果這個(gè)值被修改了,則系統(tǒng)會(huì)檢測(cè)到緩沖區(qū)溢出攻擊,然后系統(tǒng)會(huì)通知安全軟件,并終止該進(jìn)程。canary的值采用隨機(jī)數(shù)模式,可以防御大部分的攻擊,但它也不是絕對(duì)安全的,攻擊者仍然可以通過(guò)不覆蓋canary的方式來(lái)改寫返回地址的值。
PointGuard是另一種防御緩沖區(qū)溢出攻擊的防御方法。它利用一種加密方法將存入內(nèi)存的地址(數(shù)據(jù))加密,并且只有當(dāng)內(nèi)存中的值被載入寄存器時(shí)才進(jìn)行解密操作。這樣,在不知道加密方法的情況下,即使棧中的地址(數(shù)據(jù))被修改了,但是通過(guò)密鑰解密以后的地址,被解密為隨機(jī)的地址,從而不會(huì)去執(zhí)行攻擊者的惡意代碼。但是,如果攻擊者通過(guò)別的攻擊方式獲得了加密方法,則該防御方式就會(huì)失效。
2.return-into-libc攻擊
return-into-libc攻擊是在緩沖區(qū)溢出攻擊原理的基礎(chǔ)上發(fā)展而來(lái)的,它包含有緩沖區(qū)溢出攻擊精髓的部分,同時(shí)還在一定程度上解決了緩沖區(qū)溢出攻擊的不足之處。最早的緩沖區(qū)溢出攻擊需要在漏洞程序中添加惡意代碼ShellCode,只有執(zhí)行這些惡意代碼,才能達(dá)到攻擊者的攻擊目的。
return-into-libc攻擊就是一種不需要對(duì)緩沖區(qū)同時(shí)寫和執(zhí)行(或者先寫后執(zhí)行)的攻擊方式,它只需要通過(guò)緩沖區(qū)溢出來(lái)篡改跳轉(zhuǎn)地址,然后將程序引導(dǎo)到系統(tǒng)中已存在的動(dòng)態(tài)函數(shù)庫(kù)當(dāng)中,去執(zhí)行函數(shù)庫(kù)中已有的函數(shù)代碼來(lái)達(dá)到攻擊的目的。
盡管return-into-libc攻擊繞過(guò)了WX(WXORX)防御,但是相比于注入代碼型攻擊,它卻有了更多限制,主要表現(xiàn)在兩個(gè)方面:
(1)在一個(gè)return-into-libc攻擊中,攻擊者只能調(diào)用庫(kù)函數(shù),當(dāng)一個(gè)函數(shù)執(zhí)行完,繼續(xù)調(diào)用下一個(gè)函數(shù),而不能像注入代碼型攻擊一樣,可以調(diào)用注入的任意代碼;
(2)在return-into-libc攻擊中,攻擊者只能調(diào)用程序代碼段或者函數(shù)庫(kù)中存在的函數(shù),所以通過(guò)將某一個(gè)或幾個(gè)關(guān)鍵函數(shù)(例如system()函數(shù))從函數(shù)庫(kù)中移除,可以限制攻擊者的攻擊行為。
而ROP攻擊不要求調(diào)用函數(shù)庫(kù)中的函數(shù),而是對(duì)有用指令序列進(jìn)行任意組合,加大了其攻擊能力,所以通過(guò)移除庫(kù)函數(shù)的方法來(lái)限制攻擊者的行為,對(duì)ROP攻擊是不起作用的。
3.ROP攻擊
ROP全稱為Return-OrientedProgrammming(面向返回的編程),是一種新型的基于代碼重用技術(shù)的攻擊。它是在return-into-libc攻擊的基礎(chǔ)上發(fā)展而來(lái),但更復(fù)雜、功能更強(qiáng)大的非注入代碼型攻擊。return-into-libc攻擊通常只能跳轉(zhuǎn)到動(dòng)態(tài)函數(shù)庫(kù)的某個(gè)函數(shù)入口執(zhí)行完整的函數(shù)代碼,而ROP攻擊通過(guò)對(duì)return-into-libc攻擊的進(jìn)一步擴(kuò)展,將return-into-libc攻擊中重用動(dòng)態(tài)庫(kù)函數(shù)的模式修改為重用函數(shù)中代碼片段的形式,可供選擇的范圍更廣,粒度更細(xì),防范的難度也更大。
ROP攻擊的大體思路是攻擊者掃描已有的動(dòng)態(tài)鏈接庫(kù)和可執(zhí)行文件,提取出可以利用的指令片段(這些指令片段被稱為gadget)。
在第一代ROP攻擊中,這些指令片段以ret指令結(jié)尾,即用ret指令實(shí)現(xiàn)指令片段執(zhí)行流的銜接。操作系統(tǒng)通過(guò)棧來(lái)進(jìn)行函數(shù)的調(diào)用和返回,而函數(shù)的調(diào)用和返回是通過(guò)壓棧和出棧來(lái)實(shí)現(xiàn)的。每個(gè)程序都會(huì)維護(hù)一個(gè)程序運(yùn)行棧,這個(gè)棧為所有函數(shù)共享。每次函數(shù)調(diào)用時(shí),系統(tǒng)會(huì)分配一個(gè)棧幀給當(dāng)前被調(diào)用函數(shù),用于參數(shù)的傳遞、局部變量的維護(hù)、返回地址的填入等。
而ROP攻擊則是利用以ret指令結(jié)尾的程序片段,操作棧的相關(guān)數(shù)據(jù),從而改變程序的執(zhí)行流程,使其去執(zhí)行相應(yīng)的指令片段集(gadgets),實(shí)施攻擊者的預(yù)設(shè)目標(biāo)。ROP攻擊不同于return-into-libc攻擊之處在于,ROP攻擊是利用以ret指令結(jié)尾的函數(shù)代碼片段集,而不是整個(gè)函數(shù)本身去完成預(yù)定的操作。從廣義角度講,return-to-libc攻擊是ROP攻擊的特例。最初,ROP攻擊在x86體系結(jié)構(gòu)下實(shí)現(xiàn),隨后擴(kuò)展到ARM等多種體系結(jié)構(gòu)。由于ROP不需要向被攻擊程序中注入惡意代碼,因而,它可以繞過(guò)W
X的防御技術(shù)。
如圖9-1所示是ROP攻擊模型。
圖9-1ROP攻擊模型
1)加載/存儲(chǔ)(load/store)
(1)加載一個(gè)常數(shù)??梢允褂谩皃op%reg;ret”的指令序列形式。如圖9-2所示是將常數(shù)“0xaabbccdd”加載到寄存器“%eax”中。
(2)從內(nèi)存中加載??梢允褂谩癿ovl32(%edx),%edx;ret”指令序列形式,將內(nèi)存中的內(nèi)容加載到寄存器“%edx”中。
(3)存儲(chǔ)到內(nèi)存??梢允褂谩癿ovl%edx,30(%eax);ret”指令序列形式,將寄存器“%edx”中的內(nèi)容存儲(chǔ)到內(nèi)存中。
圖9-2加載常數(shù)
2)算術(shù)和邏輯運(yùn)算(arithmeticandlogic)
(1)加法??梢允褂谩癮ddl(%eax),%edx;push%edi;ret”的指令序列形式。
(2)減法??梢允褂谩皀eg%edx;ret”的指令序列形式。
(3)異或。可以使用“xorl(%eax),%edx;ret”的指令序列形式。
3)控制流(controlflow)
(1)無(wú)條件跳轉(zhuǎn)。在ROP攻擊中,棧指針(%esp)取代了指令指針(%eip)的作用,來(lái)控制程序的執(zhí)行流程,通過(guò)簡(jiǎn)單的無(wú)條件跳轉(zhuǎn)來(lái)改變“%esp”的值,可以使其指向一個(gè)新的指令集。如圖9-3所示是使用“pop%esp;ret”指令序列,造成的一個(gè)無(wú)限循環(huán)。
(2)條件跳轉(zhuǎn)。條件跳轉(zhuǎn)指令如cmp指令、jcc指令等,由于它們跳轉(zhuǎn)造成的是指令指針(%eip)的改變,所以條件跳轉(zhuǎn)指令在ROP攻擊中用處不大。
圖9-3使用“pop%esp;ret”指令序列的無(wú)限循環(huán)
4)函數(shù)調(diào)用(functioncalls)
在return-into-libc攻擊中,可以通過(guò)從函數(shù)庫(kù)中移除相應(yīng)的函數(shù)限制攻擊的進(jìn)行,但是在ROP攻擊中,卻可以調(diào)用庫(kù)中的任意指令片段,不受限制。
9.2ROP攻擊的變種
由于第一代ROP攻擊精心選擇的指令工具集都以ret指令結(jié)尾,其構(gòu)造的工具集會(huì)包含許多ret指令,這在正常的系統(tǒng)中是不合理的。所以,研究人員提出了一種通過(guò)檢測(cè)系統(tǒng)指令執(zhí)行流程中ret指令調(diào)用的頻繁程度,從而檢測(cè)ROP攻擊的技術(shù)方法。還有的方法通過(guò)改寫內(nèi)核系統(tǒng)中所有的ret指令,使攻擊者無(wú)法找到可用的指令片段構(gòu)造攻擊。而最新的代碼重用型攻擊變種已經(jīng)不再依賴于ret指令,而是改為利用類似的跳轉(zhuǎn)指令(比如間接jmp或“pop+jmp”指令)來(lái)串接指令片段(即gadgets)。
9.2.1非ret指令結(jié)尾的ROP攻擊
第一代ROP攻擊看似完美地解決了注入代碼型攻擊的缺點(diǎn),但實(shí)際上它自身也有很大的缺點(diǎn)。這個(gè)缺點(diǎn)就是每一條指令序列都需要以ret指令結(jié)尾,這樣就導(dǎo)致了在組合成的工具集中含有大量的ret指令,研究人員能夠通過(guò)對(duì)ret指令的使用頻繁程度來(lái)檢測(cè)系統(tǒng)是否遭受到ROP攻擊。
(1)針對(duì)第一個(gè)不同點(diǎn),研究人員建議使用一種檢測(cè)技術(shù)去檢測(cè)指令流中頻繁的ret返回指令。例如,在動(dòng)態(tài)二進(jìn)制指令流的框架下,當(dāng)發(fā)現(xiàn)三個(gè)連續(xù)的指令序列均以ret指令結(jié)尾,而每個(gè)指令序列由五條或少于五條指令組成時(shí),就觸發(fā)一個(gè)警告。
(2)針對(duì)第二個(gè)不同點(diǎn),即使沒(méi)有合法的call調(diào)用指令,攻擊者也能頻繁地使用ret返回指令,這在一個(gè)程序的返回地址棧中違反了last-infirst-out的原理,研究人員建議使用一種方法去檢測(cè)在通過(guò)call調(diào)用指令和ret返回指令的程序中,那些違反了last-infirst-out的棧原理的指令流。
(3)更為徹底的一種防御方法是研究人員將庫(kù)中全部的ret指令消除(或替換),從而可以有效地干預(yù)ROP構(gòu)造攻擊的基礎(chǔ)。
盡管上述防御方法都能很好地防御ROP攻擊,但是攻擊者又提出新的方法來(lái)實(shí)施攻擊,同時(shí)確保不被上述的防御方法探測(cè)到。攻擊者通過(guò)對(duì)防御方法的研究發(fā)現(xiàn),頻繁的ret返回指令調(diào)用使得防御軟件能夠檢測(cè)到攻擊,那么攻擊者通過(guò)開(kāi)發(fā)出不使用返回指令的ROP攻擊就可以跳過(guò)這種防御。由此,一種新的攻擊方式誕生了,它叫做非ret指令結(jié)尾的ROP攻擊,英文名是Return-OrientedProgramming
withoutReturns,它是ROP攻擊的一個(gè)變種。
非ret指令結(jié)尾的ROP攻擊是在指令序列中找到類似返回指令的指令序列來(lái)代替返回指令,就可以使得ROP攻擊不需要使用ret返回指令,從而使得檢測(cè)ret返回指令頻率的防御方式無(wú)效,以達(dá)到越過(guò)防御措施的攻擊方法。
在x86架構(gòu)上,可以使用類似于ret返回指令的指令序列,例如“popreg;jmp*reg”的指令序列。通過(guò)這樣的方式,就不需要頻繁地調(diào)用ret返回指令來(lái)組建工具集,從而使得針對(duì)第一代ROP攻擊的防御方法失效。
如圖9-4所示是非ret指令結(jié)尾的ROP攻擊模型。
圖9-4非ret指令結(jié)尾的ROP攻擊模型
在圖9-4中,Trampoline就是所謂的“更新-加載-轉(zhuǎn)移序列”,它替換了ROP攻擊中的ret返回指令。在被攻擊的目標(biāo)程序或函數(shù)庫(kù)中,找出Trampoline序列,對(duì)于每一個(gè)待執(zhí)行的指令序列,它們都以間接jmp指令結(jié)尾,而每一個(gè)間接jmp指令均指向Trampoline序列,通過(guò)執(zhí)行Trampoline序列可以得到下一個(gè)要執(zhí)行的指令序列。
9.2.2JOP攻擊
JOP攻擊全稱為Jump-OrientedProgramming。
JOP攻擊和ROP攻擊的原理類似,都是在系統(tǒng)的可執(zhí)行代碼中尋找有用的指令片段,而后將其組合成為一套能執(zhí)行某個(gè)特定功能的工具集。不同的地方在于,ROP攻擊使用的指令片段以ret指令結(jié)尾,而JOP攻擊使用的指令片段改為以間接jmp跳轉(zhuǎn)指令為結(jié)尾,并通過(guò)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國(guó)高含量硅膠布行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球暫時(shí)性墨水行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025至2031年中國(guó)多功能彩虹橋行業(yè)投資前景及策略咨詢研究報(bào)告
- 二零二五版煤炭運(yùn)輸合同環(huán)境保護(hù)責(zé)任書(shū)4篇
- 2025至2030年中國(guó)長(zhǎng)城卡自動(dòng)雙打卡機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)白蘭皂香精數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五年度全透明安全玻璃安裝施工合同2篇
- 2025至2030年中國(guó)油性黑亮型亮光劑數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五年度貨物裝卸與智能倉(cāng)儲(chǔ)管理系統(tǒng)合同3篇
- 2025版天然氣供應(yīng)合同風(fēng)險(xiǎn)防控范本模板3篇
- 城市微電網(wǎng)建設(shè)實(shí)施方案
- 企業(yè)文化融入中華傳統(tǒng)文化的實(shí)施方案
- 9.1增強(qiáng)安全意識(shí) 教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 《化工設(shè)備機(jī)械基礎(chǔ)(第8版)》全套教學(xué)課件
- 人教版八年級(jí)數(shù)學(xué)下冊(cè)舉一反三專題17.6勾股定理章末八大題型總結(jié)(培優(yōu)篇)(學(xué)生版+解析)
- 2024屆上海高考語(yǔ)文課內(nèi)古詩(shī)文背誦默寫篇目(精校版)
- DL-T5024-2020電力工程地基處理技術(shù)規(guī)程
- 初中數(shù)學(xué)要背誦記憶知識(shí)點(diǎn)(概念+公式)
- 駕照體檢表完整版本
- 農(nóng)產(chǎn)品農(nóng)藥殘留檢測(cè)及風(fēng)險(xiǎn)評(píng)估
- 農(nóng)村高中思想政治課時(shí)政教育研究的中期報(bào)告
評(píng)論
0/150
提交評(píng)論