




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1、前言、前言1.1本課題的研究意義本課題的研究意義1.2緩沖區(qū)溢出國內(nèi)外研究現(xiàn)狀緩沖區(qū)溢出國內(nèi)外研究現(xiàn)狀2、緩沖區(qū)溢出原理概述緩沖區(qū)溢出原理概述2.1、緩沖區(qū)溢出的概念緩沖區(qū)溢出的概念2.2、堆棧的定義堆棧的定義2.3 緩沖區(qū)溢出攻擊原理緩沖區(qū)溢出攻擊原理2.4 緩沖區(qū)溢出攻擊方式緩沖區(qū)溢出攻擊方式2.4.1在程序的地址空間里安排適當(dāng)?shù)拇a的方法在程序的地址空間里安排適當(dāng)?shù)拇a的方法2.4.2控制程序轉(zhuǎn)移到攻擊代碼的方法控制程序轉(zhuǎn)移到攻擊代碼的方法2.5緩沖區(qū)溢出影響及危害緩沖區(qū)溢出影響及危害3、緩沖區(qū)溢出的防御方法、緩沖區(qū)溢出的防御方法3.1、寫正確的代碼的方法、寫正確的代碼的方法3.2、
2、通過操作系統(tǒng)使得緩沖區(qū)不可執(zhí)行,從而阻止攻擊者植入攻擊代碼、通過操作系統(tǒng)使得緩沖區(qū)不可執(zhí)行,從而阻止攻擊者植入攻擊代碼3.3、利用編譯器的數(shù)組邊界檢查來實現(xiàn)緩沖區(qū)的保護、利用編譯器的數(shù)組邊界檢查來實現(xiàn)緩沖區(qū)的保護3.4、在程序指針失效前進行完整性檢查、在程序指針失效前進行完整性檢查4、總結(jié)與展望總結(jié)與展望4.1全文總結(jié)全文總結(jié)4.2 展望展望5、參考文獻、參考文獻 主要目錄主要目錄本課題的研究意義 隨著信息與網(wǎng)絡(luò)技術(shù)的發(fā)展,以及這些技術(shù)在軍事領(lǐng)域的不斷滲透,計算機網(wǎng)絡(luò)已成為連接未來信息化戰(zhàn)場的樞紐。對計算機的攻擊,能夠獲得大量寶貴的情報以及達到其它武器系統(tǒng)所不能及的效果。因此對以計算機為基礎(chǔ)的
3、網(wǎng)絡(luò)攻擊與防護就自然成為軍事領(lǐng)域密切關(guān)注的問題。近年來,緩沖區(qū)溢出漏洞的廣泛性和破壞性受到國內(nèi)外信息安全研究領(lǐng)域的極切關(guān)注。從1988年CERT(計算機緊急響應(yīng)小組)成立以來,統(tǒng)計到的安全威脅事件每年以指數(shù)增長。緩沖區(qū)溢出攻擊作為網(wǎng)絡(luò)攻擊一種主要形式占所有系統(tǒng)攻擊總數(shù)的80以上1。這種緩沖區(qū)溢出漏洞可以發(fā)生在不同的操作系統(tǒng)以及不同的應(yīng)用程序上。 緩沖區(qū)溢出攻擊是黑客攻擊的主要手段,給網(wǎng)絡(luò)信息安全帶來了越來越大的危害。已有的防御手段研究相對滯后,目前國內(nèi)外的研究大多集中在某個具體漏洞的利用與防范上,缺乏全面的研究。并且現(xiàn)有的緩沖區(qū)溢出防御手段也存在諸多不足之處。論文主要是對緩沖區(qū)溢出攻擊的原理分
4、析與防范進行深入研究。論文首先介紹了緩沖區(qū)和堆棧的基本概念,研究并總結(jié)了緩沖區(qū)溢出的原理和過程,并介紹了一些常用的攻擊方法。在此基礎(chǔ)上,論文研究并總結(jié)了目前防御緩沖區(qū)溢出攻擊的一些常用方法,主要從主客觀兩方面來討論。主觀方面,主要是要提高程序員編寫代碼的質(zhì)量,形成良好的編程風(fēng)格;客觀方面,主要是從系統(tǒng)和軟件做一些相關(guān)的檢查和優(yōu)化。緩沖區(qū)溢出國內(nèi)外研究現(xiàn)狀緩沖區(qū)溢出攻擊作為一種主流的攻擊手法,早在20世紀(jì)80年代,國外就有人開始討論溢出攻擊,例如1988年的Morris蠕蟲,利用的攻擊方法之一就是Fingerd的緩沖區(qū)溢出,這次蠕蟲攻擊導(dǎo)致全球6000多臺機器被感染,損失巨大,由此,緩沖區(qū)溢出問
5、題逐漸得到人們的重視。1989年,Spafford提交了一份分析報告,描述了VAX機上的BSD版unix的Fingerd的緩沖區(qū)溢出程序的技術(shù)細節(jié),從而引起了一部分安全人士對這個研究領(lǐng)域的重視。1996年AlephOne詳細的描述了Linux系統(tǒng)中棧的結(jié)構(gòu)和如何利用基于棧的緩沖區(qū)溢出。1997年,Smith綜合以前的文章,提供了如何在各種Unix家庭中寫緩沖區(qū)溢出Exploit更詳細的指導(dǎo)原則。1998年來自“Cult of the Dead cow”的Dildog詳細地介紹了如何利用Windows的溢出,他提出了利用棧指針的方法來完成跳轉(zhuǎn),返回固定的指向地址,不論是在出問題的程序中還是在動態(tài)
6、鏈接庫中,該固定地址都包含了用來利用棧指針完成跳轉(zhuǎn)的匯編指令,這是緩沖區(qū)溢出利用一個重大的進步。 在國內(nèi),這方面技術(shù)的研究起步較晚,2000年左右,才有部分安全人士和黑客開始研究這個領(lǐng)域,最早中聯(lián)綠盟的袁仁廣做過一些工作,他使用暴力探索的辦法來獲取kernel32.dll的基址,代碼量太多,也不夠準(zhǔn)確,2003年安全焦點峰會上Flashsky做了關(guān)于堆溢出的演講3,總結(jié)了堆溢出漏洞利用的方法。2005年San寫了關(guān)于如何溢出Windows CE的文章4,Windows CE是PDA和手機上使用非常廣泛的嵌入式操作系統(tǒng),該文介紹了Windows CE內(nèi)存管理,進程等基礎(chǔ)知識,初步討論了Windo
7、ws CE的緩沖區(qū)溢出問題,只是對Shellcode的解碼效率不高。 緩沖區(qū)溢出原理概述 緩沖區(qū)溢出的概念 緩沖區(qū)是內(nèi)存中存放數(shù)據(jù)的地方,一般來說,它是“包含相同數(shù)據(jù)類型的實例的一個連續(xù)計算機內(nèi)存塊”5,它保存了給定類型的數(shù)據(jù)。在C和C+中,緩沖區(qū)通常是使用數(shù)組和諸如malloc()和new這樣的內(nèi)存分配例程來實現(xiàn)的。最常見的緩沖區(qū)種類是簡單的字符數(shù)組。 緩沖區(qū)溢出是指當(dāng)計算機向緩沖區(qū)內(nèi)填充數(shù)據(jù)位數(shù)時超過了緩沖區(qū)本身的容量,使得溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上,理想的情況是程序檢查數(shù)據(jù)長度并不允許輸入超過緩沖區(qū)長度的字符,但是絕大多數(shù)程序都會假設(shè)數(shù)據(jù)長度總是與所分配的儲存空間相匹配,這就為緩沖區(qū)溢出
8、埋下隱患。操作系統(tǒng)所使用的緩沖區(qū)又被稱為“堆?!?。在各個操作進程之間,指令會被臨時儲存在“堆?!碑?dāng)中,“堆?!币矔霈F(xiàn)緩沖區(qū)溢出。比如這樣或許你還不明白?堆棧的定義 堆棧是內(nèi)存中的一個連續(xù)的塊。一個叫堆棧指針的寄存器(SP)指向堆棧的棧頂,堆棧的底部是一個固定地址。堆棧有一個特點就是,后進先出。也就是說,后放入的數(shù)據(jù)第一個取出。它支持兩個操作,PUSH和POP。PUSH是將數(shù)據(jù)放到棧的頂端,POP是將棧頂?shù)臄?shù)據(jù)取出。在高級語言中,程序函數(shù)調(diào)用和函數(shù)中的臨時變量都用到堆棧,參數(shù)的傳遞和返回值時也用到了堆棧,通常對局部變量的引用是通過給出它們對SP的偏移量來實現(xiàn)的。另外還有一個基址指針(FP,在
9、Intel芯片中是BP),許多編譯器實際上是用它來引用本地變量和參數(shù)的。通常,參數(shù)的相對FP的偏移是正的,局部變量是負的。當(dāng)程序中發(fā)生函數(shù)調(diào)用時,計算機做如下操作:首先把參數(shù)壓入堆棧;然后保存指令寄存器(IP)中的內(nèi)容,作為返回地址(RET);第三個放入堆棧的是基址寄存器(FP);然后把當(dāng)前的棧指針(SP) 拷貝到FP,作為新的基地址;最后為本地變量留出一定空間,把SP減去適當(dāng)?shù)臄?shù)值。 緩沖區(qū)溢出攻擊原理 緩沖區(qū)攻擊指的是一種常見且危害很大的系統(tǒng)攻擊手段,通過向程序的緩沖區(qū)寫入超出其長度的內(nèi)容,造成緩沖區(qū)的溢出,從而破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其他的指令,以達到攻擊的目的。當(dāng)正常的使用者操作
10、程序的時候,所進行的操作一般不會超出程序的運行范圍,數(shù)據(jù)被添加到分配給該緩沖區(qū)的內(nèi)存塊之外,會發(fā)生緩沖區(qū)溢出,這時候就會出現(xiàn)數(shù)據(jù)泄漏或侵占了其它的數(shù)據(jù)空間。緩沖區(qū)溢出的攻擊原理就是越過緩沖區(qū)長度界限向程序中輸入超出其常規(guī)長度的內(nèi)容,造成緩沖區(qū)的溢出從而破壞程序的堆棧,使程序運行出現(xiàn)特殊的問題轉(zhuǎn)而執(zhí)行其它指令。 一般來說,單單的緩沖區(qū)溢出,并不會產(chǎn)生安全問題,如果將溢出送到能夠以root權(quán)限或其它超級權(quán)限運行命令的區(qū)域去執(zhí)行某些代碼或者運行一個shell的時候,該程序就是以超級用戶的權(quán)限控制了計算機。緩沖區(qū)溢出攻擊方式緩沖區(qū)溢出攻擊方式 緩沖區(qū)溢出攻擊的目的在于擾亂具有某些特權(quán)運行的程序的功能,
11、這樣可以使得攻擊者取得程序的控制權(quán),如果該程序具有足夠的權(quán)限,那么整個主機就被控制了。一般而言,攻擊者攻擊root程序,然后執(zhí)行類似“exec(sh)”的執(zhí)行代碼來獲得root權(quán)限的shell。為了達到這個目的,攻擊者必須達到如下的兩個目標(biāo): (1)在程序的地址空間里安排適當(dāng)?shù)拇a。 (2)通過適當(dāng)?shù)某跏蓟拇嫫骱蛢?nèi)存,讓程序跳轉(zhuǎn)到入侵者安排的地址空間執(zhí)行。 緩沖區(qū)溢出攻擊方式可以分為兩種,一種在程序的地址空間里安排適當(dāng)?shù)拇a的方法;另一種控制程序轉(zhuǎn)移到攻擊代碼的方法。論文簡介這兩種攻擊的方式。在程序的地址空間里安排適當(dāng)?shù)拇a的方法 有兩種在被攻擊程序地址空間里安排攻擊代碼的方法: (1)、植
12、入法: 攻擊者向被攻擊的程序輸入一個字符串,程序會把這個字符串放到緩沖區(qū)里。這個字符串包含的資料是可以在這個被攻擊的硬件平臺上運行的指令序列。在這里,攻擊者用被攻擊程序的緩沖區(qū)來存放攻擊代碼。緩沖區(qū)可以設(shè)在任何地方:堆棧(stack,自動變量)、堆(heap,動態(tài)分配的內(nèi)存區(qū))和靜態(tài)資料區(qū)。 (2)、利用已經(jīng)存在的代碼: 有時,攻擊者想要的代碼已經(jīng)在被攻擊的程序中了,攻擊者所要做的只是對代碼傳遞一些參數(shù)。比如,攻擊代碼要求執(zhí)行“exec (“/bin/sh”)”,而在libc庫中的代碼執(zhí)行“exec (arg)”,其中arg使一個指向一個字符串的指針參數(shù),那么攻擊者只要把傳入的參數(shù)指針改向指向
13、”/bin/sh”。 攻擊方式圖示攻擊方式圖示控制程序轉(zhuǎn)移到攻擊代碼的方法 分類的基準(zhǔn)是攻擊者所尋求的緩沖區(qū)溢出的程序空間類型。原則上是可以任意的空間,實際上,許多的緩沖區(qū)溢出都是用暴力的方法來尋求改變程序指針的。這類程序的不同之處就是程序空間的突破和內(nèi)存空間的定位不同。主要有以下三種: 1、活動紀(jì)錄(Activation Records): 每當(dāng)一個函數(shù)調(diào)用發(fā)生時,調(diào)用者會在堆棧中留下一個活動紀(jì)錄,它包含了函數(shù)結(jié)束時返回的地址。攻擊者通過溢出堆棧中的自動變量,使返回地址指向攻擊代碼。通過改變程序的返回地址,當(dāng)函數(shù)調(diào)用結(jié)束時,程序就跳轉(zhuǎn)到攻擊者設(shè)定的地址,而不是原先的地址。這類的緩沖區(qū)溢出被稱
14、為堆棧溢出攻擊(Stack Smashing Attack),是目前最常用的緩沖區(qū)溢出攻擊方式。2、函數(shù)指針(Function Pointers): 函數(shù)指針可以用來定位任何地址空間。例如:“void (* foo)()”聲明了一個返回值為void的函數(shù)指針變量foo。所以攻擊者只需在任何空間內(nèi)的函數(shù)指針附近找到一個能夠溢出的緩沖區(qū),然后溢出這個緩沖區(qū)來改變函數(shù)指針。在某一時刻,當(dāng)程序通過函數(shù)指針調(diào)用函數(shù)時,程序的流程就按攻擊者的意圖實現(xiàn)了。它的一個攻擊范例就是在Linux系統(tǒng)下的superprobe程序。長跳轉(zhuǎn)緩沖區(qū)(Longjmp buffers): 在C語言中包含了一個簡單的檢驗/恢復(fù)系
15、統(tǒng),稱為setjmp/longjmp。意思是在檢驗點設(shè)定“setjmp(buffer)”,用“l(fā)ongjmp(buffer)”來恢復(fù)檢驗點。然而,如果攻擊者能夠進入緩沖區(qū)的空間,那么“l(fā)ongjmp(buffer)”實際上是跳轉(zhuǎn)到攻擊者的代碼。象函數(shù)指針一樣,longjmp緩沖區(qū)能夠指向任何地方,所以攻擊者所要做的就是找到一個可供溢出的緩沖區(qū)。一個典型的例子就是Perl 5.003的緩沖區(qū)溢出漏洞;攻擊者首先進入用來恢復(fù)緩沖區(qū)溢出的的longjmp緩沖區(qū),然后誘導(dǎo)進入恢復(fù)模式,這樣就使Perl的解釋器跳轉(zhuǎn)到攻擊代碼上了。緩沖區(qū)溢出影響及危害 在幾乎所有計算機語言中,不管是新的語言還是舊的語言,
16、使緩沖區(qū)溢出的任何嘗試通常都會被該語言本身自動檢測并阻止(比如通過引發(fā)一個異常或根據(jù)需要給緩沖區(qū)添加更多空間),但是有兩種語言不是這樣:C和C+語言。CC+語言由于其針靈活應(yīng)用的特性,通常允許讓額外的數(shù)據(jù)亂寫到其余內(nèi)存的任何位置,而這種情況可能被利用從而導(dǎo)致意想不到的結(jié)果。而且,用CC+編寫正確的代碼來始終如一地處理緩沖區(qū)溢出則更為困難;很容易就會意外地導(dǎo)致緩沖區(qū)溢出。更重要的一點就是CC+的應(yīng)用非常廣泛,例如,Red Hat Linux 7.1中86%的代碼行都是用C或C+編寫的。因此,大量的代碼對這個問題都是脆弱的,出現(xiàn)緩沖區(qū)溢出也就是常見的事情。 緩沖區(qū)溢出漏洞很容易被蠕蟲病毒利用造成了
17、很大的危害,如2001年7月19日,CodeRed蠕蟲爆發(fā),造成的損失估計超過20億美元2,2001年9月18日,Nimda蠕蟲被發(fā)現(xiàn),造成的損失更大,超過26億美元,2002年Slapper蠕蟲出現(xiàn),2003年1月25日Slammer蠕蟲爆發(fā),2004年5月1日,“震蕩波”被發(fā)現(xiàn),這幾個病毒對網(wǎng)絡(luò)安全造成的破壞之大是前所未有的。而以上病毒都利用了緩沖區(qū)溢出漏洞。 緩沖區(qū)溢出的防御方法緩沖區(qū)溢出的防御方法 緩沖區(qū)溢出攻擊占了遠程網(wǎng)絡(luò)攻擊的絕大多數(shù),這種攻擊可以使得一個匿名的Internet用戶有機會獲得一臺主機的部分或全部的控制權(quán)。如果能有效地消除緩沖區(qū)溢出的漏洞,則很大一部分的安全威脅可以得
18、到緩解。目前有4種基本的方法保護緩沖區(qū)免受緩沖區(qū)溢出的攻擊和影響。3.1、寫正確的代碼的方法編寫正確的代碼是一件非常有意義的工作,特別象編寫C語言那種風(fēng)格自由而容易出錯的程序,這種風(fēng)格是由于追求性能而忽視正確性的傳統(tǒng)引起的。盡管花了很長的時間使得人們知道了如何編寫安全的程序,具有安全漏洞的程序依舊出現(xiàn)。因此人們開發(fā)了一些工具和技術(shù)來幫助經(jīng)驗不足的程序員編寫安全正確的程序。最簡單的方法就是用grep來搜索源代碼中容易產(chǎn)生漏洞的庫的調(diào)用,比如對strcpy和sprintf的調(diào)用,這兩個函數(shù)都沒有檢查輸入?yún)?shù)的長度。事實上,各個版本C的標(biāo)準(zhǔn)庫均有這樣的問題存在。此外,人們還開發(fā)了一些高級的查錯工具,
19、如fault injection等。這些工具的目的在于通過人為隨機地產(chǎn)生一些緩沖區(qū)溢出來尋找代碼的安全漏洞。還有一些靜態(tài)分析工具用于偵測緩沖區(qū)溢出的存在。雖然這些工具幫助程序員開發(fā)更安全的程序,但是由于C語言的特點,這些工具不可能找出所有的緩沖區(qū)溢出漏洞。所以,偵錯技術(shù)只能用來減少緩沖區(qū)溢出的可能,并不能完全地消除它的存在。通過操作系統(tǒng)使得緩沖區(qū)不可執(zhí)行,通過操作系統(tǒng)使得緩沖區(qū)不可執(zhí)行,從而阻止攻擊者植入攻擊代碼從而阻止攻擊者植入攻擊代碼 通過使被攻擊程序的數(shù)據(jù)段地址空間不可執(zhí)行,從而使得攻擊者不可能執(zhí)行被植入被攻擊程序輸入緩沖區(qū)的代碼,這種技術(shù)被稱為非執(zhí)行的緩沖區(qū)技術(shù)。在早期的Unix系統(tǒng)設(shè)
20、計中,只允許程序代碼在代碼段中執(zhí)行。但是Unix和MS Windows系統(tǒng)由于要實現(xiàn)更好的性能和功能,往往在數(shù)據(jù)段中動態(tài)地放入可執(zhí)行的代碼,這也是緩沖區(qū)溢出的根源。為了保持程序的兼容性,不可能使得所有程序的數(shù)據(jù)段不可執(zhí)行。 但是可以設(shè)定堆棧數(shù)據(jù)段不可執(zhí)行,這樣就可以保證程序的兼容性。Linux和Solaris都發(fā)布了有關(guān)這方面的內(nèi)核補丁。因為幾乎沒有任何合法的程序會在堆棧中存放代碼,這種做法幾乎不產(chǎn)生任何兼容性問題,除了在Linux中的兩個特例,這時可執(zhí)行的代碼必須被放入堆棧中:信號傳遞信號傳遞 Linux通過向進程堆棧釋放代碼然后引發(fā)中斷來執(zhí)行在堆棧中的代碼來實現(xiàn)向進程發(fā)送Unix信號。非執(zhí)
21、行緩沖區(qū)的補丁在發(fā)送信號的時候是允許緩沖區(qū)可執(zhí)行的。GCC的在線重用的在線重用 研究發(fā)現(xiàn)gcc在堆棧區(qū)里放置了可執(zhí)行的代碼作為在線重用之用。然而,關(guān)閉這個功能并不產(chǎn)生任何問題,只有部分功能似乎不能使用。 非執(zhí)行堆棧的保護可以有效地對付把代碼植入自動變量的緩沖區(qū)溢出攻擊,而對于其它形式的攻擊則沒有效果。通過引用一個駐留的程序的指針,就可以跳過這種保護措施。其它的攻擊可以采用把代碼植入堆或者靜態(tài)數(shù)據(jù)段中來跳過保護。 這種方法有效地阻止了很多緩沖區(qū)溢出的攻擊,但是攻擊者并不一定要植入攻擊代碼來實現(xiàn)緩沖區(qū)溢出的攻擊,所以這種方法還是存在很多弱點的。利用編譯器的數(shù)組邊界檢查來實現(xiàn)緩沖區(qū)的保護 數(shù)組邊界檢
22、查能防止所有的緩沖區(qū)溢出的產(chǎn)生和攻擊。這是因為只要數(shù)組不能被溢出,溢出攻擊也就無從談起。為了實現(xiàn)數(shù)組邊界檢查,則所有的對數(shù)組的讀寫操作都應(yīng)當(dāng)被檢查以確保對數(shù)組的操作在正確的范圍內(nèi)。最直接的方法是檢查所有的數(shù)組操作,但是通??梢圆捎靡恍﹥?yōu)化的技術(shù)來減少檢查的次數(shù)。目前有以下的幾種檢查方法:(1) Jones & Kelly: C的數(shù)組邊界檢查Richard Jones和Paul Kelly開發(fā)了一個gcc的補丁,用來實現(xiàn)對C程序完全的數(shù)組邊界檢查。由于沒有改變指針的含義,所以被編譯的程序和其它的gcc模塊具有很好的兼容性。更進一步的是,他們由此從沒有指針的表達式中導(dǎo)出了一個“基”指針,然后通過檢
23、查這個基指針來偵測表達式的結(jié)果是否在容許的范圍之內(nèi)。當(dāng)然,這樣付出的性能上的代價是巨大的:對于一個頻繁使用指針的程序,比如向量乘法,將由于指針的頻繁使用而使速度比本來慢30倍。這個編譯器目前還很不成熟;一些復(fù)雜的程序還不能在這個上面編譯,執(zhí)行通過。 (2) Compaq C 編譯器Compaq公司為Alpha CPU開發(fā)的C編譯器支持有限度的邊界檢查(使用check_bounds參數(shù))。這些限制是: 只有顯式的數(shù)組引用才被檢查,比如“a3”會被檢查,而“*(a+3)”則不會。由于所有的C數(shù)組在傳送的時候是指針傳遞的,所以傳遞給函數(shù)的的數(shù)組不會被查。帶有危險性的庫函數(shù)如strcpy不會在編譯的時
24、候進行邊界檢查,即便是指定了邊界檢查。由于在C語言中利用指針進行數(shù)組操作和傳遞是如此的頻繁,因此這種局限性是非常嚴重的。通常這種邊界檢查用來程序的查錯,而且不能保證不發(fā)生緩沖區(qū)溢出的漏洞。(3) Purify:內(nèi)存存取檢查 Purify是C程序調(diào)試時查看內(nèi)存使用的工具。Purify使用“目標(biāo)代碼插入”技術(shù)來檢查所有的內(nèi)存存取。通過用Purify連接工具連接,可執(zhí)行代碼在執(zhí)行的時候數(shù)組的所有引用來保證其合法性。這樣帶來的性能上的損失要下降3-5倍。(4) 類型-安全語言所有的緩沖區(qū)溢出漏洞都源于C語言缺乏類型安全。如果只有類型-安全的操作才可以被允許執(zhí)行,這樣就不可能出現(xiàn)對變量的強制操作。如果作
25、為新手,可以推薦使用具有類型-安全的語言如Java。但是作為Java執(zhí)行平臺的Java虛擬機是C程序,因此通過攻擊JVM的一條途徑是使JVM的緩沖區(qū)溢出。 這個方法使得緩沖區(qū)溢出不可能出現(xiàn),從而完全消除了緩沖區(qū)溢出的威脅,但是相對而言代價比較大。在程序指針失效前進行完整性檢查 程序指針完整性檢查和邊界檢查有略微的不同,程序指針完整性檢查在程序指針被引用之前檢測到它的改變。因此,即使一個攻擊者成功地改變了程序的指針,由于系統(tǒng)事先檢測到了指針的改變,因此這個指針將不會被使用。與數(shù)組邊界檢查相比,這種方法不能解決所有的緩沖區(qū)溢出問題;采用其它的緩沖區(qū)溢出攻擊方法就可以避免這種檢測。但是這種方法在性能
26、上有很大的優(yōu)勢,而且在兼容性也很好,而且目前為止,只有很少一部分使用非指針變量的攻擊能逃脫指針保護的檢測。 最普通的緩沖區(qū)溢出形式是攻擊活動記錄然后在堆棧中植入代碼。這種類型的攻擊在1996 年中有很多記錄。而非執(zhí)行堆棧和堆棧保護的方法都可以有效防衛(wèi)這種攻擊。非執(zhí)行堆??梢苑佬l(wèi)所有把代碼植入堆棧的攻擊方法,堆棧保護可以防衛(wèi)所有改變活動記錄的方法。這兩種方法相互兼容,可以同時防衛(wèi)多種可能的攻擊。雖然這些工具幫助程序員開發(fā)更安全的程序,但是由于C語言的特點,這些工具不可能找出所有的緩沖區(qū)溢出漏洞。所以,偵錯技術(shù)只能用來減少緩沖區(qū)溢出的可能,并不能完全地消除它的存在。除非程序員能保證他的程序萬無一失,否則還是要用到以下部分的內(nèi)容來保證程序的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機化學(xué)原料的廢棄物處理與資源化考核試卷
- 智能服務(wù)機器人技術(shù)創(chuàng)新考核試卷
- 機械式停車設(shè)備故障預(yù)防與診斷技巧考核試卷
- 木材采運的數(shù)字化轉(zhuǎn)型與智能化考核試卷
- 中介居間費合同范本
- 房主房子出租合同范本
- 維修農(nóng)村管道合同范本
- 畜牧產(chǎn)品加工與供應(yīng)合作協(xié)議
- 物聯(lián)網(wǎng)技術(shù)應(yīng)用研發(fā)生產(chǎn)合同書
- 電信運營商合作協(xié)議具體內(nèi)容
- 連乘兩步計算的實際問題
- 中國畫的特點及分類課件
- 重大危險源監(jiān)理實施細則(二篇)
- 自身免疫性多內(nèi)分泌腺體綜合征
- IEC-60068-系列標(biāo)準(zhǔn)完整版
- 中醫(yī)師承跟師筆記
- 鳳飛羌舞演藝中心及演出項目可行性研究報告
- 工程電磁場教案
- 02職業(yè)生涯目標(biāo)的分解和組合
- 全國2016年10月自考00043經(jīng)濟法概論(財經(jīng)類)試題及答案
評論
0/150
提交評論