DEP機制的保護原理 |
發布時間: 2012/8/11 17:47:44 |
溢出攻擊的根源在于現代計算機對數據和代碼沒有明確區分這一先天缺陷,就目前來看重新去設計計算機體系結構基本上是不可能的,我們只能靠向前兼容的修補來減少溢出帶來的損害,DEP(數據執行保護,Data Execution Prevention)就是用來彌補計算機對數據和代碼混淆這一天然缺陷的。 DEP的基本原理是將數據所在內存頁標識為不可執行,當程序溢出成功轉入shellcode時,程序會嘗試在數據頁面上執行指令,此時CPU就會拋出異常,而不是去執行惡意指令。如圖1所示。 圖1 DEP工作原理 DEP 的主要作用是阻止數據頁(如默認的堆頁、各種堆棧頁以及內存池頁)執行代碼。微軟從Windows XP SP2開始提供這種技術支持,根據實現的機制不同可分為:軟件DEP(Software DEP)和硬件DEP(Hardware-enforced DEP)。 軟件DEP其實就是我們前面介紹的SafeSEH,它的目的是阻止利用S.E.H的攻擊,這種機制與CPU硬件無關,Windows利用軟件模擬實現DEP,對操作系統提供一定的保護。現在大家明白為什么在SafeSEH的校驗過程中會檢查異常處理函數是否位于非可執行頁上了吧。 硬件DEP才是真正意義的DEP,硬件DEP需要CPU的支持,AMD和Intel都為此做了設計,AMD稱之為No-Execute Page-Protection (NX),Intel稱之為Execute Disable Bit (XD) ,兩者功能及工作原理在本質上是相同的。 操作系統通過設置內存頁的NX/XD屬性標記,來指明不能從該內存執行代碼。為了實現這個功能,需要在內存的頁面表(Page Table)中加入一個特殊的標識位(NX/XD)來標識是否允許在該頁上執行指令。當該標識位設置為0里表示這個頁面允許執行指令,設置為1時表示該頁面不允許執行指令。 由于軟件DEP就是傳說中的SafeSEH,關于SafeSEH的突破前面我們已經介紹過,所以在這一節中我們只對硬件DEP進行討論和分析。 大家可以通過如下方法檢查CPU是否支持硬件DEP,右鍵單擊桌面上的"我的電腦"圖標,選擇"屬性",在打開的"系統屬性"窗口中點擊"高級"選項卡。在"高級"選項卡頁面中的"性能"下單擊"設置"打開"性能選項"頁。單擊"數據執行保護"選項卡,在該頁面中我們可確認自己計算機的CPU是否支持DEP。如果CPU不支持硬件DEP該頁面底部會有如下類似提示:"您的計算機的處理器不支持基于硬件的DEP。但是,Windows可以使用DEP軟件幫助保護免受某些類型的攻擊"。 本文出自:億恩科技【www.laynepeng.cn】 |