freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

緩沖區(qū)溢出攻擊的分析及防范策略-文庫吧資料

2024-09-12 08:48本頁面
  

【正文】 他們通常必須把代碼做為參數(shù)。 代碼植入和緩沖區(qū)溢出不一定要在一次動作內完成,攻擊者可以在一個緩沖區(qū)內放置代碼(這個時候并不能溢出緩沖區(qū)),然后攻擊者通過溢出另一個緩沖區(qū)來轉移程序的指 針。 3.綜合代碼植入和流程控制技術 最簡單和常見的溢出緩沖區(qū)攻擊類型就是在一個字符串里綜合了代碼植入和激活記錄。像函數(shù)指針一樣, longjmp緩沖區(qū)能夠指向任何地方,所以攻擊者所要做的就是找到一個可供溢出的緩沖區(qū)。 ( 3) 長跳轉緩沖區(qū) 在 C 語言中包含了一個簡單的檢驗 /恢復系統(tǒng),稱為 ―setjmp/longjmp‖,意思是在檢驗點設定 ―setjmp(buffer)‖,用 longjmp(buffer)―來恢復檢驗點。 ( 2) 函數(shù)指針 ―Void(*foo)()‖中聲明了一個返回值為 Void函數(shù)指針的變量 foo。攻擊者通過溢出這些自動變量 ,使這個返回地址指向攻擊代碼,這樣就通過改變程序的返回地址,當函數(shù)調用結束時,程序跳轉到攻擊者設定的地址,而不是原先的地址。這類程序不同的地方就是程序空間的突破和內存空間的定位不同。比如起初的 Morris Worm(莫爾斯蠕蟲)就是使用了 fingerd程序的緩沖區(qū)溢出,擾亂 fingerd要執(zhí)行的文件的名字。 這里 的分類基準是攻擊者所尋求的緩沖區(qū)溢出的程序空間類型。其基本特點就是給沒有邊界檢查或有其他弱點的程序送出一個超長的緩沖區(qū),以達到擾亂程序正常執(zhí)行順序的目的。比如,共及代碼要求執(zhí)行 ―exec(?bin/sh‘)‖,而在 libc 庫中的代碼執(zhí)行―exec(arg)‖,其中 arg是一個指向字符串的指針參數(shù),那么攻擊者只要把傳入的參數(shù)指針改向指向 ―/bin/sh‖,然后調轉到 libc 庫中相應的指令序列即可。在這里攻擊者用被攻擊程序的緩沖區(qū)來存放攻擊代碼,具體方式有以下兩種差別: a.攻擊者不必為達到此目的而溢出任何緩沖區(qū),可以找到足夠的空間來放置攻擊代碼; b.緩沖區(qū)可設在任何地方:堆棧(存放自動變量)、堆(動態(tài)分配區(qū))和靜態(tài)數(shù)據(jù)區(qū)(初始化或未初始化的數(shù)據(jù))。 1.在程序的地址空間里安排適當?shù)拇a有兩種在被攻擊程序地址空間里安排攻擊代碼的方法: ( 1) 植入法: 攻擊者向被攻擊的程序輸入一個字符串,程序會把這個字符串放到緩沖區(qū)里。但并不總是這樣,為了達到這個目的,攻擊者必須達到如下兩個目標: l 在程序的地址空間里安排適當?shù)拇a l 通過適當?shù)爻跏蓟拇嫫骱痛鎯ζ?,讓程序跳轉到安排好的地址空間執(zhí)行。 2. 2緩沖區(qū)溢出攻擊的類型 緩沖區(qū)溢出的目的在于擾亂具有某些特權運行程序的功能,這樣就可以讓攻擊者取得程序的控制權,如果該程序具有足夠的權限,那么整個主機甚至服務器就被控制了。比如,可以把 shellcode 放在環(huán)境變量中,并把環(huán)境變量傳入到要攻擊的程序中,就可以對有緩沖區(qū)溢出漏洞的程序進行攻擊。當一個進程啟動時,環(huán)境變量被映射到進程堆 棧空間的頂端。 ( 4)被攻擊的緩沖區(qū)很小的情況 當緩沖區(qū)太小,可能使 NOP 部分或 shellcode 部分覆蓋返回地址 ret,導致緩沖區(qū)起址到返回地址的距離不足以容納 shellcode,這樣設定的跳轉地址就沒有用上,攻擊代碼不能被正確執(zhí)行。 ( 3) 攻擊代碼中字節(jié)代碼為零的消除 Unix的程序中大量使用了 strcpy函數(shù), shellcode 中含有 0x00,由 于通常是攻擊一個字符緩沖區(qū),如果攻擊代碼中含有 0,則它會被當成字符串的結尾處理,于是攻擊代碼被截斷。但顯然這不是一種效率高的方法。 } void main(void) { printf(―0x%x\n‖,get_esp())。 Unix環(huán)境下,每個進程啟動時的初始堆棧的虛存位置時一樣的。這就是由于返回地址不正確引起的。 ( 2) 猜測被溢出的緩沖區(qū)的位置 有了 shellcode 還不夠,在溢出一個緩沖區(qū)時,還必須使被溢出的返回地址正確指向 shellcode。 Shellcode 的結構如下:( J 代表 JMP 指令, C 代表 CALL指令, S代表啟動 Shell的代碼, s 代表串 ―/bin/sh‖,A 指向 Shellcode 的起始地址)。 這里要解決的一個問題是,無論 Shellcode 被裝置到內存的什么位置,字符串 ―/bin/sh‖的地址都可以得到。 exit(0)。 name[1]=NULL。高級語言程序如下: BR p include void main() { char *name[2]。 這里討論一個現(xiàn)實中的 Unix 環(huán)境下,利用緩沖區(qū)溢出的到一個 Shell的行攻擊方法的實現(xiàn)。 f(shellentry)。 shellentry[1]=(int)shellcode。 } void main() { int shellentry[3]。 void f(char *src) { char dest[4]。 exec (―/bin/sh‖,str,0)。 } 堆棧及變量的位置如圖 2所示: src l 返回地址 ebp dest[3] dest[2] dest[1] dest[0] 高地址 低地址 圖 2 堆棧及位置的變量圖 從堆棧結構可以看到,當用精心準備好的地址改寫返回地址時,即可把控制流程引向自己的代碼。對 C 語言來說,調用函數(shù)的語句 f(arg1,arg2,…,argn) 被翻譯為如下指令: push argn ……. push arg1 push n call f 而函數(shù)的入口則翻譯為如下入口指令(在 Intel X86上) pushl ebp mov esp,ebp sub esp,m m為 f 的局部變量的空間大小 在 Intel X86體系結構上,堆棧是從上向下生長的,因此調用以上函數(shù)時的堆棧結構如圖 1所示: arg1 …… argn n 返回地址 ebp 局部變量 高地址 低地址 圖 1 堆棧結構圖 例如,調用以下函數(shù)時 Void f(char *src) { char dest[4]。 再看看堆棧的結構,由于棧式內存分配具有一條指令即可為子程序分配全部局部變量的存儲空間的特點,分配和去配的開銷極低,高級語言通常在堆棧上分配局部存儲空間。 } 在函數(shù) function 中,將一個 128 字節(jié)長度的字符串拷貝到只有 16 字節(jié)長的局部緩沖區(qū)中。 function(buffer)。 I++) buffer[I]=A。 for(I=0。 } Void main() { int I。 這里有一個直觀的緩沖區(qū)溢出的小例子: void function(char *str) { char buffer[16]。當函數(shù)或過程被調用的時候,在堆棧中被保留下來的指令指針將被作為返回地址( RET)。當 C 程序調用函數(shù)的時候,首先將參數(shù)壓入堆棧,然 后保存指令寄存器( IP)中的內容作為返回地址( RET),放入堆棧的是地址寄存器( FP),然后把當前的棧指針( SP)拷貝到 FP,作為新的基地址,并為本地變量留出一定的空間,把 SP減去適當?shù)臄?shù)值。數(shù)據(jù)段放的是程序中的靜態(tài)數(shù)據(jù)。一個程序在內存中通常分為程序段、數(shù)據(jù)段和堆棧三個部分。通常,分配到堆的數(shù)據(jù)是那些 malloc()或新建時獲得的數(shù)據(jù),而 分配到堆棧的數(shù)據(jù)一般包括非靜態(tài)的局部變量和所有按值傳遞的參數(shù)。為了避免這種利用程序設計語言漏洞而對系統(tǒng)的惡意攻擊,我們必須要仔細分析緩沖區(qū)溢出攻擊的產(chǎn)生及類型,從而做出相應的防范策略。 緩沖區(qū)溢出對系統(tǒng)的安全性帶來很大的威脅,比如向程序的有限空間的緩沖區(qū)中置入過長的字符串,造成緩沖區(qū)溢出,從而破壞程序的堆棧,
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1