第七章 計算機系統(tǒng)安全(緩沖區(qū)溢出)_第1頁
第七章 計算機系統(tǒng)安全(緩沖區(qū)溢出)_第2頁
第七章 計算機系統(tǒng)安全(緩沖區(qū)溢出)_第3頁
第七章 計算機系統(tǒng)安全(緩沖區(qū)溢出)_第4頁
第七章 計算機系統(tǒng)安全(緩沖區(qū)溢出)_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2023/2/5網(wǎng)絡(luò)安全

NetworkSecurity2023/2/5第7章計算機系統(tǒng)安全(緩沖區(qū)溢出)緩沖區(qū)溢出概述緩沖區(qū)溢出攻擊的原理緩沖區(qū)溢出攻擊的防御技術(shù)2023/2/5第7章計算機系統(tǒng)安全(緩沖區(qū)溢出)緩沖區(qū)溢出概述緩沖區(qū)溢出攻擊的原理緩沖區(qū)溢出攻擊的防御技術(shù)2023/2/5緩沖溢出概述1.緩沖區(qū)的定義連續(xù)的一段存儲空間。2.緩沖區(qū)溢出的定義指寫入緩沖區(qū)的數(shù)據(jù)量超過該緩沖區(qū)能容納的最大限度,造成溢出的數(shù)據(jù)改寫了與該緩沖區(qū)相鄰的原始數(shù)據(jù)的情形。Bufferoverflowistheresultofwritingmoredataintoabufferthanthebuffercanhold.

2023/2/5ExampleConsiderthefollowingcodeintmain(void){charbuffer[4];strcpy(buffer,“AAA”);……}mainstackframe

previousstackframe…………buffer[4]HighaddressesLowaddressesAAA\02023/2/5Example(contd.)Nowweinput4+4+3‘A’sinsteadof4‘A’main(void){charbuffer[4];strcpy(buffer,“”);}AAAAAAAAAAAAAAmainstackframe

previousstackframe…………buffer[4]HigheraddressesLoweraddresses?AAAAAAAAAAA\0……2023/2/5緩沖溢出概述(續(xù))3.緩沖區(qū)溢出的危害利用緩沖區(qū)溢出實現(xiàn)在本地或者遠程系統(tǒng)上實現(xiàn)任意執(zhí)行代碼的目的,從而進一步達到對被攻擊系統(tǒng)的完全掌控;利用緩沖區(qū)溢出進行DoS(DenialofService)攻擊;利用緩沖區(qū)溢出破壞關(guān)鍵數(shù)據(jù),使系統(tǒng)的穩(wěn)定性和有效性受到不同程度的影響;實現(xiàn)蠕蟲程序1988RobertT.Morris蠕蟲利用UNIX系統(tǒng)中In,theMorrisInternetwormexploitedbufferoverflowvulnerabilityinfingerdserverprogramonUNIXsystems.曾在2001年造成大約26億美元損失的CodeRed蠕蟲及其變體就是利用了MicrosoftIIS中的緩沖區(qū)溢出進行攻擊2002年的Sapphire蠕蟲和2004年的Witty蠕蟲也都利用了緩沖區(qū)溢出進行攻擊。In2004,theWittywormtakesadvantageofabufferoverflowflawinseveralInternetSecuritySystems?(ISS)products.2023/2/5SourcefromCERT(ComputerEmergencyResponseTeam)CERTAdvisories,/advisories/緩沖區(qū)溢出相關(guān)的軟件安全隱患數(shù)目占整個軟件安全隱患數(shù)目的比例2023/2/5緩沖溢出概述(續(xù))4.造成緩沖區(qū)溢出的根本原因代碼在操作緩沖區(qū)時,沒有有效地對緩沖區(qū)邊界進行檢查,使得寫入緩沖區(qū)的數(shù)據(jù)量超過緩沖區(qū)能夠容納的范圍,從而導(dǎo)致溢出的數(shù)據(jù)改寫了與該緩沖區(qū)相鄰存儲單元的內(nèi)容。

CandC++arethemostcommonlanguagestocreatebufferoverflows.C語言中許多字符串處理函數(shù)如:Strcpy、Strcat、Gets、Sprintf等都沒有對數(shù)組越界加以檢測和限制。2023/2/5緩沖溢出概述(續(xù))MicrosoftWindows,Linux/Unix,AppleMacintosh等主流操作系統(tǒng)無一例外存在緩沖區(qū)溢出問題。存在緩沖區(qū)溢出問題的應(yīng)用程序也廣泛存在,涉及數(shù)據(jù)庫系統(tǒng)例如MicrosoftSQLServer2000,Oracle9i,網(wǎng)絡(luò)服務(wù)(MicrosoftIIS),網(wǎng)絡(luò)協(xié)議實現(xiàn)(例如OpenSSL),多媒體軟件(AppleQuickTime)等等

2023/2/5緩沖溢出概述(續(xù))緩沖區(qū)溢出可以成為攻擊者實現(xiàn)攻擊目標的手段,但是單純地溢出緩沖區(qū)并不能達到攻擊的目的。在絕大多數(shù)情況下,一旦程序中發(fā)生緩沖區(qū)溢出,系統(tǒng)會立即中止程序并報告“faultsegment”。例如緩沖區(qū)溢出,將使返回地址改寫為一個非法的、不存在的地址,從而出現(xiàn)coredump錯誤,不能達到攻擊目的。只有對緩沖區(qū)溢出“適當?shù)亍奔右岳?,攻擊者才能通過其實現(xiàn)攻擊目標。2023/2/5第7章計算機系統(tǒng)安全(緩沖區(qū)溢出)緩沖區(qū)溢出概述緩沖區(qū)溢出攻擊的原理緩沖區(qū)溢出攻擊的防御技術(shù)2023/2/5緩沖溢出攻擊的原理1.緩沖區(qū)溢出攻擊模式AttackedSystem溢出緩沖區(qū)重定向到攻擊程序任意地執(zhí)行程序執(zhí)行攻擊程序Attacker注入惡意數(shù)據(jù)獲得控制權(quán)找到可利用的緩沖區(qū)溢出隱患惡意數(shù)據(jù)可以通過命令行參數(shù)、環(huán)境變量、輸入文件或者網(wǎng)絡(luò)數(shù)據(jù)注入2023/2/5緩沖溢出攻擊的原理(續(xù))2.緩沖區(qū)溢出可能發(fā)生的位置預(yù)備知識點進程在內(nèi)存中的布局2023/2/5緩沖溢出攻擊的原理(續(xù))代碼段/文本段用于放置程序的可執(zhí)行代碼(機器碼)。數(shù)據(jù)段用于放置已初始化的全局變量和已初始化的局部靜態(tài)變量。BSS(BlockStartedbySymbol)段用于放置未初始化的全局變量和未初始化的局部靜態(tài)變量。堆用于動態(tài)分配內(nèi)存。堆棧段用于存放函數(shù)的參數(shù),返回地址,調(diào)用函數(shù)的?;芬约熬植糠庆o態(tài)變量。進程的環(huán)境變量和參數(shù)

.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2023/2/5緩沖溢出攻擊的原理(續(xù))2.緩沖區(qū)溢出可能發(fā)生的位置(續(xù))堆棧(stack)堆(heap)數(shù)據(jù)段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2023/2/5緩沖溢出攻擊的原理(續(xù))2.緩沖區(qū)溢出可能發(fā)生的位置(續(xù))堆棧(stack)堆(heap)數(shù)據(jù)段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2023/2/5被調(diào)函數(shù)堆棧布局堆棧采用后進先出(LIFO)的方式管理數(shù)據(jù),這種方式是實現(xiàn)函數(shù)嵌套調(diào)用的關(guān)鍵。

PreviousstackframesFunctionargumentsReturnaddressPreviousframepointerLocalvariablesHighaddressLowaddress從右到左的順序指令寄存器(EIP)基址寄存器(EBP)局部非靜態(tài)變量2023/2/5緩沖溢出攻擊的原理(續(xù))基于堆棧的緩沖區(qū)溢出voidfunction(char*str){ charbuffer[4]; strcpy(buffer,str);}voidmain(intargc,char**argv){ charlarge_string[8]; inti; for(i=0;i<8;i++) large_buffer[i]=‘A’ function(large_string);}2023/2/5Example(contd.)Large_string上一個棧幀地址

返回地址

argv內(nèi)存低端內(nèi)存高端argcESPmain函數(shù)棧幀voidmain(intargc,char**argv)i2023/2/5緩沖溢出攻擊的原理(續(xù))基于堆棧的緩沖區(qū)溢出voidfunction(char*str){ charbuffer[4]; strcpy(buffer,str);}voidmain(intargc,char**argv){ charlarge_string[8]; inti; for(i=0;i<8;i++) large_buffer[i]=‘A’ function(large_string);}2023/2/5Example(contd.)Large_string上一個棧幀地址返回地址argv內(nèi)存低端內(nèi)存高端argcESPMain函數(shù)的棧幀i*str返回地址main函數(shù)的棧幀地址bufferfunction函數(shù)棧幀function函數(shù)被調(diào)用,調(diào)用strcpy之前voidfunction(char*str)…………2023/2/5Example(contd.)Large_string上一個棧幀地址返回地址argv內(nèi)存低端內(nèi)存高端argcESPMain函數(shù)的棧幀i*str返回地址AAAAAAAAfunction函數(shù)棧幀function函數(shù)被調(diào)用,調(diào)用strcpy之后voidfunction(char*str)…………2023/2/5緩沖溢出攻擊的原理(續(xù))基于堆棧的緩沖區(qū)溢出的潛在危害改寫返回地址改寫調(diào)用函數(shù)棧的棧幀地址

被調(diào)函數(shù)……movl%ebp,%esppopl%ebpret調(diào)用函數(shù)……movl%ebp,%esppopl%ebpret2023/2/5緩沖溢出攻擊的原理(續(xù))基于堆棧的緩沖區(qū)溢出的潛在危害(續(xù))改寫函數(shù)指針改寫虛函數(shù)指針改寫異常處理指針改寫數(shù)據(jù)指針

voidBadCode(char*string){void(*p)()=...;charbuff[100];strcpy(buff,string);p();……}2023/2/5緩沖溢出攻擊的原理(續(xù))2.緩沖區(qū)溢出可能發(fā)生的位置(續(xù))堆棧(stack)堆(heap)數(shù)據(jù)段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2023/2/5緩沖溢出攻擊的原理(續(xù))基于堆的緩沖區(qū)溢出Heapisacontiguousmemoryusedtodynamicallyallocatespacewherethesizewillbeknownonlyduringtheexecutionofthecode.

在Linux中,堆空間按照DougLea算法實現(xiàn)動態(tài)分配。在C程序中,標準庫函數(shù)malloc()/free()用于從堆中動態(tài)申請/釋放塊;對于C++程序,相應(yīng)函數(shù)為new/delete。2023/2/5緩沖溢出攻擊的原理(續(xù))基于堆的緩沖區(qū)溢出(續(xù))voidmain(intargc,char**argv){char*buf1=(char*)malloc(16);char*buf2=(char*)malloc(16);strcpy(buf1,”AAAAAAAAAAAAAAA”);strcpy(buf2,argv[1]);}0030035000300360003003700030034000300380buf[2]buf[1]buf[2]AAAAAAAAAAAAAAA\02023/2/5buf[2]AAAAAAAAAAAAAAAA基于堆的緩沖區(qū)溢出正常輸入Prompt:>BB..BBB(total15‘B’s)產(chǎn)生溢出的輸入Prompt:>BB..BBB(total40‘B’s)(a)heaplayoutwithoutoverflow0030035000300360003003700030034000300380BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\0AAAAAA\0(b)heaplayoutwithoverflowBBBBBBBBBBBBBBB\0AAAAAAAAAAAAAAA\02023/2/5基于堆的緩沖區(qū)溢出攻擊舉例1996年BSDIcrontab被發(fā)現(xiàn)存在基于堆的緩沖區(qū)溢出隱患,攻擊者可以通過輸入一個長文件名溢出在堆上的緩沖區(qū),溢出數(shù)據(jù)改寫的區(qū)域是保存有用戶名、密碼、uid,gid等信息的區(qū)域。2023/2/5緩沖溢出攻擊的原理(續(xù))2.緩沖區(qū)溢出可能發(fā)生的位置(續(xù))堆棧(stack)堆(heap)數(shù)據(jù)段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2023/2/5緩沖溢出攻擊的原理(續(xù))基于數(shù)據(jù)段的緩沖區(qū)溢出voidOverflow_Data(char*input){staticcharbuf[4]=”CCCC”;inti;for(i=0;i<12;i++)buf[i]=‘A’;}2023/2/5緩沖溢出攻擊的原理(續(xù))2.緩沖區(qū)溢出可能發(fā)生的位置(續(xù))堆棧(stack)堆(heap)數(shù)據(jù)段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2023/2/5緩沖溢出攻擊的原理(續(xù))基于BSS段的緩沖區(qū)溢出voidOverflow_BSS(char*input){staticcharbuf[4];inti;for(i=0;i<12;i++)buf[i]=‘A’;}2023/2/5緩沖溢出攻擊的原理(續(xù))3.常見的溢出緩沖區(qū)的途徑利用C的標準函數(shù)庫常見的有strcpy、strcat、sprintf、gets“Mudge”.HowtoWriteBufferOverflows.http:///advisories/bufero.html,1997.PaulA.HenryMCP+Ietal.BufferOverflowAttacks.CyberGuardCorp.C.Cowanetal.Bufferoverflows:Attacksanddefensesforthevulnerabilityofthedecade.ProceedingsoftheDARPAInformationSurvivabilityConferenceandExpo,1999.

2023/2/5緩沖溢出攻擊的原理(續(xù))利用數(shù)組下標的越界操作Off-by-one緩沖區(qū)溢出利用數(shù)組的最大下標與數(shù)組長度的差異產(chǎn)生。例如1998年10月BugTraq公布出Linuxlibc中的realpath函數(shù)存在single-byte緩沖區(qū)溢出隱患,攻擊者可以利用它獲得root權(quán)限。參見O.Kirch.Thepoisonednulbyte,posttothebugtraqmailinglist,October1998.2000年12月OpenBSD安全組公布ftpd存在類似安全隱患。參見OpenBSDdevelopers,single-bytebufferoverflowvulnerabilityinftpd,December2000.

voidBadCode(char*str){charbuffer[512];for(i=0;i<=512;i++)buffer[i]=str[i];}2023/2/5緩沖溢出攻擊的原理(續(xù))利用有符號整數(shù)與無符號整數(shù)的轉(zhuǎn)換

voidBadCode(char*input){shortlen;charbuf[64];len=strlen(input);if(len<MAX_BUF)strcpy(buf,input);}2023/2/5緩沖溢出攻擊的原理(續(xù))4.惡意代碼(注入)例如為實現(xiàn):“exec(/bin/sh)”charshellcode[]=”\xeb\x1f\x5e\x89\x76\x08\x31\xc0””\x88\x46\x07\x89\x46\x0c\xb0\x0b””\x89\xf3\x8d\x4e\x08\x8d\x56\x0c””\xcd\x80\x31\xdb\x89\xd8\x40\xcd””\x80\xe8\xdc\xff\xff\xff/bin/sh”;charlarge_string[128];voidmain(){charbuffer[96];inti;long*long_ptr;long_ptr=(long*)large_string;for(i=0;i<32;i++)*(long_ptr+i)=(int)buffer;for(i=0;i<strlen(shellcode);i++)large_string[i]=shellcode[i];strcpy(buffer,large_string);}2023/2/5Thesecretoftheshellcodecharshellcode[]=/*main:*/"\xeb\x1f"/*jmp$0x1forjmpcallz *//*start:*/"\x5e"/*popl%esi */"\x89\x76\x08"/*movl%esi,$0x08(%esi) */"\x31\xc0"/*xorl%eax,%eax */"\x88\x46\x07"/*movb%al,0x07(%esi) */"\x89\x46\x0c"/*movl%eax,$0x0c(%esi) */"\xb0\x0b"/*movb$0x0b,%al */"\x89\xf3"/*movl%esi,%ebx */"\x8d\x4e\x08"/*leal0x08(%esi),%ecx */"\x8d\x56\x0c"/*leal0x0c(%esi),%edx */"\xcd\x80"/*int$0x80 */"\x31\xdb"/*xorl%ebx,%ebx */"\x89\xd8"/*movl%ebx,%eax */"\x40"/*inc%eax */"\xcd\x80"/*int$0x80 *//*callz:*/"\xe8\xdc\xff\xff\xff"/*callstart *//*DATA*/"/bin/sh";1322023/2/5基于堆棧的緩沖區(qū)溢出攻擊舉例charshellcode[]=”\xeb\x1f\x5e\x89\x76\x08\x31\xc0””\x88\x46\x07\x89\x46\x0c\xb0\x0b””\x89\xf3\x8d\x4e\x08\x8d\x56\x0c””\xcd\x80\x31\xdb\x89\xd8\x40\xcd””\x80\xe8\xdc\xff\xff\xff/bin/sh”;charlarge_string[128];voidmain(){charbuffer[96];inti;long*long_ptr;long_ptr=(long*)large_string;for(i=0;i<32;i++)*(long_ptr+i)=(int)buffer;for(i=0;i<strlen(shellcode);i++)large_string[i]=shellcode[i];strcpy(buffer,large_string);}for(i=0;i<strlen(shellcode);i++)large_string[i]=shellcode[i];strcpy(buffer,large_string);2023/2/5溢出前后堆棧內(nèi)容對比HigheraddressesLoweraddressespreviousstackframeilong_ptrreturnaddresssavedEBPbuffer[96]mainstackframepreviousstackframeilong_ptraddress/bin/sh……\xeb\x1f堆棧溢出前堆棧溢出后2023/2/5緩沖溢出攻擊的原理(續(xù))4.惡意代碼(已在內(nèi)存)利用已在內(nèi)存中的代碼作為攻擊代碼,但是需要提供調(diào)用這些現(xiàn)成代碼產(chǎn)生攻擊的參數(shù)。由于libc中的庫函數(shù)常被用作現(xiàn)成的攻擊代碼,所以有時把這種攻擊方式稱為

return-to-libc??蓞⒁奛ergal.Theadvancedreturn-into-lib(c)exploits:Paxcasestudy.Phrack,Dec.2001.

2023/2/5第7章計算機系統(tǒng)安全(緩沖區(qū)溢出)緩沖區(qū)溢出概述緩沖區(qū)溢出攻擊的原理緩沖區(qū)溢出攻擊的防御技術(shù)2023/2/5緩沖區(qū)溢出攻擊的防御技術(shù)基于軟件的防御技術(shù)類型安全的編程語言相對安全的函數(shù)庫修改的編譯器內(nèi)核補丁靜態(tài)分析方法動態(tài)檢測方法基于硬件的防御技術(shù)處理器結(jié)構(gòu)方面的改進2023/2/5緩沖區(qū)溢出攻擊的防御技術(shù)基于軟件的防御技術(shù)類型安全的編程語言相對安全的函數(shù)庫修改的編譯器內(nèi)核補丁靜態(tài)分析方法動態(tài)檢測方法基于硬件的防御技術(shù)處理器結(jié)構(gòu)方面的改進2023/2/5基于軟件的防御技術(shù)安全的編程語言Java,C#,VisualBasic,Pascal,Ada,Lisp,ML屬于類型安全的編程語言??蓞⒖糓ishaZiseretal.TestingStaticAnalysisToolsUsingExploitableBufferOverflowsFromOpenSourceCode.Proceedingsofthe12thACMSIGSOFTtwelfthinternationalsymposiumonFoundationsofsoftwareengineering,2004.

缺點性能代價類型安全的編程語言自身的實現(xiàn)可能存在緩沖區(qū)溢出問題。

2023/2/5緩沖區(qū)溢出攻擊的防御技術(shù)基于軟件的防御技術(shù)類型安全的編程語言相對安全的函數(shù)庫修改的編譯器內(nèi)核補丁靜態(tài)分析方法動態(tài)檢測方法基于硬件的防御技術(shù)處理器結(jié)構(gòu)方面的改進2023/2/5基于軟件的防御技術(shù)(續(xù))相對安全的標準庫函數(shù)例如在使用C的標準庫函數(shù)時,做如下替換strcpy->strncpystrcat->strncatgets->fgets缺點使用不當仍然會造成緩沖區(qū)溢出問題。例如MicrosoftVisualStudio提供的C的標準函數(shù)庫strsafe;

2023/2/5緩沖區(qū)溢出攻擊的防御技術(shù)基于軟件的防御技術(shù)類型安全的編程語言相對安全的函數(shù)庫修改的編譯器內(nèi)核補丁靜態(tài)分析方法動態(tài)檢測方法基于硬件的防御技術(shù)處理器結(jié)構(gòu)方面的改進2023/2/5基于軟件的防御技術(shù)(續(xù))修改的編譯器增強邊界檢查能力的C/C++編譯器例如針對GNUC編譯器擴展數(shù)組和指針的邊界檢查。WindowsVisualC++.NET的GS選項也提供動態(tài)檢測緩沖區(qū)溢出的能力。返回地址的完整性保護將堆棧上的返回地址備份到另一個內(nèi)存空間;在函數(shù)執(zhí)行返回指令前,將備份的返回地址重新寫回堆棧。許多高性能超標量微處理器具有一個返回地址棧,用于指令分支預(yù)測。返回地址棧保存了返回地址的備份,可用于返回地址的完整性保護

缺點性能代價檢查方法仍不完善

2023/2/5緩沖區(qū)溢出攻擊的防御技術(shù)基于軟件的防御技術(shù)類型安全的編程語言相對安全的函數(shù)庫修改的編譯器內(nèi)核補丁靜態(tài)分析方法動態(tài)檢測方法基于硬件的防御技術(shù)處理器結(jié)構(gòu)方面的改進2023/2/5基于軟件的防御技術(shù)(續(xù))內(nèi)核補丁將堆棧標志為不可執(zhí)行來阻止緩沖區(qū)溢出攻擊;將堆或者數(shù)據(jù)段標志為不可執(zhí)行。例如Linux的內(nèi)核補丁Openwall、RSX、kNoX、ExecShield和PaX等實現(xiàn)了不可執(zhí)行堆棧,并且RSX、kNoX、ExecShield、PaX還支持不可執(zhí)行堆。另外,為了抵制return-to-libc這類的攻擊,PaX增加了一個特性,將函數(shù)庫映射到隨機的內(nèi)存空間缺點:對于一些需要堆棧/堆/數(shù)據(jù)段為可執(zhí)行狀態(tài)的應(yīng)用程序不合適;需要重新編譯原來的程序,如果沒有源代碼,就不能獲得這種保護。

2023/2/5緩沖區(qū)溢出攻擊的防御技術(shù)基于軟件的防御技術(shù)類型安全的編程語言相對安全的函數(shù)庫修改的編譯器內(nèi)核補丁靜態(tài)分析方法動態(tài)檢測方法基于硬件的防御技術(shù)處理器結(jié)構(gòu)方面的改進2023/2/5基于軟件的防御技術(shù)(續(xù))靜態(tài)分析方法字典檢查法遍歷源程序查找其中使用到的不安全的庫函數(shù)和系統(tǒng)調(diào)用。例如靜態(tài)分析工具ITS4、RATS(RoughAuditingToolforSecurity)等。其中RATS提供對C,C++,Perl,PHP以及Python語言的掃描檢測。缺點:誤報率很高,需要配合大量的人工檢查工作。2023/2/5基于軟件的防御技術(shù)(續(xù))靜態(tài)分析方法(續(xù))程序注解法

包括緩沖區(qū)的大小,指針是否可以為空,輸入的有效約定等等。例如靜態(tài)分析工具LCLINT、SPLINT(SecureProgrammingLint)。缺點:依賴注釋的質(zhì)量2023/2/5基于軟件的防御技術(shù)(續(xù))靜態(tài)分析方法(續(xù))整數(shù)分析法將字符串形式化為一對整數(shù),表明字符串長度(以字節(jié)數(shù)為單位)以及目前已經(jīng)使用緩沖區(qū)的字節(jié)數(shù)。通過這樣的形式化處理,將緩沖區(qū)溢出的檢測轉(zhuǎn)化為整數(shù)計算。例如靜態(tài)分析工具BOON(BufferOverrundetectiON)。缺點:僅檢查C中進行字符串操作的標準庫函數(shù)。檢查范圍很有限。

2023/2/5基于軟件的防御技術(shù)(續(xù))靜態(tài)分析方法(續(xù))控制流程分析法將源程序中的每個函數(shù)抽象成語法樹,然后再把語法樹轉(zhuǎn)換為調(diào)用圖/控制流程圖來檢查函數(shù)參數(shù)和緩沖區(qū)的范圍。例如靜態(tài)分析工具ARCHER(ARrayCHeckER)、UNO、PREfast和Coverity等。缺點:對于運行時才會顯露的問題無法進行分析;存在誤報的可能。

2023/2/5緩沖區(qū)溢出攻擊的防御技術(shù)基于軟件的防御技術(shù)類型安全的編程語言相對安全的函數(shù)庫修改的編譯器內(nèi)核補丁靜態(tài)分析方法動態(tài)檢測方法基于硬件的防御技術(shù)處理器結(jié)構(gòu)方面的改進2023/2/5基于軟件的防御技術(shù)(續(xù))動態(tài)檢測方法

Canary-based檢測方法將canary(一個檢測值)放在緩沖區(qū)和需要保護的數(shù)據(jù)之間,并且假設(shè)如果從緩沖區(qū)溢出的數(shù)據(jù)改寫了被保護數(shù)據(jù),檢測值也必定被改寫。例如動態(tài)檢測工具StackGuard、StackGhost、ProPolice、PointGuard等。缺點:多少工具通過修改編譯器實現(xiàn)檢測功能,需要重新編譯程序;這種方法無法檢測能過繞過檢測值的緩沖區(qū)溢出攻擊。

protectedDatacanary......buffer2023/2/5基于軟件的防御技術(shù)(續(xù))動態(tài)檢測方法(續(xù))輸入檢測方法向運行程序提供不同的輸入,檢查在這些輸入條件下程序是否出現(xiàn)緩沖區(qū)溢出問題。不僅能檢測緩沖區(qū)溢出問題,還可以檢測其它內(nèi)存越界問題。采用輸入檢測方法的工具有Purify、Fuzz和FIST(FaultInjectionSecurityTool)。缺點:系統(tǒng)性能明

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論