Data Execution Prevention
From Wikipedia, the free encyclopedia
Data Execution Prevention (DEP) is a security feature included in modern Microsoft Windows operating systems that is intended to prevent an application or service from executing code from a non-executable memory region. This helps prevent certain exploits that store code via a buffer overflow, for example. DEP runs in two modes: hardware-enforced DEP for CPUs that can mark memory pages as nonexecutable, and software-enforced DEP with a limited prevention for CPUs that do not have hardware support. Software-enforced DEP does not protect from execution of code in data pages, but instead from another type of attack (SEH overwrite).
DEP was introduced in Windows XP Service Pack 2 and is included in Windows XP Tablet PC Edition 2005, Windows Server 2003 Service Pack 1 and later,[1] Windows Vista, and Windows Server 2008, and all newer versions of Windows.
Contents |
[edit] Mode of enforcement
[edit] Hardware enforcement
Hardware-enforced DEP enables the NX bit on compatible CPUs, through the automatic use of PAE kernel in 32-bit Windows and the native support on 64-bit kernels. Windows Vista DEP works by marking certain parts of memory as being intended to hold only data, which the NX or XD bit enabled processor then understands as non-executable.[1] This helps prevent buffer overflow attacks from succeeding. In Windows Vista, the DEP status for a process, that is, whether DEP is enabled or disabled for a particular process can be viewed on the Processes tab in the Windows Task Manager.
In some instances, Data Execution Prevention can have the unintended consequence of preventing legitimate software from executing. In these cases, the affected software needs to be flagged as being allowed to execute code in those parts of memory, but this itself leads to a possible attack if the application isn't rigorous in validating data that is passed into a region of memory that is marked as being executable.
If the x86 processor supports this feature in hardware, and if the system's BIOS provides support for this feature and it has been enabled, either by the manufacturer or the user,[2] then the NX features are turned on in Windows, on a limited "opt-in" basis.[3] This setting provides protection only for a limited set of Windows system and binary files. To achieve full protection, the user must choose either "OptOut", covering all programs and processes not specifically exempted, or "AlwaysOn", covering all such without exemption. These are configurable through the System Properties interface.[4] If the feature is not supported by the x86 processor, then no protection is given. Outside of the x86 architecture, a version of NX also exists for Intel's IA-64 architecture that is supported by Windows.
[edit] Software enforcement
Software DEP, while unrelated to the NX bit, is what Microsoft calls their enforcement of "Safe Structured Exception Handling". Software DEP/SafeSEH simply checks when an exception is thrown to make sure that the exception is registered in a function table for the application, and requires the program to be built with it. However, even though it creates an impression that software DEP is related to the prevention of executing code in data pages, it is a different form of protection.[1]
[edit] Issues
[edit] Limitations
Unlike similar protection schemes available on other operating systems, DEP provides no address space layout randomization (ASLR, a feature now available in Windows Vista), which may allow return-to-libc attacks that could feasibly be used to disable DEP during an attack. The possibility has now been demonstrated against Windows Hardware-enforced DEP by authors "skape & Skywing" in the following Uninformed article [1] which relies on a return-to-libc style attack. This technique relies on directly pointing the EIP register to the known service-pack-dependent location which applies the OptIn/OptOut mechanism. It is reliant on the boot-time option of OptOut/OptIn being available. If all pages are strictly enforced, then this attack will not succeed. The PaX documentation further elaborates on why ASLR is necessary.
[edit] Compatibility
DEP is occasionally the cause of software problems, usually with older software. However, it also fixes problems with some applications, like the Age of Mythology game.[dubious ]
Users have experienced problems using various command line commands that are a part of Microsoft's Services for Unix, which is included as part of Vista as well as Windows Server 2003 R2.
In most cases, these problems may be solved by disabling the DEP features. DEP can be turned off on a per-application basis, or turned off entirely for all non-essential Windows programs and services.[5] Microsoft recommends that DEP not be globally disabled where an application crashes due to a DEP error. Instead, the author or vendor of the offending software should firstly be contacted for an updated version that does not violate DEP, or failing that, that DEP be disabled on an exception basis for the offending application only.[6]
The "COM surrogate has stopped working" error that is sometimes received in Windows Vista while viewing media folders can be corrected by turning off DEP for the dllhost.exe. This error surfaces in Windows Vista because many third party video and audio codecs are not DEP-compliant. This problem may also generally be resolved by updating any installed codecs to their latest versions.
DEP problems can occasionally occur with DEP-compliant core operating system components such as Windows Explorer, Internet Explorer and Windows Installer as they support in-process third party extensions or plugins that may not be DEP-compliant.[7]
[edit] Configuration
DEP configuration for the system is controlled through switches in the Boot.ini file,[1] while opt-in or opt-out settings can be configured by using the System dialog box in Control Panel.[1]
The Boot.ini file settings are as follows: /noexecute= policy_level Note policy_level is defined as AlwaysOn, AlwaysOff, OptIn, or OptOut.
- OptIn: This setting is the default configuration for Windows XP. On systems with processors that can implement hardware-enforced DEP, DEP is enabled by default for limited system binaries and programs that "opt-in." With this option, only Windows system binaries are covered by DEP by default and cannot be disabled without changing the policy to "AlwaysOff". This is also the default in Windows Vista, however in 64 bit Vista 64 bit applications are always opted-in. [8]
- OptOut: This setting is the default configuration for Windows 2003 SP1. DEP is enabled by default for all processes. A list of specific programs that should not have DEP applied can be entered using the System dialog box in Control Panel. Network administrators can use the Application Compatibility Toolkit to "opt-out" one or more programs from DEP protection. System compatibility fixes, or shims, for DEP do take effect. Also note that Windows silently disables DEP for certain executables, such as those packaged with ASPack. [9]
- AlwaysOn: This setting provides full DEP coverage for the whole system. All processes always run with DEP applied. The exceptions list to exempt specific programs from DEP protection is not available. System compatibility fixes for DEP do not take effect. Programs that have been opted-out by using the Application Compatibility Toolkit run with DEP applied.
- AlwaysOff: This setting does not provide any DEP coverage for any part of the system, regardless of hardware DEP support.
[edit] See also
- NX bit
- Executable space protection
- Buffer overflow
- Heap overflow
- Stack buffer overflow
- Stack-smashing protection
[edit] References
- ^ a b c d e "A detailed description of the Data Execution Prevention (DEP) feature in Windows XP Service Pack 2, Windows XP Tablet PC Edition 2005, and Windows Server 2003". Microsoft. 2006-09-26. http://support.microsoft.com/kb/875352/EN-US/. Retrieved on 2008-07-11.
- ^ "Microsoft Knowledge Base kb912923". 2007-10-07. http://support.microsoft.com/kb/912923. Retrieved on 2009-03-14.
- ^ "Microsoft Knowledge Base kb875352". 2006-09-26. http://support.microsoft.com/kb/875352. Retrieved on 2009-03-14.
- ^ "System-wide configuration of DEP". 2006-09-26. http://support.microsoft.com/kb/875352#5. Retrieved on 2009-03-14.
- ^ Marc Liron. "Adding Software Exceptions In Data Execution Prevention (DEP)". Windows XP Update. http://www.updatexp.com/dep-exceptions.html. Retrieved on June 8.
- ^ "Data Execution Prevention: frequently asked questions". Microsoft. http://windowshelp.microsoft.com/Windows/en-US/help/186de3d0-01af-4d4c-981d-674637d2f4bf1033.mspx. Retrieved on 2008-09-15.
- ^ "Windows Installer custom action code must be compatible with Data Execution Prevention in Windows Vista". Microsoft. 2007-03-15. http://support.microsoft.com/kb/929710. Retrieved on 2008-07-10.
- ^ Robert Hensing. "DEP on Vista exposed!". http://blogs.technet.com/robert_hensing/archive/2007/04/04/dep-on-vista-explained.aspx. Retrieved on February 26.
- ^ Fabrice Roux. "Hardware DEP has a backdoor". http://blog.fabriceroux.com/index.php?blog=1&title=hardware_dep_has_a_backdoor&more=1&c=1&tb=1&pb=1. Retrieved on March 22.
[edit] External links
- A description of DEP and how to configure it
- NXTEST A free tool that can test executing code from a data segment, the process heap and the stack to see if DEP is enabled and working.
- Guide to hardware-based DEP protection
- The "Understanding Data Execution Prevention" help topic incorrectly states the default setting for DEP in Windows Server 2003 Service Pack 1
- SecurAble A free tool to test if DEP support is available, and if so, whether it is enabled.