![信息安全與密碼課堂作業(yè)匯總_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/9/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b1.gif)
![信息安全與密碼課堂作業(yè)匯總_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/9/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b2.gif)
![信息安全與密碼課堂作業(yè)匯總_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/9/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b3.gif)
![信息安全與密碼課堂作業(yè)匯總_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/9/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b4.gif)
![信息安全與密碼課堂作業(yè)匯總_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/9/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b/5b6a936b-e9a0-469a-a098-ab6c4ffaa95b5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課堂作業(yè)1、 圖示防火墻應用的典型環(huán)境,并作簡要文字說明。防火墻典型的應用環(huán)境,每個防火墻至少應該具有的三個接口,一個對內部網路的接口,連接內部網路,只有通過了防火墻檢測過的數據包才能到達該網路,一個對外的接口,用于連接外部網路,很多情況下,連接一臺對外的路由器,以加強內部網路的安全性,當外部路由器受到攻擊時,一個DMZ區(qū)域接口,該區(qū)域主要用于放置一些對外宣傳等的服務器。2、 什么是NAT技術,有何特點?方法描述優(yōu)越性不利因素NAT技術把內部網絡的 IP 子網放置在一個或一組外部 IP 地址之后,把所有的請求都偽裝成來自一個地址而不是多個不同地址。l 可在 LAN 機器上被透明配置l 保護在一
2、個或多個外部IP地址之后的許多機器,簡化管理任務l 用戶到LAN的出入可以通過打開和關閉 NAT防火墻/網關上的端口來限制一旦用戶從防火墻外連接了服務,則無法防止其蓄意活動分組過濾防火墻讀取每個進出 LAN 的數據分組,可以根據頭信息來讀取和處理分組,并根據被防火墻管理員實施的可編排的規(guī)則來過濾分組。Linux 內核通過 Netfilter 內核子系統(tǒng)內建了分組過濾功能;路由器內置的防火墻通過訪問控制列表定義控制規(guī)則來過濾分組。l Linux可以通過 iptables 這個前端工具定制,路由器通過ACL來定制。l 不需要任何客戶方面的定制,因為所有的網絡活動都在網路層級別而不是應用程序級別被過
3、濾l 由于分組沒有通過代理來傳輸,客戶和遠程主機間是直接連接,因此網絡傳輸速度比較快。l 無法像代理防火墻一樣根據內容過濾分組l 在協(xié)議層處理分組,但是無法在應用程序層處理分組l 復雜的網絡體系可能會使建立分組過濾規(guī)則方面比較困難,特別是在和 IP 偽裝或本地子網及 DMZ 網絡一起使用時。代理防火墻過濾所有從 LAN 客戶到代理機器的某種特定協(xié)議或類型的請求,然后,它再代表這個本地客戶向互聯(lián)網發(fā)送這些請求。代理機器被用來充當企圖不良的遠程用戶和內部網絡客戶機器之間的一個緩沖。l 使管理員擁有對 LAN 之外的應用程序和協(xié)議功能的控制權l(xiāng) 某些代理服務器可以緩存數據,因此當客戶存取頻繁請求的數
4、據時,這些數據就可以從本地緩存調出而不必使用互聯(lián)網連接,這有助于減少不必要的帶寬用量l 代理服務可以被密切地監(jiān)視和記錄,從而允許你在網絡資源用量方面有更嚴格的控制l 代理通常是應用程序特有的(HTTP、Telnet 等)或在協(xié)議方面有限制的(多數代理只能用于TCP連接的服務)l 應用程序服務無法在代理后面運行,因此應用程序服務器必須使用另一種網絡安全措施l 代理可能會成為網絡的瓶頸,因為所有的請求和傳輸都要經過一個中介而不是讓客戶直接連接遠程服務。NAT(network address translation,網絡地址轉換)將私用的本地地址區(qū)域映射到公用地址區(qū)域,使位于不同網絡中的服務器、主機
5、和控制臺能夠通過公用的內部網絡相互通信。這種映射可以是靜態(tài)的,也可以是動態(tài)的。準確的講,NAT技術包括NAT和PAT(port address translation, PAT)兩種,NAT指的是一個內部網路地址被翻譯為另外一個網路地址,僅僅是一對一的翻譯,這種情況主要用于將一個內部的機器映射為一個外部的機器,不是內部地址不夠用而進行的地址翻譯,而是為了隱藏內部機器的地址,更好的防范外部網路的攻擊。由于目前IP地址的極端匱乏,所以,對大多數網路來說,沒有足夠的IP地址,這種簡單的一對一的地址映射是不夠的,還需要進行一對多的映射,這種映射就是PAT。3、 泄密的種類有哪些?泄密的防范主要從哪些方
6、面著手?放介質泄密技術有哪些?泄密問題對于國防安全來講是十分嚴重的。通常所說的泄密包括以下類別:1、辦公自動化泄密n計算機電磁輻射引起的泄密n傳真機、打印機等辦公設備引起的電磁輻射泄密n用來存儲信息的磁介質引起的泄密n網絡泄密n設備和介質在維修過程中引起的泄密2、涉外活動泄密n不恰當的接待境外人員參觀訪問n保密意識薄弱造成的泄密n不遵守保密規(guī)定造成的泄密n故意出賣國家機密造成的泄密3、通信泄密n使用移動電話、無繩電話(子母機)、對講機等進行無線通信過程中引起的泄密n使用有線通信過程中被竊聽等引起的泄密4、文書在起草、印制、傳閱、保管和銷毀過程中泄密5、其它類別的泄密泄密的防范泄密的防范主要從行
7、政管理、法律監(jiān)督和技術保障三個方面著手。1、行政管理方面n機房的選址要安全可靠、還要考慮防震、防電磁輻射、防火災、防盜竊等設計。n嚴格執(zhí)行機房或重要部門的出入管理n規(guī)定分級使用權限n建立文件、磁介質等的復制、打印、借閱、存放、銷毀等規(guī)定n明確工作人員的職責,加強保密培訓和教育等2、法律監(jiān)督方面目前我國已有保密法、計算機信息系統(tǒng)安全保護條例和計算機信息網絡國際聯(lián)網管理暫行規(guī)定,依照法律法規(guī),做好計算機的保密防范工作。3、技術保障方面n采用低電磁輻射的設備和電磁屏蔽n使用身份認證、入侵檢測、防火墻、數據加密、數字簽名等技術進行訪問控制和身份識別等n使用防拷貝技術、加密技術、消磁技術、徹底刪除文件等
8、方法預防介質泄密3.1.3 防介質泄密技術1、防拷貝技術由于版權保護等方面的需求,防拷貝技術已經有了些產品在使用。如DVD影片的數碼加密主要是由“CSS(Content Scrambling System,數據干擾系統(tǒng))”加密的。所謂的CSS,就是所有存入DVD影片內容的數據都要經過編碼程序,而要播放這些影片數據必須先經過解碼才能播放。所以在DVD影片里看的影像必須經過“解碼授權”,也就是用合法的解碼程序才能播放。當然“道高一尺,魔高一丈”,無論什么防拷貝方法都是有辦法破解的。挪威少年Jon Lech Johansen,就破解了DVD防拷密碼。2、加密技術加密技術的使用是防止介質泄密的重要手段
9、之一。由于文件被加密,即使出現(xiàn)泄密狀況,要破解經過現(xiàn)代加密技術加密的文件也非易事。如果破解的成本超出文件本身的價值或者破解時間超出文件的有效期,就可以使破解者放棄破解的努力。數據加密算法有很多種,按照發(fā)展進程來分,經歷了古典密碼、對稱密鑰密碼和公開密鑰密碼階段,古典密碼算法有替代加密、置換加密;對稱加密算法包括DES和AES;非對稱加密算法包括RSA 、背包密碼、McEliece密碼、Rabin、橢圓曲線、EIGamal D_H等。目前在數據通信中使用最普遍的算法有DES算法、RSA算法和PGP算法等。古典密碼大都較簡單,一般可用手工破解。對稱加密算法密碼體制中,加密算法是公開的,但加密密鑰和
10、解密密鑰相同,必須保密。在公開密鑰密碼體制中,公開密鑰是可以公開的信息,而私有密鑰是需要保密的。加密算法E和解密算法D也都是公開的。用公開密鑰對明文加密后,僅能用與之對應的私有密鑰解密,才能恢復出明文,反之亦然。另外,辦公自動化軟件如MS Word,Acrobat,WPS等都具有加密功能,在安全強度要求不高的情況下也可以使用。3、消磁技術計算機磁盤屬于磁介質,所有磁介質都存在剩磁效應的問題,保存在磁介質中的信息會使磁介質不同程度地永久性磁化,所以磁介質上記載的信息在一定程度上是抹除不凈的,使用高靈敏度的磁頭和放大器可以將已抹除信息的磁盤上的原有信息提取出來。據一些資料的介紹,即使磁盤已改寫了1
11、2次,但第一次寫入的信息仍有可能復原出來。曾經記載過秘密信息的磁盤在釋放作他用之前必須將原記載的信息徹底清除,具體的清除辦法和技術有很多種,但實質上可分為直流消磁法和交流消磁法兩種。直流消磁法是使用直流磁頭將磁盤上原先記錄信息的剩余磁通,全部以一種形式的恒定值所代替。通常,我們操作計算機用完全格式化方式格式化磁盤就是這種方法。交流消磁法是使用交流磁頭將磁盤上原先所記錄信息的剩余磁通變得極小,這種方法的消磁效果比直流消磁法要好得多,消磁后磁盤上的殘留信息強度可比消磁前下降分貝。比如國產的CXB-1型軟磁盤信息消除器是一種采用磁抹技術,迅速而徹底地消除軟磁盤信息的先進的信息保密安全設備。它無需電源
12、的支持也不需維護,使用簡便。軟磁盤經過信息消除后,可重復正常使用,對軟磁盤無任何損傷??梢酝晟频慕鉀Q計算機上對軟磁盤文件刪除和格式化后,信息仍然保留的問題。廢舊軟磁盤經過消除后,給徹底免除任何信息泄露的可能。對于一些經消磁后仍達不到保密要求的磁盤,或已損壞需廢棄的涉密磁盤以及曾記載過絕密信息的磁盤,必須作銷毀處理。磁盤銷毀的方法是將磁盤碾碎然后丟進焚化爐熔為灰燼和鋁液。4、徹底刪除文件硬盤上文件的“刪除”實際上只是在文件系統(tǒng)中把文件名稱的第一個字母改成一個特殊字符,然后把該文件占用的簇標記為空閑狀態(tài),但文件包含的數據仍在磁盤上,下次將新的文件保存到磁盤時,這些簇可能被新的文件使用,從而覆蓋原來
13、的數據。因此,只要不保存新的文件,被刪除文件的數據實際上仍舊完整無缺地保存在磁盤上。用恢復軟件的查找分析功能找出文件頭,重寫前2個代碼,并修改文件分配表中的映射記錄,就能夠恢復文件。僅僅是刪除的文件,恢復起來比較容易,如果整個磁盤被格式化了,恢復的困難就更大些,但是只要恢復軟件能搜尋,并分析到它的殘存的文件頭,就有可能利用文件頭中的信息,連接文件原來占用的簇,以恢復被刪除的文件。然而,如果一個文件的某些簇被其他數據覆蓋,即使恢復軟件強行把原來占用各簇的數據連接起來恢復文件,但是因為其中的某些簇已不是該文件自身的數據,所以這個恢復后的文件有可能無法使用。4、 簡述緩沖區(qū)溢出原理,緩沖區(qū)溢出的攻擊
14、方式。想象一下,一個杯子可以裝一升的水,硬要向它倒兩升的水,水就會流出來,這就是溢出。對于計算機來說,杯子就是存儲空間,水就是數據,如果向一個容量有限的空間里存儲過量的數據,這時數據就會溢出存儲空間。程序運行時會向計算機申請內存中一段空間來存放動態(tài)數據,這個臨時存放的空間就被稱為緩沖區(qū),它的長度事先已經被程序或者操作系統(tǒng)定義好了(如在數組聲明時),如果存入的數據超過了預先定義的長度,這些數據就會溢出到緊接著的內存空間,會覆蓋原來存在這個空間中的數據。被故意覆蓋掉的數據通常是指引程序下一步操作的返回地址(該地址上放的是本條指令操作結束后要執(zhí)行的下一步指令),也可能是某個指針(實際上同樣是指示某個
15、地址)。如果計算機不能理解修改后數據(覆蓋原來合法數據的溢出數據),則將引起程序的運行失敗,嚴重的甚至導致系統(tǒng)崩潰;如果這些溢出數據是精心設計的,則攻擊者就可以利用它們是程序跳轉到預先設計的攻擊代碼(通常叫做shellcode)。要實現(xiàn)溢出攻擊的三要點是n 確定溢出點:找到溢出對程序執(zhí)行開始產生影響的地方;n 構造攻擊代碼:shellcode可能自己的編寫,也可能是利用了已有代碼,無論哪種情況,在溢出時shellcode都應該存在于被攻擊的計算機之中;n 跳轉到攻擊代碼緩沖區(qū)溢出產生的根源在于疏忽的編程,c和c+語言編寫的程序風格自由而容易出錯,出于靈活性考慮并沒有提供自動的數組邊界檢查,還提
16、供了很多非安全的字符串操作(strpy()、sprintf()、get()等),需要程序員自己進行溢出與否的判斷,但這個操作通常被大多數人所忽略。具有緩沖區(qū)溢出漏洞的程序幾乎都是用C和C+語言編寫的,也有人直接建議采用更安全的語言,如java,但是操作系統(tǒng)和大量已有的程序都是使用C/C+語言的,而且作為Java程序執(zhí)行平臺的Java虛擬機使用的也是C語言,同樣會有緩沖區(qū)溢出的危險。3.3.2 緩沖區(qū)溢出攻擊的方式按照緩沖區(qū)在內存中地址空間中位置的不同,緩沖區(qū)溢出可以分為兩類:基于棧的緩沖區(qū)溢出和基于堆的緩沖區(qū)溢出。 1、棧溢出基于棧的緩沖區(qū)溢出是最常見的溢出方式,它相比堆溢出更好利用,幾乎成了
17、緩沖區(qū)溢出的代名詞,棧溢出又可細分為:覆蓋返回地址、重定向函數指針和長跳轉。n 覆蓋返回地址這是最簡單最常見的棧溢出攻擊方式。棧(stack),也稱為堆棧,是一段連續(xù)的內存區(qū)域,可以簡單視為數據結構中的棧的實現(xiàn)。當程序中的函數被調用時,系統(tǒng)先將被調用函數所需的參數以逆序的方式壓入棧,然后,將返回地址(EIP)入棧,隨系統(tǒng)不同,還可能壓入一些其他數據來保護現(xiàn)場,通常是棧基址(EBP,即返回時棧頂指針應恢復的地址)。隨后,開始執(zhí)行被調用的函數,其間,程序在棧中為被調用的函數內的局部變量分配了所需的存儲空間,形成如圖3-60所示的棧結構。當被調用函數執(zhí)行結束后,系統(tǒng)就會釋放掉為此函數的局部變量所分配
18、的??臻g,恢復被保存的運行環(huán)境,將程序控制權交給返回地址上的程序,這個程序將以原來函數的級別運行。棧底高端地址棧頂低端地址圖3-60 棧的結構參數n參數1返回地址局部變量1局部變量m在發(fā)生函數調用時的??臻g分配的過程中,局部變量空間的分配和填充不是同時進行的,它的分配是依據局部變量的聲明,而填充則是依據其實際被賦予的值,這個過程中就出現(xiàn)了安全漏洞。雖然分配空間時是按局部變量出現(xiàn)的先后順序一個一個壓入棧(即先出現(xiàn)的變量更靠近棧底),但由于棧是從高端地址向低端地址擴展的(即棧底位于內存中更高端的地址),而在實際填充時,是從低端內存向高端內存操作,因此,只要實際填充的數據足夠長,就可以將上面的返回地
19、址覆蓋掉。攻擊一般采取如下三步:(1)測試溢出點 這種溢出最關鍵的地方就是找到返回地址在棧中的地址,攻擊者一般可以通過查看參數的地址和變量的地址,就很容易計算出返回地址在棧中可能的地址范圍。如果程序產生了溢出,而新寫入的返回地址是無效的,系統(tǒng)就會報告訪問內存出錯,如“oxaaaaaa引用內存oxbbbbbbbb”,其中“oxbbbbbbbb”是溢出后的數據,與“oxaaaaaa”和寄存器EIP的值就可以判斷出返回地址在棧中的精確地址。通常這都是一個不斷重復的過程,用各種長度的不同數據進行測試,比較系統(tǒng)返回信息,逐步細化范圍,從而測算出具體溢出點,計算出應填充數據的長度。即使是同一個溢出漏洞,在
20、不同的操作系統(tǒng)類型,補丁版本,以及軟件環(huán)境下產生的溢出情況都不同,而溢出點哪怕計算錯一個位置,攻擊代碼都不可能被系統(tǒng)執(zhí)行,因此,攻擊者在攻擊前一般都會先掃描被攻擊主機的具體情況,或者說,針對特定緩沖區(qū)溢出漏洞的蠕蟲只會感染特定的系統(tǒng)(2)構造攻擊代碼 攻擊者必須嚴格按照受攻擊系統(tǒng)的相關匯編指令的格式和規(guī)范來編寫代碼。攻擊者也可以利用已經存在的代碼,如libC中部分代碼會執(zhí)行“exec( )”,如“WinExec(cmd.exe, SW_HIDE);”會打開命令窗口,攻擊者需要做的就是將參數放置到合適的位置,然后溢出使程序跳轉到特定庫函數的入口。(3)發(fā)起攻擊攻擊代碼可以是直接放置到被攻擊程序的
21、緩沖區(qū)中,也就是向攻擊程序輸入一個字符串,這個字符串包含了可以在這個硬件平臺上運行的指令序列,此時一般是直接在返回地址處填入本棧棧頂地址,或者使程序先返回到一條jmp esp指令處。當然,放置攻擊代碼和緩沖區(qū)溢出不一定要在一次動作內完成。攻擊者可以在另一個緩沖區(qū)內放置代碼,通過溢出被攻擊程序所在的緩沖區(qū)來轉移該程序的執(zhí)行。n 重定向函數指針棧溢出攻擊的另一種實現(xiàn)方式是覆蓋函數指針。如果程序中存在一句“void (* p)() ”聲明了一個返回值為void函數指針的變量p,由于函數指針可以用來定位任何地址空間,所以攻擊者只需在任何空間內的函數指針附近找到一個能夠溢出的緩沖區(qū),然后溢出這個緩沖區(qū)來
22、改變函數指針。以后,當程序通過函數指針調用函數時,程序的流程就將按攻擊者的意圖實現(xiàn)。n 長跳轉長跳轉是C語言中的一個異常處理機制,是一個簡單的檢驗/恢復系統(tǒng),使用setjmp/longjmp,這是c標準庫的兩個庫函數,setjmp函數用于保存程序的運行時的堆棧環(huán)境,后面可以通過調用longjmp函數來恢復先前被保存的程序堆棧環(huán)境。Longjmp也能夠指向任何地址空間。攻擊者首先找到一個可供溢出的緩沖區(qū),覆蓋longjmp緩沖區(qū),使它指向攻擊代碼,然后誘導程序進入恢復模式(如浮點異常),這樣恢復后執(zhí)行就跳轉到攻擊代碼上了。2、堆溢出對于一個進程的內存空間而言,可以在邏輯上分成3個部份:代碼區(qū),靜
23、態(tài)數據區(qū)和動態(tài)數據區(qū)。全局變量和靜態(tài)變量分配在靜態(tài)數據區(qū),局部變量分配在動態(tài)數據區(qū),動態(tài)數據區(qū)除了“棧”還有“堆”。棧是一種線性結構,是一段連續(xù)的空間,而堆是一種鏈式結構,它不同于數據結構中堆的概念,而有些類似于鏈表。棧的分配運算內置于處理器的指令集中,效率很高,但分配的內存容量有限,因此,一些程序員會調用C函數malloc(calloc/realloc)/free、C+的new/delete或者WIN32 API函數HeapAlloc/HeapFree來動態(tài)分配內存,這時分配的空間就是堆(heap),堆也常被稱為塊(chunk)。高端地址A. 空閑的塊結構低端地址管理結構(16字節(jié))高端地址
24、B. 分配后的塊結構低端地址管理結構(8字節(jié))上一塊的字節(jié)當前塊的字節(jié)數據區(qū)上一塊的字節(jié)當前塊的字節(jié)雙指針數據區(qū)圖3-61 堆的結構堆的結構如圖3-61所示,與棧相反,它是從低端地址向高端地址擴展的。每個堆除了分配用戶指定大小的內存外,還有一個管理結構,這個管理結構對于空閑堆和已經被分配的堆是不同的。不同的最大體現(xiàn)是雙指針,只有空閑堆才有雙指針,這是一對向前(fd)和向后(bk)指向的指針,分別指向前一個和后一個空閑堆,操作系統(tǒng)就通過雙指針實現(xiàn)雙向鏈表來對空閑堆加以管理,形成邏輯上連續(xù)的空間。另外只有當上一個塊是空閑的,才會在本堆的“上一塊的字節(jié)(pre_chunk->size)”處填入
25、上一塊空閑堆的字節(jié)數。對于每個堆至少分配16字節(jié),而且大小必須是8字節(jié)的整數倍,這樣在計算堆的大小時會自動忽略字節(jié)數的最后3位,其中最后兩位被用作標志位,最低位常用“P”標志,表示前一塊是否是被分配了,只有當P標志位為0時(表示上一塊沒有被使用,即是空閑塊),“上一塊的字節(jié)”中的數字才有價值。當空閑塊被分配后,會執(zhí)行unlink操作,將這部分空間從雙向鏈表中脫離,并在“當前塊的字節(jié)(chunk->size)”處填入分配的size+8字節(jié)(管理結構的大?。┖蟮闹?。但實際填充數據后,如果填充的數據超過了分配的空間大小,“當前塊的字節(jié)”會變成實際填充的size+8字節(jié),這就產生了溢出。溢出后的
26、數據會覆蓋后面一塊的管理結構,產生漏洞。堆溢出比棧溢出相對復雜,由于堆中不再存在返回地址,目前已有的對堆的緩沖區(qū)溢出攻擊主要通過改變“當前塊的字節(jié)”的P標志位,使程序執(zhí)行unlink操作實現(xiàn)。攻擊時Unlink操作主要在程序執(zhí)行free()或下一次malloc()的時候執(zhí)行,通常攻擊者采用前一種方法。當程序在執(zhí)行free(mem)這個指令時,會首先將mem轉換為chunk(mem-8),也就是使指向數據區(qū)的指針向前移動8字節(jié)(管理結構的大小)轉而指向這個堆的開始處,然后調用chunk_free()來釋放這個堆。然后程序會檢查其相鄰的內存塊(包括前一個和后一個)是否是空閑的,如果是就會將這些相鄰
27、的空閑塊合并,如果只有前一個塊是空閑的,修改前面那一塊的“當前塊的字節(jié)”的值,將其填入后面那一塊的“上一塊的字節(jié)”,并修改P標志位;如果后面那一塊也是空閑的,除了修改兩個字節(jié)數,還需要將后面那一塊從鏈表中摘除(unlink)。當然,如果都不是空閑塊,就只需要設置后一個塊的兩個字節(jié)數,最后將得到的空閑塊加入雙向鏈表中去。在執(zhí)行unlink操作時,實際上就是執(zhí)行修改雙向指針的工作,比如,要從鏈表中刪除B節(jié)點,刪除前后雙向鏈表如圖3-62所示。A B CA_fd A_bk B_fd B_bk C_fd C_bk BA CBA B CA_fd A_bk C_fd C_bk CA圖3-62 unlink
28、操作Unlink操作本應該直接修改前一個節(jié)點和后一個節(jié)點中指向本節(jié)點的指針的值(即圖中的A_bk和C_fd),但從圖中我們可以看出,實際上就是將B_fd中的內容放到B_bk指向的空間中去,將B_bk中的內容放到B_fd指向的空間中去,這是兩個寫內存的操作。而如果B_fd和B_bk的內容都被覆蓋了,那就可以實現(xiàn)將攻擊者安排好的數據寫入攻擊者安排好的地方,一般被稱為“將任意的內容寫入任意的地址”。攻擊者通過溢出強制將下一塊的“P”標志設為0(空閑),或者在輸入的數據中模擬管理結構,形成一個假的空閑塊,在釋放本塊時就涉及到空閑塊的合并問題,需要對下一塊執(zhí)行unlink操作(雖然可能下一塊并非存在于空
29、閑鏈表中),從而攻擊者可以改變程序執(zhí)行的流向。3.3.3 緩沖區(qū)溢出攻擊防范措施目前,防止緩沖區(qū)溢出的技術主要有五種:源程序檢查、數組邊界檢查、指針完整性檢查、不可執(zhí)行的緩沖區(qū)和運行時攔截并檢查,每種技術都解決了一定的問題,但也存在相應的限制。1、源程序檢查既然緩沖區(qū)溢出漏洞的產生的根源在于程序中沒有進行邊界判斷,使攻擊者有機會在一個空間有限的緩沖區(qū)中放入過長的數據,那么防范緩沖區(qū)攻擊最根本的措施就是強制編寫正確的代碼,要求程序員在編程的時候避免使用非安全的C函數,在將數據傳送到自己的緩沖區(qū)之前,先檢查數據的長度。源程序檢查的方法分為靜態(tài)檢查和動態(tài)測試。靜態(tài)檢查靜態(tài)檢查就是使用工具檢查程序的全
30、部源代碼,通過語義分析找到危險函數的調用,通過跟蹤數據流,即從變量的定義到它所有的引用,或者從一個引用到所有可能的定義,查找潛在漏洞。這樣的檢查程序本身不需要運行,因此被稱為靜態(tài)檢查。 最簡單的靜態(tài)檢查就是使用turboc,c+ builder等自帶的grep工具,它與一般的find(如word中的“查找”)工具有一些相似,功能比較簡單,僅僅對輸入的檢索詞匹配,依據輸入的限制條件返回找到的結果,找什么、找到的到底有沒有漏洞需要程序員自己進行分析判斷。該工具優(yōu)勢在于容易獲取,簡單易用,能夠滿足基本的檢查要求。如果對源代碼檢索的智能性有更高的要求,可以使用Flawfinder、RATS(Rough
31、 Auditing Tool for Security、lint等專門的源代碼掃描工具,它們一般擁有專門的漏洞庫,通過類型匹配等技術實現(xiàn)。Flawfinder是免費、開源軟件,目前版本是1.29,處理速度比較快,但目前主要針對Red Hat Linux平臺。RATS是secure software公司提供的免費軟件,目前版本是2.1,分別針對Linux和Windows平臺提供了不同版本,需要同時安裝另一個開源軟件expat,以支持通過XML輸出錯誤信息,expat也提供了Linux和Windows兩個版本,但其Windows版本運行不是很好。RATS的最大的優(yōu)點是可配置,可以改變輸出的錯誤信息
32、的級別,漏洞庫也接受用戶的自定義輸入。Lint工具發(fā)展到目前分為PC-Lint、flexeLint和spLint,PC-Lint和flexeLint是Gimpel Software公司的收費產品,PC-Lint僅能運行在Windows操作系統(tǒng)上每一臺電腦需要239美元,而flexeLint能夠運行在所有系統(tǒng)上,每一臺電腦需要998美元。PC-Lint(flexeLint)目前版本是8.0,功能很強大,光選項就有300多個,據說國外的大型專業(yè)軟件公司,如微軟,都把它作為程序檢查工具。spLint(Secure Programming Lint)也是一個開源的免費產品,提供Unix、Linux、S
33、olaris、Win32等不同版本,要求程序員在C源碼中按照固定的注釋格式/*/加入標記,這些標記被當作規(guī)格屬性,通過詞法分析和過程內流敏感程序分析技術,驗證標記的限制條件是否與程序一致,實現(xiàn)程序掃描。總的來說,靜態(tài)檢查的優(yōu)勢是速度快,但源碼有時很難獲取,目前除了開源軟件獲取其它軟件的源程序基本上是不可能的,這極大的限制了源程序檢查作為防護手段的實用性,這也是大多數靜態(tài)檢查工具都基于Linux平臺的原因。當然,也有工具通過對目標代碼的反匯編來實現(xiàn),但技術還不夠成熟。雖然理論上源程序檢查可以從根本上防止任何緩沖區(qū)溢出的發(fā)生,但C語言的靈活性(如指針)使得有效的跟蹤數據流變得困難,漏報、誤報率高,
34、即使檢查出潛在漏洞,也還需要驗證。動態(tài)測試即使程序通過了靜態(tài)檢查,代碼中往往仍會有緩沖區(qū)溢出漏洞,為此開發(fā)了動態(tài)測試技術,也叫做故障注入,通過人為的隨機制造一些緩沖區(qū)溢出來測試、尋找代碼的安全漏洞。故障注入法一般工作在靜態(tài)檢查的基礎上,在找到的漏洞處插入專門的故障發(fā)生函數,或者輸入可能溢出的數據,然后通過專門的監(jiān)控程序來監(jiān)測是否發(fā)生了溢出。由于故障注入的針對性極強,一般通過人工完成??偟膩碚f,源程序檢查是從緩沖區(qū)產生的根源著手,但一般都只能減少緩沖區(qū)溢出的可能,而不能完全消除它的存在。2、數組邊界檢查只要數組不被溢出,溢出攻擊也就無法實現(xiàn)。Java等語言正是由于進行了數組索引的邊界檢查,從而能
35、夠有效的抵御緩沖區(qū)溢出攻擊。數組邊界檢查在某種程度上與源代碼靜態(tài)檢查相似,但是主要在編譯中實現(xiàn),在編譯時檢查所有的數組操作,確保對數組的操作都在正確的范圍內。目前Compaq公司的C編譯器和GCC(GNU C Compiler)的一個補丁可以實現(xiàn)數組邊界檢查,但這樣的檢查是以犧牲性能為代價的,商業(yè)軟件中很少使用。已經推出的Compaq C和GCC也還不夠成熟,Compaq C不會對指針傳遞的數組和strcpy這樣的不安全函數進行檢查,而gcc補丁還不能編譯復雜的程序。有的程序員就直接在調試程序時使用purify等工具檢查存儲器的存取來進行數組邊界檢查??偟膩碚f,對數組的邊界檢查能夠限制數據輸入
36、的長度,但由于要檢查所有的數組操作,對性能影響很大,不能防范長跳轉的棧溢出攻擊。3、指針完整性檢查指針完整性檢查是檢測程序指針是否被修改了。這個檢查可以由編譯器實現(xiàn),StackGuard就是針對gcc的實現(xiàn)了指針完整性檢查的編譯器。覆蓋返回地址的棧溢出會修改返回地址及它以前(低地址方向)的所有數據,StackGuard就在堆棧內的函數返回地址后(返回地址先入棧)面附加一個字節(jié)(canary),在函數返回時先檢查這個附加的字節(jié)是否發(fā)生了變化。為了使這種保護機制有效,就不能給攻擊者在攻擊數據中偽造canary的機會,StackGuard提供了采用C語言的終止符號(如CR,LF等)或者隨機數方式兩種
37、方式。另一種提供指針完整性檢驗保護的是StackShield,它與StackGuard的不同之處在于它是創(chuàng)建一個特別的堆棧(表現(xiàn)為一個數組)用來儲存函數返回地址的一份拷貝,然后在受保護的函數的開頭和結尾分別增加一段代碼,開頭處的代碼用來將函數返回地址拷貝過去,而結尾處的代碼用來將返回地址拷貝回來。它考慮緩沖區(qū)是否溢出,只保證函數執(zhí)行流程不會改變,能夠正確返回到主調函數中。還有一種工具Pointguard,它對stackguard進行擴展,將保護字節(jié)置于所有的代碼指針后面和所有受保護的變量前后。總的來說,通過指針完整性檢驗提供堆棧保護對系統(tǒng)性能的影響很小,雖然目前已經發(fā)現(xiàn)可以繞過StackGua
38、rd和StackShield的方法,但這兩種工具技術還是比較成熟的。但,指針完整性檢驗主要針對的是棧溢出攻擊的防范。4、不可執(zhí)行的緩沖區(qū)不可執(zhí)行的緩沖區(qū)技術就是使堆棧數據段中不能執(zhí)行程序。以前Unix系統(tǒng)設計就是嚴格區(qū)分數據段和代碼段,使數據段的地址空間不能執(zhí)行,后來由于Unix和MS Windows系統(tǒng)追求更好的性能和功能,允許在數據段動態(tài)的放入可執(zhí)行的代碼,但是,幾乎沒有合法的程序會在堆棧中存放代碼,因此,一種防止緩沖區(qū)溢出攻擊的方法就是設定堆棧段不可執(zhí)行,在堆棧中設置一個表示不可執(zhí)行的標志位NX bit(No eXecute bit),在最大限度保證程序兼容性的情況下避免溢出攻擊。這種防
39、范方法一般通過專門的補丁的形式實現(xiàn),但目前的趨勢是由硬件來提供堆棧保護,將NX bit技術內建在CPU中。Intel和AMD都已經開始銷售采用NX技術的CPU,Intel將其命名為EDB(Execute Disable Bit,禁止執(zhí)行位),AMD將其命名為EVP(Enhanced Virus Protection,增強病毒保護)。CPU的NX功能還無法獨立完成所有工作,需相關操作系統(tǒng)和應用軟件配合,目前Windows和Red Hat Linux等相關操作系統(tǒng)都已支持。這是目前最常見、最容易實現(xiàn)的防范緩沖區(qū)溢出的技術,但要注意的是,這種方法只能防范攻擊者直接將代碼植入緩沖區(qū)的攻擊方式,對于其他溢出的攻擊都無能為力。5、運行時攔截并檢查這是目前大多數殺毒軟件采取的技術,它們或者在程序運行時攔截危險函數,然后調用相應的具有邊界檢查功能的安全函數,如果邊界檢查不通過,就報警并終止進程;或者在程序運行時截獲loadlibrary(加載模塊名,也就是所需要的組件所在的文件,可以是一個 .dll,也可以是一個 .exe,或者是其它)、getprocaddress(取得模塊中導出函數的地址)等API函數(木馬、蠕蟲、病毒等一般要用到)等API函數,然后調用某個檢測函數,檢
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商務星球版地理八年級下冊:8.2 《新疆維吾爾自治區(qū)》 聽課評課記錄
- 八年級政治下冊第六單元我們的人身權利6.2《維護人格尊嚴》情境探究型聽課評課記錄(粵教版)
- 個人中介房屋租賃協(xié)議書范本
- 房屋轉租三方合同范本
- 樓層架管出租協(xié)議書范本
- 私立中學轉讓合同書
- 2025年度互聯(lián)網廣告合同終止的多重市場監(jiān)管情形
- 區(qū)中心房屋租賃合同范本
- 2025年度商品車運輸與新能源汽車充電設施安裝合同
- 二零二五年度新能源研發(fā)私人廠房租賃合同
- 2025南網科研院系統(tǒng)內招聘13人易考易錯模擬試題(共500題)試卷后附參考答案
- 關于合同知識的全面解讀
- Unit 6 Beautiful landscapes Integration 說課稿 -2024-2025學年譯林版英語七年級下冊001
- 五四制青島版三年級數學下學期教學計劃
- 2024年常德職業(yè)技術學院單招職業(yè)適應性測試題庫
- ABB工業(yè)機器人應用技術 課件 2.6系統(tǒng)輸入輸出與IO信號的關聯(lián)
- 山東省濟南市2023-2024學年高二上學期期末考試化學試題 附答案
- 2025 年福建省中考語文試題:作文試題及范文
- 短視頻運營績效考核表KPI-企業(yè)管理
- 【譯林】九下英語單詞默寫表
- 15J403-1-樓梯欄桿欄板(一)
評論
0/150
提交評論