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

正文內(nèi)容

緩沖區(qū)溢出攻擊的分析及防范策略(編輯修改稿)

2024-10-10 08:48 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 存位置時(shí)一樣的。利用下面的程序可以近似的得到這個(gè)位置(在環(huán)境變量不同、傳入的命令行參數(shù)不同時(shí),這個(gè)值略有變動(dòng)): unsigned long get_esp(void) { _asm_(―movl %esp,%eax‖)。 } void main(void) { printf(―0x%x\n‖,get_esp())。 } 通常,進(jìn)程運(yùn)行時(shí)向堆棧中寫入的數(shù)據(jù)不會(huì)超過(guò)數(shù)百個(gè)字節(jié)或數(shù)千個(gè)字節(jié),有了這個(gè)起始地址,用簡(jiǎn)單的一個(gè)個(gè)嘗試的方法也是可以攻擊的。但顯然這不是一種效率高的方法。解決的辦法是在緩沖區(qū)前端填充幾百字節(jié) NOP 指令,只要猜測(cè)的地址落在 NOP 指令序列中,仍可以執(zhí)行 shellcode,從而成倍地增加猜中的機(jī)會(huì)。 ( 3) 攻擊代碼中字節(jié)代碼為零的消除 Unix的程序中大量使用了 strcpy函數(shù), shellcode 中含有 0x00,由 于通常是攻擊一個(gè)字符緩沖區(qū),如果攻擊代碼中含有 0,則它會(huì)被當(dāng)成字符串的結(jié)尾處理,于是攻擊代碼被截?cái)?。消除的方法是?duì)代碼做適當(dāng)?shù)淖儞Q,因此在這里需要使用一些匯編程序設(shè)計(jì)技巧,把 shellcode 轉(zhuǎn)換成不含 0x00 的等價(jià)代碼。 ( 4)被攻擊的緩沖區(qū)很小的情況 當(dāng)緩沖區(qū)太小,可能使 NOP 部分或 shellcode 部分覆蓋返回地址 ret,導(dǎo)致緩沖區(qū)起址到返回地址的距離不足以容納 shellcode,這樣設(shè)定的跳轉(zhuǎn)地址就沒有用上,攻擊代碼不能被正確執(zhí)行。 一個(gè)方法就是利用環(huán)境變量。當(dāng)一個(gè)進(jìn)程啟動(dòng)時(shí),環(huán)境變量被映射到進(jìn)程堆 ??臻g的頂端。這樣就可以把攻擊代碼( NOP 串 +Shellcode)放到一個(gè)環(huán)境變兩中,而在被溢出的緩沖區(qū)中填上攻擊代碼的地址。比如,可以把 shellcode 放在環(huán)境變量中,并把環(huán)境變量傳入到要攻擊的程序中,就可以對(duì)有緩沖區(qū)溢出漏洞的程序進(jìn)行攻擊。利用這樣方法,還可以設(shè)計(jì)很大的攻擊代碼。 2. 2緩沖區(qū)溢出攻擊的類型 緩沖區(qū)溢出的目的在于擾亂具有某些特權(quán)運(yùn)行程序的功能,這樣就可以讓攻擊者取得程序的控制權(quán),如果該程序具有足夠的權(quán)限,那么整個(gè)主機(jī)甚至服務(wù)器就被控制了。一般而言,攻擊者攻擊 root程序,然后執(zhí)行類 似 ―exec(sh)‖的執(zhí)行代碼來(lái)獲得 root的 shell。但并不總是這樣,為了達(dá)到這個(gè)目的,攻擊者必須達(dá)到如下兩個(gè)目標(biāo): l 在程序的地址空間里安排適當(dāng)?shù)拇a l 通過(guò)適當(dāng)?shù)爻跏蓟拇嫫骱痛鎯?chǔ)器,讓程序跳轉(zhuǎn)到安排好的地址空間執(zhí)行。 我們可以根據(jù)這兩個(gè)目標(biāo)來(lái)對(duì)緩沖區(qū)溢出攻擊進(jìn)行分類。 1.在程序的地址空間里安排適當(dāng)?shù)拇a有兩種在被攻擊程序地址空間里安排攻擊代碼的方法: ( 1) 植入法: 攻擊者向被攻擊的程序輸入一個(gè)字符串,程序會(huì)把這個(gè)字符串放到緩沖區(qū)里。這個(gè)字符串所包含的數(shù) 據(jù)是可以在這個(gè)被攻擊的硬件平臺(tái)運(yùn)行的指令流。在這里攻擊者用被攻擊程序的緩沖區(qū)來(lái)存放攻擊代碼,具體方式有以下兩種差別: a.攻擊者不必為達(dá)到此目的而溢出任何緩沖區(qū),可以找到足夠的空間來(lái)放置攻擊代碼; b.緩沖區(qū)可設(shè)在任何地方:堆棧(存放自動(dòng)變量)、堆(動(dòng)態(tài)分配區(qū))和靜態(tài)數(shù)據(jù)區(qū)(初始化或未初始化的數(shù)據(jù))。 ( 2) 利用已經(jīng)存在的代碼 有時(shí)候攻擊者所要的代碼已經(jīng)存在于被攻擊的程序中了,攻擊者所要做的只是對(duì)代碼傳遞一些參數(shù),然后使程序跳轉(zhuǎn)到想要執(zhí)行的代碼那里。比如,共及代碼要求執(zhí)行 ―exec(?bin/sh‘)‖,而在 libc 庫(kù)中的代碼執(zhí)行―exec(arg)‖,其中 arg是一個(gè)指向字符串的指針參數(shù),那么攻擊者只要把傳入的參數(shù)指針改向指向 ―/bin/sh‖,然后調(diào)轉(zhuǎn)到 libc 庫(kù)中相應(yīng)的指令序列即可。 2.控制程序轉(zhuǎn)移到攻擊代碼的方法 所有這些方法都是在試圖改變程序的執(zhí)行流程,使之跳轉(zhuǎn)到攻擊代碼。其基本特點(diǎn)就是給沒有邊界檢查或有其他弱點(diǎn)的程序送出一個(gè)超長(zhǎng)的緩沖區(qū),以達(dá)到擾亂程序正常執(zhí)行順序的目的。通過(guò)溢出一個(gè)緩沖區(qū),攻擊者可以用幾乎暴力的方法(窮盡法)改寫相鄰 的程序空間面直接跳過(guò)系統(tǒng)的檢查。 這里 的分類基準(zhǔn)是攻擊者所尋求的緩沖區(qū)溢出的程序空間類型。原則上可以是任意的空間。比如起初的 Morris Worm(莫爾斯蠕蟲)就是使用了 fingerd程序的緩沖區(qū)溢出,擾亂 fingerd要執(zhí)行的文件的名字。實(shí)際上許多的緩沖區(qū)溢出是用暴力的方法來(lái)尋求改變程序指針的。這類程序不同的地方就是程序空間的突破和內(nèi)存空間的定位不同。一般來(lái)說(shuō),控制程序轉(zhuǎn)移到攻擊代碼的方法有以下幾種: ( 1) 函數(shù)返回地址 每當(dāng)一個(gè)函數(shù)調(diào)用發(fā)生時(shí),調(diào)用者會(huì)在堆棧中留下函數(shù)返回地址,它包含了函數(shù)結(jié)束時(shí)返回的地址。攻擊者通過(guò)溢出這些自動(dòng)變量 ,使這個(gè)返回地址指向攻擊代碼,這樣就通過(guò)改變程序的返回地址,當(dāng)函數(shù)調(diào)用結(jié)束時(shí),程序跳轉(zhuǎn)到攻擊者設(shè)定的地址,而不是原先的地址。這類的緩沖區(qū)進(jìn)出被稱為 ―stack smashing attack‖,是目前常用的緩沖區(qū)溢出攻擊方式。 ( 2) 函數(shù)指針 ―Void(*foo)()‖中聲明了一個(gè)返回值為 Void函數(shù)指針的變量 foo。函數(shù)指針定位任何地址空間,所以攻擊者只需在任何空間內(nèi)的函數(shù)指針附近找到一個(gè)能夠溢出的緩沖區(qū),然后溢出來(lái)改變函數(shù)指針,當(dāng)程序通過(guò)函數(shù)指針調(diào)用函數(shù)時(shí),程序的流程就會(huì)發(fā)生改變而實(shí)現(xiàn)攻擊者的 目的。 ( 3) 長(zhǎng)跳轉(zhuǎn)緩沖區(qū) 在 C 語(yǔ)言中包含了一個(gè)簡(jiǎn)單的檢驗(yàn) /恢復(fù)系統(tǒng),稱為 ―setjmp/longjmp‖,意思是在檢驗(yàn)點(diǎn)設(shè)定 ―setjmp(buffer)‖,用 longjmp(buffer)―來(lái)恢復(fù)檢驗(yàn)點(diǎn)。然而,如果攻擊時(shí)能夠進(jìn)入緩沖區(qū)的空間,那么 ―longjmp(buffer)‖實(shí)際上是跳轉(zhuǎn)到攻擊者的代碼。像函數(shù)指針一樣, longjmp緩沖區(qū)能夠指向任何地方,所以攻擊者所要做的就是找到一個(gè)可供溢出的緩沖區(qū)。一個(gè)典型的例子就是 Perl ,攻擊者首先進(jìn)入用來(lái)恢復(fù)緩沖區(qū)溢出的 longjmp緩沖區(qū),然后誘導(dǎo)進(jìn)入恢復(fù)模式,這樣就使 Perl的解釋器跳轉(zhuǎn)到攻擊代碼上了。 3.綜合代碼植入和流程控制技術(shù) 最簡(jiǎn)單和常見的溢出緩沖區(qū)攻擊類型就是在一個(gè)字符串里綜合了代碼植入和激活記錄。攻擊者定位一個(gè)可供溢出的自動(dòng)變量,然后向程序傳遞一個(gè)很大的字符串,在引發(fā)緩沖區(qū)溢出改變激活記錄的同時(shí)植入了代碼(因?yàn)?C 語(yǔ)言程序員通常在習(xí)慣上只為用戶和參數(shù)開辟很小的緩沖區(qū))。 代碼植入和緩沖區(qū)溢出不一定要在一次動(dòng)作內(nèi)完成,攻擊者可以在一個(gè)緩沖區(qū)內(nèi)放置代碼(這個(gè)時(shí)候并不能溢出緩沖區(qū)),然后攻擊者通過(guò)溢出另一個(gè)緩沖區(qū)來(lái)轉(zhuǎn)移程序的指 針。這樣的方法一般用來(lái)解決可供溢出的緩沖區(qū)不夠大(不能放下全部的代碼)。如果攻擊者試圖使用已經(jīng)常駐的代碼而不是從外部植入代碼,他們通常必須把代碼做為參數(shù)。舉例說(shuō)明,在 libc(幾乎所有的 C 程序都用它來(lái)連接)中的一部分代碼段會(huì)執(zhí)行 ―exec(something)‖,其中的 something就是參數(shù),攻擊者使用緩沖區(qū)溢出改變程序的參數(shù),然后利用另一個(gè)緩沖區(qū)溢出,使程序指針指向 libc 中的特定的代碼段。 三 緩沖區(qū)溢出攻擊的防范策略 緩沖區(qū)溢出攻擊的防范是和整個(gè)系統(tǒng)的安全性分不開的。如果整個(gè)網(wǎng)絡(luò)系 統(tǒng)的安全設(shè)計(jì)很差,則遭受緩沖區(qū)溢出攻擊的機(jī)會(huì)也大大增加。針對(duì)緩沖區(qū)溢出,我們可以采取多種防范策略。 1.系統(tǒng)管理上的防范策略 ( 1) 關(guān)閉不需要的特權(quán)程序 由于緩沖區(qū)溢出只有在獲得更高的特權(quán)時(shí)才有意義,所以帶有特權(quán)的 Unix 下的 suid程序和 Windows 下由系統(tǒng)管理員啟動(dòng)的服務(wù)進(jìn)程都經(jīng)常是緩沖區(qū)溢出攻擊的目標(biāo)。這時(shí)候,關(guān)閉一些不必要的特權(quán)程序就可以降低被攻擊的風(fēng)險(xiǎn)。如 Solaris 下的 fdformat 是個(gè)有緩沖區(qū)溢出漏洞的 suid程序,因?yàn)檫@個(gè)格式化軟盤的命令用的較少,最直接的措施是去掉這個(gè)程序或 者去掉 suid位。當(dāng)有緩沖區(qū)溢出漏洞的程序還沒有補(bǔ)丁時(shí),就可以用這種方法。 ( 2) 及時(shí)給程序漏洞打補(bǔ)丁 這是漏洞出現(xiàn)后最迅速有效的補(bǔ)救措
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1