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