Windows的數(shù)據(jù)執(zhí)行保護機制
硬件和軟件實施 DEP 技術(shù)的目的并不是防止在計算機上安裝有害程序。 而是監(jiān)視已安裝程序,幫助確定它們是否正在安全地使用系統(tǒng)內(nèi)存。 為監(jiān)視程序,硬件實施 DEP 將跟蹤已指定為“不可執(zhí)行”的內(nèi)存區(qū)域。 如果已將內(nèi)存指定為“不可執(zhí)行”,但是某個程序試圖通過內(nèi)存執(zhí)行代碼,Windows 將關(guān)閉該程序以防止惡意代碼。 無論代碼是不是惡意,都會執(zhí)行此操作。
硬件和軟件 DEP 的默認配置可以保護核心 Windows 組件和服務(wù)并對應(yīng)用程序兼容性產(chǎn)生最小的影響,但是我們可以選擇將 DEp 配置為保護計算機上的所有應(yīng)用程序和程序。 如果我們將DEP 配置為保護計算機上的所有應(yīng)用程序和程序,則可以獲得額外的保護,但是也可能會引起其它應(yīng)用程序兼容性問題。 如果我們將 DEP 配置為保護計算機上的所有應(yīng)用程序和程序,并且某些32 位應(yīng)用程序存在兼容性問題,則可以從軟件 DEP 保護中豁免這些應(yīng)用程序。
windows在ntoskrnl中、ntoskrnl.exe初始化時,根據(jù)之前用戶在Ntldr中選擇的啟動配置,來初始化DEP的設(shè)置。對DEP的設(shè)置,大致有:
(1)對各個進程的設(shè)置(寫到系統(tǒng)的全局共享內(nèi)存區(qū)域)
設(shè)置分為可執(zhí)行的EXECUTE(未保護的)和不可執(zhí)行的NOEXECUTE(DEP保護的)。同時有“例外”和“包含”兩種設(shè)置。2*2=共4種設(shè)置。
(2)CPU中寄存器的設(shè)置。對于開啟了DEP的,需要設(shè)置CPU的相關(guān)標志位。
(3)對用戶態(tài)的程序,在0x10000004非法訪問的異常處理中,根據(jù)(1)中的設(shè)置,如果進程沒有開啟數(shù)據(jù)執(zhí)行保護,則忽略異常。
(4)對內(nèi)核態(tài),開啟可執(zhí)行保護后,可能觸發(fā)0x000000FC的錯誤。
第(2)步的設(shè)置,應(yīng)該就是Intel 的DEP方案。而(1)應(yīng)該是在Copy-On-Write的時候會用到的。(1)(2)的結(jié)果觸發(fā)(3)(4)。