




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1應(yīng)用系統(tǒng)的編程安全1緩沖區(qū)溢出2格式化字符串漏洞3安全編程2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1應(yīng)用2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)21緩沖區(qū)溢出1).什么是緩沖區(qū)溢出簡單的說,緩沖區(qū)溢出(BufferOverflow)就是通過在程序的緩沖區(qū)寫入超出其長度的內(nèi)容,從而破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其他指令,以達(dá)到攻擊的目的。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)212022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)31緩沖區(qū)溢出1).什么是緩沖區(qū)溢出程序是從內(nèi)存低端向高端按順序存放的,輸入的形參按照自右至左的順序入棧,而堆棧的生長方向與內(nèi)存的生長方向相反,因此在堆棧中壓入的數(shù)據(jù)超過預(yù)先給堆棧分配的容量時,就會出現(xiàn)堆棧溢出。簡單地說,緩沖區(qū)溢出的原因是由于字符串處理等函數(shù)沒有對數(shù)組的越界加以監(jiān)視和限制,結(jié)果覆蓋了堆棧數(shù)據(jù)。緩沖區(qū)的溢出有各種不同的類型。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)312022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)41緩沖區(qū)溢出1).什么是緩沖區(qū)溢出一般而言,有以下幾種緩沖區(qū)溢出攻擊的方式:1)攻擊者可用任意數(shù)據(jù)覆蓋堆棧中變量的內(nèi)容。2)覆蓋堆棧中保存的寄存器內(nèi)容,導(dǎo)致程序崩潰。3)把堆棧里面的返回地址覆蓋,替換成一個自己指定的地方,而在那個地方,可以植入一些精心設(shè)計了的代碼以達(dá)到攻擊的目的。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)412022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)51緩沖區(qū)溢出基礎(chǔ)知識-寄存器 32位CPU所含有的寄存器有: 4個數(shù)據(jù)寄存器(EAX、EBX、ECX和EDX)
2個變址和指針寄存器(ESI和EDI)2個指針寄存器(ESP和EBP)
6個段寄存器(ES、CS、SS、DS、FS和GS)
1個指令指針寄存器(EIP)1個標(biāo)志寄存器(EFlags)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)512022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)61緩沖區(qū)溢出基礎(chǔ)知識-寄存器
4個數(shù)據(jù)寄存器(EAX、EBX、ECX和EDX):
數(shù)據(jù)寄存器主要用來保存操作數(shù)和運算結(jié)果等信息,從而節(jié)省讀取操作數(shù)所需占用總線和訪問存儲器的時間。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)612022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)71緩沖區(qū)溢出基礎(chǔ)知識-寄存器
2個變址寄存器(ESI和EDI):
寄存器ESI、EDI稱為變址寄存器(IndexRegister),它們主要用于存放存儲單元在段內(nèi)的偏移量,用它們可實現(xiàn)多種存儲器操作數(shù)的尋址方式,為以不同的地址形式訪問存儲單元提供方便。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)712022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)81緩沖區(qū)溢出基礎(chǔ)知識-寄存器
2個指針寄存器(ESP和EBP):
它們主要用于訪問堆棧內(nèi)的存儲單元,并且規(guī)定:
EBP為基指針(BasePointer)寄存器,用它可直接存取堆棧中的數(shù)據(jù);
ESP為堆棧指針(StackPointer)寄存器,用它只可訪問棧頂。
2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)812022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)91緩沖區(qū)溢出基礎(chǔ)知識-寄存器
6個段寄存器(ES、CS、SS、DS、FS和GS):
段寄存器是根據(jù)內(nèi)存分段的管理模式而設(shè)置的。內(nèi)存單元的物理地址由段寄存器的值和一個偏移量組合而成的,這樣可用兩個較少位數(shù)的值組合成一個可訪問較大物理空間的內(nèi)存地址。
CPU內(nèi)部的段寄存器:
ECS——代碼段寄存器(CodeSegmentRegister),
EDS——數(shù)據(jù)段寄存器(DataSegmentRegister),2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)912022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)101緩沖區(qū)溢出基礎(chǔ)知識-寄存器
EES——附加段寄存器(ExtraSegmentRegister),
ESS——堆棧段寄存器(StackSegmentRegister),
EFS——附加段寄存器(ExtraSegmentRegister),
EGS——附加段寄存器(ExtraSegmentRegister),2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1012022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)111緩沖區(qū)溢出基礎(chǔ)知識-寄存器
1個指令指針寄存器(EIP):
指令指針EIP(InstructionPointer)是存放下次將要執(zhí)行的指令在代碼段的偏移量。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)111121緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令sub:減法指令
第一個參數(shù)是被減數(shù)所在的寄存器,第二個參數(shù)是減數(shù)。add:加法指令
第一個參數(shù)是被加數(shù)所在的寄存器,第二個參數(shù)是加數(shù)。
注:sub和add指令常被用來操作堆棧,例如,如果要在堆棧中分配四個四字節(jié)長整型數(shù)的空間,就沒有必要調(diào)用四次push指令,簡單調(diào)用subesp,16(16=4*4)就可以了,當(dāng)然也可以調(diào)用add指令恢復(fù)堆棧。121緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令sub:減法指令131緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令push:入棧指令 32位平臺,push指令將一個32位的操作數(shù)壓入堆棧,導(dǎo)致esp減4。因為esp指向棧頂,且堆棧是向小地址生長的,所以會導(dǎo)致esp減4。pop:出桟指令
跟push指令對應(yīng),在32位平臺,pop指令將一個32的數(shù)彈出堆棧,會導(dǎo)致esp加4.pop指令的參數(shù)一般是寄存器,將棧頂?shù)臄?shù)據(jù)彈出到寄存器。131緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令push:入棧指令2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)141緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令call:調(diào)用函數(shù) call指令和jmp指令不同,call指令會先把下一條要執(zhí)行的指令入棧,然后跳到被調(diào)用的函數(shù)的地方。所以,call指令相當(dāng)于push+jmp。ret:從函數(shù)返回 ret指令和jmp指令不同,ret指令會先把函數(shù)的返回地址出桟,再跳到返回的地址。所以,ret指令相當(dāng)于pop+jmp。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)141棧幀的一般結(jié)構(gòu)2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)15…[local1][local2]…[localn][EBP][RET地址][參數(shù)1][參數(shù)2]…[參數(shù)n]棧幀的一般結(jié)構(gòu)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(緩沖區(qū)溢出程序1(test)關(guān)注函數(shù)調(diào)用時堆棧變化voidfoo(intm,intn){ intlocal; local=m+n;}
voidmain(){ intt1=0x1111; intt2=0x2222; foo(t1,t2);}2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)16緩沖區(qū)溢出程序1(test)關(guān)注函數(shù)調(diào)用時堆棧變化2022/緩沖區(qū)溢出方式
緩沖區(qū)溢出的原因是由于字符串處理等函數(shù)(strcpy、strcmp)沒有對數(shù)組的越界加以監(jiān)視和限制,結(jié)果覆蓋了堆棧數(shù)據(jù)。有以下幾種緩沖區(qū)溢出攻擊方式:1)攻擊者可用任意數(shù)據(jù)覆蓋堆棧中變量的內(nèi)容;2)覆蓋堆棧中保存的寄存器內(nèi)容,導(dǎo)致程序崩潰;3)把堆棧里面的返回地址覆蓋,替換成一個自己指定的地方,而在這個個地方,可以植入一些精心設(shè)計了的代碼以達(dá)到攻擊的目的。2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)17緩沖區(qū)溢出方式 緩沖區(qū)溢出的原因是由于字符串處理等函數(shù)(s2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)18
緩沖區(qū)溢出程序22).覆蓋堆棧中變量的內(nèi)容(7-2pass)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)182022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)19
緩沖區(qū)溢出程序33).覆蓋堆棧中寄存器的內(nèi)容(7-3字符覆蓋溢出)在棧上聲明的各種變量的位置就緊靠著調(diào)用函數(shù)的返回地址。如果用戶輸入的數(shù)據(jù)越過邊界就會將調(diào)用函數(shù)的返回地址覆蓋,造成程序崩潰。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)19
緩沖區(qū)溢出程序4 voidcome() { printf("Success!"); } voidtest(inti) { charbuf[12];//用于發(fā)生溢出的數(shù)組 intaddr[4]; intk=(int)&i-(int)buf; intgo=(int)&come;
addr[0]=(go<<24)>>24; addr[1]=(go<<16)>>24; addr[2]=(go<<8)>>24; addr[3]=go>>24;
for(intj=0;j<4;j++) { buf[k-j-1]=addr[3-j]; } } voidmain() { voidtest(inti); test(1); }20緩沖區(qū)溢出程序4 voidcome()202022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)212格式化字符串漏洞格式化字符串的漏洞產(chǎn)生于數(shù)據(jù)輸出函數(shù)中對輸出格式解析的缺陷,其根源也是C程序中不對數(shù)組邊界進(jìn)行檢查的緩沖區(qū)錯誤。以printf()函數(shù)為例:intprintf(constchar*format,agr1,agr2,……);format的內(nèi)容可能為(%s,%d,%p,%x,%n……),將數(shù)據(jù)格式化后輸出。這種函數(shù)的問題在于函數(shù)printf不能確定數(shù)據(jù)參數(shù)arg1,arg2,……究竟在什么地方結(jié)束,也就是說,它不知道參數(shù)的個數(shù)。printf函數(shù)只會根據(jù)format中的打印格式的數(shù)目依次打印堆棧中參數(shù)format后面地址的內(nèi)容。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2122022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)222格式化字符串漏洞1.printf中的缺陷第一個printf調(diào)用是正確的,第二個調(diào)用中則缺少了輸出數(shù)據(jù)的變量列表。那么第二個調(diào)用將引起編譯錯誤還是照常輸出數(shù)據(jù)?如果輸出數(shù)據(jù)又將是什么類型的數(shù)據(jù)呢?2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2222022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)232格式化字符串漏洞1.printf中的缺陷2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2322022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)242格式化字符串漏洞2.用printf讀取內(nèi)存數(shù)據(jù)輸入“%p,%p,%p……”,實際上可以讀出棧中的數(shù)據(jù)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2422022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)252格式化字符串漏洞3.用printf向內(nèi)存寫數(shù)據(jù)在格式化控制符中,有一種鮮為人知的控制符%n。這個控制符用于把當(dāng)前輸出的所有數(shù)據(jù)的長度寫回一個變量中去2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2522022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)262格式化字符串漏洞3.用printf向內(nèi)存寫數(shù)據(jù)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2622022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)272格式化字符串漏洞3.用printf向內(nèi)存寫數(shù)據(jù)這是因為程序中將變量num的地址壓入堆棧,作為printf()的第二個參數(shù),“%n”會將打印總長度保存到對應(yīng)參數(shù)的地址中去。打印結(jié)果見圖7-25,0x616161的十進(jìn)制值為1633771873,按照DWORD類型,其值長度為20。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2722022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)283安全編程程序的正確性是由程序的編寫者來保證的。為了避免出現(xiàn)緩沖區(qū)溢出的漏洞,在編寫程序的一開始就必須將安全因素考慮在內(nèi)。忽略了編碼的安全性大致來說有兩種。第一種是直接進(jìn)行設(shè)計、編寫、測試,然后發(fā)布,忘記了程序的安全性。或者設(shè)計者自認(rèn)為已經(jīng)考慮到了,而做出了錯誤的設(shè)計。第二種錯誤是在程序完成以后才考慮添加安全因素,在已經(jīng)完成了的功能外包裹上安全功能。這樣做不僅要付出非常昂貴的代價,更重要的是添加的安全功能有可能會影響已經(jīng)實現(xiàn)的功能,甚至?xí)斐赡承┕δ艿牟豢蓪崿F(xiàn)。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2832022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)293安全編程1.C語言的安全編程(1)對內(nèi)存訪問錯誤的檢測和修改。(2)對于緩沖區(qū)溢出的覆蓋錯誤,可由程序員預(yù)設(shè)緩沖區(qū)的大小。(3)指針引用是C中最靈活、最核心、最復(fù)雜,也是最易出錯的部分。(4)出于保密的需要,在程序設(shè)計時要涉及到創(chuàng)建密鑰或密碼等問題,具體到C程序設(shè)計中則是隨機(jī)數(shù)的選取和使用問題。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2932022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)303安全編程1.C語言的安全編程(5)C語言沒有提供異常處理機(jī)制,其異常檢測處理是由程序員預(yù)設(shè)完成的。微軟的MichaelHoward與DavidLeBlanc所合著的“WritingSecureCode”(編寫安全的代碼)一書中集中討論了編寫安全代碼的方方面面,讀者可進(jìn)一步閱讀。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3032022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)317.4軟件保護(hù)7.4.1軟件技術(shù)保護(hù)的基本原則7.4.2密碼保護(hù)技術(shù)7.4.3電子注冊保護(hù)技術(shù)7.4.4結(jié)合硬件的保護(hù)技術(shù)7.4.5基于數(shù)字簽名的保護(hù)技術(shù)7.4.6軟件水印7.4.7軟件的反動態(tài)跟蹤技術(shù)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3172022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)327.4.1安全編程軟件技術(shù)保護(hù)的基本原則(1)實用性。用戶購買的軟件,當(dāng)然會頻繁地使用,對合法用戶來說,如果在使用或安裝過程中加入太多的障礙,甚至需要改變計算機(jī)的硬件結(jié)構(gòu),會影響用戶購買的積極性。除非是功能上的需要,或是特定用戶群的強(qiáng)制性要求,任何純?yōu)榧用芏鴮τ脩籼岢龅囊恍┯布系囊?,都是不可接受的。況且,目前大多數(shù)計算機(jī)用戶都不敢自行改變計算機(jī)的硬件。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3272022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)337.4.1安全編程軟件技術(shù)保護(hù)的基本原則2)局部可共享特性。相當(dāng)多的計算機(jī)用戶,都需要一定范圍內(nèi)非商業(yè)目的的軟件交流,或?qū)W術(shù)性,或社交性,必須滿足他們這方面的要求。不能交流的軟件是沒有活力的,也是難以推廣的。當(dāng)然,這種交流不應(yīng)該是大范圍的、無限制性的。3)可重復(fù)使用性。計算機(jī)軟件被裝在計算機(jī)上,難免被損壞而需要重新安裝,如果因為加密而使買來的計算機(jī)軟件不能重新安裝,便可能給用戶帶來不必要的損失。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3372022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)347.4.2密碼保護(hù)技術(shù)密碼保護(hù)技術(shù)是在每一件軟件產(chǎn)品中都附帶一個密碼,在軟件安裝和運行過程中的某些關(guān)鍵環(huán)節(jié)要求用戶輸入該密碼,只有用戶輸入正確的密碼,軟件才能正確地安裝和正常地運行。優(yōu)點是:簡便易行,且無附加成本,是目前很流行的保護(hù)方法。缺點是:由于其密碼相對固定,要保證合法用戶獲得有效的密碼,就不能防止盜版者通過合法途徑獲取密碼后再進(jìn)行非法復(fù)制流通。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3472022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)357.4.2密碼保護(hù)技術(shù)在軟件載體上所附的序列號并不能直接輸入,對軟件實現(xiàn)解密,而只能將其作為該軟件的身份識別標(biāo)志,并通過向軟件生產(chǎn)者提供該標(biāo)識,以換取針對該軟件的解密密碼(即授權(quán)號),便可以限制該軟件的序列號直接被盜版流通,即使發(fā)生了盜版行為,也可能通過該授權(quán)過程來追訪盜版者的蹤跡??梢栽谑跈?quán)系統(tǒng)中對每一份軟件的可授權(quán)次數(shù)加以適當(dāng)?shù)南拗?。為了更進(jìn)一步防范盜版者在購買正版軟件后,先通過正當(dāng)途徑獲取授權(quán)號,然后再將授權(quán)號隨同盜版軟件一起復(fù)制傳播,可以考慮在授權(quán)號中加入授權(quán)日期信息。那樣,該授權(quán)號可以預(yù)先設(shè)定其有效時間,如果超過了規(guī)定的日期后,該授權(quán)號即自行失效。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3572022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)367.4.3電子注冊保護(hù)技術(shù)用戶可在網(wǎng)上獲得使用采用該技術(shù)加密的軟件,這時該軟件一般是功能受限制,或者使用時間受限制,或者經(jīng)常出現(xiàn)要求注冊的畫面等。用戶使用后覺得滿意,可按要求進(jìn)行注冊,注冊法因開發(fā)商而異。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3672022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)377.4.3電子注冊保護(hù)技術(shù)下面給出4種注冊法:1)用戶交費之后,軟件公司會告訴用戶一個地址、用戶名和密碼,然后用戶去那個地址就可以下載到正式版。2)用戶交費之后,軟件公司會通過E-mail傳給用戶一個文件,用戶把這個文件復(fù)制到軟件安裝的目錄之后,就成為正式用戶了。一般來說,這個文件很小(幾百個Bytes和幾K)。這些文件一般來說擴(kuò)展名是*.reg(注冊表文件)或*.1ic。3)軟件給出該軟件的序列號,用戶交費時把這一序列號一起寄給軟件提供商或開發(fā)商,軟件開發(fā)商利用注冊機(jī)(軟件)產(chǎn)生該軟件的注冊號寄給用戶即可。4)用戶按要求填寫個人資料,交費時把這份個人資料一起寄給軟件提供商或開發(fā)商,軟件開發(fā)商利用注冊機(jī)(軟件)產(chǎn)生該軟件的注冊號寄給用戶即可。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3772022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)387.4.3電子注冊保護(hù)技術(shù)電子注冊保護(hù)方式的優(yōu)點是:不需要任何硬件或軟盤,方便易用,價格低廉。電子注冊保護(hù)方式的缺點是:網(wǎng)上付費方式尚未標(biāo)準(zhǔn)化,能夠接受的人不2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3872022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)397.4.4結(jié)合硬件的保護(hù)技術(shù)1.“鑰匙盤”2.光盤3.ROM片4.軟件狗2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3972022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)407.4.5基于數(shù)字簽名的保護(hù)技術(shù)一種簽名方案,該系統(tǒng)由三部分組成:1)簽證中心。中心的任務(wù)是對每個軟件供應(yīng)商的資格進(jìn)行審查,審查合格者,發(fā)給簽證密鑰。2)軟件供應(yīng)商。發(fā)行軟件的售主或個人。3)用戶。從軟件供應(yīng)商那里購買軟件的顧客。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4072022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)417.4.5基于數(shù)字簽名的保護(hù)技術(shù)系統(tǒng)包含三個階段:1)預(yù)約階段。在本階段里,軟件供應(yīng)商向中心提出申請,中心審查軟件供應(yīng)商資格,若審查通過,中心就向他發(fā)放一個簽證密鑰。這種發(fā)放的優(yōu)點是用戶可確認(rèn)中心是否向軟件供應(yīng)商授權(quán)。2)分發(fā)階段。在本階段里,軟件供應(yīng)商用簽證密鑰來簽署他們所發(fā)行的程序,并把簽名的程序分發(fā)給用戶。3)鑒別階段。當(dāng)用戶得到程序時,啟用基于身份的代理簽名系統(tǒng)驗證這些程序是否確實為軟件供應(yīng)商所發(fā)行,并進(jìn)一步驗證是否存在訛誤。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4172022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)427.4.6軟件水印所謂軟件水印,就是把程序的版權(quán)信息和用戶身份信息嵌入到程序中。它是近年來出現(xiàn)的軟件產(chǎn)品版權(quán)保護(hù)技術(shù),可以用來標(biāo)識作者、發(fā)行者、所有者、使用者等,并攜帶有版權(quán)保護(hù)信息和身份認(rèn)證信息,可以鑒別出非法復(fù)制和盜用的軟件產(chǎn)品。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4272022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)437.4.6軟件水印根據(jù)水印的嵌入位置,軟件水印可以分為代碼水印和數(shù)據(jù)水印。代碼水印隱藏在程序的指令部分?jǐn)?shù)據(jù)水印則隱藏在包括頭文件、字符串和調(diào)試信息等數(shù)據(jù)中。根據(jù)水印被加載的時刻,軟件水印可分為靜態(tài)水印和動態(tài)水印。靜態(tài)水印存儲在可執(zhí)行程序代碼中,比較典型的是把水印信息放在安裝模塊部分,或者是指令代碼中,或者是調(diào)試信息的符號部分。區(qū)別于靜態(tài)水印,動態(tài)水印則保存在程序的執(zhí)行狀態(tài)中,而不是程序源代碼本身。這種水印可用于證明程序是否經(jīng)過了迷亂變換處理。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4372022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)447.4.6軟件水印根據(jù)水印的嵌入位置,軟件水印可以分為代碼水印和數(shù)據(jù)水印。代碼水印隱藏在程序的指令部分?jǐn)?shù)據(jù)水印則隱藏在包括頭文件、字符串和調(diào)試信息等數(shù)據(jù)中。根據(jù)水印被加載的時刻,軟件水印可分為靜態(tài)水印和動態(tài)水印。靜態(tài)水印存儲在可執(zhí)行程序代碼中,比較典型的是把水印信息放在安裝模塊部分,或者是指令代碼中,或者是調(diào)試信息的符號部分。區(qū)別于靜態(tài)水印,動態(tài)水印則保存在程序的執(zhí)行狀態(tài)中,而不是程序源代碼本身。這種水印可用于證明程序是否經(jīng)過了迷亂變換處理。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4472022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)457.4.7軟件的反動態(tài)跟蹤技術(shù)軟件的反動態(tài)跟蹤技術(shù),是指防止破譯者利用各種各樣的軟件動態(tài)調(diào)試、動態(tài)跟蹤工具,對被保護(hù)的軟件進(jìn)行動態(tài)跟蹤、分析和破譯的技術(shù)。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4572022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)467.5安全軟件工程7.5.1需求分析7.5.2設(shè)計與驗證7.5.3編程控制7.5.4測試控制7.5.5運行維護(hù)管理7.5.6行政管理控制2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4672022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)477.5.1需求分析階段的安全措施詳細(xì)說明安全與保密要求;把安全保密分配到處理流程中;確定用戶數(shù)據(jù)的敏感等級;確定安全計劃,建立安全模型。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4772022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)487.5.2設(shè)計驗證階段的安全措施驗證安全模型的正確性設(shè)計整體安全機(jī)制和安全方案(自己實現(xiàn)的和利用系統(tǒng)安全功能)把安全要求分解到相關(guān)模塊中,把對數(shù)據(jù)的安全要求體現(xiàn)在安全數(shù)據(jù)庫的設(shè)計中。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4872022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)497.5.3編程階段的安全控制按要求實現(xiàn)各模塊的安全功能;組織獨立人員審查模塊代碼;(仔細(xì)閱讀源程序)保護(hù)源代碼不與無關(guān)人員接觸。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4972022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)507.5.4測試階段安全控制測試各模塊安全功能,最好通過第三方獨立測試;根據(jù)安全要求綜合測試程序與運行環(huán)境;組織安全專業(yè)人員進(jìn)行攻擊性測試。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)5072022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)517.5.5運行維護(hù)階段的安全控制成立軟件配置管理機(jī)構(gòu)對提交運行的軟件,對其任何修改必須得到批準(zhǔn);對修改后的源程序需要再審查;由配置管理機(jī)構(gòu)自己對源代碼編譯生成目標(biāo)代碼,防止引入不安全功能。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)5172022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)527.4.6行政管理控制1、指定程序開發(fā)標(biāo)準(zhǔn)1)設(shè)計標(biāo)準(zhǔn):專用設(shè)計工具、語言或方法的使用;2)文件、語言和編碼風(fēng)格的標(biāo)準(zhǔn);3)編程標(biāo)準(zhǔn),包括強(qiáng)制性的程序員對等檢查,以及對程序的正確性和與標(biāo)準(zhǔn)的一致性進(jìn)行周期性的代碼審查;4)測試標(biāo)準(zhǔn),驗證技術(shù)、獨立測試、測試結(jié)果的存檔備查;5)配置管理標(biāo)準(zhǔn):控制對成品程序的訪問與修改;2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)5272022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)537.4.6行政管理控制2、實施程序開發(fā)標(biāo)準(zhǔn)遵循程序開發(fā)標(biāo)準(zhǔn)有利于項目的持續(xù)進(jìn)行,即使項目中途換人,也不影響項目按標(biāo)準(zhǔn)完成。對開發(fā)安全軟件的公司需要進(jìn)行安全審計。由一個獨立的安全評價小組以不聲張的方式檢查每一個項目。該小組檢查設(shè)計、文件和代碼。這本身就是一種警告性措施。程序員不太可能在模塊中放入可疑代碼。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)5372022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)547.4.6行政管理控制3、責(zé)任分開:模塊化編程和設(shè)計迫使程序員取得非法的程序結(jié)果必須合謀,由獨立測試小組而不是由編寫這段程序的程序員對模塊進(jìn)行測試,這些分離措施可以使程序具有更高的安全性。4、對職員的管理:招收雇員時需要調(diào)查其背景,在公司對他取得信任之前,應(yīng)限制其訪問權(quán)限。為了安全上的原因公司還應(yīng)該要求其遵守一般的行為準(zhǔn)則。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)5472022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)55思考與練習(xí)
7.1試述計算機(jī)病毒的一般構(gòu)成、各個功能模塊的作用和作用機(jī)制。7.2簡述計算機(jī)病毒的防治措施和感染病毒后的修復(fù)方法。7.3什么是計算機(jī)病毒免疫?7.4一個計算機(jī)程序能用來自動測試陷門嗎?也就是說,你能夠設(shè)計一個計算機(jī)程序,在給定另一個程序的源或目標(biāo)代碼以及對那個程序的適當(dāng)描述后,能夠?qū)@個程序中是否存在陷門回答“是”與“否”嗎?說明你的方法。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)55思2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)567.5使用瑞星殺毒軟件單機(jī)版和網(wǎng)絡(luò)版在實際環(huán)境下對單機(jī)和網(wǎng)絡(luò)系統(tǒng)進(jìn)行病毒的查殺,并檢測系統(tǒng)漏洞,分析單機(jī)版和網(wǎng)絡(luò)版在應(yīng)用上和功能上的區(qū)別。7.6如何防止把帶有木馬的程序裝入內(nèi)存運行,請給出幾個有效的辦法,并說明這些方法對系統(tǒng)運行效率的影響。7.7模塊化的影響有好有壞。一個過度模塊化的程序以很小的模塊方式完成它的操作,因而難以獲得一個總的輪廓。要知道許多模塊單獨的功能很容易,但卻不容易確定它們結(jié)合起來做什么。請建議一種能夠在程序開發(fā)中用來維護(hù)這種輪廓的方法。
2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)5672022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)577.8根據(jù)程序語言中出現(xiàn)的安全問題,如越界問題、不安全的信息流問題,你覺得編譯器應(yīng)如何解決這些問題?7.9開發(fā)一個安全程序的主要手段有哪些?說明這些手段發(fā)揮的作用各是什么?7.10網(wǎng)絡(luò)蠕蟲的好壞作用有哪些?如果蠕蟲進(jìn)入網(wǎng)絡(luò)中的一個計算機(jī)系統(tǒng)后,完成某項任務(wù)(如在屏幕上留下—行公告信息或建立一個小進(jìn)程)后,并未在系統(tǒng)中留下特殊的標(biāo)記就退出該計算機(jī)系統(tǒng),繼續(xù)在網(wǎng)絡(luò)中尋找另一個計算機(jī)系統(tǒng)。請問這種蠕蟲會不會在在網(wǎng)絡(luò)造成危害,為什么弘如果你的網(wǎng)絡(luò)中出現(xiàn)這類蠕蟲,你將如何消除它?2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)5772022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)587.11病毒程序與蠕蟲程序的主要差別有哪些?限制病毒的傳播速度的有效措施有哪些?7.12對照一般軟件工程的概念,安全軟件工程主要增添了哪些任務(wù)?7.13實驗:Web安全控制。實驗主要內(nèi)容:IE6.0中新增安全功能的使用;使用IESecurity工具;為Web應(yīng)用程序建立、安裝服務(wù)器證書;為Web應(yīng)用程序(站點)配置SSL等。
2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)5872022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)59應(yīng)用系統(tǒng)的編程安全1緩沖區(qū)溢出2格式化字符串漏洞3安全編程2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1應(yīng)用2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)601緩沖區(qū)溢出1).什么是緩沖區(qū)溢出簡單的說,緩沖區(qū)溢出(BufferOverflow)就是通過在程序的緩沖區(qū)寫入超出其長度的內(nèi)容,從而破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其他指令,以達(dá)到攻擊的目的。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)212022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)611緩沖區(qū)溢出1).什么是緩沖區(qū)溢出程序是從內(nèi)存低端向高端按順序存放的,輸入的形參按照自右至左的順序入棧,而堆棧的生長方向與內(nèi)存的生長方向相反,因此在堆棧中壓入的數(shù)據(jù)超過預(yù)先給堆棧分配的容量時,就會出現(xiàn)堆棧溢出。簡單地說,緩沖區(qū)溢出的原因是由于字符串處理等函數(shù)沒有對數(shù)組的越界加以監(jiān)視和限制,結(jié)果覆蓋了堆棧數(shù)據(jù)。緩沖區(qū)的溢出有各種不同的類型。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)312022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)621緩沖區(qū)溢出1).什么是緩沖區(qū)溢出一般而言,有以下幾種緩沖區(qū)溢出攻擊的方式:1)攻擊者可用任意數(shù)據(jù)覆蓋堆棧中變量的內(nèi)容。2)覆蓋堆棧中保存的寄存器內(nèi)容,導(dǎo)致程序崩潰。3)把堆棧里面的返回地址覆蓋,替換成一個自己指定的地方,而在那個地方,可以植入一些精心設(shè)計了的代碼以達(dá)到攻擊的目的。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)412022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)631緩沖區(qū)溢出基礎(chǔ)知識-寄存器 32位CPU所含有的寄存器有: 4個數(shù)據(jù)寄存器(EAX、EBX、ECX和EDX)
2個變址和指針寄存器(ESI和EDI)2個指針寄存器(ESP和EBP)
6個段寄存器(ES、CS、SS、DS、FS和GS)
1個指令指針寄存器(EIP)1個標(biāo)志寄存器(EFlags)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)512022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)641緩沖區(qū)溢出基礎(chǔ)知識-寄存器
4個數(shù)據(jù)寄存器(EAX、EBX、ECX和EDX):
數(shù)據(jù)寄存器主要用來保存操作數(shù)和運算結(jié)果等信息,從而節(jié)省讀取操作數(shù)所需占用總線和訪問存儲器的時間。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)612022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)651緩沖區(qū)溢出基礎(chǔ)知識-寄存器
2個變址寄存器(ESI和EDI):
寄存器ESI、EDI稱為變址寄存器(IndexRegister),它們主要用于存放存儲單元在段內(nèi)的偏移量,用它們可實現(xiàn)多種存儲器操作數(shù)的尋址方式,為以不同的地址形式訪問存儲單元提供方便。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)712022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)661緩沖區(qū)溢出基礎(chǔ)知識-寄存器
2個指針寄存器(ESP和EBP):
它們主要用于訪問堆棧內(nèi)的存儲單元,并且規(guī)定:
EBP為基指針(BasePointer)寄存器,用它可直接存取堆棧中的數(shù)據(jù);
ESP為堆棧指針(StackPointer)寄存器,用它只可訪問棧頂。
2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)812022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)671緩沖區(qū)溢出基礎(chǔ)知識-寄存器
6個段寄存器(ES、CS、SS、DS、FS和GS):
段寄存器是根據(jù)內(nèi)存分段的管理模式而設(shè)置的。內(nèi)存單元的物理地址由段寄存器的值和一個偏移量組合而成的,這樣可用兩個較少位數(shù)的值組合成一個可訪問較大物理空間的內(nèi)存地址。
CPU內(nèi)部的段寄存器:
ECS——代碼段寄存器(CodeSegmentRegister),
EDS——數(shù)據(jù)段寄存器(DataSegmentRegister),2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)912022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)681緩沖區(qū)溢出基礎(chǔ)知識-寄存器
EES——附加段寄存器(ExtraSegmentRegister),
ESS——堆棧段寄存器(StackSegmentRegister),
EFS——附加段寄存器(ExtraSegmentRegister),
EGS——附加段寄存器(ExtraSegmentRegister),2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1012022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)691緩沖區(qū)溢出基礎(chǔ)知識-寄存器
1個指令指針寄存器(EIP):
指令指針EIP(InstructionPointer)是存放下次將要執(zhí)行的指令在代碼段的偏移量。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)111701緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令sub:減法指令
第一個參數(shù)是被減數(shù)所在的寄存器,第二個參數(shù)是減數(shù)。add:加法指令
第一個參數(shù)是被加數(shù)所在的寄存器,第二個參數(shù)是加數(shù)。
注:sub和add指令常被用來操作堆棧,例如,如果要在堆棧中分配四個四字節(jié)長整型數(shù)的空間,就沒有必要調(diào)用四次push指令,簡單調(diào)用subesp,16(16=4*4)就可以了,當(dāng)然也可以調(diào)用add指令恢復(fù)堆棧。121緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令sub:減法指令711緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令push:入棧指令 32位平臺,push指令將一個32位的操作數(shù)壓入堆棧,導(dǎo)致esp減4。因為esp指向棧頂,且堆棧是向小地址生長的,所以會導(dǎo)致esp減4。pop:出桟指令
跟push指令對應(yīng),在32位平臺,pop指令將一個32的數(shù)彈出堆棧,會導(dǎo)致esp加4.pop指令的參數(shù)一般是寄存器,將棧頂?shù)臄?shù)據(jù)彈出到寄存器。131緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令push:入棧指令2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)721緩沖區(qū)溢出基礎(chǔ)知識-常用匯編指令call:調(diào)用函數(shù) call指令和jmp指令不同,call指令會先把下一條要執(zhí)行的指令入棧,然后跳到被調(diào)用的函數(shù)的地方。所以,call指令相當(dāng)于push+jmp。ret:從函數(shù)返回 ret指令和jmp指令不同,ret指令會先把函數(shù)的返回地址出桟,再跳到返回的地址。所以,ret指令相當(dāng)于pop+jmp。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)141棧幀的一般結(jié)構(gòu)2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)73…[local1][local2]…[localn][EBP][RET地址][參數(shù)1][參數(shù)2]…[參數(shù)n]棧幀的一般結(jié)構(gòu)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(緩沖區(qū)溢出程序1(test)關(guān)注函數(shù)調(diào)用時堆棧變化voidfoo(intm,intn){ intlocal; local=m+n;}
voidmain(){ intt1=0x1111; intt2=0x2222; foo(t1,t2);}2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)74緩沖區(qū)溢出程序1(test)關(guān)注函數(shù)調(diào)用時堆棧變化2022/緩沖區(qū)溢出方式
緩沖區(qū)溢出的原因是由于字符串處理等函數(shù)(strcpy、strcmp)沒有對數(shù)組的越界加以監(jiān)視和限制,結(jié)果覆蓋了堆棧數(shù)據(jù)。有以下幾種緩沖區(qū)溢出攻擊方式:1)攻擊者可用任意數(shù)據(jù)覆蓋堆棧中變量的內(nèi)容;2)覆蓋堆棧中保存的寄存器內(nèi)容,導(dǎo)致程序崩潰;3)把堆棧里面的返回地址覆蓋,替換成一個自己指定的地方,而在這個個地方,可以植入一些精心設(shè)計了的代碼以達(dá)到攻擊的目的。2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)75緩沖區(qū)溢出方式 緩沖區(qū)溢出的原因是由于字符串處理等函數(shù)(s2022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)76
緩沖區(qū)溢出程序22).覆蓋堆棧中變量的內(nèi)容(7-2pass)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)182022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)77
緩沖區(qū)溢出程序33).覆蓋堆棧中寄存器的內(nèi)容(7-3字符覆蓋溢出)在棧上聲明的各種變量的位置就緊靠著調(diào)用函數(shù)的返回地址。如果用戶輸入的數(shù)據(jù)越過邊界就會將調(diào)用函數(shù)的返回地址覆蓋,造成程序崩潰。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)19
緩沖區(qū)溢出程序4 voidcome() { printf("Success!"); } voidtest(inti) { charbuf[12];//用于發(fā)生溢出的數(shù)組 intaddr[4]; intk=(int)&i-(int)buf; intgo=(int)&come;
addr[0]=(go<<24)>>24; addr[1]=(go<<16)>>24; addr[2]=(go<<8)>>24; addr[3]=go>>24;
for(intj=0;j<4;j++) { buf[k-j-1]=addr[3-j]; } } voidmain() { voidtest(inti); test(1); }78緩沖區(qū)溢出程序4 voidcome()202022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)792格式化字符串漏洞格式化字符串的漏洞產(chǎn)生于數(shù)據(jù)輸出函數(shù)中對輸出格式解析的缺陷,其根源也是C程序中不對數(shù)組邊界進(jìn)行檢查的緩沖區(qū)錯誤。以printf()函數(shù)為例:intprintf(constchar*format,agr1,agr2,……);format的內(nèi)容可能為(%s,%d,%p,%x,%n……),將數(shù)據(jù)格式化后輸出。這種函數(shù)的問題在于函數(shù)printf不能確定數(shù)據(jù)參數(shù)arg1,arg2,……究竟在什么地方結(jié)束,也就是說,它不知道參數(shù)的個數(shù)。printf函數(shù)只會根據(jù)format中的打印格式的數(shù)目依次打印堆棧中參數(shù)format后面地址的內(nèi)容。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2122022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)802格式化字符串漏洞1.printf中的缺陷第一個printf調(diào)用是正確的,第二個調(diào)用中則缺少了輸出數(shù)據(jù)的變量列表。那么第二個調(diào)用將引起編譯錯誤還是照常輸出數(shù)據(jù)?如果輸出數(shù)據(jù)又將是什么類型的數(shù)據(jù)呢?2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2222022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)812格式化字符串漏洞1.printf中的缺陷2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2322022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)822格式化字符串漏洞2.用printf讀取內(nèi)存數(shù)據(jù)輸入“%p,%p,%p……”,實際上可以讀出棧中的數(shù)據(jù)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2422022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)832格式化字符串漏洞3.用printf向內(nèi)存寫數(shù)據(jù)在格式化控制符中,有一種鮮為人知的控制符%n。這個控制符用于把當(dāng)前輸出的所有數(shù)據(jù)的長度寫回一個變量中去2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2522022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)842格式化字符串漏洞3.用printf向內(nèi)存寫數(shù)據(jù)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2622022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)852格式化字符串漏洞3.用printf向內(nèi)存寫數(shù)據(jù)這是因為程序中將變量num的地址壓入堆棧,作為printf()的第二個參數(shù),“%n”會將打印總長度保存到對應(yīng)參數(shù)的地址中去。打印結(jié)果見圖7-25,0x616161的十進(jìn)制值為1633771873,按照DWORD類型,其值長度為20。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2722022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)863安全編程程序的正確性是由程序的編寫者來保證的。為了避免出現(xiàn)緩沖區(qū)溢出的漏洞,在編寫程序的一開始就必須將安全因素考慮在內(nèi)。忽略了編碼的安全性大致來說有兩種。第一種是直接進(jìn)行設(shè)計、編寫、測試,然后發(fā)布,忘記了程序的安全性?;蛘咴O(shè)計者自認(rèn)為已經(jīng)考慮到了,而做出了錯誤的設(shè)計。第二種錯誤是在程序完成以后才考慮添加安全因素,在已經(jīng)完成了的功能外包裹上安全功能。這樣做不僅要付出非常昂貴的代價,更重要的是添加的安全功能有可能會影響已經(jīng)實現(xiàn)的功能,甚至?xí)斐赡承┕δ艿牟豢蓪崿F(xiàn)。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2832022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)873安全編程1.C語言的安全編程(1)對內(nèi)存訪問錯誤的檢測和修改。(2)對于緩沖區(qū)溢出的覆蓋錯誤,可由程序員預(yù)設(shè)緩沖區(qū)的大小。(3)指針引用是C中最靈活、最核心、最復(fù)雜,也是最易出錯的部分。(4)出于保密的需要,在程序設(shè)計時要涉及到創(chuàng)建密鑰或密碼等問題,具體到C程序設(shè)計中則是隨機(jī)數(shù)的選取和使用問題。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)2932022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)883安全編程1.C語言的安全編程(5)C語言沒有提供異常處理機(jī)制,其異常檢測處理是由程序員預(yù)設(shè)完成的。微軟的MichaelHoward與DavidLeBlanc所合著的“WritingSecureCode”(編寫安全的代碼)一書中集中討論了編寫安全代碼的方方面面,讀者可進(jìn)一步閱讀。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3032022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)897.4軟件保護(hù)7.4.1軟件技術(shù)保護(hù)的基本原則7.4.2密碼保護(hù)技術(shù)7.4.3電子注冊保護(hù)技術(shù)7.4.4結(jié)合硬件的保護(hù)技術(shù)7.4.5基于數(shù)字簽名的保護(hù)技術(shù)7.4.6軟件水印7.4.7軟件的反動態(tài)跟蹤技術(shù)2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3172022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)907.4.1安全編程軟件技術(shù)保護(hù)的基本原則(1)實用性。用戶購買的軟件,當(dāng)然會頻繁地使用,對合法用戶來說,如果在使用或安裝過程中加入太多的障礙,甚至需要改變計算機(jī)的硬件結(jié)構(gòu),會影響用戶購買的積極性。除非是功能上的需要,或是特定用戶群的強(qiáng)制性要求,任何純?yōu)榧用芏鴮τ脩籼岢龅囊恍┯布系囊螅际遣豢山邮艿?。況且,目前大多數(shù)計算機(jī)用戶都不敢自行改變計算機(jī)的硬件。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3272022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)917.4.1安全編程軟件技術(shù)保護(hù)的基本原則2)局部可共享特性。相當(dāng)多的計算機(jī)用戶,都需要一定范圍內(nèi)非商業(yè)目的的軟件交流,或?qū)W術(shù)性,或社交性,必須滿足他們這方面的要求。不能交流的軟件是沒有活力的,也是難以推廣的。當(dāng)然,這種交流不應(yīng)該是大范圍的、無限制性的。3)可重復(fù)使用性。計算機(jī)軟件被裝在計算機(jī)上,難免被損壞而需要重新安裝,如果因為加密而使買來的計算機(jī)軟件不能重新安裝,便可能給用戶帶來不必要的損失。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3372022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)927.4.2密碼保護(hù)技術(shù)密碼保護(hù)技術(shù)是在每一件軟件產(chǎn)品中都附帶一個密碼,在軟件安裝和運行過程中的某些關(guān)鍵環(huán)節(jié)要求用戶輸入該密碼,只有用戶輸入正確的密碼,軟件才能正確地安裝和正常地運行。優(yōu)點是:簡便易行,且無附加成本,是目前很流行的保護(hù)方法。缺點是:由于其密碼相對固定,要保證合法用戶獲得有效的密碼,就不能防止盜版者通過合法途徑獲取密碼后再進(jìn)行非法復(fù)制流通。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3472022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)937.4.2密碼保護(hù)技術(shù)在軟件載體上所附的序列號并不能直接輸入,對軟件實現(xiàn)解密,而只能將其作為該軟件的身份識別標(biāo)志,并通過向軟件生產(chǎn)者提供該標(biāo)識,以換取針對該軟件的解密密碼(即授權(quán)號),便可以限制該軟件的序列號直接被盜版流通,即使發(fā)生了盜版行為,也可能通過該授權(quán)過程來追訪盜版者的蹤跡??梢栽谑跈?quán)系統(tǒng)中對每一份軟件的可授權(quán)次數(shù)加以適當(dāng)?shù)南拗?。為了更進(jìn)一步防范盜版者在購買正版軟件后,先通過正當(dāng)途徑獲取授權(quán)號,然后再將授權(quán)號隨同盜版軟件一起復(fù)制傳播,可以考慮在授權(quán)號中加入授權(quán)日期信息。那樣,該授權(quán)號可以預(yù)先設(shè)定其有效時間,如果超過了規(guī)定的日期后,該授權(quán)號即自行失效。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3572022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)947.4.3電子注冊保護(hù)技術(shù)用戶可在網(wǎng)上獲得使用采用該技術(shù)加密的軟件,這時該軟件一般是功能受限制,或者使用時間受限制,或者經(jīng)常出現(xiàn)要求注冊的畫面等。用戶使用后覺得滿意,可按要求進(jìn)行注冊,注冊法因開發(fā)商而異。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3672022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)957.4.3電子注冊保護(hù)技術(shù)下面給出4種注冊法:1)用戶交費之后,軟件公司會告訴用戶一個地址、用戶名和密碼,然后用戶去那個地址就可以下載到正式版。2)用戶交費之后,軟件公司會通過E-mail傳給用戶一個文件,用戶把這個文件復(fù)制到軟件安裝的目錄之后,就成為正式用戶了。一般來說,這個文件很小(幾百個Bytes和幾K)。這些文件一般來說擴(kuò)展名是*.reg(注冊表文件)或*.1ic。3)軟件給出該軟件的序列號,用戶交費時把這一序列號一起寄給軟件提供商或開發(fā)商,軟件開發(fā)商利用注冊機(jī)(軟件)產(chǎn)生該軟件的注冊號寄給用戶即可。4)用戶按要求填寫個人資料,交費時把這份個人資料一起寄給軟件提供商或開發(fā)商,軟件開發(fā)商利用注冊機(jī)(軟件)產(chǎn)生該軟件的注冊號寄給用戶即可。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3772022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)967.4.3電子注冊保護(hù)技術(shù)電子注冊保護(hù)方式的優(yōu)點是:不需要任何硬件或軟盤,方便易用,價格低廉。電子注冊保護(hù)方式的缺點是:網(wǎng)上付費方式尚未標(biāo)準(zhǔn)化,能夠接受的人不2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3872022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)977.4.4結(jié)合硬件的保護(hù)技術(shù)1.“鑰匙盤”2.光盤3.ROM片4.軟件狗2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)3972022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)987.4.5基于數(shù)字簽名的保護(hù)技術(shù)一種簽名方案,該系統(tǒng)由三部分組成:1)簽證中心。中心的任務(wù)是對每個軟件供應(yīng)商的資格進(jìn)行審查,審查合格者,發(fā)給簽證密鑰。2)軟件供應(yīng)商。發(fā)行軟件的售主或個人。3)用戶。從軟件供應(yīng)商那里購買軟件的顧客。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4072022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)997.4.5基于數(shù)字簽名的保護(hù)技術(shù)系統(tǒng)包含三個階段:1)預(yù)約階段。在本階段里,軟件供應(yīng)商向中心提出申請,中心審查軟件供應(yīng)商資格,若審查通過,中心就向他發(fā)放一個簽證密鑰。這種發(fā)放的優(yōu)點是用戶可確認(rèn)中心是否向軟件供應(yīng)商授權(quán)。2)分發(fā)階段。在本階段里,軟件供應(yīng)商用簽證密鑰來簽署他們所發(fā)行的程序,并把簽名的程序分發(fā)給用戶。3)鑒別階段。當(dāng)用戶得到程序時,啟用基于身份的代理簽名系統(tǒng)驗證這些程序是否確實為軟件供應(yīng)商所發(fā)行,并進(jìn)一步驗證是否存在訛誤。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4172022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1007.4.6軟件水印所謂軟件水印,就是把程序的版權(quán)信息和用戶身份信息嵌入到程序中。它是近年來出現(xiàn)的軟件產(chǎn)品版權(quán)保護(hù)技術(shù),可以用來標(biāo)識作者、發(fā)行者、所有者、使用者等,并攜帶有版權(quán)保護(hù)信息和身份認(rèn)證信息,可以鑒別出非法復(fù)制和盜用的軟件產(chǎn)品。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4272022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1017.4.6軟件水印根據(jù)水印的嵌入位置,軟件水印可以分為代碼水印和數(shù)據(jù)水印。代碼水印隱藏在程序的指令部分?jǐn)?shù)據(jù)水印則隱藏在包括頭文件、字符串和調(diào)試信息等數(shù)據(jù)中。根據(jù)水印被加載的時刻,軟件水印可分為靜態(tài)水印和動態(tài)水印。靜態(tài)水印存儲在可執(zhí)行程序代碼中,比較典型的是把水印信息放在安裝模塊部分,或者是指令代碼中,或者是調(diào)試信息的符號部分。區(qū)別于靜態(tài)水印,動態(tài)水印則保存在程序的執(zhí)行狀態(tài)中,而不是程序源代碼本身。這種水印可用于證明程序是否經(jīng)過了迷亂變換處理。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4372022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1027.4.6軟件水印根據(jù)水印的嵌入位置,軟件水印可以分為代碼水印和數(shù)據(jù)水印。代碼水印隱藏在程序的指令部分?jǐn)?shù)據(jù)水印則隱藏在包括頭文件、字符串和調(diào)試信息等數(shù)據(jù)中。根據(jù)水印被加載的時刻,軟件水印可分為靜態(tài)水印和動態(tài)水印。靜態(tài)水印存儲在可執(zhí)行程序代碼中,比較典型的是把水印信息放在安裝模塊部分,或者是指令代碼中,或者是調(diào)試信息的符號部分。區(qū)別于靜態(tài)水印,動態(tài)水印則保存在程序的執(zhí)行狀態(tài)中,而不是程序源代碼本身。這種水印可用于證明程序是否經(jīng)過了迷亂變換處理。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4472022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1037.4.7軟件的反動態(tài)跟蹤技術(shù)軟件的反動態(tài)跟蹤技術(shù),是指防止破譯者利用各種各樣的軟件動態(tài)調(diào)試、動態(tài)跟蹤工具,對被保護(hù)的軟件進(jìn)行動態(tài)跟蹤、分析和破譯的技術(shù)。2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4572022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1047.5安全軟件工程7.5.1需求分析7.5.2設(shè)計與驗證7.5.3編程控制7.5.4測試控制7.5.5運行維護(hù)管理7.5.6行政管理控制2022/12/18計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)4672022/12/19計算機(jī)系統(tǒng)安全原理與技術(shù)(第2版)1057.5.1需求
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 哈爾濱高三數(shù)學(xué)試卷
- 和我一起去做數(shù)學(xué)試卷
- 半導(dǎo)體技術(shù)課件第三章
- 河北單招語文和數(shù)學(xué)試卷
- 中國風(fēng)電機(jī)組行業(yè)市場全景評估及發(fā)展戰(zhàn)略規(guī)劃報告
- 中國冰蓄冷空調(diào)行業(yè)市場全景評估及投資前景展望報告
- 2025年中國消費型鋰電行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃研究報告
- 中國氣流干燥機(jī)行業(yè)發(fā)展趨勢預(yù)測及投資戰(zhàn)略咨詢報告
- 2024年年暖通項目資金申請報告代可行性研究報告
- 榮成網(wǎng)格員信用管理辦法
- 2025年大連市高校畢業(yè)生“三支一扶”計劃招募筆試考試試題【答案】
- 2025河南行政執(zhí)法資格考試模擬卷(含答案)
- 腫瘤病人護(hù)理課件
- 車輛掛名使用權(quán)轉(zhuǎn)讓與免責(zé)保障協(xié)議
- 2025年華僑港澳臺學(xué)生聯(lián)招考試英語試卷試題(含答案詳解)
- DL-T5706-2014火力發(fā)電工程施工組織設(shè)計導(dǎo)則
- JT-T 1495-2024 公路水運危險性較大工程專項施工方案編制審查規(guī)程
- 機(jī)場FOD防范管理課件
- 醫(yī)學(xué)生物化學(xué)課件PPT
- 淺談核電質(zhì)量保證體系建設(shè)
- 最新系統(tǒng)FMEA—(SFMEA)
評論
0/150
提交評論