![《網(wǎng)絡(luò)安全技術(shù)原理與實(shí)踐》課件第六章 緩沖區(qū)溢出攻擊_第1頁(yè)](http://file4.renrendoc.com/view12/M0A/18/1E/wKhkGWdWenSAcO2iAAM0j72nnVQ313.jpg)
![《網(wǎng)絡(luò)安全技術(shù)原理與實(shí)踐》課件第六章 緩沖區(qū)溢出攻擊_第2頁(yè)](http://file4.renrendoc.com/view12/M0A/18/1E/wKhkGWdWenSAcO2iAAM0j72nnVQ3132.jpg)
![《網(wǎng)絡(luò)安全技術(shù)原理與實(shí)踐》課件第六章 緩沖區(qū)溢出攻擊_第3頁(yè)](http://file4.renrendoc.com/view12/M0A/18/1E/wKhkGWdWenSAcO2iAAM0j72nnVQ3133.jpg)
![《網(wǎng)絡(luò)安全技術(shù)原理與實(shí)踐》課件第六章 緩沖區(qū)溢出攻擊_第4頁(yè)](http://file4.renrendoc.com/view12/M0A/18/1E/wKhkGWdWenSAcO2iAAM0j72nnVQ3134.jpg)
![《網(wǎng)絡(luò)安全技術(shù)原理與實(shí)踐》課件第六章 緩沖區(qū)溢出攻擊_第5頁(yè)](http://file4.renrendoc.com/view12/M0A/18/1E/wKhkGWdWenSAcO2iAAM0j72nnVQ3135.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
6.1緩沖區(qū)溢出基本概念
緩沖區(qū)是程序運(yùn)行的時(shí)候機(jī)器內(nèi)存中用于存放數(shù)據(jù)的臨時(shí)內(nèi)存空間,它的長(zhǎng)度事先已經(jīng)被程序或操作系統(tǒng)定義好。緩沖區(qū)在系統(tǒng)中的表現(xiàn)形式是多樣的,高級(jí)語(yǔ)言定義的變量、數(shù)組、結(jié)構(gòu)體等在運(yùn)行時(shí)可以說(shuō)都是保存在緩沖區(qū)內(nèi)的,因此所謂緩沖區(qū)可以更抽象地理解為一段可讀寫(xiě)的內(nèi)存區(qū)域。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材6.2緩沖區(qū)溢出攻擊方式目前的緩沖區(qū)溢出攻擊,可以按照以下方法進(jìn)行分類:(1)按照溢出位置分類:棧溢出、堆溢出和BSS段溢出。(2)按照攻擊者欲達(dá)到的目標(biāo)分類:在程序的地址空間里植入適當(dāng)?shù)拇a以及通過(guò)適當(dāng)?shù)爻跏蓟拇嫫骱痛鎯?chǔ)器從而控制程序轉(zhuǎn)移到攻擊者安排的地址空間去執(zhí)行。(3)按照攻擊目標(biāo)分類:攻擊棧中的返回地址、攻擊棧中保存的舊框架指針、攻擊堆或BSS段中的局部變量或參數(shù)、攻擊堆或BSS段中的長(zhǎng)跳轉(zhuǎn)緩沖區(qū)。6.2.1棧溢出攻擊原理
棧是一種數(shù)據(jù)結(jié)構(gòu),是一種先進(jìn)后出的數(shù)據(jù)表。在Windows平臺(tái)下,寄存器“EBP”和“ESP”分別指向當(dāng)前棧幀的棧底和棧頂。函數(shù)調(diào)用時(shí),一般需要經(jīng)過(guò)以下步驟:
1)參數(shù)入棧:參數(shù)按一定的順序壓入系統(tǒng)棧,在StdCall約定的情況下,從右到左的順序壓入系統(tǒng)棧。
2)返回地址入棧:將當(dāng)前代碼區(qū)調(diào)用指令的下一條指令存入棧中,函數(shù)返回時(shí),繼續(xù)執(zhí)行。。
高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材3)指令代碼跳轉(zhuǎn):中央處理器從當(dāng)前的代碼區(qū)跳轉(zhuǎn)到被調(diào)用函數(shù)的入口處。在示例代碼中,就是跳轉(zhuǎn)到function函數(shù)的入口。示例代碼voidfunction(char*p){charout[10];strcpy(out,p);}/*主函數(shù)*/main(){chara[]=”AAAABBBBCC”;function(a);}4)棧楨調(diào)整:首先保存當(dāng)前棧楨,也就是將前棧楨壓入棧,將當(dāng)前棧楨切換到新棧楨,為新的函數(shù)棧楨分配存儲(chǔ)空間。被調(diào)用函數(shù)執(zhí)行完之后,返回到調(diào)用函數(shù)繼續(xù)執(zhí)行,包括以下步驟:
保存返回值:通常將函數(shù)的返回值傳給EAX寄存器。
恢復(fù)棧頂:在堆棧平衡的基礎(chǔ)上,彈出原先保存的EBP值,并修改ESP值,使調(diào)用函數(shù)的棧楨成為系統(tǒng)當(dāng)前棧楨。
指令地址返回:將先前保存的函數(shù)返回地址傳給指令指針寄存器。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材函數(shù)調(diào)用時(shí)棧楨變化圖高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材6.2.2堆溢出攻擊原理
所謂堆,就是由應(yīng)用程序動(dòng)態(tài)分配的內(nèi)存區(qū)。操作系統(tǒng)中,大部分的內(nèi)存區(qū)是在內(nèi)核一級(jí)被動(dòng)態(tài)分配的,但段是由應(yīng)用程序來(lái)分配的,它在編譯的時(shí)候被初始化。非初始化的數(shù)據(jù)段用于存放程序的靜態(tài)變量,這部分內(nèi)存都是被初始化為零的。在大部分的系統(tǒng)包括系統(tǒng)中,段是向上增長(zhǎng)的,向高地址方向增長(zhǎng)。堆管理系統(tǒng)主要有三類操作:堆塊分配,堆塊釋放和堆塊合。堆溢出時(shí)單鏈表在刪除節(jié)點(diǎn)堆溢出攻擊主要有為以下幾類。(1)內(nèi)存變量:修改能夠影響程序執(zhí)行的重要標(biāo)志變量,例如更改身份驗(yàn)證函數(shù)的返回值就可以直接通過(guò)認(rèn)證。(2)代碼邏輯:修改代碼段重要函數(shù)的關(guān)鍵邏輯,有時(shí)可以達(dá)到一定的攻擊效果。(3)函數(shù)返回地址:通過(guò)修改函數(shù)的返回地址能夠改變程序執(zhí)行流程,堆溢出可以利用ArbitraryDwordReset更改函數(shù)返回地址。(4)異常處理機(jī)制:當(dāng)程序產(chǎn)生異常時(shí),Windows執(zhí)行流程會(huì)轉(zhuǎn)入異常處理例程。(5)函數(shù)指針:系統(tǒng)有時(shí)會(huì)使用函數(shù)指針,例如C++中的虛函數(shù)、動(dòng)態(tài)鏈接庫(kù)中的導(dǎo)出函數(shù)等。修改這些函數(shù)指針后,函數(shù)調(diào)用時(shí),就可以成功地劫持進(jìn)程。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材6.2.3流程跳轉(zhuǎn)技術(shù)
緩沖區(qū)溢出的一個(gè)非常關(guān)鍵的步驟就是要實(shí)現(xiàn)進(jìn)程執(zhí)行流程跳轉(zhuǎn),這也正是緩沖區(qū)溢出攻擊的首要目的。只有實(shí)現(xiàn)了流程的跳轉(zhuǎn),才能在被攻擊的主機(jī)上執(zhí)行所植入的代碼,實(shí)現(xiàn)控制被攻擊主機(jī)的目的。要實(shí)現(xiàn)執(zhí)行流程跳轉(zhuǎn),攻擊者可以通過(guò)緩沖區(qū)溢出漏洞修改有關(guān)執(zhí)行流程的管理信息,如返回地址。緩沖區(qū)溢出攻擊示意圖6.3緩沖區(qū)溢出攻擊步驟高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材6.3.1獲取漏洞信息緩沖區(qū)溢出漏洞信息的獲取,主要有兩種途徑,一是自己挖掘,二是從漏洞公告中獲得。當(dāng)前,公布漏洞信息的權(quán)威機(jī)構(gòu)主要有公共漏洞公告(CommonVulnerabilitiesandExposures,CVE)和計(jì)算機(jī)應(yīng)急響應(yīng)小組(ComputerEmergencyResponseTeam,CERT)中獲取漏洞信息,如圖所示。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材6.3.2定位漏洞位置
漏洞位置定位是指確定緩沖區(qū)溢出漏洞中發(fā)生溢出的指令地址(通常稱為溢出點(diǎn)),并可以在跟蹤調(diào)試環(huán)境中查看與溢出點(diǎn)相關(guān)的代碼區(qū)和數(shù)據(jù)區(qū)的詳細(xì)情況,根據(jù)此信息,精心構(gòu)造注入的數(shù)據(jù)。具體來(lái)說(shuō),通常使用以下三種方法。1)如果受影響程序有源代碼,那么通過(guò)調(diào)試程序、確定漏洞所在位置,修改源程序就可修復(fù)漏洞。2)如果存在緩沖區(qū)溢出漏洞的程序,沒(méi)有源代碼,則一般采用反匯編法和探測(cè)法定位漏洞。3)如果能夠獲得廠商提供的漏洞補(bǔ)丁程序,那么一個(gè)有效的辦法是使用補(bǔ)丁比較法。6.3.3更改控制流程高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材
更改控制流程是將系統(tǒng)從正常的控制流程轉(zhuǎn)向到攻擊者設(shè)計(jì)的執(zhí)行流程,其實(shí)質(zhì)就是要執(zhí)行剛剛注入的SHELLCODE代碼。因?yàn)槌绦驁?zhí)行完函數(shù)后會(huì)返回到EIP所指向的地址繼續(xù)執(zhí)行,因此覆蓋返回地址可以控制程序的執(zhí)行流程。該方法是緩沖區(qū)溢出漏洞利用時(shí)用得最多的一種方法。其它的還有改寫(xiě)函數(shù)指針和改寫(xiě)異常處理指針。(1)改寫(xiě)函數(shù)指針。(2)改寫(xiě)異常處理指針。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材6.4緩沖區(qū)溢出攻擊的防范方法
目前有三種基本的方法保護(hù)緩沖區(qū)免受緩沖區(qū)溢出的攻擊和影:強(qiáng)制寫(xiě)正確的代碼的方法基于探測(cè)方法的防御對(duì)緩沖區(qū)溢出漏洞檢測(cè)研究主要分為如下的三類:1)基于源代碼的靜態(tài)檢測(cè)技術(shù)2)基于目標(biāo)代碼的檢瀏技術(shù)3)基于源代碼的動(dòng)態(tài)檢測(cè)技術(shù)基于操作系統(tǒng)底層的防御1)庫(kù)函數(shù)的保護(hù)2)操作系統(tǒng)內(nèi)核補(bǔ)丁保護(hù)(a)NOEXEC技術(shù)(b)ASLR(AddressSpaceLayoutRandomization,地址空間結(jié)構(gòu)隨機(jī)化)1.實(shí)驗(yàn)環(huán)境WindowsXPSP332-bitVisualC++6.0OllyDbg高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材6.5緩沖區(qū)攻擊實(shí)驗(yàn)高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材2.實(shí)驗(yàn)步驟編寫(xiě)具有緩沖區(qū)溢出的程序,程序代碼如下:#include<stdio.h>#include<string.h>#include<windows.h>#defineTEMP_BUFF_LEN8intbof(constchar*buf){ chartemp[TEMP_BUFF_LEN]; strcpy(temp,buf); return0;}
intmain(){ charbuff[]="1234567"; MessageBox(NULL,"SampleBOFTest","SampleBOF",MB_OK); bof(buff); printf("SampleBOFEnd\n"); return0;}編譯上述代碼,生成可執(zhí)行文件。在OllyDbg中打開(kāi)程序,如圖所示。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材
上圖中標(biāo)注了每個(gè)窗口的用途,向下移動(dòng)“反匯編窗口”可以看到程序的主入口函數(shù)“main”函數(shù),以及調(diào)用的“bof”函數(shù),如圖所示。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材
通過(guò)“F2”快捷鍵在“main”和“bof”所在行下斷點(diǎn),利用快捷鍵“F9”執(zhí)行到斷點(diǎn)處,“F8”單步執(zhí)行,如圖所示。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材
在“MessageBox”后下斷點(diǎn),如下圖所示,程序在為調(diào)用“bof”函數(shù)準(zhǔn)備必要參數(shù),并壓入棧中。高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材
接下來(lái),仔細(xì)分析“bof”函數(shù)的調(diào)用過(guò)程,該函數(shù)的全部匯編代碼如下圖所示。
從匯編代碼可以看到,函數(shù)“bof”首先將“EBP”入棧保存,緊接著將“ESP”賦值給“EBP”。在調(diào)用“bof”函數(shù)時(shí),程序?qū)?shù)的地址壓棧保存,而在進(jìn)入“bof”函數(shù)之后,程序?yàn)榱吮4嫔弦粋€(gè)棧的基址,又進(jìn)行了一次壓棧操作,因此“bof”函數(shù)的參數(shù)的地址應(yīng)該位于“ebp+8”的位置處(注意在windows平臺(tái)棧是向下生長(zhǎng)的)。為了調(diào)用“strcpy”函數(shù),程序首先取得“buf”參數(shù)的地址并壓棧,接著獲取“temp”變量的地址并壓棧保存,所有參數(shù)準(zhǔn)備完全,就可以執(zhí)行“strcpy”函數(shù)的調(diào)用了。在調(diào)用“strcpy”函數(shù)之后,程序就執(zhí)行必要的清理工作然后返回,這就是上面示例代碼所做的工作。在調(diào)用“strcpy”函數(shù)時(shí),我們并沒(méi)有檢查“temp”變量是否有足夠的空間來(lái)保存“buf”中的內(nèi)容,若“buf”中的內(nèi)容超出“temp”變量的大小,在“buf”內(nèi)容超過(guò)“temp”變量的空間時(shí)所引發(fā)的錯(cuò)誤。通常情況下,這類錯(cuò)誤會(huì)導(dǎo)致程序的異常退出。緩沖區(qū)溢出利用的實(shí)驗(yàn)代碼如下:#include<stdio.h>#include<string.h>#include<windows.h>#defineTEMP_BUFF_LEN8intbof(constchar*buf){ chartemp[TEMP_BUFF_LEN]; strcpy(temp,buf); return0;}intsbofa(){ MessageBox(NULL, "Congratulations!Youhavethebasicprinciplesofbufferoverflow.", "SampleBOF", MB_OK); return0;}intmain(){ MessageBox(NULL,"SampleBOFTest","SampleBOF",MB_OK); charbuff[]="1234567"; bof(buff); printf("SampleBOFEnd\n"); return0;}
函數(shù)地址上述代碼在原有代碼的基礎(chǔ)上只增加了一個(gè)“sbofa”函數(shù),注意到我們并沒(méi)有調(diào)用該函數(shù),而我們需要做的就是通過(guò)修改“main”中“buff”的值,使得程序執(zhí)行“sbofa”函數(shù)。同樣,使用“OllyDbg”打開(kāi)程序,找到程序的入口函數(shù)及“sbofa”和“bof”函數(shù)。如下圖所示:
從圖中可以看到,函數(shù)在調(diào)用時(shí),通常是由調(diào)用者負(fù)責(zé)保存返回地址,然后被調(diào)用者負(fù)責(zé)保存調(diào)用者的棧幀(EBP),接下來(lái)就是函數(shù)的臨時(shí)變量空間。因此,只要被復(fù)制的內(nèi)容長(zhǎng)度大過(guò)12,就會(huì)覆蓋掉返回地址。知道如何覆蓋返回地址,接下來(lái)就只需要知道“sbofa”函數(shù)的地址就可以了。程序棧結(jié)構(gòu)如下所示修改“buff”的內(nèi)容,編譯運(yùn)行。思考1.從函數(shù)地址圖中可以看到“sbofa”函數(shù)的地址為“0040100F”,為什么“buff”的內(nèi)容卻被修改為"123456781234\x0f\x10\x40"?2.程序棧圖中返回地址之上的內(nèi)容是什么?3.經(jīng)過(guò)上面修改后,能夠執(zhí)行“sbofa”函數(shù),但是程序依然異常退出,這是為什么?高等學(xué)校電子信息類“十三五”規(guī)劃教材應(yīng)用型網(wǎng)絡(luò)與信息安全工程技術(shù)人才培養(yǎng)系列教材4.利用緩沖區(qū)溢出原理
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 能源利用與社會(huì)發(fā)展課件
- 《風(fēng)險(xiǎn)管理課程》課件
- 主題班會(huì)課件交通安全
- 《健康養(yǎng)生中風(fēng)》課件
- 《氣管插管術(shù)概況》課件
- 《華生的行為主義》課件
- 《童話故事拼音》課件
- DB37-T 4394.4-2024 政務(wù)云平臺(tái) 第4部分:系統(tǒng)部署和遷移要求
- DB37-T 4421-2021 淺海模塊化地質(zhì)鉆探平臺(tái)設(shè)計(jì)規(guī)范
- 《詩(shī)歌情感賞析》課件
- 成本合約規(guī)劃培訓(xùn)
- 山東省濟(jì)寧市2025屆高三歷史一輪復(fù)習(xí)高考仿真試卷 含答案
- 五年級(jí)數(shù)學(xué)(小數(shù)乘法)計(jì)算題專項(xiàng)練習(xí)及答案
- 交通法規(guī)教育課件
- 產(chǎn)前診斷室護(hù)理工作總結(jié)
- 6S管理知識(shí)培訓(xùn)課件
- 小學(xué)校長(zhǎng)任期五年工作目標(biāo)(2024年-2029年)
- 醫(yī)院培訓(xùn)課件:《猴痘流行病學(xué)特點(diǎn)及中國(guó)大陸首例猴痘病例調(diào)查處置》
- 氫氣-安全技術(shù)說(shuō)明書(shū)MSDS
- 產(chǎn)科護(hù)士臨床思維能力培養(yǎng)
- 開(kāi)曼群島公司法2024版中文譯本(含2024年修訂主要內(nèi)容)
評(píng)論
0/150
提交評(píng)論