自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

DEP機制的保護(hù)原理

安全 黑客攻防
溢出攻擊的根源在于現(xiàn)代計算機對數(shù)據(jù)和代碼沒有明確區(qū)分這一先天缺陷,就目前來看重新去設(shè)計計算機體系結(jié)構(gòu)基本上是不可能的,我們只能靠向前兼容的修補來減少溢出帶來的損害,DEP(數(shù)據(jù)執(zhí)行保護(hù),Data Execution Prevention)就是用來彌補計算機對數(shù)據(jù)和代碼混淆這一天然缺陷的。

溢出攻擊的根源在于現(xiàn)代計算機對數(shù)據(jù)和代碼沒有明確區(qū)分這一先天缺陷,就目前來看重新去設(shè)計計算機體系結(jié)構(gòu)基本上是不可能的,我們只能靠向前兼容的修補來減少溢出帶來的損害,DEP(數(shù)據(jù)執(zhí)行保護(hù),Data Execution Prevention)就是用來彌補計算機對數(shù)據(jù)和代碼混淆這一天然缺陷的。

DEP的基本原理是將數(shù)據(jù)所在內(nèi)存頁標(biāo)識為不可執(zhí)行,當(dāng)程序溢出成功轉(zhuǎn)入shellcode時,程序會嘗試在數(shù)據(jù)頁面上執(zhí)行指令,此時CPU就會拋出異常,而不是去執(zhí)行惡意指令。如圖1所示。

圖1  DEP工作原理

圖1  DEP工作原理

DEP 的主要作用是阻止數(shù)據(jù)頁(如默認(rèn)的堆頁、各種堆棧頁以及內(nèi)存池頁)執(zhí)行代碼。微軟從Windows XP SP2開始提供這種技術(shù)支持,根據(jù)實現(xiàn)的機制不同可分為:軟件DEP(Software DEP)和硬件DEP(Hardware-enforced DEP)。

軟件DEP其實就是我們前面介紹的SafeSEH,它的目的是阻止利用S.E.H的攻擊,這種機制與CPU硬件無關(guān),Windows利用軟件模擬實現(xiàn)DEP,對操作系統(tǒng)提供一定的保護(hù)。現(xiàn)在大家明白為什么在SafeSEH的校驗過程中會檢查異常處理函數(shù)是否位于非可執(zhí)行頁上了吧。

硬件DEP才是真正意義的DEP,硬件DEP需要CPU的支持,AMD和Intel都為此做了設(shè)計,AMD稱之為No-Execute Page-Protection (NX),Intel稱之為Execute Disable Bit (XD) ,兩者功能及工作原理在本質(zhì)上是相同的。

操作系統(tǒng)通過設(shè)置內(nèi)存頁的NX/XD屬性標(biāo)記,來指明不能從該內(nèi)存執(zhí)行代碼。為了實現(xiàn)這個功能,需要在內(nèi)存的頁面表(Page Table)中加入一個特殊的標(biāo)識位(NX/XD)來標(biāo)識是否允許在該頁上執(zhí)行指令。當(dāng)該標(biāo)識位設(shè)置為0里表示這個頁面允許執(zhí)行指令,設(shè)置為1時表示該頁面不允許執(zhí)行指令。

由于軟件DEP就是傳說中的SafeSEH,關(guān)于SafeSEH的突破前面我們已經(jīng)介紹過,所以在這一節(jié)中我們只對硬件DEP進(jìn)行討論和分析。

大家可以通過如下方法檢查CPU是否支持硬件DEP,右鍵單擊桌面上的"我的電腦"圖標(biāo),選擇"屬性",在打開的"系統(tǒng)屬性"窗口中點擊"高級"選項卡。在"高級"選項卡頁面中的"性能"下單擊"設(shè)置"打開"性能選項"頁。單擊"數(shù)據(jù)執(zhí)行保護(hù)"選項卡,在該頁面中我們可確認(rèn)自己計算機的CPU是否支持DEP。如果CPU不支持硬件DEP該頁面底部會有如下類似提示:"您的計算機的處理器不支持基于硬件的DEP。但是,Windows可以使用DEP軟件幫助保護(hù)免受某些類型的攻擊"。如圖2所示。

圖2  Windows 2003下DEP選項頁示例

圖2  Windows 2003下DEP選項頁示例#p#

根據(jù)啟動參數(shù)的不同,DEP工作狀態(tài)可以分為四種。

(1)Optin:默認(rèn)僅將DEP保護(hù)應(yīng)用于Windows系統(tǒng)組件和服務(wù),對于其他程序不予保護(hù),但用戶可以通過應(yīng)用程序兼容性工具(ACT,Application Compatibility Toolkit)為選定的程序啟用DEP,在Vista下邊經(jīng)過/NXcompat選項編譯過的程序?qū)⒆詣討?yīng)用DEP。這種模式可以被應(yīng)用程序動態(tài)關(guān)閉,它多用于普通用戶版的操作系統(tǒng),如Windows XP、Windows Vista、Windows7。

(2)Optout:為排除列表程序外的所有程序和服務(wù)啟用DEP,用戶可以手動在排除列表中指定不啟用DEP保護(hù)的程序和服務(wù)。這種模式可以被應(yīng)用程序動態(tài)關(guān)閉,它多用于服務(wù)器版的操作系統(tǒng),如 Windows 2003、Windows 2008。

(3)AlwaysOn:對所有進(jìn)程啟用DEP 的保護(hù),不存在排序列表,在這種模式下,DEP不可以被關(guān)閉,目前只有在64位的操作系統(tǒng)上才工作在AlwaysOn模式。

(4)AlwaysOff:對所有進(jìn)程都禁用DEP,這種模式下,DEP也不能被動態(tài)開啟,這種模式一般只有在某種特定場合才使用,如DEP干擾到程序的正常運行。

我們可以通過切換圖.2中的復(fù)選框切換Optin和Optout兩種模式。還可以通過修改c:\boot.ini中的/noexecute啟動項的值來控制DEP的工作模式。如圖3所示,DEP在該操作系統(tǒng)上的工作模式為Optout。

圖3  Windows 2003下DEP默認(rèn)啟動狀態(tài)

圖3  Windows 2003下DEP默認(rèn)啟動狀態(tài)

介紹完DEP的工作原理及狀態(tài)后,我們來看一個和DEP密切相關(guān)的程序鏈接選項:/NXCOMPAT。/NXCOMPAT是Visual Studio 2005及后續(xù)版本中引入一個鏈接選項,默認(rèn)情況下是開啟的。在本書中使用的Visual Studio 2008 (VS 9.0)中,可以在通過菜單中的Project→project Properties→Configuration Properties→Linker→Advanced→Data Execution Prevention (DEP)中選擇是不是使用/NXCOMPAT編譯程序,如圖4所示。

圖4  VS 2008中設(shè)置/NXCOMPAT編譯選項

圖4  VS 2008中設(shè)置/NXCOMPAT編譯選項

采用/NXCOMPAT編譯的程序會在文件的PE頭中設(shè)置IMAGE_DLLCHARACTERISTICS_ NX_COMPAT標(biāo)識,該標(biāo)識通過結(jié)構(gòu)體IMAGE_OPTIONAL_HEADER中的DllCharacteristics變量進(jìn)行體現(xiàn),當(dāng)DllCharacteristics設(shè)置為0x0100表示該程序采用了/NXCOMPAT編譯。關(guān)于結(jié)構(gòu)體IMAGE_OPTIONAL_HEADER的詳細(xì)說明大家可以查閱MSDN相關(guān)資料,在這我們就不過多討論了。

經(jīng)過/NXCOMPAT編譯的程序有什么好處呢?通過前面的介紹我們知道用戶版的操作系統(tǒng)中DEP一般工作在Optin狀態(tài),此時DEP只保護(hù)系統(tǒng)核心進(jìn)程,而對于普通的程序是沒有保護(hù)的。雖然用戶可以通過工具自行添加,但這無形中增高了安全的門檻,所以微軟推出了/NXCOMPAT編譯選項。經(jīng)過/NXCOMPAT編譯的程序在Windows vista及后續(xù)版本的操作系統(tǒng)上會自動啟用DEP保護(hù)。

DEP針對溢出攻擊的本源,完善了內(nèi)存管理機制。通過將內(nèi)存頁設(shè)置為不可執(zhí)行狀態(tài),來阻止堆棧中shellcode的執(zhí)行,這種釜底抽薪的機制給緩沖溢出帶來了前所未有的挑戰(zhàn)。這也是迄今為止在本書中我們遇到的最有力的保護(hù)機制,它能夠徹底阻止緩沖區(qū)溢出攻擊么?答案是否定的。#p#

如同前面介紹的安全機制一樣,DEP也有著自身的局限性。

首先,硬件DEP需要CPU的支持,但并不是所有的CPU都提供了硬件DEP的支持,在一些比較老的CPU上邊DEP是無法發(fā)揮作用的。

其次,由于兼容性的原因Windows不能對所有進(jìn)程開啟DEP保護(hù),否則可能會出現(xiàn)異常。例如一些第三方的插件DLL,由于無法確認(rèn)其是否支持DEP,對涉及這些DLL的程序不敢貿(mào)然開啟DEP保護(hù)。再有就是使用ATL 7.1或者以前版本的程序需要在數(shù)據(jù)頁面上產(chǎn)生可以執(zhí)行代碼,這種情況就不能開啟DEP保護(hù),否則程序會出現(xiàn)異常。

再次,/NXCOMPAT編譯選項,或者是IMAGE_DLLCHARACTERISTICS_NX_COMPAT的設(shè)置,只對Windows Vista 以上的系統(tǒng)有效。在以前的系統(tǒng)上,如Windows XP SP3等,這個設(shè)置會被忽略。也就是說,即使采用了該鏈接選項的程序在一些操作系統(tǒng)上也不會自動啟用DEP保護(hù)。

最后,當(dāng)DEP工作在最主要的兩種狀態(tài)Optin和Optout下時,DEP是可以被動態(tài)關(guān)閉和開啟的,這就說明操作系統(tǒng)提供了某些API函數(shù)來控制DEP的狀態(tài)。同樣很不幸的是早期的操作系統(tǒng)中對這些API函數(shù)的調(diào)用沒有任何限制,所有的進(jìn)程都可以調(diào)用這些API函數(shù),這就埋下了很大的安全隱患,也為我們突破DEP提供了一條道路。


本文節(jié)選自《0day安全:軟件漏洞分析技術(shù)(第2版)》一書?!?day安全:軟件漏洞分析技術(shù)(第2版)》一書已由電子工業(yè)出版社正式出版,本書由王清等編著。

內(nèi)容簡介

本書分為5篇33章,系統(tǒng)、全面地介紹了Windows平臺緩沖區(qū)溢出漏洞的分析、檢測與防護(hù)。第一篇為漏洞exploit的基礎(chǔ)理論和初級技術(shù),可以引領(lǐng)讀者迅速入門;第二篇在第一篇的基礎(chǔ)上,結(jié)合國內(nèi)外相關(guān)研究者的前沿成果,對漏洞技術(shù)從攻、防兩個方面進(jìn)行總結(jié);第三篇站在安全測試者的角度,討論了幾類常用軟件的漏洞挖掘方法與思路;第四篇則填補了本類書籍在Windows內(nèi)核安全及相關(guān)攻防知識這個神秘領(lǐng)域的技術(shù)空白;第五篇以大量的0 day案例分析,來幫助讀者理解前四篇的各類思想方法。

本書可作為網(wǎng)絡(luò)安全從業(yè)人員、黑客技術(shù)發(fā)燒友的參考指南,也可作為網(wǎng)絡(luò)安全專業(yè)的研究生或本科生的指導(dǎo)用書。

友情提示:

對于本書其他樣章以及較詳細(xì)的介紹,您可以訪問:http://book.51cto.com/art/201107/275126.htm

責(zé)任編輯:佟健 來源: 51CTO.com
相關(guān)推薦

2012-05-02 14:54:21

Windows

2010-05-19 13:29:59

2016-11-11 00:39:59

Java可見性機制

2023-06-07 15:25:19

Kafka版本日志

2017-02-23 09:30:52

2018-10-10 05:12:35

2013-05-23 17:15:59

2023-12-11 07:21:12

SPI機制插件

2009-09-04 10:37:50

Java堆棧溢出

2011-04-22 10:01:59

SimpleFrame

2010-07-05 14:58:21

企業(yè)機密信息泄漏

2017-01-11 22:51:39

2012-12-03 16:57:37

HDFS

2011-05-19 11:38:07

保密

2015-09-28 14:12:36

2009-01-12 12:43:50

服務(wù)器虛擬化基礎(chǔ)架構(gòu)

2023-05-08 00:08:51

Hive機制場景

2009-08-28 10:18:48

Java序列化

2010-10-12 14:22:41

PHP異常機制

2015-11-16 11:17:30

PHP底層運行機制原理
點贊
收藏

51CTO技術(shù)棧公眾號