《網絡安全技術原理與實踐》課件第六章 緩沖區(qū)溢出攻擊_第1頁
《網絡安全技術原理與實踐》課件第六章 緩沖區(qū)溢出攻擊_第2頁
《網絡安全技術原理與實踐》課件第六章 緩沖區(qū)溢出攻擊_第3頁
《網絡安全技術原理與實踐》課件第六章 緩沖區(qū)溢出攻擊_第4頁
《網絡安全技術原理與實踐》課件第六章 緩沖區(qū)溢出攻擊_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

6.1緩沖區(qū)溢出基本概念

緩沖區(qū)是程序運行的時候機器內存中用于存放數據的臨時內存空間,它的長度事先已經被程序或操作系統(tǒng)定義好。緩沖區(qū)在系統(tǒng)中的表現形式是多樣的,高級語言定義的變量、數組、結構體等在運行時可以說都是保存在緩沖區(qū)內的,因此所謂緩沖區(qū)可以更抽象地理解為一段可讀寫的內存區(qū)域。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材6.2緩沖區(qū)溢出攻擊方式目前的緩沖區(qū)溢出攻擊,可以按照以下方法進行分類:(1)按照溢出位置分類:棧溢出、堆溢出和BSS段溢出。(2)按照攻擊者欲達到的目標分類:在程序的地址空間里植入適當的代碼以及通過適當地初始化寄存器和存儲器從而控制程序轉移到攻擊者安排的地址空間去執(zhí)行。(3)按照攻擊目標分類:攻擊棧中的返回地址、攻擊棧中保存的舊框架指針、攻擊堆或BSS段中的局部變量或參數、攻擊堆或BSS段中的長跳轉緩沖區(qū)。6.2.1棧溢出攻擊原理

棧是一種數據結構,是一種先進后出的數據表。在Windows平臺下,寄存器“EBP”和“ESP”分別指向當前棧幀的棧底和棧頂。函數調用時,一般需要經過以下步驟:

1)參數入棧:參數按一定的順序壓入系統(tǒng)棧,在StdCall約定的情況下,從右到左的順序壓入系統(tǒng)棧。

2)返回地址入棧:將當前代碼區(qū)調用指令的下一條指令存入棧中,函數返回時,繼續(xù)執(zhí)行。。

高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材3)指令代碼跳轉:中央處理器從當前的代碼區(qū)跳轉到被調用函數的入口處。在示例代碼中,就是跳轉到function函數的入口。示例代碼voidfunction(char*p){charout[10];strcpy(out,p);}/*主函數*/main(){chara[]=”AAAABBBBCC”;function(a);}4)棧楨調整:首先保存當前棧楨,也就是將前棧楨壓入棧,將當前棧楨切換到新棧楨,為新的函數棧楨分配存儲空間。被調用函數執(zhí)行完之后,返回到調用函數繼續(xù)執(zhí)行,包括以下步驟:

保存返回值:通常將函數的返回值傳給EAX寄存器。

恢復棧頂:在堆棧平衡的基礎上,彈出原先保存的EBP值,并修改ESP值,使調用函數的棧楨成為系統(tǒng)當前棧楨。

指令地址返回:將先前保存的函數返回地址傳給指令指針寄存器。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材函數調用時棧楨變化圖高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材6.2.2堆溢出攻擊原理

所謂堆,就是由應用程序動態(tài)分配的內存區(qū)。操作系統(tǒng)中,大部分的內存區(qū)是在內核一級被動態(tài)分配的,但段是由應用程序來分配的,它在編譯的時候被初始化。非初始化的數據段用于存放程序的靜態(tài)變量,這部分內存都是被初始化為零的。在大部分的系統(tǒng)包括系統(tǒng)中,段是向上增長的,向高地址方向增長。堆管理系統(tǒng)主要有三類操作:堆塊分配,堆塊釋放和堆塊合。堆溢出時單鏈表在刪除節(jié)點堆溢出攻擊主要有為以下幾類。(1)內存變量:修改能夠影響程序執(zhí)行的重要標志變量,例如更改身份驗證函數的返回值就可以直接通過認證。(2)代碼邏輯:修改代碼段重要函數的關鍵邏輯,有時可以達到一定的攻擊效果。(3)函數返回地址:通過修改函數的返回地址能夠改變程序執(zhí)行流程,堆溢出可以利用ArbitraryDwordReset更改函數返回地址。(4)異常處理機制:當程序產生異常時,Windows執(zhí)行流程會轉入異常處理例程。(5)函數指針:系統(tǒng)有時會使用函數指針,例如C++中的虛函數、動態(tài)鏈接庫中的導出函數等。修改這些函數指針后,函數調用時,就可以成功地劫持進程。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材6.2.3流程跳轉技術

緩沖區(qū)溢出的一個非常關鍵的步驟就是要實現進程執(zhí)行流程跳轉,這也正是緩沖區(qū)溢出攻擊的首要目的。只有實現了流程的跳轉,才能在被攻擊的主機上執(zhí)行所植入的代碼,實現控制被攻擊主機的目的。要實現執(zhí)行流程跳轉,攻擊者可以通過緩沖區(qū)溢出漏洞修改有關執(zhí)行流程的管理信息,如返回地址。緩沖區(qū)溢出攻擊示意圖6.3緩沖區(qū)溢出攻擊步驟高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材6.3.1獲取漏洞信息緩沖區(qū)溢出漏洞信息的獲取,主要有兩種途徑,一是自己挖掘,二是從漏洞公告中獲得。當前,公布漏洞信息的權威機構主要有公共漏洞公告(CommonVulnerabilitiesandExposures,CVE)和計算機應急響應小組(ComputerEmergencyResponseTeam,CERT)中獲取漏洞信息,如圖所示。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材6.3.2定位漏洞位置

漏洞位置定位是指確定緩沖區(qū)溢出漏洞中發(fā)生溢出的指令地址(通常稱為溢出點),并可以在跟蹤調試環(huán)境中查看與溢出點相關的代碼區(qū)和數據區(qū)的詳細情況,根據此信息,精心構造注入的數據。具體來說,通常使用以下三種方法。1)如果受影響程序有源代碼,那么通過調試程序、確定漏洞所在位置,修改源程序就可修復漏洞。2)如果存在緩沖區(qū)溢出漏洞的程序,沒有源代碼,則一般采用反匯編法和探測法定位漏洞。3)如果能夠獲得廠商提供的漏洞補丁程序,那么一個有效的辦法是使用補丁比較法。6.3.3更改控制流程高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材

更改控制流程是將系統(tǒng)從正常的控制流程轉向到攻擊者設計的執(zhí)行流程,其實質就是要執(zhí)行剛剛注入的SHELLCODE代碼。因為程序執(zhí)行完函數后會返回到EIP所指向的地址繼續(xù)執(zhí)行,因此覆蓋返回地址可以控制程序的執(zhí)行流程。該方法是緩沖區(qū)溢出漏洞利用時用得最多的一種方法。其它的還有改寫函數指針和改寫異常處理指針。(1)改寫函數指針。(2)改寫異常處理指針。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材6.4緩沖區(qū)溢出攻擊的防范方法

目前有三種基本的方法保護緩沖區(qū)免受緩沖區(qū)溢出的攻擊和影:強制寫正確的代碼的方法基于探測方法的防御對緩沖區(qū)溢出漏洞檢測研究主要分為如下的三類:1)基于源代碼的靜態(tài)檢測技術2)基于目標代碼的檢瀏技術3)基于源代碼的動態(tài)檢測技術基于操作系統(tǒng)底層的防御1)庫函數的保護2)操作系統(tǒng)內核補丁保護(a)NOEXEC技術(b)ASLR(AddressSpaceLayoutRandomization,地址空間結構隨機化)1.實驗環(huán)境WindowsXPSP332-bitVisualC++6.0OllyDbg高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材6.5緩沖區(qū)攻擊實驗高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材2.實驗步驟編寫具有緩沖區(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中打開程序,如圖所示。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材

上圖中標注了每個窗口的用途,向下移動“反匯編窗口”可以看到程序的主入口函數“main”函數,以及調用的“bof”函數,如圖所示。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材

通過“F2”快捷鍵在“main”和“bof”所在行下斷點,利用快捷鍵“F9”執(zhí)行到斷點處,“F8”單步執(zhí)行,如圖所示。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材

在“MessageBox”后下斷點,如下圖所示,程序在為調用“bof”函數準備必要參數,并壓入棧中。高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材

接下來,仔細分析“bof”函數的調用過程,該函數的全部匯編代碼如下圖所示。

從匯編代碼可以看到,函數“bof”首先將“EBP”入棧保存,緊接著將“ESP”賦值給“EBP”。在調用“bof”函數時,程序將參數的地址壓棧保存,而在進入“bof”函數之后,程序為了保存上一個棧的基址,又進行了一次壓棧操作,因此“bof”函數的參數的地址應該位于“ebp+8”的位置處(注意在windows平臺棧是向下生長的)。為了調用“strcpy”函數,程序首先取得“buf”參數的地址并壓棧,接著獲取“temp”變量的地址并壓棧保存,所有參數準備完全,就可以執(zhí)行“strcpy”函數的調用了。在調用“strcpy”函數之后,程序就執(zhí)行必要的清理工作然后返回,這就是上面示例代碼所做的工作。在調用“strcpy”函數時,我們并沒有檢查“temp”變量是否有足夠的空間來保存“buf”中的內容,若“buf”中的內容超出“temp”變量的大小,在“buf”內容超過“temp”變量的空間時所引發(fā)的錯誤。通常情況下,這類錯誤會導致程序的異常退出。緩沖區(qū)溢出利用的實驗代碼如下:#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;}

函數地址上述代碼在原有代碼的基礎上只增加了一個“sbofa”函數,注意到我們并沒有調用該函數,而我們需要做的就是通過修改“main”中“buff”的值,使得程序執(zhí)行“sbofa”函數。同樣,使用“OllyDbg”打開程序,找到程序的入口函數及“sbofa”和“bof”函數。如下圖所示:

從圖中可以看到,函數在調用時,通常是由調用者負責保存返回地址,然后被調用者負責保存調用者的棧幀(EBP),接下來就是函數的臨時變量空間。因此,只要被復制的內容長度大過12,就會覆蓋掉返回地址。知道如何覆蓋返回地址,接下來就只需要知道“sbofa”函數的地址就可以了。程序棧結構如下所示修改“buff”的內容,編譯運行。思考1.從函數地址圖中可以看到“sbofa”函數的地址為“0040100F”,為什么“buff”的內容卻被修改為"123456781234\x0f\x10\x40"?2.程序棧圖中返回地址之上的內容是什么?3.經過上面修改后,能夠執(zhí)行“sbofa”函數,但是程序依然異常退出,這是為什么?高等學校電子信息類“十三五”規(guī)劃教材應用型網絡與信息安全工程技術人才培養(yǎng)系列教材4.利用緩沖區(qū)溢出原理

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論