DEP機制的保護原理 |
發(fā)布時間: 2012/8/11 17:47:44 |
溢出攻擊的根源在于現(xiàn)代計算機對數(shù)據(jù)和代碼沒有明確區(qū)分這一先天缺陷,就目前來看重新去設(shè)計計算機體系結(jié)構(gòu)基本上是不可能的,我們只能靠向前兼容的修補來減少溢出帶來的損害,DEP(數(shù)據(jù)執(zhí)行保護,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工作原理 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)提供一定的保護,F(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進行討論和分析。 大家可以通過如下方法檢查CPU是否支持硬件DEP,右鍵單擊桌面上的"我的電腦"圖標(biāo),選擇"屬性",在打開的"系統(tǒng)屬性"窗口中點擊"高級"選項卡。在"高級"選項卡頁面中的"性能"下單擊"設(shè)置"打開"性能選項"頁。單擊"數(shù)據(jù)執(zhí)行保護"選項卡,在該頁面中我們可確認(rèn)自己計算機的CPU是否支持DEP。如果CPU不支持硬件DEP該頁面底部會有如下類似提示:"您的計算機的處理器不支持基于硬件的DEP。但是,Windows可以使用DEP軟件幫助保護免受某些類型的攻擊"。 本文出自:億恩科技【m.1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |