The invention relates to computer software. Specifically, the invention relates to methods of and systems for detecting malicious software executing on a computer system. The invention uses attributes of memory in which the code is executing to determine whether the executing code is malicious.
Networked servers can provide services to other networked hosts. Some of these networked hosts attempt to exploit a server by taking advantage of security loopholes. One exploitation method uses a security hole to inject malicious code into the server memory, and executes the malicious code to exploit the server. This malicious code can search the data structures of an application, a library, or an operating system component to find and utilize server system resources for the purpose of interrupting these services (such as denial of service attacks), to access sensitive information residing on the server, or to perform other malicious steps.
Other malicious software identification techniques check for patterns in files and data streams against known virus signatures. The limitation of this technique is that these signatures need to be kept current and are inherently out of date when a new virus is developed.
A method of and system for detecting memory resident malicious code, based on predetermined address space protection, comprises detecting access to predetermined software addresses by software executing out of writable memory. The predetermined address spaces include memory addresses known to be referenced by malicious code. The method works for computer systems where the memory management is configurable with attributes that cause an exception or event when a configurable address or range of addresses are referenced.
In a first aspect of the present invention, a method of detecting malicious code executing in a computer system comprises identifying the code as malicious if the code is executed from writable memory. In another embodiment the code is identified as malicious when it accesses a predetermined memory address. In some embodiments, the predetermined memory address is limited to the address space of data structures describing an application, a library, or an operating system component or their associated data. In a further embodiment, the predetermined memory address is within the memory range of a process environment block, an import, an export table, a procedure linkage table, a global offset table, a program header, a library header, or a section header. In a further embodiment, the predetermined memory address is not referenced by non-malicious code after the initialization of the application, the library, or the operating system component. In response to the detection of malicious, one embodiment terminates a process, a thread, or an application associated with the code executing in writable memory.
In another embodiment, the method of identifying malicious code comprises generating an exception that invokes an exception handler when the code accesses a memory address range that include the predetermined memory address. Further, the exception handler determines if the code accesses the predetermined memory address and whether the code executes from writable memory if the code that caused the exception accessed the predetermined memory address. In a further embodiment, the exception is generated by configurable hardware for controlling memory attributes of computer system memory. The system is configured to generate an exception when an address within a memory address range, including the predetermined memory address, is accessed. The configurable hardware generates an exception when access to page or range of memory addresses is in violation of the configured attributes for the memory. The configurable attributes include specifying whether the memory is readable or writable. Further, some embodiments the detection generates an indicator of malicious code or terminates a process, a thread, or an application associated with the code causing the exception.
In a further embodiment, the exception handler resumes the code from where the exception was generated. Execution of the code is resumed by configuring the processor to execute the code and setting the configurable hardware for memory attributes for the predetermined memory address not generate another exception when the system executes the code that referenced the predetermined memory address. Next, the processor is singled stepped to execute the code that caused the exception. The hardware is reconfigured to again trigger an exception when the predetermined memory address is referenced. The code execution is continued at the instruction following the code that caused the exception.
In another embodiment, the method further comprises selecting the predetermined memory address or the address range that incorporates the predetermined memory address. The predetermined memory address is located within a address space of an application, a library, or an operating system component. In a further embodiment, the predetermined memory address is not referenced by the application, library, or operating system component after initialization.
In a second aspect of the invention, a computer processing system is configured for detecting malicious code executing in the computer processing system memory. The system comprises memory and a processing system, wherein the processing system is configured for executing an application for identifying code as malicious if it is determined that the code executed from writable memory. In one embodiment, the identification of the malicious code only occurs when the code accesses a predetermined memory address. In a further embodiment, the predetermined memory address is within an address space of data structures describing an application, a library, or an operating system component or their associated data. In a further embodiment, the predetermined memory address is within a memory range of a process environment block, and import table, an export table, a procedure linkage table, or a global offset table. Additionally, the predetermined memory address can be selected from a memory address that is not referenced by non-malicious code after the initialization of the application, the library, or the operating system component.
In another embodiment, the identification of the malicious code is performed by an exception handler invoked upon the code accessing a memory address within a range of addresses that includes the predetermined memory address, such as a memory page. Further, the system includes software, executing inside or outside the exception handler, that determines if the memory reference causing the exception was an access to the predetermined memory address. Further, the system includes software that determines whether the code executed from writable memory if the code that caused the exception by accessing the predetermined address.
In one embodiment the configurable hardware for controlling memory attributes of the computer system memory is configured to generate an exception when a memory address range, including the predetermined memory address, is accessed. The configurable hardware generates an exception when access to page or range of memory addresses is in violation of the configured attributes for the memory. The configurable attributes include specifying whether the memory is readable or writable. Further, some embodiments generate an indicator of malicious code or terminate a process, a thread, or an application associated with the code executing out of writable memory and accessing the predetermined memory address causing the exception.
In another embodiment, the execution of the code is resumed by configuring a processor associated with the computer processing system to resume code execution at an instruction that caused the exception. The predetermined memory address attribute is set to a memory attribute that will not generate another exception when the code references the predetermined memory address. The processor is then single stepped to execute the code that caused the exception. The memory attribute of the predetermined memory address is then again set to cause an exception upon reference. The execution path that was interrupted by the exception is continued by executing the next instruction following the code that referenced the predetermined memory address or in some embodiment the process, thread, or application associated with the code is terminated.
In third aspect of the present invention, a computer program embodied on a computer-readable device for malicious code detection comprises program code for identifying a code as malicious if the code executes from writable memory of the computer system. In one embodiment, the computer program identifies the code as malicious when the code accesses a predetermined memory address. In some embodiments, the predetermined memory address is within an address space of an application, a library, or an operating system component.
In one embodiment, identifying the code as malicious comprises generating an exception that invokes an exception handler when the code accesses a memory page that includes the predetermined memory address, wherein it is determined that the memory access was to the predetermined memory address, and wherein the exception handler determines that the code executes from writable memory.
The following description of the invention is provided as an enabling teaching of the invention. Those skilled in the relevant art will recognize that many changes can be made to the embodiment described, while still attaining the beneficial results of the present invention. It will also be apparent that some of the desired benefits of the present invention can be attained by selecting some of the features of the present invention without utilizing other features. Accordingly, those skilled in the art will recognize that many modifications and adaptations to the present invention are possible and can even be desirable in certain circumstances, and are a part of the present invention. Thus, the following description is provided as illustrative of the principles of the present invention and not a limitation thereof.
In accordance with the present invention, malicious code is detected when executing in writable memory of a computer system. Malicious code can infect a computer system in a number of ways. In one way, buffers used in networking are overflowed to inject malicious code. For example, web servers receiving service requests with data from untrusted hosts can be infected with malicious code embedded in the request and loaded by overflowing the web server's buffer. Data is exchanged between a host and a web server using standard network communication protocols including, but not limited to, HTTP, TCP/IP, UDP, and mail protocols. A data payload from each of these protocols can potentially be the source of malicious code. However, other means are possible for the loading of malicious code into memory. The method by which the malicious code is detected is independent of how the data is loaded or injected into memory. A predominant characteristic of malicious code loaded by buffer overflows or by other improper techniques is that the code is loaded into and executed out of memory that is writeable.
In modern computers, physical memory is managed by hardware such as an MMU (memory management unit). The MMU manages memory such that each process is prevented from altering the data or code of other processes. Further, the MMU can give a process an address space that is larger than the physical memory and appears continuous. However, this continuous data/code virtual memory can be scattered around physical memory or even swapped to disk. In one method of managing physical memory, the MMU divides memory into blocks or pages that cover a continuous range of memory addresses. MMUs give each block or page attributes that includes whether the memory is read only (text memory) or read/write (data memory) or write only.
When an application, an operating system, or a library (including a dynamically linked library) is loaded into memory, the code segments are loaded into text or read only memory. Data memory is given the attribute that includes being writable. Data memory is allocated when a program is loaded or as the program executes. Malicious code loaded or injected into data or writeable memory will execute from a writable memory space and not text memory as expected. Detection of code running in a writable memory space is an indication that the code is not under the management of the OS and thus is considered malicious or suspect code.
One method of detecting the execution of malicious code is to check the memory attribute from which every processor instruction executes. If an instruction executes out of writable memory, then it is considered, logged, or tagged as malicious or suspect code. The problem with this approach is the large processing overhead required to check the memory attribute of every executed instruction, degrading the computer system performance. An alternative approach is to leverage off a known behavior of malicious code and the behavior of properly executing code. Malicious code often needs to gain access to system functions to exploit the system. To learn the location of system resources, the malicious code will read the data structures describing operating system, application, or library code or associated data set up when a process or operating system is started or library function loaded. Example structures used by malicious code to locate system resources include, but are not limited to, PEBs (process environment blocks), import tables, export tables, procedure linkage tables, global offset tables or combinations thereof. From these data structures, a determination of library interfaces, system functions, and process addresses can be made either directly or indirectly. This information is a necessary step in further locating system resources needed to exploit the computer system, often an objective of the malicious code.
A useful characteristic of the PEBs and the other data structures mentioned above is that all or part of these data structures are infrequently referenced, usually only during the startup of an application, during a start of an operating system component, or during the initialization of a library component. By limiting the check of the memory space attribute from which the code is executing to a memory address range seldom referenced, but also being an address that is of likely interest to malicious code, the check for malicious code can be performed with minimal impact to the processing system performance and requires minimal or no overhead during normal operation.
Further shown loaded into physical memory 230 and residing within virtual memory 280, is a dynamically linked library (DLL) 250. The DLL 250 has a code segment 252 in text memory and associated data segments 254 in writable memory. The code for the DLL 250 includes a data structures that reference import and export tables 258 that also resides, as shown, in text memory. As shown in
Malicious code 256 is able to be injected in any number of ways, such as from malicious web service requests that overflow buffers and thus are a gateway to injecting the malicious code 256 into data memory. The malicious code detection method is independent of the method by which the code is injected into writable memory. While the malicious code is shown loaded into the library data memory space, it can also be loaded into the OS data memory, application data memory, process heap memory, thread stack memory, or any other writable memory, to name but a few examples.
In the step 310, one or more predetermined memory addresses are selected. In accordance with the invention, code executing from writable memory and accessing the predetermined memory addresses is considered malicious. The predetermined addresses are one or more addresses, an address range including a memory page, or multiple address ranges, or any combination thereof. The more addresses chosen, the more likely that malicious code will be caught, but this increases the overhead needed when these addresses are referenced by non-malicious code. The predetermined addresses can be in read only memory, write only memory, or read/write memory. The predetermined addresses can be located in operating system code or data, in libraries including dynamically linked libraries, or in application programs. Further, the address can also include I/O (input/output) memory addresses, BIOS (Basic Input Output System) memory, and memory mapped devices. Preferably the predetermined memory addresses are located at an address or extend over an address range where the malicious code would reference to gain access to system resources to further exploit the system. Further, preferably the predetermined address or addresses are located in a section of memory that is either seldom referenced or is only referenced during operating system initialization, program initialization, or library initialization.
The selection of predetermined address(es), or memory pages containing a predetermined address 310 can be manually performed or selected by automated means. Operating system components are often loaded at known locations. For example, commonly used operating systems load a process environment block into a predetermined and known location. Automated means are also contemplated. A computer program can be used to automatically locate the addresses of the data structures describing operating system components, and library components including dynamic linked libraries or associated data, and determine the address range of predetermined memory sections. The predetermined sections can include a process environment block, an import table, and export table, a procedure linkage table, a global offset table, or any other memory address that is expected to be exploited by a malicious program.
In a step 320, the attribute for the predetermined memory address, page, block, program header, library header, or section header is configured to generate an exception when referenced. This step includes mapping the predetermined memory address into a memory page or block managed by the system hardware. Because the granularity of the memory management, a page or block is needs to be mapped to the predetermined memory address. Preferably, the computer system has hardware for managing memory such as an MMU (memory management unit) or other types of memory page management hardware that provide for setting memory attributes for the system memory. These attributes can be associated with a single memory address, a fixed size page of memory, or a variable sized block of memory. Preferably, the specifiable attributes include read-only memory for text memory, readable and writable memory for data memory. These attributes are configurable to generate an exception when any memory address within a page is referenced. For example, if the read attribute is configured to be excluded, then read references to this page will cause an exception.
The exceptions are handled by exception routines, which preferably are software routine. If the reference to the memory address, page, or block is in conflict the configured memory access attributes, then the reference invokes an exception routine. Some uses for memory exception or trap routines are to indicate a page fault or inaccessible memory As used by the present invention, the occurrence of an exception indicates that the memory page accessed can contain a predetermined memory address and further checking is required, including determining which memory address was referenced and the attributes of the code that made the reference.
In a step 330 an exception or trap is generated when a processor reference is made to a predetermined memory address, a memory address within a predetermined page, or a reference to an address within a predetermined block. Preferably, the exception or trap is detected and generated by hardware. The exception invokes an exception handler in response to the memory reference.
In a step 340 the exception handler is executed. The normal execution path for exception processing is to process the exception as configured by an operating system, which can include swapping the page into memory. Code is added into the exception handler and is configured into the execution path to test whether the exception was caused by a reference to a predetermined address and test whether the memory address of the code that caused the exception executes out of writeable memory.
In a step 345, it is determined if the exception was caused by a memory reference to the predetermined address or predetermined range of addresses. Because the hardware often manages memory in pages that can include memory address other than the predetermined memory address or range of memory address, the exception can be caused by a reference to a non-predetermined memory address. If the memory reference is not a predetermined memory address or range of addresses, then the execution of the code causing the exception is resumed in a step 370. If the memory reference is a predetermined memory address, then the step 350 is performed.
In a step 350, the memory address of the code that caused the memory reference exception is analyzed to determine the type of memory in which the code is located. Code considered to be non-malicious is located in memory with a read-only attribute or text memory. Code is considered to be malicious when the attribute of the memory from which the code is executing is writable. Techniques for determining the address of the code include but are not limited to examination of the instruction pointer and comparing it to the attribute mapping of virtual memory, used by the MMU, reading state information from the MMU, or examining operating system data structures.
In a step 355, the memory attribute of the code causing the exception is determined. If the memory attribute of the code is not writable, the process continues to the step 370. If the memory attribute of the code is writable, then malicious code handling is performed in a step 360.
In a step 360, a response to the detection of malicious code is executed. The malicious code handling 360 can include a range of responses. In one embodiment, the response includes setting an indicator that malicious code was detected. The information regarding the malicious code detection can include the memory location of the malicious code, which is passed to a routine outside of the exception handler. It is desirable to keep exception handling as quick as possible. Asynchronous handling of the malicious detection event is desirable when the response to detection is computationally intensive. Another response is to kill the process or thread that is executing or is suspected of executing the malicious code. Another response includes blocking access to system input/output calls, generating a set of decoy interface modules for the malicious software to try to exploit, or failing specified future system calls for a processor thread. The details of some of these techniques are found in the copending and co-owned U.S. patent application Ser. No. 10/651,588, filed Aug. 29, 2003 and entitled “DAMAGE CONTAINMENT BY TRANSLATION,” which is herein incorporated by reference in its entirety; U.S. patent application Ser. No. 11/122,872, filed May 4, 2005 and entitled “PIRACY PREVENTION USING UNIQUE MODULE TRANSLATION,” which is herein incorporated by reference in its entirety; and copending and co-owned U.S. patent application Ser. No. 10/935,772, filed Sep. 7, 2004 and entitled “SOLIDIFYING THE EXECUTABLE SOFTWARE SET OF A COMPUTER,” which is herein incorporated by reference in its entirety. Additionally, the response to detection of malicious code includes statistical and heuristic methods to determine the identity of a host that is loading the malicious code. Identification of the malicious host allows for the blocking of the host to prevent re-infection and the potential consequences of such an infection, including a denial of services from the infected server. These statistical and heuristic techniques are disclosed in the co-owned and co-pending application having application Ser. No. 12/322,321 filed Jan. 29, 2009, entitled METHOD OF AND SYSTEM FOR COMPUTER SYSTEM DENIAL-OF-SERVICE PROTECTION,” which is incorporated by reference in its entirety. If further execution processing is required, such as processing a page fault, then these further steps are performed.
In the step 370, the execution path of the code causing the exception is resumed. The method by which the execution path is resumed depends on the architecture of the processor. Described in
In the step 410, preferably executed within the exception handler, the attribute of the predetermined memory address is configured not to cause an exception upon referencing the predetermined memory address. This step is required because the instruction of the code that caused the exception must be retried or reexecuted. Thus, this instruction needs to be executed without causing another exception. An exemplary method by which the attribute is changed includes changing attribute bits on the memory management hardware. The purpose of changing the attribute is to prevent another exception when the processor is single stepped to execute the instruction that was stopped by the exception.
In a step 420, the processor is configured to execute in a single step the processor instruction that caused the exception by referencing the predetermined address. The method by which this is implemented depends on the architecture of the processor. As one example, the instruction pointer is set back to reference the instruction that caused the exception. Some processors support hardware for single stepping code. The single stepping process can include reading and adjusting hardware registers and reading and adjusting stack values as required for a specific processor. In the 440, the attribute of the predetermined memory address or the memory page that includes the predetermined memory address is reconfigured to cause an exception when the predetermined address is referenced. The program flow is continued by continuing the program execution path in the step 450. The process ends in the step 499.
In operation the first step for a processing system to detect memory resident malicious code is to identity one or more predetermined addresses. The predetermined addresses are identified through manual or automated techniques. The predetermined addresses are preferably contained in data structures describing applications, libraries, operating system components, or their associated data. Further, these predetermined addresses includes an address within a process environment block, an export table, an import table, a procedure linkage table, or a global offset table. Alternatively, a software program examines these components to determine the location of the predetermined addresses and mapping them to the associated memory pages. These memory addresses can be further limited to sections of the that are seldom referenced after system initialization and are of interest to malicious code. Particularly useful are the base addresses of the system components because malicious code uses the base address in conjunction with the related data structures to locate system APIs. The base address of libraries are used by malicious code to find associated import and export tables used by the malicious code in the exploitation of the system.
Next the hardware that manages the memory attributes, such as an MMU, is programmed for a memory page or pages that includes the one or more predetermined addresses to generate an exception when referenced. This attribute configuration can occur before, during, or after the loading and initialization of these components. Preferably, the configuration is preformed after the operating system initialization, library loading, and application loading but before the system reaches a state where it can be infected with malicious code. Further, by configuring the malicious detection code after the component initialization, the overhead processing of predetermined address access detection is avoided in systems not infected with malicious code.
Preferably, the predetermined addresses selected are only accessed during the component initialization and startup, or infrequently. The computer system then operates, providing the desired services. For a web server, web pages are provided to host machines until a malicious host connects and uses techniques, including but not limited to buffer overflow to infect writable memory with malicious code. Once the malicious code starts execution, it locates the base address and using the associated data structures to find and utilize system services. Such services can include the APIs for communication socket functions to connect and provide information to an Internet connected system. If one of the predetermined addresses is a base address or a memory address of a data structure describing application, library or operating system components or associated data, then an exception will occur when the malicious code references the predetermined address. The exception will cause the invoking of exception handler code.
Because, the memory resolution of the MMU managing memory pages can cause an exception for memory reference not associated with the predetermined address, the reference causing the exception needs to be check that it is associated with a predetermined address or addresses. If the memory reference is not associated with the predetermined address or address, then the code causing the exception is resumed. If the memory access is associated with a predetermined memory address, then the exception handler checks the memory attribute of the program code that caused the exception. If the attribute indicates writable memory, then the process or thread associated with the code causing the reference is terminated or an indicator of malicious code is set or sent to another process or thread which can aggregate information and implement the appropriate response. This indicator can include the time of the execution, the address of processor code causing the exception, the process or thread identifier associated with the code causing the exception, or a combination of these. This indicator can be passed to a routine outside of the exception handler or can be handled within the exception handler. The response to the detection of malicious code can include terminating the thread or process, blocking access to I/O routines or interfaces, translating an interface the code is trying to access, or using heuristic and statistical methods to correlate the network hosts and the network addresses with the malicious code infection event.
If the thread or process executing the malicious code is not killed, then malicious code is resumed. To execute the processor instruction that caused the exception, the attribute of the predetermined memory address that caused the exception is set so that another exception is not caused. Next, the processor instruction that caused the exception is executed. In one embodiment, this function is performed by configuring the hardware to single step the processor. Next the memory attribute of the predetermined address is reconfigured to cause an exception the next time this address is referenced. Finally, the exception ends and the execution path previously interrupted by the exception is resumed.
The computing device 500 includes a network interface 502, a memory 504, a memory management unit (MMU) 520, a processor 506, I/O device(s) 508, a bus 510 and a storage device 512. The processor 506 can be almost any type, so long as it has sufficient speed. The memory 504 can be any conventional computer memory known in the art. The storage device 512 can include a hard drive, tape, CDROM, CDRW, DVD, DVDRW, flash memory card or any other storage device. The computing device 500 can include one or more network interfaces 502. An example of a network interface includes a network card coupled to an Ethernet or other type of LAN. The I/O device(s) 508 can include one or more of the following: keyboard, mouse, monitor, display, printer, modem, touchscreen, button interface and other devices including remote systems. The code for the malicious code detection (MCD) 540 through predetermined address protection can be configured into the OS 530 as part of the OS exception handling routine and can be part of the OS initialization. The response handling code 550 for the detection of malicious code can be a component separate from the OS. Additionally, automated predetermined address selection and configuration code 560 is located on the storage. More or fewer components shown in
Reference has been made in detail to the preferred and alternative embodiments of the invention, examples of which are illustrated in the accompanying figures. While the invention has been described in conjunction with the preferred embodiments, it will be understood that they are not intended to limit the invention. It will be readily apparent to one skilled in the art that various modification may be made to the embodiments without departing from the spirit and scope of the invention as defined by the appended claims. Furthermore, in the detailed description of the present invention, numerous specific details have been set forth in order to provide a thorough understanding of the present invention. However, it should be noted that the present invention can be practiced without these specific details. In other instances, well known methods, procedures and components have not been described in detail so as not to unnecessarily obscure aspects of the present invention.
This application claims priority under 35 U.S.C. §119(e) of the co-owned U.S. Provisional Patent Application Ser. No. 61/063,224 filed Jan. 31, 2008, titled “AUTONOMIC NETWORK RESPONSE TO PROCESS HIJACKING,” which is hereby incorporated by reference in its entirety.
Number | Name | Date | Kind |
---|---|---|---|
4688169 | Joshi | Aug 1987 | A |
4982430 | Frezza et al. | Jan 1991 | A |
5155847 | Kirouac et al. | Oct 1992 | A |
5222134 | Waite et al. | Jun 1993 | A |
5390314 | Swanson | Feb 1995 | A |
5521849 | Adelson et al. | May 1996 | A |
5560008 | Johnson et al. | Sep 1996 | A |
5699513 | Feigen et al. | Dec 1997 | A |
5778226 | Adams et al. | Jul 1998 | A |
5778349 | Okonogi | Jul 1998 | A |
5787427 | Benantar et al. | Jul 1998 | A |
5842017 | Hookway et al. | Nov 1998 | A |
5907709 | Cantey et al. | May 1999 | A |
5907860 | Garibay et al. | May 1999 | A |
5926832 | Wing et al. | Jul 1999 | A |
5974149 | Leppek | Oct 1999 | A |
5987610 | Franczek et al. | Nov 1999 | A |
5987611 | Freund | Nov 1999 | A |
5991881 | Conklin et al. | Nov 1999 | A |
6064815 | Hohensee et al. | May 2000 | A |
6073142 | Geiger et al. | Jun 2000 | A |
6141698 | Krishnan et al. | Oct 2000 | A |
6192401 | Modiri et al. | Feb 2001 | B1 |
6192475 | Wallace | Feb 2001 | B1 |
6256773 | Bowman-Amuah | Jul 2001 | B1 |
6275938 | Bond et al. | Aug 2001 | B1 |
6321267 | Donaldson | Nov 2001 | B1 |
6338149 | Ciccone, Jr. et al. | Jan 2002 | B1 |
6356957 | Sanchez, II et al. | Mar 2002 | B2 |
6393465 | Leeds | May 2002 | B2 |
6442686 | McArdle et al. | Aug 2002 | B1 |
6449040 | Fujita | Sep 2002 | B1 |
6453468 | D'Souza | Sep 2002 | B1 |
6460050 | Pace et al. | Oct 2002 | B1 |
6587877 | Douglis et al. | Jul 2003 | B1 |
6611925 | Spear | Aug 2003 | B1 |
6662219 | Nishanov et al. | Dec 2003 | B1 |
6748534 | Gryaznov et al. | Jun 2004 | B1 |
6769008 | Kumar et al. | Jul 2004 | B1 |
6769115 | Oldman | Jul 2004 | B1 |
6795966 | Lim et al. | Sep 2004 | B1 |
6832227 | Seki et al. | Dec 2004 | B2 |
6834301 | Hanchett | Dec 2004 | B1 |
6847993 | Novaes et al. | Jan 2005 | B1 |
6907600 | Neiger et al. | Jun 2005 | B2 |
6918110 | Hundt et al. | Jul 2005 | B2 |
6930985 | Rathi et al. | Aug 2005 | B1 |
6934755 | Saulpaugh et al. | Aug 2005 | B1 |
6988101 | Ham et al. | Jan 2006 | B2 |
6988124 | Douceur et al. | Jan 2006 | B2 |
7007302 | Jagger et al. | Feb 2006 | B1 |
7010796 | Strom et al. | Mar 2006 | B1 |
7024548 | O'Toole, Jr. | Apr 2006 | B1 |
7039949 | Cartmell et al. | May 2006 | B2 |
7065767 | Kambhammettu et al. | Jun 2006 | B2 |
7069330 | McArdle et al. | Jun 2006 | B1 |
7082456 | Mani-Meitav et al. | Jul 2006 | B2 |
7093239 | van der Made | Aug 2006 | B1 |
7124409 | Davis et al. | Oct 2006 | B2 |
7139916 | Billingsley et al. | Nov 2006 | B2 |
7152148 | Williams et al. | Dec 2006 | B2 |
7159036 | Hinchliffe et al. | Jan 2007 | B2 |
7177267 | Oliver et al. | Feb 2007 | B2 |
7203864 | Goin et al. | Apr 2007 | B2 |
7251655 | Kaler et al. | Jul 2007 | B2 |
7290266 | Gladstone et al. | Oct 2007 | B2 |
7302558 | Campbell et al. | Nov 2007 | B2 |
7330849 | Gerasoulis et al. | Feb 2008 | B2 |
7346781 | Cowie et al. | Mar 2008 | B2 |
7349931 | Horne | Mar 2008 | B2 |
7350204 | Lambert et al. | Mar 2008 | B2 |
7353501 | Tang et al. | Apr 2008 | B2 |
7363022 | Whelan et al. | Apr 2008 | B2 |
7370360 | van der Made | May 2008 | B2 |
7406517 | Hunt et al. | Jul 2008 | B2 |
7441265 | Staamann et al. | Oct 2008 | B2 |
7464408 | Shah et al. | Dec 2008 | B1 |
7506155 | Stewart et al. | Mar 2009 | B1 |
7506170 | Finnegan | Mar 2009 | B2 |
7546333 | Alon et al. | Jun 2009 | B2 |
7546594 | McGuire et al. | Jun 2009 | B2 |
7552479 | Conover et al. | Jun 2009 | B1 |
7607170 | Chesla | Oct 2009 | B2 |
7657599 | Smith | Feb 2010 | B2 |
7669195 | Qumei | Feb 2010 | B1 |
7685635 | Vega et al. | Mar 2010 | B2 |
7698744 | Fanton et al. | Apr 2010 | B2 |
7703090 | Napier et al. | Apr 2010 | B2 |
7757269 | Roy-Chowdhury et al. | Jul 2010 | B1 |
7765538 | Zweifel et al. | Jul 2010 | B2 |
7809704 | Surendran et al. | Oct 2010 | B2 |
7818377 | Whitney et al. | Oct 2010 | B2 |
7823148 | Deshpande et al. | Oct 2010 | B2 |
7836504 | Ray et al. | Nov 2010 | B2 |
7849507 | Bloch et al. | Dec 2010 | B1 |
7908653 | Brickell et al. | Mar 2011 | B2 |
7937455 | Saha et al. | May 2011 | B2 |
7966659 | Wilkinson et al. | Jun 2011 | B1 |
8015563 | Araujo et al. | Sep 2011 | B2 |
20020056076 | van der Made | May 2002 | A1 |
20020069367 | Tindal et al. | Jun 2002 | A1 |
20020083175 | Afek et al. | Jun 2002 | A1 |
20020099671 | Mastin Crosbie et al. | Jul 2002 | A1 |
20030014667 | Kolichtchak | Jan 2003 | A1 |
20030023736 | Abkemeier | Jan 2003 | A1 |
20030033510 | Dice | Feb 2003 | A1 |
20030073894 | Chiang et al. | Apr 2003 | A1 |
20030074552 | Olkin et al. | Apr 2003 | A1 |
20030120601 | Ouye et al. | Jun 2003 | A1 |
20030120811 | Hanson et al. | Jun 2003 | A1 |
20030120935 | Teal et al. | Jun 2003 | A1 |
20030145232 | Poletto et al. | Jul 2003 | A1 |
20030163718 | Johnson et al. | Aug 2003 | A1 |
20030167292 | Ross | Sep 2003 | A1 |
20030167399 | Audebert et al. | Sep 2003 | A1 |
20030200332 | Gupta et al. | Oct 2003 | A1 |
20030212902 | van der Made | Nov 2003 | A1 |
20030220944 | Lyman Schottland et al. | Nov 2003 | A1 |
20030221190 | Deshpande et al. | Nov 2003 | A1 |
20040003258 | Billingsley et al. | Jan 2004 | A1 |
20040015554 | Wilson | Jan 2004 | A1 |
20040051736 | Daniell | Mar 2004 | A1 |
20040054928 | Hall | Mar 2004 | A1 |
20040143749 | Tajalli et al. | Jul 2004 | A1 |
20040167906 | Smith et al. | Aug 2004 | A1 |
20040230963 | Rothman et al. | Nov 2004 | A1 |
20040243678 | Smith et al. | Dec 2004 | A1 |
20040255161 | Cavanaugh | Dec 2004 | A1 |
20050018651 | Yan et al. | Jan 2005 | A1 |
20050086047 | Uchimoto et al. | Apr 2005 | A1 |
20050108516 | Balzer et al. | May 2005 | A1 |
20050108562 | Khazan et al. | May 2005 | A1 |
20050114672 | Duncan et al. | May 2005 | A1 |
20050132346 | Tsantilis | Jun 2005 | A1 |
20050228990 | Kato et al. | Oct 2005 | A1 |
20050235360 | Pearson | Oct 2005 | A1 |
20050257207 | Blumfield et al. | Nov 2005 | A1 |
20050257265 | Cook et al. | Nov 2005 | A1 |
20050260996 | Groenendaal | Nov 2005 | A1 |
20050262558 | Usov | Nov 2005 | A1 |
20050273858 | Zadok et al. | Dec 2005 | A1 |
20050283823 | Okajo et al. | Dec 2005 | A1 |
20050289538 | Black-Ziegelbein et al. | Dec 2005 | A1 |
20060004875 | Baron et al. | Jan 2006 | A1 |
20060015501 | Sanamrad et al. | Jan 2006 | A1 |
20060037016 | Saha et al. | Feb 2006 | A1 |
20060080656 | Cain et al. | Apr 2006 | A1 |
20060085785 | Garrett | Apr 2006 | A1 |
20060101277 | Meenan et al. | May 2006 | A1 |
20060133223 | Nakamura et al. | Jun 2006 | A1 |
20060136910 | Brickell et al. | Jun 2006 | A1 |
20060136911 | Robinson et al. | Jun 2006 | A1 |
20060195906 | Jin et al. | Aug 2006 | A1 |
20060200863 | Ray et al. | Sep 2006 | A1 |
20060230314 | Sanjar et al. | Oct 2006 | A1 |
20060236398 | Trakic et al. | Oct 2006 | A1 |
20070011746 | Malpani et al. | Jan 2007 | A1 |
20070028303 | Brennan | Feb 2007 | A1 |
20070039049 | Kupferman et al. | Feb 2007 | A1 |
20070050579 | Hall et al. | Mar 2007 | A1 |
20070050764 | Traut | Mar 2007 | A1 |
20070074199 | Schoenberg | Mar 2007 | A1 |
20070083522 | Nord et al. | Apr 2007 | A1 |
20070101435 | Konanka et al. | May 2007 | A1 |
20070136579 | Levy et al. | Jun 2007 | A1 |
20070143851 | Nicodemus et al. | Jun 2007 | A1 |
20070169079 | Keller et al. | Jul 2007 | A1 |
20070192329 | Croft et al. | Aug 2007 | A1 |
20070220061 | Tirosh et al. | Sep 2007 | A1 |
20070220507 | Back et al. | Sep 2007 | A1 |
20070253430 | Minami et al. | Nov 2007 | A1 |
20070256138 | Gadea et al. | Nov 2007 | A1 |
20070271561 | Winner et al. | Nov 2007 | A1 |
20070300215 | Bardsley | Dec 2007 | A1 |
20080005737 | Saha et al. | Jan 2008 | A1 |
20080005798 | Ross | Jan 2008 | A1 |
20080010304 | Vempala et al. | Jan 2008 | A1 |
20080022384 | Yee et al. | Jan 2008 | A1 |
20080034416 | Kumar et al. | Feb 2008 | A1 |
20080052468 | Speirs et al. | Feb 2008 | A1 |
20080082977 | Araujo et al. | Apr 2008 | A1 |
20080120499 | Zimmer et al. | May 2008 | A1 |
20080163207 | Reumann et al. | Jul 2008 | A1 |
20080163210 | Bowman et al. | Jul 2008 | A1 |
20080165952 | Smith et al. | Jul 2008 | A1 |
20080184373 | Traut et al. | Jul 2008 | A1 |
20080235534 | Schunter et al. | Sep 2008 | A1 |
20080294703 | Craft et al. | Nov 2008 | A1 |
20080301770 | Kinder | Dec 2008 | A1 |
20090038017 | Durham et al. | Feb 2009 | A1 |
20090043993 | Ford et al. | Feb 2009 | A1 |
20090113110 | Chen et al. | Apr 2009 | A1 |
20090144300 | Chatley et al. | Jun 2009 | A1 |
20090150639 | Ohata | Jun 2009 | A1 |
20090249438 | Litvin et al. | Oct 2009 | A1 |
20100071035 | Budko et al. | Mar 2010 | A1 |
20100100970 | Chowdhury et al. | Apr 2010 | A1 |
20100114825 | Siddegowda | May 2010 | A1 |
20100281133 | Brendel | Nov 2010 | A1 |
20100293225 | Sebes et al. | Nov 2010 | A1 |
20100332910 | Ali et al. | Dec 2010 | A1 |
20110035423 | Kobayashi et al. | Feb 2011 | A1 |
20110047543 | Mohinder | Feb 2011 | A1 |
20110077948 | Sharma et al. | Mar 2011 | A1 |
20110093842 | Sebes | Apr 2011 | A1 |
20110093950 | Bhargava et al. | Apr 2011 | A1 |
20110119760 | Sebes et al. | May 2011 | A1 |
20110138461 | Bhargava et al. | Jun 2011 | A1 |
20120278853 | Chowdhury et al. | Nov 2012 | A1 |
Number | Date | Country |
---|---|---|
1 482 394 | Dec 2004 | EP |
2 037 657 | Mar 2009 | EP |
WO 9844404 | Oct 1998 | WO |
WO 0184285 | Nov 2001 | WO |
WO 2006012197 | Feb 2006 | WO |
WO 2006124832 | Nov 2006 | WO |
WO 2008054997 | May 2008 | WO |
WO 2011059877 | May 2011 | WO |
WO 2012015489 | Jan 2012 | WO |
WO 2012015485 | Feb 2012 | WO |
Entry |
---|
http://www.trust.informatik.tu-darmstadt.de/fileadmin/user—upload/Group—TRUST/LectureSlides/ESS-SS2011/rop-grayscale.pdf|Background on Buffer Overflow Attacks|Sadeghi et al.|2011. |
U.S. Appl. No. 12/615,521, entitled “System and Method for Preventing Data Loss Using Virtual Machine Wrapped Applications,” filed Nov. 10, 2009, Inventor(s): Sonali Agarwal, et al. |
Desktop Management and Control, Website: http://www.vmware.com/solutions/desktop/, printed Oct. 12, 2009, 1 page. |
Secure Mobile Computing, Website: http://www.vmware.com/solutions/desktop/mobile.html, printed Oct. 12, 2009, 2 pages. |
U.S. Appl. No. 12/636,414, entitled “System and Method for Managing Virtual Machine Configurations,” filed Dec. 11, 2009, Inventor(s): Harvinder Singh Sawhney, et al. |
Kurt Gutzmann, “Access Control and Session Management in the HTTP Environment,” Jan./Feb. 2001, pp. 26-35, IEEE Internet Computing. |
U.S. Appl. No. 11/379,953, entitled “Software Modification by Group to Minimize Breakage,” filed Apr. 24, 2006, Inventor(s): E. John Sebes et al. |
U.S. Appl. No. 11/277,596, entitled “Execution Environment File Inventory,” filed Mar. 27, 2006, Inventor(s): Rishi Bhargava et al. |
U.S. Appl. No. 10/651,591, entitled “Method and System for Containment of Networked Application Client Software by Explicit Human Input,” filed Aug. 29, 2003, Inventor(s): Rosen Sharma et al. |
U.S. Appl. No. 10/806,578, entitled Containment of Network communication, filed Mar. 22, 2004, Inventor(s): E. John Sebes et al. |
U.S. Appl. No. 10/739,230, entitled “Method and System for Containment of Usage of Language Interfaces,” filed Dec. 17, 2003, Inventor(s): Rosen Sharma et al. |
U.S. Appl. No. 10/935,772, entitled “Solidifying the Executable Software Set of a Computer,” filed Sep. 7, 2004, Inventor(s): E. John Sebes et al. |
U.S. Appl. No. 11/060,683, entitled “Distribution and Installation of Solidified Software on a Computer,” Filed Feb. 16, 2005, Inventor(s): Bakul Shah et al. |
U.S. Appl. No. 11/122,872, entitled “Piracy Prevention Using Unique Module Translation,” filed May 4, 2005, Inventor(s): E. John Sebes et al. |
U.S. Appl. No. 11/346,741, entitled “Enforcing Alignment of Approved Changes and Deployed Changes in the Software Change Life-Cycle,” filed Feb. 2, 2006, Inventor(s): Rahul Roy-Chowdhury et al. |
U.S. Appl. No. 11/182,320, entitled “Classification of Software on Networked Systems,” filed Jul. 14, 2005, Inventor(s): E. John Sebes et al. |
U.S. Appl. No. 11/400,085, entitled “Program-Based Authorization,” filed Apr. 7, 2006, Inventor(s): Rishi Bhargava et al. |
U.S. Appl. No. 11/437,317, entitled “Connectivity-Based Authorization,” filed May 18, 2006, Inventor(s): E. John Sebes et al. |
U.S. Appl. No. 12/290,380, entitled “Application Change Control,” filed Oct. 29, 2008, Inventor(s): Rosen Sharma et al. |
U.S. Appl. No. 12/008,274, entitled Method and Apparatus for Process Enforced Configuration Management, filed Jan. 9, 2008, Inventor(s): Rishi Bhargava et al. |
U.S. Appl. No. 12/291,232, entitled “Method of and System for Computer System State Checks,” filed Nov. 7, 2008, inventor(s): Rishi Bhargava et al. |
U.S. Appl. No. 12/322,321, entitled “Method of and System for Computer System Denial-of-Service Protection,” filed Jan. 29, 2009, Inventor(s): Suman Saraf et al. |
U.S. Appl. No. 12/426,859, entitled “Method of and System for Reverse Mapping Vnode Pointers,” filed Apr. 20, 2009, Inventor(s): Suman Saraf et al. |
U.S. Appl. No. 12/545,609, entitled “System and Method for Enforcing Security Policies in a Virtual Environment,” filed Aug. 21, 2009, Inventor(s): Amit Dang et al. |
U.S. Appl. No. 12/545,745, entitled “System and Method for Providing Address Protection in a Virtual Environment,” filed Aug. 21, 2009, Inventor(s): Preet Mohinder. |
Eli M. Dow, et al., “The Xen Hypervisor,” INFORMIT, dated Apr. 10, 2008, http://www.informit.com/articles/printerfriendly.aspx?p=1187966, printed Aug. 11, 2009 (13 pages). |
“Xen Architecture Overview,” Xen, dated Feb. 13, 2008, Version 1.2, http://wiki.xensource.com/xenwiki/XenArchitecture?action=AttachFile&do=get&target=Xen+architecture—Q1+2008.pdf, printed Aug. 18, 2009 (9 pages). |
U.S. Appl. No. 12/551,673, entitled “Piracy Prevention Using Unique Module Translation,” filed Sep. 1, 2009, Inventor(s): E. John Sebes et al. |
Barrantes et al., “Randomized Instruction Set Emulation to Dispurt Binary Code Injection Attacks,” Oct. 27-31, 2003, ACM, pp. 281-289. |
Check Point Software Technologies Ltd.: “ZoneAlarm Security Software User Guide Version 9”, Aug. 24, 2009, XP002634548, 259 pages, retrieved from Internet: URL:http://download.zonealarm.com/bin/media/pdf/zaclient91—user—manual.pdf. |
Gaurav et al., “Countering Code-Injection Attacks with Instruction-Set Randomization,” Oct. 27-31, 2003, ACM, pp. 272-280. |
Notification of Transmittal of the International Search Report and the Written Opinion of the International Searching Authority (1 page), International Search Report (4 pages), and Written Opinion (3 pages), mailed Mar. 2, 2011, International Application No. PCT/US2010/055520. |
Notification of Transmittal of the International Search Report and the Written Opinion of the International Searching Authority, or the Declaration (1 page), International Search Report (6 pages), and Written Opinion of the International Searching Authority (10 pages) for International Application No. PCT/US2011/020677 mailed Jul. 22, 2011. |
Notification of Transmittal of the International Search Report and Written Opinion of the International Searching Authority, or the Declaration (1 page), International Search Report (3 pages), and Written Opinion of the International Search Authority (6 pages) for International Application No. PCT/US2011/024869 mailed Jul. 14, 2011. |
Tal Garfinkel, et al., “Terra: A Virtual Machine-Based Platform for Trusted Computing,” XP-002340992, SOSP'03, Oct. 19-22, 2003, 14 pages. |
U.S. Appl. No. 12/844,892, entitled “System and Method for Protecting Computer Networks Against Malicious Software,” filed Jul. 28, 2010, Inventor(s) Rishi Bhargava, et al. |
U.S. Appl. No. 12/844,964, entitled “System and Method for Network Level Protection Against Malicious Software,” filed Jul. 28, 2010, Inventor(s) Rishi Bhargava, et al. |
U.S. Appl. No. 12/880,125, entitled “System and Method for Clustering Host Inventories,” filed Sep. 12, 2010, Inventor(s) Rishi Bhargava, et al. |
U.S. Appl. No. 12/903,993, entitled “Method and System for Containment of Usage of Language Interfaces,” filed Oct. 13, 2010, Inventor(s) Rosen Sharma, et al. |
U.S. Appl. No. 12/946,344, entitled “Method and System for Containment of Usage of Language Interfaces,” filed Nov. 15, 2010, Inventor(s) Rosen Sharma, et al. |
U.S. Appl. No. 13/012,138, entitled “System and Method for Selectively Grouping and Managing Program Files,” filed Jan. 24, 2011, Inventor(s) Rishi Bhargava, et al. |
U.S. Appl. No. 13/037,988, entitled “System and Method for Botnet Detection by Comprehensive Email Behavioral Analysis,” filed Mar. 1, 2011, Inventor(s) Sven Krasser, et al. |
IA-32 Intel® Architecture Software Developer's Manual, vol. 3B; Jun. 2006; pp. 13, 15, 22 and 145-146. |
U.S. Appl. No. 13/558,181, entitled “Method and Apparatus for Process Enforced Configuration Management,” filed Jul. 25, 2012, Inventor(s) Rishi Bhargava et al. |
U.S. Appl. No. 13/558,227, entitled “Method and Apparatus for Process Enforced Configuration Management,” filed Jul. 25, 2012, Inventor(s) Rishi Bhargava et al. |
U.S. Appl. No. 13/558,277, entitled “Method and Apparatus for Process Enforced Configuration Management,” filed Jul. 25, 2012, Inventor(s) Rishi Bhargava et al. |
Notification of International Preliminary Report on Patentability and Written Opinion mailed May 24, 2012 for International Application No. PCT/US2010/055520, 5 pages. |
Sailer et al., sHype: Secure Hypervisor Approach to Trusted Virtualized Systems, IBM research Report, Feb. 2, 2005, 13 pages. |
Myung-Sup Kim et al., “A load cluster management system using SNMP and web”, [Online], May 2002, pp. 367-378, [Retrieved from Internet on Oct. 24, 2012], <http://onlinelibrary.wiley.com/doi/10.1002/nem.453/pdf>. |
G. Pruett et al., “BladeCenter systems management software”, [Online], Nov. 2005, pp. 963-975, [Retrieved from Internet on Oct. 24, 2012], <http://citeseerx.Ist.psu.edu/viewdoc/download?doi=10.1.1.91.5091&rep=rep1&type=pdf>. |
Philip M. Papadopoulos et al., “NPACI Rocks: Tools and techniques for easily deploying manageable Linux clusters” [Online], Aug. 2002, pp. 707-725, [Retrieved from internet on Oct. 24, 2012], <http://onlinelibrary.wiley.com/doi/10.1002/cpe.722/pdf>. |
Thomas Staub et al., “Secure Remote Management and Software Distribution for Wireless Mesh Networks”, [Online], Sep. 2007, pp. 1-8, [Retrieved from Internet on Oct. 24, 2012], <http://cds.unibe.ch/research/pub—files/B07.pdf>. |
“What's New: McAfee VirusScan Enterprise, 8.8,” copyright 2010, retrieved on Nov. 23, 2012 at https://kc.mcafee.com/resources/sites/MCAFEE/content/live/PRODUCT—DOCUMENTATION/22000/PD22973/en—US/VSE%208.8%20-%20What's%20New.pdf, 4 pages. |
“McAfee Management for Optimized Virtual Environments,” copyright 2012, retrieved on Nov. 26, 2012 at AntiVirushttp://www.mcafee.com/us/resources/data-sheets/ds-move-anti-virus.pdf, 2 pages. |
Rivest, R., “The MD5 Message-Digest Algorithm”, RFC 1321, Apr. 1992, retrieved on Dec. 14, 2012 from http://www.ietf.org/rfc/rfc1321.txt, 21 pages. |
Hinden, R. and B. Haberman, “Unique Local IPv6 Unicast Addresses”, RFC 4193, Oct. 2005, retrieved on Nov. 20, 2012 from http://tools.ietf.org/pdf/rfc4193.pdf, 17 pages. |
“Secure Hash Standard (SHS)”, Federal Information Processing Standards Publication, FIPS PUB 180-4, Mar. 2012, retrieved on Dec. 14, 2012 from http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf, 35 pages. |
U.S. Appl. No. 13/728,705, filed Dec. 27, 2012, entitled “Herd Based Scan Avoidance System in a Network Environment,” Inventor(s) Venkata Ramanan, et al. |
U.S. Appl. No. 13/271,102, filed Oct. 11, 2011, entitled System and Method for Critical Address Space Protection in a Hypervisor Environment, Inventors: Rajbir Bhattacharjee, et al. |
International Search Report and Written Opinion mailed Dec. 14, 2012 for International Application No. 04796-1087WO, 9 pages. |
U.S. Appl. No. 13/723,445, filed Dec. 21, 2012, entitled “System and Method for Enforcing Security Policies in a Virtual Environment,” Inventor(s) Amit Dang, et al. |
Number | Date | Country | |
---|---|---|---|
61063224 | Jan 2008 | US |