A system and method for address space layout randomization (“ASLR”) for a Windows operating system is disclosed. The address space layout includes one or more memory regions that are identified and then a particular implementation of the system randomizes the identified memory region in order to prevent any software vulnerabilities.
|
10. A computer implemented method for allocating a memory to a process being executed within an operating system during a user mode of operation of a computing device, wherein said memory includes a plurality of memory regions, and wherein at least one of the plurality of memory regions are allocated to the process being executed during a kernel mode of operation of the computing device the method comprising
identifying a type of the particular memory region to be allocated to the process being executed on the computing device, the type of the particular memory identified being selected from a group consisting of a stack, a heap, a memory mapped file, an image file mapping, an environmental block, and an arbitrary memory allocation;
selectively randomizing an address associated with the particular memory region based on the identified type and whether randomization is enabled for the identified type; and
allocating the particular memory region having the randomized address to the process during execution on the computing device.
1. A computer readable storage medium encoded with routines executable by a computing device for allocating a memory to a process being executed within an operating system of the computing device, wherein said memory includes a plurality of memory regions, and wherein a particular one of the plurality of memory regions is to be allocated to the process being executed on the computing device, said computer readable storage medium comprising:
a first routine for identifying a type of the particular memory region to be allocated to the process being executed on the computing device, the type of the particular memory identified being selected from a group consisting of a stack, a heap, a memory mapped file, an image file mapping, an environmental block, and an arbitrary memory allocation;
a second routine for selectively randomizing an address associated with the particular memory region based on the identified type and whether randomization is enabled for the identified type; and
a third routine for allocating the particular memory region having the randomized address to the process being executed on the computing device.
2. The computer readable medium of
an executable image mapping; and/or
a DLL image mapping.
3. The computer readable medium of
a process environment block (PEB); and/or
a thread environment block (TEB).
4. The computer readable medium of
determining whether randomization is enabled;
determining whether the process is exempt from randomization;
determining whether a base address of the arbitrary memory allocation is equal to a predetermined value;
retrieving the process from a virtual memory when the randomization is determined to be enabled, the process is determined not to be exempt from randomization, and the base address of the arbitrary memory allocation is determined to be equal to the predetermined value;
randomizing the base address for the arbitrary memory allocation; and
allocating the arbitrary memory allocation having the randomized base address to the retrieved process during execution on the computing device.
5. The computer readable medium of
6. The computer readable medium of
determining whether a PEB/TEB randomization is enabled;
adjusting an original address associated with the identified environmental block to modify a location of the environmental block, and allocating the environmental block having the modified location to the process during a driver initialization process on the computing device when the PEB/TEB randomization is determined to be enabled; and
allocating the environmental block having the original address to the process during the driver initialization process on the computing device when the PEB/TEB randomization is determined not to be enabled.
7. The computer readable medium of
8. The computer readable medium of
determining whether a file mapping randomization is enabled;
determining whether the particular memory region is an image file mapping;
randomizing a base address for the particular memory region and allocating the particular memory region having the randomized base address to the process when the particular memory region is determined not to be an image file mapping; and
randomizing the address for the image file mapping and allocating the image file mapping having the randomized address to the process when the particular memory region is determined to be an image file mapping region.
9. The computer readable medium of
selecting a randomized base address for the image file mapping; and
relocating the image file mapping to the randomized base address during execution of the process on the computing device.
11. The method of
12. The method of
13. The method of
determining whether randomization is enabled;
determining whether the process is exempt from randomization;
determining whether a base address of the arbitrary memory allocation is equal to a predetermined value;
retrieving the process from a virtual memory when the randomization is determined to be enabled, the process is determined not to be exempt from randomization, and the base address of the arbitrary memory allocation is determined to be equal to the predetermined value;
randomizing the base address for the arbitrary memory allocation; and
allocating the arbitrary memory allocation having the randomized base address to the retrieved process during execution on the computing device.
14. The method of
determining whether a PEB/TEB randomization is enabled;
adjusting an original address associated with the identified environmental block to modify a location of the environmental block, and allocating the environmental block having the modified location to the process during a driver initialization process on the computing device when the PEB/TEB randomization is determined to be enabled; and
allocating the environmental block having the original address to the process during the driver initialization process on the computing device when the PEB/TEB randomization is determined not to be enabled.
15. The method of
determining whether a file mapping randomization is enabled;
determining whether the particular memory region is an image file mapping;
randomizing a base address for the memory mapped file and allocating the memory mapped file having the randomized base address to the process when the particular memory region is determined not to be an image file mapping; and
randomizing the address for the image file mapping and allocating the image file mapping having the randomized address to the process when the particular memory region is determined to be an image file mapping.
|
This patent application claims priority from U.S. provisional patent application Ser. No. 60/595,896, filed Aug. 15, 2005, which is incorporated herein by reference in its entirety.
The present document relates to a method of protecting an operating system from software vulnerabilities, and more particularly to a method of address space layout randomization for a Windows operating system.
There are a number of ways by which an attacker can execute arbitrary code on a target machine, such as a personal computer, in order to gain control of that target machine. However, a given attack vector must provide an attacker with the ability to either directly or indirectly alter the execution path of a software program or a process in a controllable and desired fashion such that the process can be altered to run software code supplied by the attacker in order to gain control of the target machine.
As such, the attacker must have some sort of knowledge about the address space layout of the process being attacked. Knowledge of the address space layout for a particular process allows an attacker to redirect execution to the attacker's controllable location in memory, thereby allowing an attacker to execute arbitrary code in a Windows operating system and gain control of the target machine.
An address space layout may include multiple segments such as stacks, heaps, memory mapped files, arbitrary memory allocations, executable image mapping, DLL image mappings, TEB(s) and a PEB. Stacks, heaps, memory mapped files, arbitrary memory allocations and executable image mappings are found in most common operating systems, while the PEB (“Process Environment Block”) and the TEB (“Thread Environment Block”) are memory region types unique to the Windows operating system.
To date, there have been a number of implementations that have tried to either partially or universally stop exploitation of software vulnerabilities, such as Address Space Layout Randomization (“ASLR”). ASLR is a term that is used to describe the action of making the address space layout for a particular process' virtual address space unpredictable, either wholly or in part. Although the means of implementing ASLR varies greatly depending on the particular platform, it usually involves randomizing certain types of memory allocations across the span of a process' execution.
The major benefit of ASLR over other approaches is that the impact on performance of the process incurred by randomization of the address space is negligible. ASLR also has the benefit of not breaking legacy applications that rely on writable memory regions remaining executable. In addition, ASLR is the only method that, when done in whole, can prevent every known method of exploitation that relies on knowing something about the address space of a target process.
However, there is a need in the art for an ASLR system for a Windows operating system in order to protect such an operating system from attack as well as mitigate a large class of vulnerabilities inherent in the Windows operating system. In addition, there is a need for an SEH overwrite protection for a Window operating system.
In one embodiment a system for address space layout randomization may include an address space having one or more different types of memory regions, the ASLR system further including a means for identifying the type of memory region in the address space, and randomizing each type of memory region in the address space once said one more different types of memory regions are identified.
In another embodiment a method for randomizing one or more memory regions includes identifying whether the memory region is a file mapping and then determining whether the memory region is an image file if the memory region is a file mapping.
Implementation of the above embodiments may include one or more of the following features:
The system for address space layout randomization further includes one or more algorithms for randomizing a respective memory region, including the operation of selecting a randomized base address.
Identifying whether the memory region is a PEB or a TEB if the memory region is not a file mapping.
Identifying whether the memory region is a memory allocation if the memory region is not a PEB or a TEB.
Identifying whether the memory region is an image file if the memory region is a file mapping.
Randomizing the memory region if the memory region is a file mapping.
Randomizing the memory region if the memory region is either a PEB or a TEB.
Randomizing the memory region if the memory region is a memory allocation.
Randomizing the memory region if the memory region is an image file mapping.
The memory region may be a stack.
The memory region may be a heap.
The memory region may be an arbitrary file mapping.
The memory region may be an executable image mapping.
The memory region may be a DLL image mapping.
The memory region may be a TEB.
The memory region may be a PEB.
Additional objectives, advantages and novel features will be set forth in the description which follows or will become apparent to those skilled in the art upon examination of the drawings and detailed description which follows.
Corresponding reference characters indicate corresponding elements among the several views. The headings used in the figures should not be interpreted to limit the scope of the figures.
Referring to the drawings a system and method for implementing an address space layout randomization (“ASLR”) is illustrated and generally indicated as 10 in
Exploiting such software vulnerabilities requires that the attacker 6 have some knowledge about the layout of the address space 16 of the process 9 being attacked. In one implementation, a system and method for preventing execution of such arbitrary code by an attacker 6 includes randomizing different portions of the address space 16 in such a manner that an attacker 6 is prevented from running arbitrary code in order to directly or indirectly alter the execution path of process 9 in a controllable and desirable fashion.
As shown in
As used herein, a stack 20 is used to store data and control information for one or more frames of execution associated with a given thread 13, while a heap 22 is used to store globally scoped data. Memory mapped files 24 are regions of memory 7 that are backed against a non-image file on disk (not shown) instead of Random Access Memory (“RAM”). Further, an arbitrary memory allocation 26 of the address space 16 is an allocation of a memory region 18 with RAM that the Windows platform 8 provides such as a heap 22, rather than as a file on a disk. The executable image mapping 28 is fundamentally the same as a DLL image mapping 30 and are collectively referred to as an image file mapping 31. Finally, a PEB 34 is used to store globally accessible control structures and variables that are used internally by Microsoft® during the course of a process' 9 execution, while the TEB 32 is used to store information about and for a given thread 13, such as error codes, thread 13 local storage, and other attributes unique to a single thread 13. As used herein, thread 13 may be defined as a sequence of instructions which may execute in parallel with other threads.
As shall be discussed in greater detail below, various implementations of the ASLR system 10 are adapted to randomize a respective memory region 18 of address space 16 in a manner that prevents exploitation of a software vulnerability. A general overview of the ASLR system 10 is discussed below followed by specific discussions related to various implementations of ASLR system 10 for randomizing each type of memory region 18.
Overview of ASLR System
Referring to
At decision point 104 ASLR system 10 determines whether memory region 18 is a TEB 32 or PEB 34. If the memory region 18 is identified as either a TEB 32 or a PEB 34, then ASLR system 10 proceeds to execute subroutine 110 which randomizes the TEB 32 or PEB 34. If not, ASLR system 10 proceeds to decision point 106 which determines that the memory region 18 is an arbitrary memory allocation 28 and then executes a subroutine 108 which randomizes the arbitrary memory allocations 26. If the ASLR system 10 determines that the memory region is not an arbitrary memory allocation 26, then the system 10 proceeds to step 118 for return allocation information.
At decision point 112, the ASLR system 10 determines whether the memory region 18 is an image file mapping 31 or not. If the memory region 18 is not an image file mapping 31, then system 10 proceeds to execute subroutine 114 which randomizes the memory region 18 as a file mapping 14. If the memory region 18 is an image file mapping 31, then ASLR system 10 proceeds to execute subroutine 116 which randomizes the memory region 18 as an image file mapping 31. Once either subroutines 108, 110, 114 or 116 are executed and completed in such a manner that prevents exploitation of any software vulnerability, the ASLR system 10 proceeds to step 118 for return of allocation information.
Implementation of ASLR System for Randomizing Memory Allocation
The term memory allocation, as used herein, means a generic grouping of arbitrary purposed memory segments in a process 9, such as thread stacks 20 and heaps 22. The majority of memory allocations that are mapped into the address space 16 of process 9 over time are executed at the request of process 9, rather than being executed for the thread 9 by the kernel.
Referring to
At decision point 204, ASLR System 10 determines whether randomization is enabled or not. If the randomization is enabled, then at decision point 206 ASLR System 10 determines whether the base address of address space 16 is zero. If the randomization is not enabled, then at step 210 memory allocation is completed and ASLR System 10 proceeds to step 212 for return of allocation information.
However, if it is determined that the requested base address is zero, then the ASLR system 10 implements a subroutine 208 that selects a randomized base address using an algorithm. Once completed, the ASLR System 10 proceeds to steps 210 and 212 as described above. However, if the ASLR System 10 determines that the base address is not zero, then the System 10 proceeds directly to steps 210 and 212 and the allocation is completed.
In order to robustly implement randomization of memory allocations that are performed by way of nt!NtAllocateVirtualMemory, a kernel-mode driver must be implemented that layers between callers of nt!NtAllocateVirtualMemory and its implementation. This allows for catching allocations that are originally both in user-mode and kernel-mode.
Referring to
If the BaseAddress is zero, then the ASLR system 10 proceeds to decision point 606 in order to determine whether randomization has been completed. However, if the BaseAddress is not zero then the system 10 proceeds to step 622 for calling an original NtAllocateVirtualMemory.
At decision point 606, if randomization has been enabled, then the ASLR system 10 proceeds to step 608 in order to get a process object 9 from the handle that was passed to NtAllocateVirtualMemory before reaching decision point 612 in order to determine whether the process 9 is exempt from randomization. However, if randomization has not been enabled, then the ASLR system 10 proceeds to step 622 as described above.
At decision point 612, if the thread 13 has not been exempt from randomization, then a subroutine 610 is executed for a GetRandomizedBaseforProcess application before proceeding to decision point 614 in order to determine whether the randomized base is zero. However, if the thread 9 is exempt from randomization, then the ASLR system 10 proceeds to step 622 as described above.
At decision point 614, if the randomized base is zero, then at step 616 the ASLR system 10 sets ZeroBits to 0 before proceeding to decision point 618 in order to determine whether the AllocationType I=MEM_COMMIT. If the AllocationType I=MEM_COMMIT, then the AllocationType is set at I=MEM_RESERVE at step 620 before proceeding to step 622 as described above. However, if the AllocationType is not set at MEM_COMMIT then the ASLR system 10 proceeds directly to step 622.
After step 622 is executed, then the ASLR system 10 proceeds to decision point 624 in order to determine whether the Allocation was successful. If the Allocation was successful, then the Return status code is executed at step 630. However, if the Allocation failed, then the ASLR system 10 proceeds to step 626 in order to Restore ZeroBits, BaseAddress, and AllocationType. This is done in order to allow the allocation to succeed even if the ASLR system 10 was unable to allocate memory 7 at the randomized base address. After the parameter values are restored the operation completes by calling the original NtAllocateVirtualMemory at step 628. Once completed, the ASLR system 10 proceeds to step 630 as described above. In one implementation, if the allocation failed after randomization, the ALRS system 10 may try the allocation again without any randomized base address this time.
A more detailed discussion of this particular implementation of ASLR System 10 may be found in the related provisional patent application previously incorporated by reference.
Implementation of ASLR System for Randomizing a TEB and PEB
The TEB 32 and PEB 34 are both internal data structures that are used by both the process 9 and the Windows platform 8 to track the state of execution of process 9 in a globally accessible location. Since the TEB 32 and PEB 34 are internal data structures, the procedure involved in mapping the TEB 32 and PEB 34 into the address space 16 of thread 9 is handled by the kernel, for example by ntosknrl.exe.
In addition, the implementation of ASLR system 10 used to randomize the TEB 32 and PEB 34 takes advantage of the fact that both memory regions 18 rely on the field nt!MmHighestUserAddress when these types of memory regions 18 are being mapped into memory 7. As such, adjusting nt!MmHighestUserAddress by a random number of pages makes it possible to make the address at which the TEB 32 and PEB 34 will be mapped to be random. The adjustment cannot exceed a value that causes nt!MmHighestUserAddress to fall below 0x7ffefff, however, due to the fact that this would make required portions of the user-mode address space unavailable to the process.
Referring to
However, if the PEB 34 and TEB 32 are not enabled at decision point 304, then the ASLR system 10 proceeds directly to step 308 for completing the ASLR Driver initialization. After step 308 is completed, the ASLR system 10 proceeds to step 310 in order to continue the system boot.
A more detailed discussion of this particular implementation of ASLR System 10 may be found in the related provisional patent application previously incorporated by reference.
Implementation of ASLR System for Randomizing Image Mappings
File mappings 14 can be typically loaded at the same base address of the address space 16 from one execution of process 9 to another execution, thereby allowing an attacker 6 to assume that a given instruction, such as a jmp esp instruction, will exist at the same base address between multiple target machines 4. A base address as used herein is defined as a memory address serving as a reference point (“base”) for other memory addresses.
In one implementation, ASLR system 10 provides a means for randomizing a file mapping 14 such that the file mapping 14 is not loaded at the same base address of space address 16 that prevents exploitation of any software vulnerability by the attacker 6. Referring to
At decision point 406, the ASLR system 10 determines whether the memory region 18 is an image file or not. If the memory region 18 is an image file, then the ASLR system 10 executes subroutine 408 for randomizing the file mapping 14 and then proceeds to step 414.
However, if the ASLR system 10 determines that the memory region 18 is not an image file then system 10 proceeds to execute subroutine 410 that selects a randomized base address for address space 16. Once a randomized base address is selected, the ASLR system 10 proceeds to step 414.
A more detailed implementation of the ALRS system 10 embodied in steps 404-414 for the MmMapViewOfSection hook is illustrated in
At decision point 702, if the FilePointer is not NULL, then a subroutine 704 is executed for a GetRandomizedImageMapping application as shall be discussed in greater detail below. Once the subroutine 704 is completed, then at step 706 SectionObject to randomized section object is set before proceeding to step 708 so that the BaseAddress is set to a randomized base address. Afterwards, ASLR system 10 calls the original MmMapViewOfSection application at step 716.
If the FilePointer is NULL, then decision point 712 is reached to determine whether the control area flags have the BASED flag set or not. If the BASED flag is set, then subroutine 710 for implementing GetRandomBasedForProcess application is executed before reaching step 716 as described above. However, if the BASED flag is not set, then a decision point 714 is reached to determine whether the BaseAddress is zero or not. If the BaseAddress is zero, then subroutine 710 is executed as described above. If the BaseAddress is not zero, then the ASLR system 10 proceeds directly to step 716 as described above.
Once Call original MmMapViewOfSection is completed at step 716, then a decision 718 is reached in order to determine whether a section object is randomized. If the section is randomized, then a decision point 720 is reached to determine whether the allocation failed because of a conflicting address. However, if the section object is not randomized, then a Return status code is executed at step 732.
At decision point 720, if the allocation failed because of a conflicting address, then the BaseAddress is set to zero at step 722 followed by step 724 for calling the original MmMapViewOfSection. Once completed, decision point 726 is reached to determine whether the allocation was successful. If the allocation was successful, then decision point 728 is reached to determine whether the section object base address is a mismatch. This comparison is made between the base address returned by the call to the original MmMapViewOfSection and the base address conveyed by the section object itself. This check is necessary in order to determine the proper structure definitions to use for the operating system in question, for example the Windows platform 8. If there is a mismatch between the base addresses, then subroutine 730 is executed for a CheckSwitchtoGdr application followed by step 732 as described above. However, if the allocation is not successful then step 732 is executed.
Referring to
At decision point 802, if the ViewSize is zero, then ViewSize is set to SectionObject's SegmentSize at step 804 followed by execution of subroutine 806. However, if the ViewSize is not zero, then the ASLR system 10 executes subroutine 806 for an GetImageSetForProcess application.
After completion of subroutine 806, then decision point 808 is reached for determining whether a valid image is set or not. If the valid image is set, then subroutine 810 for LookupRandomizedImageMapping application is executed. Once execution of subroutine 810 is completed, then decision point 812 is reached for determining whether subroutine 810 was successful or not. Decision point 812 is used to determine if a randomized image mapping was found for the file mapping that is currently being randomized. If successful, then at step 814 SectionObject output parameter is set to randomized section object before the return status code at step 816.
Referring to
Once subroutine 906 is completed, the ASLR system 10 proceeds to decision point 908 to determine whether the Create Flag is set. If the Create Flag is set, then subroutine CreateRandomizedImageMapping application is executed followed by step 912 for return status code. However, if the Create Flag is not set, then the ASLR system 10 proceeds directly to step 912 as described above.
Referring to
After step 1004 is completed, the NtCreateSection routine is executed at step 1006 in order to create a raw file-backed section. The NtCreateSection routine allows the caller to create a new section object, such as a file-backed section or pagefile-backed section. In order to create a file-backed section the FileHandle parameter must point to a valid file handle with which to associate the section. Otherwise, the section will be created as a pagefile-backed section. In addition, the NtCreateSection allows the caller to create a named section object that can be subsequently accessed with NtOpenSection. The NtCreateSection routine can be accessed from user-mode through ntdll!NtCreateSection which is a stub for transferring control to the kernel-mode implementation that resides in nt!NtCreateSection. Once a raw file-backed section is created, a PerformImageFileRandomization subroutine 1008 is executed as shall be discussed in greater detail below.
After subroutine 1008 is executed, the NtCreateFile routine is executed at step 1010 in order to open a randomized image file for reading by the ASLR system 10 followed by step 1012. At step 1012, the NtCreateSection routine is executed for creating a file-backed image section. Once the file-backed image section is created, then at step 1014 resources are cleaned up followed by a return status code at step 1016, thereby completing subroutine 910. One subroutine 910 has completed, the current state will be such that a randomized section object has been created and returned that can be subsequently used to create a randomized image file mapping.
Referring to
If the image is not relocatable, then the return is not support at step 1104 and the image cannot be efficiently randomized by using PE/COFF relocation information. Relocation information is information included in the binary itself that provides information necessary to change the base address at which an image file is located at on the fly. However, if the image is relocatable, then at step 1106 a randomized image file path is calculated. A unique path on disk must be calculated which will be used to store the randomized version of the image being filed.
At step 1108, a randomized base address for the image mapping is acquired followed by execution of LdrRelocateRawImage routine at step 1110. The base address acquired should not overlap with any other previously acquired image mapping address which will reduce the amount of memory overhead incurred due to copy-on-write relocations. The LdrRelocateRawImage routine relocates a raw mapping to a randomized address. Such relocations are applied to the raw mapping according to PC/COFF relocation standards.
After execution of the LdrRelocateRawImage routine is completed, then at step 1112 an NtCreateFile routine is executed for opening a randomized file on disk for writing. At step 1114, the raw randomized image mapping is copied to a randomized file on disk using the NtWriteFile routine. Once completed, the ASLR system 10 proceeds to return status code at step 1116, thereby completing subroutine 1008.
A more detailed discussion of the above may be found in the related provisional patent application previously incorporated by reference.
Implementation of ASLR System for Randomizing File Mappings
As noted above, file mappings 14, and particularly image file mappings 31, are generally regarded as one of the most relied upon memory types employed by an attacker when implementing to exploit against any type of software vulnerability. The reason for this type of software vulnerability is that image file mappings 31 may be typically loaded at the same base address from one execution to the next execution.
The NtMapViewOfSection routine accomplishes the task of mapping the physical pages described by a section (not shown) into the address space 16 of a given process 9. As used herein, the term section is defined as a data structure that holds information about a portion of memory 7 that is either backed against a file on a disk (referred to as “file-backed”) or the pagefile (referred to as “pagefile-backed). The physical pages described by the section are typically meant to be mapped into the address space 16 of one or more processes 9. Since a view of an individual section can exist in multiple processes 9 and the section itself describes only one set of physical pages, those physical pages are considered to be shared. If one process 9 were to map a view of a file-backed section object for write access and were to make a change, all other processes 9 with a view of the same area of the file on disk would be able to see the change.
The method by which the pages of a section are mapped into memory is dependent on both the parameters passed into a NtMapViewOfSection routine and on the parameters that were passed into the call to a NtCreateSection routine originally. The NtCreateSection routine allows the caller to create a new section object. As described above, there are two types of logical sections that can exist: file-backed sections and pagefile-backed sections. In order to create a file-backed section the FileHandle parameter must point to a valid file handle with which to associate the section. Otherwise, the section will be created as a pagefile-backed section.
Once step 502 is completed, the ASLR system 10 enters a kernel-mode application which proceeds to decision point 504 to determine whether randomization has been enabled. If randomization has been enabled, then ASLR system 10 proceeds to decision point 506 in order to determine whether the memory region 18 is an image file mapping 31. However, if randomization has not been enabled, then at step 514 a file mapping 14 is completed and ASLR system 10 proceeds to step 516 for return allocation information and the subroutine 116 is completed.
At decision point 506, if the memory region 18 is not an image file mapping 31, then a subroutine 508 is executed which randomizes the file mapping 14. Once randomization has been completed, the ASLR system 10 may proceed to step 516 and the subroutine 116 is completed. However, if the memory region 18 is an image file mapping 31, then subroutine 510 is executed which selects a randomized base address. After the base address has been randomized, a subroutine 512 is executed which relocates the image and then the file mapping 14 is completed at step 514. After step 514, the ASLR system 10 may proceed to step 516 and subroutine 116 is completed.
Implementation of SEH Overwrite Protection
One attack vector that is unique to the Windows platform is what is known as an SEH, or Structured Exception Handler, overwrite. This attack vector involves an attacker overwriting data structures that are stored on the stack which are used whenever an exception, such as an access violation, is dispatched. The act of dispatching an exception involves the kernel passing information about the exception that occurred to the thread that the exception occurred in. It does this by enumerating a list of registered exception handlers, all of which are stored on the thread stack. This gives the thread an opportunity to recover from the exception and continue executing.
If an attacker is able to use a stack overflow to overwrite a registered exception handler on the stack, then it is possible for that attacker to gain execution control. The protection mechanism described in this document establishes an algorithm that can be used to detect and prevent an attacker from being able to leverage an SEH overwrite. It accomplishes this by adding a security check to the exception dispatching process that ensures that all registered exception handlers are valid prior to allowing the operating system provided exception dispatcher to continue.
SEH overwrite protection functions by hooking a NtCreateThread routine in kernel-mode application. When NtCreateThread is called an APC is queued that executes code in the context of a thread 13 which installs a validation frame. The validation frame provides a marker and is placed at the tail end of the exception registration record list which is found within the NT_TIB structure and can be located at fs:[0].
To detect this marker, the user-mode exception dispatcher, KiUserExceptionDispatcher routine is hooked. When an exception is dispatched, the hook walks the exception registration record chain to make sure that the hook can reach the validation frame that was installed when the thread was created. If the validation frame cannot be reached, the hook assumes that the exception registration record list has been corrupted and that an exploitation of any software vulnerability is possible.
Referring to
Once either steps 1212 or 1214 are completed, then decision point 1216 is reached in order to determine whether the ValidationFrameFound is true. If the ValidationFrameFound is true, then the ASLR system 10 at step 1222 proceeds to native exception dispatcher, The native exception dispatcher will pass the exception information onto all of the registered exception handlers. This operation is safe to occur only after the validation frame has been found because it proves that the list of registered exception handlers has not been corrupted, such as what might occur as the result of a stack overflow. Step 1222 completes implementation for SEH overwrite protection. However, if the ValidationFrameFound is not true, then an exploitation attempt is reported at step 1218 followed by step 1220 which terminates execution of the procedure.
A more detailed discussion of the above may be found in the related provisional patent application previously incorporated by reference.
It should be understood from the foregoing that, while particular implementations have been illustrated and described, various modifications can be made thereto and are contemplated herein. It is also not intended that the invention be limited by the specific examples provided within the specification.
Patent | Priority | Assignee | Title |
10193927, | Feb 27 2012 | University of Virginia Patent Foundation | Method of instruction location randomization (ILR) and related system |
10268601, | Jun 17 2016 | Massachusetts Institute of Technology | Timely randomized memory protection |
10310991, | Aug 11 2016 | Massachusetts Institute of Technology | Timely address space randomization |
10311227, | Sep 30 2014 | Apple Inc | Obfuscation of an address space layout randomization mapping in a data processing system |
10311228, | Sep 30 2014 | Apple Inc | Using a fine-grained address space layout randomization to mitigate potential security exploits |
10664589, | Dec 01 2016 | Korea Advanced Institute of Science and Technology | Memory alignment randomization method for mitigation of heap exploit |
11188638, | Sep 30 2014 | Apple Inc. | Fine-grained memory address space layout randomization |
11360672, | Oct 05 2018 | Micron Technology, Inc. | Performing hybrid wear leveling operations based on a sub-total write counter |
11681442, | Oct 05 2018 | Micron Technology, Inc. | Performing hybrid wear leveling operations based on a sub-total write counter |
11809871, | Sep 17 2018 | Raytheon Company | Dynamic fragmented address space layout randomization |
8028148, | Sep 06 2006 | Microsoft Technology Licensing, LLC | Safe and efficient allocation of memory |
8171256, | Dec 22 2008 | CA, INC | Systems and methods for preventing subversion of address space layout randomization (ASLR) |
8479283, | Nov 28 2006 | Microsoft Technology Licensing, LLC | Generating security validation code automatically |
8646050, | Jan 18 2011 | Apple Inc.; Apple Inc | System and method for supporting JIT in a secure system with randomly allocated memory ranges |
8671261, | Apr 14 2011 | Microsoft Technology Licensing, LLC | Lightweight random memory allocation |
8966217, | Apr 14 2011 | Microsoft Technology Licensing, LLC | Lightweight random memory allocation |
9972065, | Sep 23 2016 | Apple Inc. | Resource layout randomization for GPU execution |
Patent | Priority | Assignee | Title |
6216175, | Jun 08 1998 | Microsoft Technology Licensing, LLC | Method for upgrading copies of an original file with same update data after normalizing differences between copies created during respective original installations |
6230316, | Apr 17 1998 | Symantec Corporation | Patching rebased and realigned executable files |
6978018, | Sep 28 2001 | Intel Corporation | Technique to support co-location and certification of executable content from a pre-boot space into an operating system runtime environment |
20080016314, | |||
20080028180, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Aug 15 2006 | Wehnus, LLC | (assignment on the face of the patent) | / | |||
Sep 12 2006 | MILLER, MATTHEW | Wehnus, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 018514 | /0732 | |
Nov 07 2006 | JOHNSON, KEN | Wehnus, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 018514 | /0732 |
Date | Maintenance Fee Events |
Jan 21 2013 | REM: Maintenance Fee Reminder Mailed. |
Jun 09 2013 | EXP: Patent Expired for Failure to Pay Maintenance Fees. |
Date | Maintenance Schedule |
Jun 09 2012 | 4 years fee payment window open |
Dec 09 2012 | 6 months grace period start (w surcharge) |
Jun 09 2013 | patent expiry (for year 4) |
Jun 09 2015 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jun 09 2016 | 8 years fee payment window open |
Dec 09 2016 | 6 months grace period start (w surcharge) |
Jun 09 2017 | patent expiry (for year 8) |
Jun 09 2019 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jun 09 2020 | 12 years fee payment window open |
Dec 09 2020 | 6 months grace period start (w surcharge) |
Jun 09 2021 | patent expiry (for year 12) |
Jun 09 2023 | 2 years to revive unintentionally abandoned end. (for year 12) |