DEP緩解技術(一)
理解DEP緩解技術——第一部分
我們在之前的1,2,3,4個部落格中提到過DEP。這篇部落格將會回答以下問題:
1. 什麼是DEP?
2. 如何開啟DEP?
3. 不同DEP模式的風險有哪些?
這篇文章是DEP緩解技術的第一部分。
什麼是DEP?
DEP(也稱“資料執行保護”)是一種軟體+硬體的機制,用來阻止從未被顯式標記為可執行的記憶體頁執行程式碼。Windows XP SP2、Windows Server 2003 SP1及其之後的作業系統將會檢查CPU是否支援記憶體頁的“不可執行”或“執行禁用”位。
在Windows XP SP2之前,利用程式碼(exp)會在分配的記憶體頁執行,不需要檢查記憶體保護常量(Memory Protection Constants)。例如,如果使用指定分配許可權為PAGE_READWRITE 的VirtualAlloc ()函式分配了記憶體頁, 則仍然可以從該記憶體頁執行程式碼。從 windows XP SP2 和 windows Server 2003 SP1 開始, 如果 CPU 支援執行禁用 (XD) (針對Intel CPU)或不可執行 (NX)(針對AMD CPU) 位,則任何從被標記為PAGE_READWRITE(例)的記憶體頁執行程式碼的行為,都將觸發 STATUS_ACCESS_VIOLATION (0xC0000005) 訪問衝突異常。有關硬體強制 DEP 工作原理的詳細資訊, 請參閱以下文章: http://technet.microsoft.com/en-us/library/bb457155.aspx。
DEP 在64bit 版本的 Windows 上為64位程式 "always on(始終開啟)"狀態, 無法禁用。Windows DEP 策略可以在系統範圍內和程式層面進行管理, 下面將討論這兩種方法。這篇文章適用於在32位或64位版本的 Windows 上執行的32位程式。
DEP的健壯性?
DEP阻礙了想要成功利用安全漏洞的攻擊者。在某些情況下, 攻擊者可以使用如return-to-libc這樣的利用技術來繞過DEP。DEP本身通常不是一個強健的緩解方法。DEP 是微軟開發的緩解技術的重要組成部分,這些緩解技術有ASLR、 SeHOP、 SafeSEH和/GS等。這些緩解技術相輔相成,例如,DEP 的弱點往往被 ASLR 抵消, 反之亦然。DEP 和 ASLR 共同使用很難繞過。目前已知的繞過方法需要與特定的應用程式上下文結合起來看 (例如, IE7 and earlier bypass from Mark Dowd and Alex Sotirov)。
如何開啟DEP?
如果您的硬體支援 DEP, 並且您正在執行 Windows XP SP2 或較新的作業系統, 則您已經在某種程度上使用了DEP。硬體強制 DEP 可以配置為系統範圍 (適用於所有程式) 或為單個程式配置策略。在支援DEP的平臺上執行系統範圍的DEP 策略有四種不同的方法。
選擇啟用(Opt-In)。在此模式下DEP僅用於顯式選擇開啟DEP 的程式。這是客戶端作業系統 (如 windows XP 和 windows Vista) 的預設配置。
選擇不啟用(Opt-Out)。在這個模式下,DEP是每個程式的預設配置,不需要使用DEP的程式應該顯式標明。這是伺服器作業系統 (如 windows server 2003 和 windows server 2008) 的預設配置。
始終開啟(Always On)。無論程式是否與DEP相容,所有程式都啟用DEP。
始終關閉(Always Off)。所有程式都不啟用DEP
windows XP SP2 和 windows Server 2003 SP1
這篇文章(https://technet.microsoft.com/en-us/library/cc700810.aspx)在解釋瞭如何使用 boot.ini 或 GUI 配置 windows XP SP2 和 windows Server 2003 SP1 上的記憶體保護設定。請注意, 配置 "系統範圍" DEP 策略需要管理員許可權。
windows Vista 和 windows Server 2008
要在 Windows Vista 和伺服器2008上配置系統範圍的 DEP 策略, 請從高許可權的命令提示符處使用 bcdedit.exe 控制檯應用程式修改啟動配置資料庫。如何執行此操作的更多資訊: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/boot-parameters-to-configure-dep-and-pae
DEP "始終開啟" 下的潛在的應用程式相容性問題
將 DEP 設定為始終為所有程式啟用, 可能會增加應用程式問題的風險,這一風險是因版本7.1 之前的 ATL 版本中的某些行為而導致的。舊版本的 ATL 在執行時生成了機器碼,然後試圖從未標記為可執行的記憶體頁執行此程式碼, 從而在開啟DEP時導致衝突。如果系統範圍的設定是 "選擇啟用", 則使用名為"ATL thunk emulation" 的程式來避免與ATL相關的 DEP 崩潰。如果 DEP "始終開啟", 則不使用 “ATL thunk emulation”。注意: 當DEP設定為"始終開啟" , 在開啟包含 VBA (Visual Basic應用程式) 的巨集 (可能導致 DEP 相關崩潰) 的文件時,Microsoft Office 應用程式存在已知的相容性問題。
如何判斷某個特定程式已經開啟或將要開啟 DEP?
判斷程式當前是否使用 DEP 的最簡單方法是使用"程式管理器"並將其配置為顯示程式DEP狀態 (檢視->選擇列->程式DEP狀態), 如下所示:
要確定程式使用 (或不使用) DEP 的原因, 需要進行更多的調查工作。下面是系統決定程式的 DEP 狀態的方法。在以後的文章中, 將對每個細節進行詳細的探討。
系統範圍的 DEP 策略設定為 "始終開啟"。對所有程式啟用 DEP。
系統範圍的 DEP 策略被設定為 "選擇啟用", 並通過應用程式相容性資料庫中的條目選擇是否為該程式開啟DEP。
系統範圍的 DEP 策略設定為 "選擇不啟用", 程式未顯式指定不啟用。
程式可執行檔案用/NXCOMPAT 連結器連結, 並在 Vista 或較新的作業系統上執行。
該程式在 "檔案執行選項" 登錄檔項中將 "ExecuteOptions" 登錄檔值設定為0, 並在 Windows Vista 或較新的作業系統上執行。
該程式在 Vista SP1、XP SP3 或 Windows Server 2008 上呼叫新的SetProcessDEPPolicy API
Windows XP SP2 & Windows Server 2003 SP1上的單個程式的DEP策略
Windows XP SP2和Windows Server 2003 SP1十分強調安全性。因此許多Windows預設程式通過應用程式相容性資料庫將DEP設定為“選擇開啟”。要了解哪些程式在 windows XP SP2 或 windows Server 2003 SP1 上 選擇啟用DEP, 您可以下載並安裝最新的應用程式相容性工具包(Application Compatibility Toolkit)並在該程式 "Windows 元件" 下檢視主系統資料庫。
如果在 "windows 元件" 類別中應用了相容性修補標誌 "AddProcessParametersFlags", 則所有 Windows XP SP2 應用程式被設定為”選擇開啟“。
Windows Server 2003 SP1 預設系統策略為 "選擇不開啟"。這意味著所有未顯式指定不開啟程式都將啟用 DEP。如果更改了系統範圍的策略, 則應用程式仍可以使用 EnableDEP 相容性修復程式啟用DEP, 如下所示:
這些相容性修復程式將PEB 的 ProcessParameters值設定為 0x00020000, 使windows XP SP2 和 windows Server 2003 SP1 可以選擇程式是否開啟 DEP 。我們在 windows XP SP2 和 windows Server 2003 SP1 中找到了305個程式, 這些程式通過主應用程式相容性資料庫 (%windir%\AppPatch\sysmain.sdb) 使用此特定的相容性修復程式將DEP設定為“選擇開啟”。我們在此附上這些程式的列表:點選下載。
Windows Vista、Windows Server 2008 和較新作業系統上的針對每個程式的DEP選項
Microsoft 已在較新的作業系統上為程式提供了選擇使用DEP的選項。
/NXCOMPAT 連結器
在 Vista 和較新的作業系統上, 預設情況下, /NXCOMPAT選項的程式將被設定為選擇開啟DEP。希望利用此緩解技術的第三方應用程式的開發人員可以通過Visual C++ 2003 或較新版本的連結器傳入 "/NXCOMPAT" 標誌來重新連結其應用程式。這將使連結器產生一個二進位制檔案, 它通過 Vista 和以後的作業系統支援的可選頭欄位支援 DEP。您可以通過dumpbin.exe(與Visual Studio一起)確定某個程式是否已連結到/NXCOMPAT連結器。
C:\Windows\System32>dumpbin /headers dllhost.exe Microsoft (R) COFF/PE Dumper Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file dllhost.exe PE signature found File Type: EXECUTABLE IMAGE FILE HEADER VALUES 8664 machine (x64) 5 number of sections 4549BBFF time date stamp Thu Nov 02 05:35:59 2006 0 file pointer to symbol table 0 number of symbols F0 size of optional header 22 characteristics Executable Application can handle large (>2GB) addresses OPTIONAL HEADER VALUES 20B magic # (PE32+) 8.00 linker version 1400 size of code 1000 size of initialized data 0 size of uninitialized data 1818 entry point (0000000100001818) 1000 base of code 100000000 image base (0000000100000000 to 0000000100006FFF) 1000 section alignment 200 file alignment 6.00 operating system version 6.00 image version 6.00 subsystem version 0 Win32 version 7000 size of image 400 size of headers E1C5 checksum 2 subsystem (Windows GUI) 8140 DLL characteristics Dynamic base NX compatible Terminal Server Aware
ExecuteOptions 登錄檔設定
windows Vista 和 windows Server 2008 還可以使用 ExecuteOptions登錄檔強制程式啟用 DEP。ExecuteOptions可以強制程式在不更改系統策略的情況下使用 DEP。使用 ExecuteOptions 登錄檔設定選擇開啟DEP的程式在其生存期內會是開啟DEP的 (DEP不能通過任何 API 呼叫關閉)。該方法與系統範圍的選擇開啟、選擇關閉方法相比,由於上文討論的 "ATL thunk emulation",在應用程式相容性方面有缺點:當通過 ExecuteOptions 登錄檔設定或/NXCOMPAT 連結器強制程式使用 DEP 時, 不使用"ATL thunk emulation "。最後, Windows 相容性資料庫儲存著已知的與 DEP 不相容的dll列表,當使用此登錄檔設定DEP時, Windows 中的相容性基礎結構無法為程式禁用DEP, 因此如果應用程式嘗試載入與 DEP 不相容的dll,會發生DEP相關崩潰。
Microsoft 鼓勵第三方組織獨立軟體開發者使用DEP(以及其他緩解技術)。最新版本的 Acrobat、Flash、QuickTime 和 Sun 的 Java (JRE 6 Update 12) 都支援 DEP。有關在為程式啟用 DEP 時如何避免 ATL 相關 DEP 崩潰的詳細資訊, 請參閱http://support.microsoft.com/kb/948468。
SetProcessDEPPolicy API
最後, 在我們的最新版本的 Windows 上提供了一種新的選擇開啟 DEP 的方法。Windows Vista SP1、Windows Server 2008 和 Windows XP SP3 使用了SetProcessDEPPolicy API , 允許應用程式以程式設計的方式在不使用/NXCOMPAT 或不用在 appcompat 資料庫或登錄檔中進行標記的情況下選擇開啟DEP。公開API不僅使開發人員可以更容易地選擇開啟 DEP, 而且在使用此API時, 會執行ATL thunk emulation,使用舊版本的ATL的程式不會因 DEP而崩潰。例如, IE8就利用了這一新功能。
在本系列的第二部分中, 我們將展示如何更改應用程式的 DEP 策略以減少實際攻擊。
原文連結:https://blogs.technet.microsoft.com/srd/2009/06/12/understanding-dep-as-a-mitigation-technology-part-1/
編譯:看雪翻譯小組 歡歌笑語
校對:看雪翻譯小組 fyb波
相關文章
- DEP緩解技術2018-06-06
- android View 繪圖雙緩衝技術2019-03-12AndroidView繪圖
- CVE-2021-26411在野樣本中利用RPC繞過CFG緩解技術的研究2021-04-29RPC
- Cube 技術解讀 | Cube 小程式技術詳解2021-12-30
- Cube 技術解讀 | Cube 卡片技術棧詳解2021-11-03
- 人體分析技術,瞭解一下2018-07-09
- 一文帶你瞭解HDFS技術2022-01-10
- TechWorld2021技術嘉年華,解鎖“不一樣”的技術盛會2021-08-01
- 聊聊技術管理(一)入行之技術管理和技術專家2018-10-24
- 技術貢獻解讀 浪潮雲海OpenStack X版本技術貢獻中國第一2021-11-16
- Cloud + TiDB 技術解讀2019-02-22CloudTiDB
- Service Mesh技術詳解2024-06-21
- 技術名詞解釋2018-03-29
- 一點技術思考2024-11-01
- “九”答不可|為什麼發展量子金鑰技術已刻不容緩?2018-05-03
- 前端技術演進(一):Web前端技術基礎2019-03-04前端Web
- 將 dep 更換為 go mod2020-02-16Go
- 雲集技術學社|帶你瞭解DevOps技術原理2021-12-21dev
- 火熱的區塊鏈技術瞭解一下2018-10-26區塊鏈
- 一、你瞭解機器學習技術體系嗎2020-08-17機器學習
- 一篇文章瞭解爬蟲技術現狀2019-03-03爬蟲
- 呼叫鏈系列一:解讀UAVStack中的呼叫鏈技術2019-02-17
- 天空分割技術解決方案2023-11-21
- Web除錯技術詳解2019-04-23Web除錯
- 詳解Vue.js 技術2019-01-03Vue.js
- web前端技術Mongoose詳解2022-11-23Web前端Go
- 負載均衡技術(一)———負載均衡技術介紹2018-11-15負載
- 容器技術之Dockerfile (一)2020-05-31Docker
- 視訊技術詳解:RTMP H5 直播流技術解析2019-02-16H5
- 與OpenAI o1技術理念相似,TDPO-R演算法有效緩解獎勵過最佳化問題2024-10-25OpenAI演算法
- AI攻擊技術和測試研究框架解鎖新視野~用技術對抗技術2020-04-30AI框架
- 人臉識別技術及應用,瞭解一下2019-11-04
- 給技術人員一些技術以外的建議2018-06-19
- 技術戰疫:下一個10年的技術趨勢2020-02-21
- 一個20年技術老兵的 2020 年度技術總結2020-12-28
- OpenAI Sora 關鍵技術詳解:揭秘時空碎片 (Spacetime Patches) 技術2024-02-28OpenAISora
- 從技術到工具再到落地,Pivotal多位技術專家詳解Greenplum2018-12-28
- 文字預處理技術詳解2019-01-16