DEP(計算機術語)

DEP(計算機術語)

本詞條是多義詞,共3個義項
更多義項 ▼ 收起列表 ▲

DEP是數據執行保護的英文縮寫,全稱為Data Execution Prevention。數據執行保護(DEP) 是一套軟硬體技術,能夠在記憶體上執行額外檢查以幫助防止在系統上運行惡意代碼。

在 Microsoft Windows XP Service Pack 2及以上版本的Windows中,由硬體和軟體一起強制實施 DEP。

基本介紹

  • 中文名:數據執行保護
  • 外文名:Data Execution Prevention
  • 優點:幫助防止數據頁執行代碼
  • 工作狀態:四種
  • 作用:幫助防止惡意APP運行惡意代碼
主要優點,注意事項,安全機制,防止溢出,實現方式,運行級別,如何關閉,局限性,

主要優點

可幫助防止數據頁當作代碼執行,從而有效分離數據與代碼。通常情況下,不執行默認堆和堆疊中的代碼。硬體實施 DEP 檢測從這些位置運行的代碼,並在發現執行情況時引發異常。軟體實施 DEP 可幫助阻止惡意代碼利用 Windows 中的異常處理機制進行破壞。
硬體DEP 是某些 DEP 兼容處理器的功能,可以防止在已標記為數據存儲區的記憶體區域中的代碼執行。 此功能也稱為非執行和執行保護。 Windows XP SP2 還包括軟體實施 DEP,其目的在於減少利用 Windows 中的例外處理機制的情況。
與防病毒程式不同,硬體和軟體實施 DEP 技術的目的並不是防止在計算機上安裝有害程式。 而是監視您的已安裝程式,幫助確定它們是否正在安全地使用系統記憶體空間。 為監視您的程式,硬體實施 DEP 將跟蹤已指定為“不可執行”的記憶體區域。 如果已將記憶體指定為“不可執行”,但是某個程式試圖通過記憶體執行代碼,Windows 將關閉該程式以防止惡意代碼。 無論代碼是不是惡意,都會執行此操作。從而使代碼記憶體空間存放可執行的代碼,數據記憶體空間只存儲數據,數據空間中如果有任何代碼都視作數據,不給予代碼執行許可權。

注意事項

注:基於軟體的 DEP 是 Windows XP SP2 的一部分並默認啟用,不考慮處理器的硬體實施 DEP 功能。 默認情況下,軟體實施 DEP 套用於核心作業系統組件和服務。
DEP 默認配置的目的在於保護您的計算機,並儘量減小對應用程式兼容性的影響。 但是某些程式也可能無法正確運行,視您的 DEP 配置而定。
在運行 Microsoft Windows XP 64 位版本並附帶 DEP 兼容處理器的計算機上,硬體實施 DEP 已默認啟用。 64 位應用程式將不會通過記憶體的“不可執行”區域來運行。不能禁用硬體啟用的 DEP。
Windows XP SP2 上的軟體啟用 DEP 以及在任何處理器上運行的 32 位應用程式可以配置為使用記憶體的“可執行”或“不可執行”區域。
為了配合微軟的DEP功能,Intel為自己的CPU開發了“Execute Disable Bit”(EDB)記憶體保護技術。目前Intel P4 Prescott(mPGA478與LGA775封裝)為C0或D0步進核心,最新的J系列P4 Prescott採用E0步進核心。其中只有J系列P4 Prescott具備防病毒功能,只有它才真正支持DEP技術,能夠配合SP2的DEP防毒功能,讓針對緩衝區溢出(buffer overrun)漏洞設計的病毒失效,預防它們複製並散播到其他系統。
AMD64位處理器最先支持微軟的DEP技術。為了配合DEP,AMD與微軟一起設計研發了AMD的新晶片功能“Enhanced Virus Protection”(EVP增強病毒保護)。AMD64位處理器(包括Athlon 64/Athlon 64 FX/Athlon 64移動版本/Sempron移動版本等)都將具有EVP功能。EVP功能可以和SP2的DEP技術配合,防範“快取溢出”這一常見攻擊手段,打擊一些病毒和蠕蟲,對收發電子郵件、下載檔案等日常工作進行更好的保護。

安全機制

DEP(Data Execution Prevention)即“數據執行保護”,這是Windows的一項安全機制,主要用來防止病毒和其他安全威脅對系統造成破壞。微軟從Windows XP SP2引入了該技術,並一直延續到此後的Windows Server 2003、Windows Server 2008中。毫無例外,在Windows 7中DEP也作為一項安全機制被引入進來。本文將對Windows 7下的DEP進行一番解析。

防止溢出

可以說,溢出是作業系統(套用軟體)永遠的痛,Windows 7自然也不例外。所謂溢出主要指緩衝區溢出,就是利用系統(套用軟體)漏洞從只有Windows和其他程式可以使用的記憶體位置執行惡意代碼從而達到控制系統的目的。如前所述,緩衝區溢出攻擊經常在其它程式的記憶體緩衝區寫入可執行的惡意代碼,然後誘騙程式執行惡意代碼。使用DEP的目的是阻止惡意插入代碼的執行,其運行機制是,Windows利用DEP標記只包含數據的記憶體位置為非可執行(NX),當應用程式試圖從標記為NX的記憶體位置執行代碼時,Windows的DEP邏輯將阻止應用程式這樣做,從而達到保護系統防止溢出。

實現方式

微軟DEP實現採用了兩種方式,即硬體強制DEP和軟體強制DEP。硬體強制DEP,這需要處理器的支持,不過現在大多數處理器是支持DEP的。軟體強制DEP,這是由Windows作業系統在系統記憶體中為保存的數據對象自動添加的一組特殊指針提供。如何知道自己的處理器是否支持DEP呢?右鍵單擊桌面上的“計算機”圖示,選擇“屬性”,在打開的“系統”視窗中點擊“高級系統設定”連結打開“系統屬性”面板。在“高級”選項卡頁面中的“性能”下點擊“設定”打開“性能選項”面板。點擊“數據執行保護”選項卡,在該頁面中我們可確認自己計算機的處理器是否支持DEP。如果支持會在底部的一行顯示“你的計算機處理器支持基於硬體的DEP。”,反之會顯示“你的計算機處理器不支持基於硬體的DEP,不過,Windows能使用DEP軟體防止一些類型的攻擊。”

運行級別

根據啟動參數的不同,DEP工作狀態可以分為四種。
(1)Optin:默認僅將DEP保護套用於Windows系統組件和服務,對於其他程式不予保護,但用戶可以通過應用程式兼容性工具(ACT,Application Compatibility Toolkit)為選定的程式啟用DEP,在Vista下邊經過/NXcompat選項編譯過的程式將自動套用DEP。這種模式可以被應用程式動態關閉,它多用於普通用戶版的作業系統,如Windows XP、Windows Vista、Windows7。
(2)Optout:為排除列表程式外的所有程式和服務啟用DEP,用戶可以手動在排除列表中指定不啟用DEP保護的程式和服務。這種模式可以被應用程式動態關閉,它多用於伺服器版的作業系統,如 Windows 2003、Windows 2008。
(3)AlwaysOn:對所有進程啟用DEP 的保護,不存在排序列表,在這種模式下,DEP不可以被關閉,目前只有在64位的作業系統上才工作在AlwaysOn模式。
(4)AlwaysOff:對所有進程都禁用DEP,這種模式下,DEP也不能被動態開啟,這種模式一般只有在某種特定場合才使用,如DEP干擾到程式的正常運行。
在Windows 7中,DEP默認是激活的。不過,DEP不能保護系統中所有運行的應用程式,實際DEP能夠保護的程式列表由DEP的保護級別定義。DEP支持兩種保護級別:級別1,只保護Windows系統代碼和執行檔,不保護系統中運行的其它微軟或第三方應用程式;級別2,保護系統中運行的所有可執行代碼,包括Windows系統代碼和微軟或第三方應用程式。默認情況下,Windows 7的DEP運行在級別1的保護狀態下。在“數據執行保護”配置面板中,我們能夠設定DEP的保護級別。如圖所示筆者的Windows 7默認“只為基本的Windows程式和服務激活了DEP”,即DEP保護級別為1。當然,我們也可選擇“除了以下所選擇的,為所有程式和服務打開DEP” 切換到DEP保護級別2。
在保護級別Level 2可以選擇特定的應用程式不受DEP保護。在實際套用中,這個功能非常重要,因為一些老的應用程式在激活DEP時無法正常運行。 例如,我我們在使用Word進行文本編輯時,它會自動被排除在DEP保護之外。需要注意的是,在將DEP保護切換到級別2之前,必須運行應用程式兼容性測試,確保所有的應用程式在DEP激活時能正常運行。從DEP中排除應用程式, 需要在DEP配置頁面使用“添加”按鈕,將應用程式的執行檔加入到排除列表中。

如何關閉

需要提醒的是,當DEP運行在保護級別為2時,由於需要在處理器和系統記憶體運行所有的DEP檢查,會影響系統性能,使得系統運行將會變慢一些,所以在某些情況下我們可以考慮完全關閉DEP保護。我們知道在DEP設定面板中是不提供關閉DEP選項的,那如何關閉呢?如果是Vista以前的系統,我們可以通過修改Boot.ini檔案,在其中添加NoExecute=Always0ff語句來關閉。而在Windows Vista及以上版本的Windows中,boot.ini檔案已經被啟動配置數據(Boot Configuration Data,BCD)所代替,不過我們可以使用微軟提供的命令行工具bcdedit.exe來編輯BCD檔案。
我們在命令提示符下運行不帶有任何參數的bcdedit命令,可以看到當前的啟動配置,如圖所示顯示了在Windows 7下運行bcdedit的結果,其中最後一行顯示nx OptIn,表示當前的DEP保護級別為1,如果顯示為OptOut則表示當前的EDP保護級別為2。如果我們要關閉DEP,只需將nx設定為Always0ff即可。在命令行下執行命令“bcdedit /set nx alwaysoff”,重啟系統後DEP就關閉了。反之,如果要開啟所有服務和應用程式的DEP,執行命令“bcdedit /set nx alwayson”就可以了。

局限性

如同前面介紹的安全機制一樣,DEP也有著自身的局限性。
首先,硬體DEP需要CPU的支持,但並不是所有的CPU都提供了硬體DEP的支持,在一些比較老的CPU上邊DEP是無法發揮作用的。
其次,由於兼容性的原因Windows不能對所有進程開啟DEP保護,否則可能會出現異常。例如一些第三方的外掛程式DLL,由於無法確認其是否支持DEP,對涉及這些DLL的程式不敢貿然開啟DEP保護。再有就是使用ATL 7.1或者以前版本的程式需要在數據頁面上產生可以執行代碼,這種情況就不能開啟DEP保護,否則程式會出現異常。
再次,/NXCOMPAT編譯選項,或者是IMAGE_DLLCHARACTERISTICS_NX_COMPAT的設定,只對Windows Vista 以上的系統有效。在以前的系統上,如Windows XP SP3等,這個設定會被忽略。也就是說,即使採用了該連結選項的程式在一些作業系統上也不會自動啟用DEP保護。
最後,當DEP工作在最主要的兩種狀態Optin和Optout下時,DEP是可以被動態關閉和開啟的,這就說明作業系統提供了某些API函式來控制DEP的狀態。同樣很不幸的是早期的作業系統中對這些API函式的調用沒有任何限制,所有的進程都可以調用這些API函式,這就埋下了很大的安全隱患,也為我們突破DEP提供了一條道路。

相關詞條

熱門詞條

聯絡我們