《Windows安全機制》之DEP(數據執行保護)

介紹

DEP的主要作用是阻止數據頁(默認的堆,棧以及內存池頁)執行代碼。分爲軟件DEP和硬件DEP,其中軟件DEP就是SafeSEH。而硬件DEP操作系統會通過設置內存頁的NX/XD屬性標記是否運行在本頁執行指令。

DEP 機制的保護原理

DEP(數據執行保護,Data Execution Prevention)就是用來彌補計算機對數據和代碼混淆
這一天然缺陷的。
DEP 的基本原理是將數據所在內存頁標識爲不可執行,當程序溢出成功轉入 shellcode 時,
程序會嘗試在數據頁面上執行指令,此時 CPU 就會拋出異常,而不是去執行惡意指令。

核心原理:

DEP 的主要作用是阻止數據頁(如默認的堆頁、各種堆棧頁以及內存池頁)執行代碼。

在這裏插入圖片描述

DEP的類型

根據實現的機制不同可分爲:軟件 DEP(Software DEP)和硬件 DEP(Hardware-enforced DEP)。
軟件 DEP
其實就是 SafeSEH機制(另外的文章中提到過),它的目的是阻止利用 S.E.H 的攻擊,這種機制與 CPU 硬件無關,Windows 利用軟件模擬實現 DEP,對操作系統提供一定的保護。這也正是爲什麼在SafeSEH 的校驗過程中會檢查異常處理函數是否位於非可執行頁上。
硬件 DEP
纔是真正意義的 DEP,硬件 DEP 需要 CPU 的支持,AMD 和 Intel 都爲此做了設計。
倆者功能及工作原理在本質上是相同的。

操作系統通過設置內存頁的 NX/XD 屬性標記,來指明不能從該內存執行代碼。爲了實現 這個功能,需要在內存的頁面表(Page T able)中加入一個特殊的標識位(NX/XD)來標識是否允許在該頁上執行指令。當該標識位設置爲 0 裏表示這個頁面允許執行指令,設置爲 1 時表示該頁面不允許執行指令。

檢測電腦是否開啓DEP

可以通過如下方法檢查 CPU 是否支持硬件 DEP,右鍵單擊桌面上的“我的電腦”圖
標,選擇“屬性”,在打開的“系統屬性”窗口中點擊“高級”選項卡。在“高級”選項卡頁
面中的“性能”下單擊“設置”打開“性能選項”頁。單擊“數據執行保護”選項卡,在該頁
面中我們可確認自己計算機的 CPU 是否支持 DEP。
(圖爲Windows10示例)
在這裏插入圖片描述

DEP的四種狀態

(1)Optin:默認僅將 DEP 保護應用於 Windows 系統組件和服務,對於其他程序不予保護,但用戶可以通過應用程序兼容性工具(ACT,Application Compatibility Toolkit)爲選定的程序啓用DEP,在 Vista 下邊經過/NXcompat 選項編譯過的程序將自動應用 DEP。這種模式可以被應用程序動態關閉,它多用於普通用戶版的操作系統,如 Windows XP、Windows Vista、Windows7。
(2)Optout:爲排除列表程序外的所有程序和服務啓用 DEP,用戶可以手動在排除列表中
指定不啓用 DEP 保護的程序和服務。這種模式可以被應用程序動態關閉,它多用於服務器版
的操作系統,如 W indows 2003、Windows 2008。
(3)AlwaysOn:對所有進程啓用 DEP 的保護,不存在排序列表,在這種模式下,DEP 不
可以被關閉,目前只有在 64 位的操作系統上才工作在 AlwaysOn 模式。
(4)AlwaysOff:對所有進程都禁用 DEP,這種模式下,DEP 也不能被動態開啓,這種模
式一般只有在某種特定場合才使用,如 DEP 干擾到程序的正常運行。

Vs設置DEP

在使用VS編譯的時候也有DEP選項。(VS2015示例)默認情況下是開啓的。
通過右鍵單擊項目屬性–>鏈接器–>高級–>DEP保護。
在這裏插入圖片描述

採用/NXCOMPAT編譯的程序會在文件的PE頭中設置IMAGE_DLLCHARACTERISTICS_
NX_COMPAT 標識,該標識通過結構體 IMAGE_OPTIONAL_HEADER 中的 DllCharacteristics
變量進行體現,當 DllCharacteristics 設置爲 0x0100 表示該程序採用了/NXCOMPAT 編譯。
經過/NXCOMPAT編譯的程序有什麼好處呢?
通過前面的介紹我們知道用戶版的操作系統中 DEP 一般工作在 Optin 狀態,此時 DEP 只保護系統核心進程,而對於普通的程序是沒有保護的。雖然用戶可以通過工具自行添加,但這無形中增高了安全的門檻,所以微軟推出了/NXCOMPAT 編譯選項。經過/NXCOMPAT 編譯的程序在 Windows vista 及後續版本的操作系統上會自動啓用 DEP 保護。

突破DEP

1.攻擊未啓用 DEP 的程序
2.利用 Ret2Libc 挑戰 DEP
3.利用可執行內存挑戰 DEP
4.利用.NET 挑戰 DEP
5.利用 Java applet 挑戰 DEP
參考資料:
《0day》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章