US20080127142A1 - Compiling executable code into a less-trusted address space - Google Patents

Compiling executable code into a less-trusted address space Download PDF

Info

Publication number
US20080127142A1
US20080127142A1 US11/564,249 US56424906A US2008127142A1 US 20080127142 A1 US20080127142 A1 US 20080127142A1 US 56424906 A US56424906 A US 56424906A US 2008127142 A1 US2008127142 A1 US 2008127142A1
Authority
US
United States
Prior art keywords
code
address space
application program
recited
jit compiler
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US11/564,249
Inventor
David Charles Wrighton
Robert Sadao Unoki
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Priority to US11/564,249 priority Critical patent/US20080127142A1/en
Assigned to MICROSOFT CORPORATION reassignment MICROSOFT CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: UNOKI, ROBERT SADAO, WRIGHTON, DAVID CHARLES
Priority to US11/567,871 priority patent/US7673109B2/en
Priority to TW096139915A priority patent/TW200830184A/en
Priority to CA002665027A priority patent/CA2665027A1/en
Priority to JP2009538535A priority patent/JP2010511227A/en
Priority to CNA2007800439290A priority patent/CN101553784A/en
Priority to BRPI0719800-0A2A priority patent/BRPI0719800A2/en
Priority to PCT/US2007/085664 priority patent/WO2008067329A1/en
Priority to KR1020097010902A priority patent/KR20090093967A/en
Priority to MX2009004893A priority patent/MX2009004893A/en
Priority to EP07854801A priority patent/EP2115580A4/en
Priority to AU2007325237A priority patent/AU2007325237B2/en
Priority to RU2009120207/08A priority patent/RU2439665C2/en
Publication of US20080127142A1 publication Critical patent/US20080127142A1/en
Priority to IL198058A priority patent/IL198058A0/en
Assigned to MICROSOFT TECHNOLOGY LICENSING, LLC reassignment MICROSOFT TECHNOLOGY LICENSING, LLC ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: MICROSOFT CORPORATION
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking

Definitions

  • the operating system may be configured to have application programs run in a less-trusted “user” level, but have other system components run in a trusted “kernel” level.
  • an application program running in a user level might only be able to perform certain types of functions by requesting the given function through an intermediary, trusted component.
  • the intermediate component can then validate the request and then pass the request for the function to a kernel level component, which can then execute the request.
  • an operating system might allow certain application programs to run only in a read/execute address space. This might allow the application programs to execute any existing instructions, but would prohibit the application from performing any write operations.
  • the operating system might allow other sensitive system components to operate only in a read/write address space. This might allow the sensitive components to make new writes, but would prohibit those writes from being executed.
  • an operating system might allow only certain types of application programs conforming to certain code standards to run in a space that is readable, writable, and executable.
  • the operating system might only allow “type-safe” applications to run in a read/write/execute address space.
  • type-safety rule might be to require an integer value to be added only to other integer values, rather than to floating point values.
  • a type-safe compiler could then be used to compile only that executable program code that is type-safe, and thus trusted by the operating system.
  • managed code includes executable program code, as well as intermediate language code that can be compiled on an as-needed basis.
  • a developer of an application program might include one or more references (in the compiled, executable code) to intermediate code.
  • a JIT (just-in-time) compiler is used to compile certain intermediate language code into executable instructions.
  • program code restrictions such as type-safety are often believed to conflict with speed and performance considerations. This can be particularly problematic for video game applications, where speed and performance considerations are placed at a premium. In some cases, therefore, the developers of video game applications may find it better or more efficient to ignore specific code specifications, such as type-safety.
  • Implementations of the present invention provide systems, methods, and computer program products configured to allow for the use of managed code in an operating system, where the managed code may not necessarily conform to any particular code standard.
  • an operating system provides access to a memory location in two different address spaces, and sets the permissions in the address spaces, such that the memory location is accessible with different permissions from the two different address spaces.
  • a JIT compiler operating in one address space passes compiled code into a shared memory heap. Executable program code, in turn, accesses the compiled code from the memory heap, and executes it in the other memory address space.
  • a method of executing managed code so that untrusted program code can be compiled and executed in a manner that does not threaten or otherwise compromise system security can involve executing an application program in a first address space of a memory location.
  • the method can also involve receiving one or more requests from the application program to compile one or more sets of intermediate language instructions.
  • the method can involve compiling the one or more sets of intermediate language instructions into newly compiled code using a JIT compiler running in a second address space of the memory location.
  • the method can involve passing the newly compiled code to a shared memory heap.
  • the application program can then retrieve the newly compiled code from the shared memory heap into the first address space.
  • another method of generating computer executable program code in a manner that uses JIT compilation while avoiding security violations can involve receiving application program code that includes executable code and code to be compiled.
  • the method can also involve executing the executable code in a lower-privilege mode and in a first address space.
  • the method can involve identifying one or more pointers in the executable code for at least some code to be compiled.
  • the method can involve switching to a higher-privilege mode.
  • the method can involve compiling the at least some code in a different address space using a compiler operating in the higher-privilege mode.
  • FIG. 1A illustrates an overview schematic diagram of an implementation in accordance with the present invention in which an application program running in a less trusted security mode invokes managed code, which is compiled by a JIT compiler in a trusted security mode;
  • FIG. 1B illustrates a schematic diagram in which a memory location managed by the operating system is accessible by components in two different address spaces, which have different permissions for accessing the memory location;
  • FIG. 2 illustrates a flowchart of a sequence of acts in accordance with an implementation of the present invention in which a JIT compiler receives and handles one or more requests for intermediate language instructions;
  • FIG. 3 illustrates a flowchart of an overview sequence of acts in which an operating system receives an application program that includes one or more references to managed code, and executes the application program in accordance with one or more security mechanisms.
  • Implementations of the present invention extend to systems, methods, and computer program products configured to allow for the use of managed code in an operating system, where the managed code may not necessarily conform to any particular code standard.
  • an operating system provides access to a memory location in two different address spaces, and sets the permissions in the address spaces, such that the memory location is accessible with different permissions from the two different address spaces.
  • a JIT compiler operating in one address space passes compiled code into a shared memory heap. Executable program code, in turn, accesses the compiled code from the memory heap, and executes it in the other memory address space.
  • implementations of the present invention can provide a secure system without necessarily needing to verify that the generated code does not violate the security constraints of the system. This can be done at least partly by “sandboxing” the compiled code, as well as any other code that is being executed.
  • implementations of the present invention can define a “sandbox, ” which is essentially a predefined set of boundaries in which any type of code can be executed. Specifically, the sandbox boundaries described herein will result in malicious request(s) made by the executing code being either denied by the operating system (as coming from a user mode component), or limited to actions or functions only within the predefined permissions (e.g., denying a write to a read/execute address space).
  • code that is compiled by a JIT compiler e.g., 105
  • the application program e.g., 110
  • this can free a given developer to write application program code in a manner that is potentially less constrained, and potentially faster and performance driven than previously possible.
  • implementations of the present invention also provide mechanisms that ensure that the JIT compiler, itself, cannot be “hijacked,” such as when receiving and compiling intermediate language code.
  • implementations of the present invention include a JIT compiler that is configured for type-safe execution, rather than necessarily checking incoming code for type-safety or compiling only type-safe code.
  • the JIT compiler in accordance with implementations of the present invention can be protected against requests that would cause the JIT compiler itself to violate safety definitions (e.g., type-safe definitions).
  • the JIT compiler can be configured with type-safety definitions that restrict the JIT compiler from reaching outside of its own data structures, or the data structures that are defined as part of the system 100 runtime.
  • the JIT compiler can be configured to perform a series of checks to ensure that only valid casts are performed whenever performing casts from one type to another.
  • the JIT compiler can be configured so that, whenever asked to read out of arrays, the JIT compiler performs one or more boundary checks to ensure that the JIT compiler is within the bounds of the array.
  • the JIT compiler can also be configured to ensure that whenever using a “union,” the JIT compiler reads or writes to the proper part of the union.
  • the JIT compiler can be configured to ensure the JIT compiler never overflows or underflows while reading or writing the type-stack (the type-stack within the JIT compiler).
  • the JIT compiler's type-stack is an internal data structure that is generally important to maintain correctness, etc.
  • intermediate language code is typically a stack-based system in which the JIT compiler operates on objects in a stack in order, and places results back into the stack in order.
  • the JIT compiler in accordance with implementations of the present invention is thus configured to simulate a stack to ensure that the JIT compiler is operating as expected.
  • the JIT compiler can perform stack simulation while compiling intermediate language code. If the simulated stack deviates significantly from what the JIT compiler is being fed, the JIT compiler can quit compilation or generate an error. This helps the JIT compiler ensure that it is operating within prescribed boundaries, and thus protected from violating one or more security rules.
  • FIG. 1A illustrates an overview schematic diagram of a computerized system 100 (e.g., a video game operating system) in which an application program (i.e., 110 ) is being executed.
  • application program 110 is a video game application, though one will appreciate that application program 110 can be any type of executable program code.
  • FIG. 1A also shows that application program 110 comprises one or more sets of executable instructions, such as compiled code 135 , which includes a pointer 140 to intermediate language (“IL”) code 120 .
  • IL intermediate language
  • FIG. 1A shows that application program 110 comprises compiled code 145 , which includes pointer 150 to intermediate language code 125 .
  • Intermediate language code 125 comprises several different components or modules, such as code 120 , 125 and 130 , which need further compilation before they can be executed.
  • application program 10 will or can be executed in computer system 100 .
  • a user might load a storage device onto another device on which the system 100 is installed.
  • the storage device may include binary executable code for application program 110 , as well as managed code in the form of intermediate language code 115 . Both the executable code and intermediate language code of application program 110 could then be loaded into computerized system 100 .
  • a user such as a developer, may upload the application program 110 , including intermediate language code 115 through a network connection. In such a case, the user might be executing application program 110 for testing newly developed application programs (e.g., 110 ).
  • FIG. 1A also illustrates that application program 110 is being executed in a lower-privilege mode (e.g., “user” mode), while JIT compiler 105 is operating in a higher-privilege mode (e.g., “kernel” mode).
  • FIG. 1A shows that application program 110 is operating in user mode 113 with user privileges, while JIT compiler 105 is operating in kernel mode 103 with corresponding kernel privileges.
  • FIG. 1A shows that intermediate language code 115 is accessed by one or more components with kernel 103 level privileges. Conversely, and as will be understood more fully herein, executable code will only be executed by components operating with user 113 levels of privileges.
  • the runtime for application program 110 executes each of the compiled instructions 135 , 145 in user 113 mode, the runtime will come across any of one or more pointers to intermediate language code. For example, during execution, the runtime for application program 110 comes across pointer 140 to intermediate language code 120 . Since pointer 140 references code that can only be accessed in kernel 103 mode, the runtime will break out of user mode and system 100 will switch to kernel 103 mode.
  • security component 155 which operates in kernel 103 mode.
  • security component 155 can comprise any number or type of components or modules configured to receive a user mode 113 component request (e.g., 143 ), and then validate whether the request is appropriate. This is done since user mode 113 is untrusted, and since application program 110 may or may not represent (or otherwise include) dangerous or malicious code.
  • security component 155 can perform any number or type of validation functions. For example, security component 155 can review message 143 for any number of handles, tokens, or the like. Furthermore, security component 155 can review request 143 for application instructions that could be used to compromise system 100 , such as specific memory address requests, or requests that could result in a buffer overrun, etc. Upon validating request 143 , security component 155 can initiate JIT compiler 105 in kernel mode.
  • JIT compiler can then be fed the requested code (i.e., 120 ) and begin compilation.
  • FIG. 1A shows that security component 155 executes one or more requests 147 that cause JIT compiler 105 to receive and compile intermediate language code 120 .
  • FIG. 1A shows that JIT compiler 105 can then pass code 123 into memory heap 160 .
  • memory heap 160 straddles the boundary between user mode 113 and kernel mode 103 operations.
  • memory heap 160 acts as a cross-permission/cross-boundary store that is accessible by components operating in kernel mode 103 and/or in user mode 113 .
  • system 100 can switch back to user mode and continue execution of the application program 110 .
  • application 110 operating in user mode—can pull the compiled code 123 as soon as it is available, and begin executing it in user mode 113 .
  • memory heap 160 can be used to help maintain the security boundaries between the two security layers by allowing JIT compiler 105 and user 113 to function independently, in different privilege modes, without direct communication.
  • FIG. 1B illustrates additional details on how the security boundary between the JIT compiler 105 and application program 110 can be accomplished or otherwise maintained.
  • FIG. 1B illustrates an implementation in which JIT compiler 105 and application program 110 operate with respect to a particular same memory location, albeit with different permission sets.
  • FIG. 1B illustrates an implementation in which the same memory location can be accessed by components in one address space with one set of permissions in one address space, and accessed by different components in another address space with a different set of permissions.
  • FIG. 1B shows that memory location 160 is available in an address space 170 with read/write permissions, and an address space 165 with read/execute permission.
  • kernel layer 103 components of operating system 100 will maintain a memory page table 180 for any given address location and corresponding address spaces.
  • FIG. 1B shows that memory page table 180 is maintained in kernel 103 layer (i.e., one or more kernel mode components) of system 100 .
  • kernel 103 mode component One reason this is maintained by a kernel 103 mode component is to ensure that an untrusted application program (i.e., operating in user mode) cannot access or otherwise improperly manipulate the page table.
  • FIG. 1B shows that page table 180 correlates memory locations 160 and 165 with address spaces 170 , 175 , 190 , and 195 .
  • memory location 160 is the shared memory heap
  • memory location 165 is a location in which application program 110 is loaded for execution.
  • page table 180 maps the access permissions of memory location 160 and 165 , such that address spaces 170 and 190 have “read/write” access to locations 160 or 165 , respectively.
  • page table 180 maps the permissions of memory location 160 and 165 for address spaces 175 or 195 as “read/execute,” respectively. Accordingly, when security component 155 ( FIG.
  • security component 155 can correlate the address spaces of the component originating the request (e.g., 143 ) with the address space for JIT compiler output (e.g., 123 ).
  • a “memory heap” comprises a set of memory addresses set aside by system 100 during or just prior to runtime.
  • system 100 can allocate and configure memory heap 160 so that only kernel layer components (e.g., JIT compiler 105 ) can write to memory heap 160 (e.g., via page table 180 ), while user layer components can only read from memory heap 160 .
  • kernel layer components e.g., JIT compiler 105
  • user layer components can only read from memory heap 160 .
  • application program 110 cannot execute any compiled code from JIT compiler 105 in memory heap 160 , but, rather, must do so only in address space 175 .
  • FIGS. 1A-1B and the corresponding text illustrate a number of different architectural components that can be used to access and/or execute virtually any type of executable code, including managed code, in a secure fashion.
  • FIGS. 1A-1B and the corresponding text illustrate how an application can execute in a user 113 mode, and access a memory heap with only read or read/execute permissions for the JIT compiled code.
  • the Figures and corresponding text illustrate how the application can invoke one or more kernel-layer components in different address space 170 , which has read/write permissions for memory heap 160 , and can thus compile and pass managed code to memory heap 160 but not execute it.
  • this type of distributed address space configuration can provide a number of different benefits to program execution and development.
  • an application program developer can write virtually any type of code without worrying about safety considerations (e.g., type-safety)
  • an operating system developer need not speed exhaustive resources developing the runtime verification code that would force all executing program code to be safe (e.g., type-safe).
  • FIGS. 2 and 3 illustrates flow charts one or more acts for executing managed code so that safe and unsafe application program code can be executed without threatening or compromising security.
  • the methods illustrated in FIGS. 2 and 3 are described below with reference to the components and diagrams of FIGS. 1A-1B .
  • FIG. 2 shows that a method from the perspective client computer system can comprise act 200 of executing an application in a first address space.
  • Act 200 includes executing an application program in a first address space of a memory location.
  • FIG. 1B shows that application program 110 is executing from address space 175 , which has read/execute permissions for accessing memory location 160 (i.e., where the JIT compiled code will be placed and thus designated as read/execute).
  • FIG. 2 also shows that the method can comprise an act 210 of receiving a request from the application for intermediate language instructions.
  • Act 210 can include receiving one or more requests from the application program to compile one or more sets of intermediate language instructions.
  • the runtime for application program 110 comes across pointer 140 to intermediate language code 120 , which can only be accessed in kernel 103 mode. As such, the runtime passes the pointer 120 as message 143 to security component 155 , which processes the request in kernel mode.
  • FIG. 2 shows that the method can comprise an act 220 of compiling the intermediate language instructions in a second address space.
  • Act 220 includes compiling one or more sets of intermediate language instructions into newly compiled code using a JIT compiler running in a second address space. For example, upon validating request 143 , security component 155 prepares and executes one or more requests 147 to pass the requested intermediate language code to JIT compiler 105 . JIT compiler 105 then compiles the intermediate language code 120 in the second address space 170 , which in this illustration is provided with read/write permissions to the shared memory heap 160 .
  • FIG. 2 shows that the method can comprise an act 230 of passing the compiled code to a shared memory heap.
  • Act 230 includes passing the newly compiled code to a shared memory heap, wherein the application program can retrieve the newly compiled code into the first address space.
  • FIGS. 1A and 1B shows that JIT compiler 105 , as well as application program 110 , have access to memory heap 160 .
  • JIT compiler 105 can write to (but not execute in) memory heap 160 , while application program 110 can only read and execute from memory heap 160 .
  • JIT compiler 105 compiles and creates code 123
  • the runtime for application program 110 can retrieve compiled code 123 into address space 175 , and execute the code in user mode.
  • FIG. 3 shows that a method in accordance with an implementation of the present invention of generating computer-executable program code for a computer system in a manner that uses JIT compilation while avoiding security violations can comprise an act 300 of receiving executable code and code to be compiled.
  • Act 300 includes receiving program code that includes executable code and code to be compiled.
  • operating system 100 receives one or more storage media, and/or receives a network-based upload of application program 110 .
  • Application program 110 includes executable program code, as well as intermediate language code 115 , which is accessed separately by one or more kernel layer 103 components.
  • FIG. 3 also shows that the method can comprise an act 310 of executing the executable code in a lower-privilege mode.
  • Act 310 includes executing the executable code in a lower-privilege mode and in a first address space.
  • FIG. 1A shows that the executable portion of application program 110 is accessed or otherwise executed only in user mode 113 , whereas the intermediate language code 115 is only accessed by kernel mode components.
  • FIG. 3 shows that the method can comprise an act 310 of receiving a pointer for code to be compiled.
  • Act 3 TO includes receiving one or more pointers in the executable code for at least some code to be compiled.
  • FIGS. 1A-1B shows application program 110 , which is operating in user mode 113 and in/from address space 175 , comprises compiled code 135 , pointer 140 to intermediate language code 120 , compiled code 145 , and pointer 150 to intermediate language code 125 . While executing application program 110 in user mode, the pointers 140 and/or 150 will be identified in turn.
  • FIG. 3 shows that the method can comprise an act 330 of switching to a higher-privileged mode.
  • the runtime for application program 110 identifies pointer 140 during execution, and identifies that JIT compiler 105 will need to be initiated. Since JIT compiler 105 will need to operate in kernel mode, system 100 momentarily pauses execution of application 110 , switches from user mode to kernel mode, and then initiates JIT compiler 105 as a kernel mode 103 component.
  • a message 143 which includes pointer 140 , is then passed to a kernel mode 103 security component 155 .
  • Security component 155 operating in kernel mode, then evaluates the request to ensure the request 143 is properly formed, and/or includes the appropriate handles, security identifiers, etc.
  • FIG. 3 shows that the method can comprise an act 340 of compiling the requested code in a higher-privilege mode.
  • Act 340 includes compiling the requested code in a different address space using a compiler operating in the higher-privilege mode.
  • FIGS. 1A and 1B show that JIT compiler 105 , which is operating in the higher-privilege kernel layer 103 , can compile code 120 in one address space (address space 170 ), and further pass compiled code 123 to memory heap 160 , where the JIT compiler has read/write access.
  • application program 110 can then access the compiled code 123 and execute this code from an different address space (address space 175 ) which has read/execute permissions for the memory heap 160 .
  • FIGS. 1A-2 and the corresponding text provide a number of components, modules, and mechanisms that can be used to execute untrusted code, including managed code, without sacrificing important security guarantees.
  • this can be accomplished at least in part by separating compilation of intermediate language code and execution of binary code in separate address spaces for the same program.
  • this can be accomplished with a type-safe JIT compiler, which compiles intermediate code and passes the compiled code into a shared memory heap.
  • the type-safe JIT compiler is configured so that, while it can accept and compile code that is not type-safe, the JIT compiler, itself, is constrained from operating outside of certain prescribed type-safety boundaries.
  • this can be accomplished by ensuring that executable code is only accessed by components operating in user mode, and that intermediate language code is only accessed by components operating in kernel mode in a read/write address space.
  • the embodiments of the present invention may comprise a special purpose or general-purpose computer including various computer hardware, as discussed in greater detail below.
  • Embodiments within the scope of the present invention also include computer-readable media for carrying or having computer-executable instructions or data structures stored thereon.
  • Such computer-readable media can be any available media that can be accessed by a general purpose or special purpose computer.
  • such computer-readable media can comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to carry or store desired program code means in the form of computer-executable instructions or data structures and which can be accessed by a general purpose or special purpose computer.
  • a network or another communications connection either hardwired, wireless, or a combination of hardwired or wireless
  • the computer properly views the connection as a computer-readable medium.
  • any such connection is properly termed a computer-readable medium.
  • Computer-executable instructions comprise, for example, instructions and data which cause a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions.

Abstract

Unsafe application programs that implement managed code can be executed in a secure fashion. In particular, an operating system can be configured to execute an application program in user mode, but handle managed code compilation through a type-safe JIT compiler operating in kernel mode. The operating system can also designate a single memory location to be accessed through multiple address spaces with different permission sets. An application program operating in user mode can be executed in the read/execute address space, while the JIT compiler operates in a read/write address space. When encountering one or more pointers to intermediate language code, the application runtime can send one or more compilation requests to a kernel mode security component, which validates the requests. If validated, the JIT compiler will compile the requested intermediate language code, and the application program can access the compiled code from a shared memory heap.

Description

    CROSS-REFERENCE TO RELATED APPLICATIONS
  • N/A
  • BACKGROUND
  • 1. Background and Relevant Art
  • As computerized systems have increased in popularity, so have the various application programs used on the computerized systems. In particular, there are now a wide range of applications programs configured for any number of purposes, whether to function as complex operating systems, databases, and so forth, or as a simple calculator. In many cases, software developers will write new application programs with a particular operating system in mind, using any number of appropriate languages. Once the software is complete, the developer will compile the application into machine-executable code, which can then be installed on a computer system with the appropriate operating system.
  • One will appreciate, therefore, that there are a number of considerations that often must considered by developers of operating systems as well as of the individual application programs. Many of these interests may even be competing. For example, many application program developers may have interests related to quick and fast operation, while many operating system developers may have interests related to security and stability. In some cases, the security and stability requirements can cause some application programs to have slower execution and/or lower-performance.
  • For example, the operating system may be configured to have application programs run in a less-trusted “user” level, but have other system components run in a trusted “kernel” level. As a result, an application program running in a user level might only be able to perform certain types of functions by requesting the given function through an intermediary, trusted component. The intermediate component can then validate the request and then pass the request for the function to a kernel level component, which can then execute the request.
  • Other ways of managing security are to limit the various applications and components to specific readable, writable, and/or executable permission spaces. For example, an operating system might allow certain application programs to run only in a read/execute address space. This might allow the application programs to execute any existing instructions, but would prohibit the application from performing any write operations. By contrast, the operating system might allow other sensitive system components to operate only in a read/write address space. This might allow the sensitive components to make new writes, but would prohibit those writes from being executed.
  • In still other cases, an operating system might allow only certain types of application programs conforming to certain code standards to run in a space that is readable, writable, and executable. For example, the operating system might only allow “type-safe” applications to run in a read/write/execute address space. One example of a type-safety rule might be to require an integer value to be added only to other integer values, rather than to floating point values. A type-safe compiler could then be used to compile only that executable program code that is type-safe, and thus trusted by the operating system.
  • Unfortunately, some recent trends in application program developing complicates various aspects of the above-mentioned security management approaches. For example, a wide range of application developers are now creating video game application programs using “managed code.” In general, managed code includes executable program code, as well as intermediate language code that can be compiled on an as-needed basis. For example, a developer of an application program might include one or more references (in the compiled, executable code) to intermediate code. Thus, when the executable code comes to a point where it needs to use a function that is available only in intermediate language code, a JIT (just-in-time) compiler is used to compile certain intermediate language code into executable instructions.
  • One can appreciate, therefore, that operating systems will sometimes limit the use of managed code to type-safe applications. In particular, since the JIT compiler will need to write, and since the application will need to execute, and further since the application program will need to access the compiled code written by the JIT compiler, the JIT compiler and the executing application program will typically operate in the same address space, which is readable, writable, and executable. Thus, if the intermediate language code were not type-safe (or conforming to some other program code restrictions), a malicious party could trick the JIT compiler into generating harmful instructions that are executed.
  • Unfortunately, program code restrictions such as type-safety are often believed to conflict with speed and performance considerations. This can be particularly problematic for video game applications, where speed and performance considerations are placed at a premium. In some cases, therefore, the developers of video game applications may find it better or more efficient to ignore specific code specifications, such as type-safety.
  • BRIEF SUMMARY
  • Implementations of the present invention provide systems, methods, and computer program products configured to allow for the use of managed code in an operating system, where the managed code may not necessarily conform to any particular code standard. In one implementation, for example, an operating system provides access to a memory location in two different address spaces, and sets the permissions in the address spaces, such that the memory location is accessible with different permissions from the two different address spaces. In one implementation, a JIT compiler operating in one address space passes compiled code into a shared memory heap. Executable program code, in turn, accesses the compiled code from the memory heap, and executes it in the other memory address space.
  • For example, a method of executing managed code so that untrusted program code can be compiled and executed in a manner that does not threaten or otherwise compromise system security can involve executing an application program in a first address space of a memory location. The method can also involve receiving one or more requests from the application program to compile one or more sets of intermediate language instructions. In addition, the method can involve compiling the one or more sets of intermediate language instructions into newly compiled code using a JIT compiler running in a second address space of the memory location. Furthermore, the method can involve passing the newly compiled code to a shared memory heap. The application program can then retrieve the newly compiled code from the shared memory heap into the first address space.
  • Similarly, another method of generating computer executable program code in a manner that uses JIT compilation while avoiding security violations can involve receiving application program code that includes executable code and code to be compiled. The method can also involve executing the executable code in a lower-privilege mode and in a first address space. In addition, the method can involve identifying one or more pointers in the executable code for at least some code to be compiled. Furthermore, the method can involve switching to a higher-privilege mode. Still further, the method can involve compiling the at least some code in a different address space using a compiler operating in the higher-privilege mode.
  • This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.
  • Additional features and advantages of the invention will be set forth in the description which follows, and in part will be obvious from the description, or may be learned by the practice of the invention. The features and advantages of the invention may be realized and obtained by means of the instruments and combinations particularly pointed out in the appended claims. These and other features of the present invention will become more fully apparent from the following description and appended claims, or may be learned by the practice of the invention as set forth hereinafter.
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • In order to describe the manner in which the above-recited and other advantages and features of the invention can be obtained, a more particular description of the invention briefly described above will be rendered by reference to specific embodiments thereof which are illustrated in the appended drawings. Understanding that these drawings depict only typical embodiments of the invention and are not therefore to be considered to be limiting of its scope, the invention will be described and explained with additional specificity and detail through the use of the accompanying drawings in which:
  • FIG. 1A illustrates an overview schematic diagram of an implementation in accordance with the present invention in which an application program running in a less trusted security mode invokes managed code, which is compiled by a JIT compiler in a trusted security mode;
  • FIG. 1B illustrates a schematic diagram in which a memory location managed by the operating system is accessible by components in two different address spaces, which have different permissions for accessing the memory location;
  • FIG. 2 illustrates a flowchart of a sequence of acts in accordance with an implementation of the present invention in which a JIT compiler receives and handles one or more requests for intermediate language instructions; and
  • FIG. 3 illustrates a flowchart of an overview sequence of acts in which an operating system receives an application program that includes one or more references to managed code, and executes the application program in accordance with one or more security mechanisms.
  • DETAILED DESCRIPTION
  • Implementations of the present invention extend to systems, methods, and computer program products configured to allow for the use of managed code in an operating system, where the managed code may not necessarily conform to any particular code standard. In one implementation, for example, an operating system provides access to a memory location in two different address spaces, and sets the permissions in the address spaces, such that the memory location is accessible with different permissions from the two different address spaces. In one implementation, a JIT compiler operating in one address space passes compiled code into a shared memory heap. Executable program code, in turn, accesses the compiled code from the memory heap, and executes it in the other memory address space.
  • As will be understood more fully herein, implementations of the present invention can provide a secure system without necessarily needing to verify that the generated code does not violate the security constraints of the system. This can be done at least partly by “sandboxing” the compiled code, as well as any other code that is being executed. In particular, implementations of the present invention can define a “sandbox, ” which is essentially a predefined set of boundaries in which any type of code can be executed. Specifically, the sandbox boundaries described herein will result in malicious request(s) made by the executing code being either denied by the operating system (as coming from a user mode component), or limited to actions or functions only within the predefined permissions (e.g., denying a write to a read/execute address space).
  • As a result, code that is compiled by a JIT compiler (e.g., 105), or even the application program (e.g., 110) ultimately invoking the JIT compiler, can be executed within the sandbox without necessarily being “type-safe,” or conforming to some other security consideration. One will appreciate that this can free a given developer to write application program code in a manner that is potentially less constrained, and potentially faster and performance driven than previously possible.
  • In addition to ensuring that code is executed properly, implementations of the present invention also provide mechanisms that ensure that the JIT compiler, itself, cannot be “hijacked,” such as when receiving and compiling intermediate language code. In particular, implementations of the present invention include a JIT compiler that is configured for type-safe execution, rather than necessarily checking incoming code for type-safety or compiling only type-safe code. As such, the JIT compiler in accordance with implementations of the present invention can be protected against requests that would cause the JIT compiler itself to violate safety definitions (e.g., type-safe definitions).
  • In one implementation, for example, the JIT compiler can be configured with type-safety definitions that restrict the JIT compiler from reaching outside of its own data structures, or the data structures that are defined as part of the system 100 runtime. For example, the JIT compiler can be configured to perform a series of checks to ensure that only valid casts are performed whenever performing casts from one type to another. Similarly, the JIT compiler can be configured so that, whenever asked to read out of arrays, the JIT compiler performs one or more boundary checks to ensure that the JIT compiler is within the bounds of the array. With respect to use within the C programming language, for example, the JIT compiler can also be configured to ensure that whenever using a “union,” the JIT compiler reads or writes to the proper part of the union. Furthermore, the JIT compiler can be configured to ensure the JIT compiler never overflows or underflows while reading or writing the type-stack (the type-stack within the JIT compiler).
  • In general, the JIT compiler's type-stack is an internal data structure that is generally important to maintain correctness, etc. For example, intermediate language code is typically a stack-based system in which the JIT compiler operates on objects in a stack in order, and places results back into the stack in order. The JIT compiler in accordance with implementations of the present invention is thus configured to simulate a stack to ensure that the JIT compiler is operating as expected. For example, the JIT compiler can perform stack simulation while compiling intermediate language code. If the simulated stack deviates significantly from what the JIT compiler is being fed, the JIT compiler can quit compilation or generate an error. This helps the JIT compiler ensure that it is operating within prescribed boundaries, and thus protected from violating one or more security rules.
  • FIG. 1A illustrates an overview schematic diagram of a computerized system 100 (e.g., a video game operating system) in which an application program (i.e., 110) is being executed. In one implementation, application program 110 is a video game application, though one will appreciate that application program 110 can be any type of executable program code. In any event, FIG. 1A also shows that application program 110 comprises one or more sets of executable instructions, such as compiled code 135, which includes a pointer 140 to intermediate language (“IL”) code 120. Similarly, FIG. 1A shows that application program 110 comprises compiled code 145, which includes pointer 150 to intermediate language code 125. Intermediate language code 125, in turn, comprises several different components or modules, such as code 120, 125 and 130, which need further compilation before they can be executed.
  • There are any number of different ways that application program 10 will or can be executed in computer system 100. For example, a user might load a storage device onto another device on which the system 100 is installed. The storage device may include binary executable code for application program 110, as well as managed code in the form of intermediate language code 115. Both the executable code and intermediate language code of application program 110 could then be loaded into computerized system 100. In other cases, a user, such as a developer, may upload the application program 110, including intermediate language code 115 through a network connection. In such a case, the user might be executing application program 110 for testing newly developed application programs (e.g., 110).
  • In any event, FIG. 1A also illustrates that application program 110 is being executed in a lower-privilege mode (e.g., “user” mode), while JIT compiler 105 is operating in a higher-privilege mode (e.g., “kernel” mode). For example, FIG. 1A shows that application program 110 is operating in user mode 113 with user privileges, while JIT compiler 105 is operating in kernel mode 103 with corresponding kernel privileges. In addition, FIG. 1A shows that intermediate language code 115 is accessed by one or more components with kernel 103 level privileges. Conversely, and as will be understood more fully herein, executable code will only be executed by components operating with user 113 levels of privileges.
  • Accordingly, as the runtime for application program 110 executes each of the compiled instructions 135, 145 in user 113 mode, the runtime will come across any of one or more pointers to intermediate language code. For example, during execution, the runtime for application program 110 comes across pointer 140 to intermediate language code 120. Since pointer 140 references code that can only be accessed in kernel 103 mode, the runtime will break out of user mode and system 100 will switch to kernel 103 mode.
  • The request 143 will then be handled by security component 155, which operates in kernel 103 mode. In general, security component 155 can comprise any number or type of components or modules configured to receive a user mode 113 component request (e.g., 143), and then validate whether the request is appropriate. This is done since user mode 113 is untrusted, and since application program 110 may or may not represent (or otherwise include) dangerous or malicious code.
  • Thus, to ensure that requests from user mode 113 execution will not damage system 100, security component 155 can perform any number or type of validation functions. For example, security component 155 can review message 143 for any number of handles, tokens, or the like. Furthermore, security component 155 can review request 143 for application instructions that could be used to compromise system 100, such as specific memory address requests, or requests that could result in a buffer overrun, etc. Upon validating request 143, security component 155 can initiate JIT compiler 105 in kernel mode.
  • Once operating in kernel mode, JIT compiler can then be fed the requested code (i.e., 120) and begin compilation. For example, FIG. 1A shows that security component 155 executes one or more requests 147 that cause JIT compiler 105 to receive and compile intermediate language code 120. After compiling code 120 into executable binary instructions (i.e., compiled code 123), FIG. 1A also shows that JIT compiler 105 can then pass code 123 into memory heap 160.
  • As will be understood more fully with respect to FIG. 1B, memory heap 160 straddles the boundary between user mode 113 and kernel mode 103 operations. In effect, memory heap 160 acts as a cross-permission/cross-boundary store that is accessible by components operating in kernel mode 103 and/or in user mode 113. Once compilation is completed, system 100 can switch back to user mode and continue execution of the application program 110. In particular, application 110—operating in user mode—can pull the compiled code 123 as soon as it is available, and begin executing it in user mode 113. One will appreciate, therefore, that memory heap 160 can be used to help maintain the security boundaries between the two security layers by allowing JIT compiler 105 and user 113 to function independently, in different privilege modes, without direct communication.
  • FIG. 1B illustrates additional details on how the security boundary between the JIT compiler 105 and application program 110 can be accomplished or otherwise maintained. In particular, FIG. 1B illustrates an implementation in which JIT compiler 105 and application program 110 operate with respect to a particular same memory location, albeit with different permission sets. In particular, FIG. 1B illustrates an implementation in which the same memory location can be accessed by components in one address space with one set of permissions in one address space, and accessed by different components in another address space with a different set of permissions. For example, FIG. 1B shows that memory location 160 is available in an address space 170 with read/write permissions, and an address space 165 with read/execute permission.
  • In general, one or more kernel layer 103 components of operating system 100 will maintain a memory page table 180 for any given address location and corresponding address spaces. For example, FIG. 1B shows that memory page table 180 is maintained in kernel 103 layer (i.e., one or more kernel mode components) of system 100. One reason this is maintained by a kernel 103 mode component is to ensure that an untrusted application program (i.e., operating in user mode) cannot access or otherwise improperly manipulate the page table.
  • In any event, FIG. 1B shows that page table 180 correlates memory locations 160 and 165 with address spaces 170, 175, 190, and 195. For example, memory location 160 is the shared memory heap, while memory location 165 is a location in which application program 110 is loaded for execution. In addition, page table 180 maps the access permissions of memory location 160 and 165, such that address spaces 170 and 190 have “read/write” access to locations 160 or 165, respectively. Similarly, page table 180 maps the permissions of memory location 160 and 165 for address spaces 175 or 195 as “read/execute,” respectively. Accordingly, when security component 155 (FIG. 1A) receives a request (e.g., 143) from a user mode 113 component, security component 155 can correlate the address spaces of the component originating the request (e.g., 143) with the address space for JIT compiler output (e.g., 123).
  • As previously mentioned, one of the ways that system 100 can enforce the permission and security layer boundaries is through memory heap 160, which straddles the described security/permission boundaries. In general, a “memory heap” comprises a set of memory addresses set aside by system 100 during or just prior to runtime. In this particular example, system 100 can allocate and configure memory heap 160 so that only kernel layer components (e.g., JIT compiler 105) can write to memory heap 160 (e.g., via page table 180), while user layer components can only read from memory heap 160. As a result, application program 110 cannot execute any compiled code from JIT compiler 105 in memory heap 160, but, rather, must do so only in address space 175.
  • One will appreciate, therefore, that a “sandbox” can be set by requiring operation of an application only in user mode, and by requiring the application and JIT compiler to access certain components or data structures from a memory address associated with different permission sets. Accordingly, FIGS. 1A-1B and the corresponding text illustrate a number of different architectural components that can be used to access and/or execute virtually any type of executable code, including managed code, in a secure fashion. In particular, FIGS. 1A-1B and the corresponding text illustrate how an application can execute in a user 113 mode, and access a memory heap with only read or read/execute permissions for the JIT compiled code. In addition, the Figures and corresponding text illustrate how the application can invoke one or more kernel-layer components in different address space 170, which has read/write permissions for memory heap 160, and can thus compile and pass managed code to memory heap 160 but not execute it.
  • As previously mentioned, this type of distributed address space configuration can provide a number of different benefits to program execution and development. At the outset, for example, an application program developer can write virtually any type of code without worrying about safety considerations (e.g., type-safety) In addition, an operating system developer need not speed exhaustive resources developing the runtime verification code that would force all executing program code to be safe (e.g., type-safe).
  • In addition to the foregoing, implementations of the present invention can also be described in terms of flow charts having one or more acts in a method for accomplishing a particular result. In particular, FIGS. 2 and 3, and the corresponding text, illustrates flow charts one or more acts for executing managed code so that safe and unsafe application program code can be executed without threatening or compromising security. The methods illustrated in FIGS. 2 and 3 are described below with reference to the components and diagrams of FIGS. 1A-1B.
  • Accordingly, FIG. 2 shows that a method from the perspective client computer system can comprise act 200 of executing an application in a first address space. Act 200 includes executing an application program in a first address space of a memory location. For example, FIG. 1B shows that application program 110 is executing from address space 175, which has read/execute permissions for accessing memory location 160 (i.e., where the JIT compiled code will be placed and thus designated as read/execute).
  • FIG. 2 also shows that the method can comprise an act 210 of receiving a request from the application for intermediate language instructions. Act 210 can include receiving one or more requests from the application program to compile one or more sets of intermediate language instructions. For example, the runtime for application program 110 comes across pointer 140 to intermediate language code 120, which can only be accessed in kernel 103 mode. As such, the runtime passes the pointer 120 as message 143 to security component 155, which processes the request in kernel mode.
  • In addition, FIG. 2 shows that the method can comprise an act 220 of compiling the intermediate language instructions in a second address space. Act 220 includes compiling one or more sets of intermediate language instructions into newly compiled code using a JIT compiler running in a second address space. For example, upon validating request 143, security component 155 prepares and executes one or more requests 147 to pass the requested intermediate language code to JIT compiler 105. JIT compiler 105 then compiles the intermediate language code 120 in the second address space 170, which in this illustration is provided with read/write permissions to the shared memory heap 160.
  • Furthermore, FIG. 2 shows that the method can comprise an act 230 of passing the compiled code to a shared memory heap. Act 230 includes passing the newly compiled code to a shared memory heap, wherein the application program can retrieve the newly compiled code into the first address space. For example, FIGS. 1A and 1B shows that JIT compiler 105, as well as application program 110, have access to memory heap 160. In particular, JIT compiler 105 can write to (but not execute in) memory heap 160, while application program 110 can only read and execute from memory heap 160. Thus, when JIT compiler 105 compiles and creates code 123, the runtime for application program 110 can retrieve compiled code 123 into address space 175, and execute the code in user mode.
  • In addition to the foregoing, FIG. 3 shows that a method in accordance with an implementation of the present invention of generating computer-executable program code for a computer system in a manner that uses JIT compilation while avoiding security violations can comprise an act 300 of receiving executable code and code to be compiled. Act 300 includes receiving program code that includes executable code and code to be compiled. For example, operating system 100 receives one or more storage media, and/or receives a network-based upload of application program 110. Application program 110 includes executable program code, as well as intermediate language code 115, which is accessed separately by one or more kernel layer 103 components.
  • FIG. 3 also shows that the method can comprise an act 310 of executing the executable code in a lower-privilege mode. Act 310 includes executing the executable code in a lower-privilege mode and in a first address space. For example, FIG. 1A shows that the executable portion of application program 110 is accessed or otherwise executed only in user mode 113, whereas the intermediate language code 115 is only accessed by kernel mode components.
  • In addition, FIG. 3 shows that the method can comprise an act 310 of receiving a pointer for code to be compiled. Act 3TO includes receiving one or more pointers in the executable code for at least some code to be compiled. For example, FIGS. 1A-1B shows application program 110, which is operating in user mode 113 and in/from address space 175, comprises compiled code 135, pointer 140 to intermediate language code 120, compiled code 145, and pointer 150 to intermediate language code 125. While executing application program 110 in user mode, the pointers 140 and/or 150 will be identified in turn.
  • Furthermore, FIG. 3 shows that the method can comprise an act 330 of switching to a higher-privileged mode. For example, the runtime for application program 110 identifies pointer 140 during execution, and identifies that JIT compiler 105 will need to be initiated. Since JIT compiler 105 will need to operate in kernel mode, system 100 momentarily pauses execution of application 110, switches from user mode to kernel mode, and then initiates JIT compiler 105 as a kernel mode 103 component. A message 143, which includes pointer 140, is then passed to a kernel mode 103 security component 155. Security component 155, operating in kernel mode, then evaluates the request to ensure the request 143 is properly formed, and/or includes the appropriate handles, security identifiers, etc.
  • Still further, FIG. 3 shows that the method can comprise an act 340 of compiling the requested code in a higher-privilege mode. Act 340 includes compiling the requested code in a different address space using a compiler operating in the higher-privilege mode. For example, FIGS. 1A and 1B show that JIT compiler 105, which is operating in the higher-privilege kernel layer 103, can compile code 120 in one address space (address space 170), and further pass compiled code 123 to memory heap 160, where the JIT compiler has read/write access. Upon switching back to user mode, application program 110 can then access the compiled code 123 and execute this code from an different address space (address space 175) which has read/execute permissions for the memory heap 160.
  • As such, FIGS. 1A-2 and the corresponding text provide a number of components, modules, and mechanisms that can be used to execute untrusted code, including managed code, without sacrificing important security guarantees. As previously described, this can be accomplished at least in part by separating compilation of intermediate language code and execution of binary code in separate address spaces for the same program. In addition, this can be accomplished with a type-safe JIT compiler, which compiles intermediate code and passes the compiled code into a shared memory heap. The type-safe JIT compiler is configured so that, while it can accept and compile code that is not type-safe, the JIT compiler, itself, is constrained from operating outside of certain prescribed type-safety boundaries. Still further, this can be accomplished by ensuring that executable code is only accessed by components operating in user mode, and that intermediate language code is only accessed by components operating in kernel mode in a read/write address space.
  • The embodiments of the present invention may comprise a special purpose or general-purpose computer including various computer hardware, as discussed in greater detail below. Embodiments within the scope of the present invention also include computer-readable media for carrying or having computer-executable instructions or data structures stored thereon. Such computer-readable media can be any available media that can be accessed by a general purpose or special purpose computer.
  • By way of example, and not limitation, such computer-readable media can comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to carry or store desired program code means in the form of computer-executable instructions or data structures and which can be accessed by a general purpose or special purpose computer. When information is transferred or provided over a network or another communications connection (either hardwired, wireless, or a combination of hardwired or wireless) to a computer, the computer properly views the connection as a computer-readable medium. Thus, any such connection is properly termed a computer-readable medium. Combinations of the above should also be included within the scope of computer-readable media.
  • Computer-executable instructions comprise, for example, instructions and data which cause a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions. Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.
  • The present invention may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.

Claims (20)

1. In a computerized environment comprising a memory, as well as a JIT compiler and one or more application programs loaded in the memory, a method of executing managed code so that untrusted program code can be compiled and executed in a manner that does not threaten or otherwise compromise system security, comprising:
executing an application program from a first address space set with a first set of permissions for accessing a shared memory heap;
receiving one or more requests from the application program to compile one or more sets of intermediate language instructions;
compiling the one or more sets of intermediate language instructions into newly compiled code using a JIT compiler running in a second address space that has a second set of permissions for accessing the shared memory heap; and
passing the newly compiled code to the shared memory heap, wherein the application program can retrieve and execute the newly compiled code from the first address space.
2. The method as recited in claim 1, further comprising an act of, upon receiving an indication that the newly compiled code has been passed to the shared memory heap, switching from a kernel mode to a user mode level of operation.
3. The method as recited in claim 2, further comprising an act of the application program retrieving the compiled code, and executing the compiled code from the first address space.
4. The method as recited in claim 1, wherein the first address space is configured with read/execute permissions with respect to accessing the shared memory heap, such that no component operating in the first address space can write to the shared memory heap.
5. The method as recited in claim 1, wherein the second address space is configured to access the memory heap with read/write permissions, such that no component operating in the second address space can execute code in the memory heap.
6. The method as recited in claim 1, wherein the JIT compiler is operating in a higher-privilege mode, and the application program is running in a lower-privilege mode.
7. The method as recited in claim 1, wherein the JIT compiler is constrained to execute within one or more type-safety restraints, but configured to accept and compile intermediate language code that is not type-safe.
8. The method as recited in claim 7, wherein the JIT compiler performs the acts of:
receiving one or more requests to perform a function that violates a security restraint for the JIT compiler; and
rejecting the one or more requests to perform the function, or discontinuing compiling the one or more sets of intermediate language instructions.
9. The method as recited in claim 1, further comprising an act of, upon receiving the one or more requests from the application program, activating a kernel mode level of operation.
10. The method as recited in claim 9, wherein the act of activating a kernel mode level of operation includes an act of initiating a kernel mode security component.
11. The method as recited in claim 10, wherein the one or more requests from the application program are received by a kernel mode security component.
12. The method as recited in claim 11, further comprising an act of the kernel mode security component validating the one or more requests from the application program.
13. The method as recited in claim 12, wherein the act of validating the one or more requests comprises an act of determining whether a handle included in the one or more requests is valid.
14. In a computerized environment comprising a storage, a JIT compiler, and one or more application programs loaded in memory, a method of generating computer executable program code in a manner that uses JIT compilation while avoiding security violations, comprising:
receiving application program code that includes executable code and code to be compiled;
executing the executable code in a lower-privilege mode and in a first address space;
identifying one or more pointers in the executable code for at least some code to be compiled;
switching to a higher-privilege mode; and
compiling the at least some code in a different address space using a compiler operating in the higher-privilege mode.
15. The method as recited in claim 14, wherein the application program code comprises part of a video game application that is received from the storage into a video game operating system.
16. The method as recited in claim 14, wherein the compiler is a type-safe JIT compiler configured to handle only type-safe requests, but otherwise configured to compile type-safe or non-type-safe intermediate language code.
17. The method as recited in claim 14, wherein the higher-privilege mode is a kernel mode level of operation, and the lower-privilege mode is a user level of operation.
18. The method as recited in claim 14, wherein the first address space is configured to access a memory heap with read/execute permissions, and the second address space is configured to access the memory heap with read/write permissions.
19. The method as recited in claim 14, further comprising the acts of:
switching to the lower-privilege mode upon identifying that the at least some code has been compiled; and
executing the compiled at least some code in the first address space.
20. In a computerized environment comprising a memory, a JIT compiler, and one or more application programs loaded in the memory, a computer program storage product having computer executable instructions stored thereon that, when executed, cause one or more processors to perform a method comprising:
executing an application program from a first address space set with a first set of permissions for accessing a shared memory heap;
receiving one or more requests from the application program to compile one or more sets of intermediate language instructions;
compiling the one or more sets of intermediate language instructions into newly compiled code using a JIT compiler running in a second address space that has a second set of permissions for accessing the shared memory heap; and
passing the newly compiled code to the shared memory heap, wherein the application program can retrieve and execute the newly compiled code from the first address space.
US11/564,249 2006-11-28 2006-11-28 Compiling executable code into a less-trusted address space Abandoned US20080127142A1 (en)

Priority Applications (14)

Application Number Priority Date Filing Date Title
US11/564,249 US20080127142A1 (en) 2006-11-28 2006-11-28 Compiling executable code into a less-trusted address space
US11/567,871 US7673109B2 (en) 2006-11-28 2006-12-07 Restricting type access to high-trust components
TW096139915A TW200830184A (en) 2006-11-28 2007-10-24 Compiling executable code into a less-trusted address space
RU2009120207/08A RU2439665C2 (en) 2006-11-28 2007-11-27 Compilation of executable code in less trustworthy address space
BRPI0719800-0A2A BRPI0719800A2 (en) 2006-11-28 2007-11-27 COMPILING EXECUTABLE CODE IN A LESS RELIABLE ADDRESS SPACE
EP07854801A EP2115580A4 (en) 2006-11-28 2007-11-27 Compiling executable code into a less-trusted address space
CNA2007800439290A CN101553784A (en) 2006-11-28 2007-11-27 Compiling executable code into a less-trusted address space
CA002665027A CA2665027A1 (en) 2006-11-28 2007-11-27 Compiling executable code into a less-trusted address space
PCT/US2007/085664 WO2008067329A1 (en) 2006-11-28 2007-11-27 Compiling executable code into a less-trusted address space
KR1020097010902A KR20090093967A (en) 2006-11-28 2007-11-27 Compiling executable code into a less-trusted address space
MX2009004893A MX2009004893A (en) 2006-11-28 2007-11-27 Compiling executable code into a less-trusted address space.
JP2009538535A JP2010511227A (en) 2006-11-28 2007-11-27 Compile executable code into unreliable address space
AU2007325237A AU2007325237B2 (en) 2006-11-28 2007-11-27 Compiling executable code into a less-trusted address space
IL198058A IL198058A0 (en) 2006-11-28 2009-04-07 Compiling executable code into a less-trusted address space

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/564,249 US20080127142A1 (en) 2006-11-28 2006-11-28 Compiling executable code into a less-trusted address space

Related Child Applications (2)

Application Number Title Priority Date Filing Date
US11/567,871 Continuation-In-Part US7673109B2 (en) 2006-11-28 2006-12-07 Restricting type access to high-trust components
US11/975,435 Continuation US7449885B2 (en) 2003-07-17 2007-10-18 Magnetic resonance imaging method and apparatus

Publications (1)

Publication Number Publication Date
US20080127142A1 true US20080127142A1 (en) 2008-05-29

Family

ID=39469533

Family Applications (2)

Application Number Title Priority Date Filing Date
US11/564,249 Abandoned US20080127142A1 (en) 2006-11-28 2006-11-28 Compiling executable code into a less-trusted address space
US11/567,871 Active 2028-03-11 US7673109B2 (en) 2006-11-28 2006-12-07 Restricting type access to high-trust components

Family Applications After (1)

Application Number Title Priority Date Filing Date
US11/567,871 Active 2028-03-11 US7673109B2 (en) 2006-11-28 2006-12-07 Restricting type access to high-trust components

Country Status (13)

Country Link
US (2) US20080127142A1 (en)
EP (1) EP2115580A4 (en)
JP (1) JP2010511227A (en)
KR (1) KR20090093967A (en)
CN (1) CN101553784A (en)
AU (1) AU2007325237B2 (en)
BR (1) BRPI0719800A2 (en)
CA (1) CA2665027A1 (en)
IL (1) IL198058A0 (en)
MX (1) MX2009004893A (en)
RU (1) RU2439665C2 (en)
TW (1) TW200830184A (en)
WO (1) WO2008067329A1 (en)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090234804A1 (en) * 2008-03-12 2009-09-17 Microsoft Corporation Using extension methods to extend com objects
US20090319991A1 (en) * 2008-06-20 2009-12-24 Microsoft Corporation Managed code type equivalence
US20100313189A1 (en) * 2009-06-03 2010-12-09 Robert Beretta Methods and apparatuses for secure compilation
US20100313079A1 (en) * 2009-06-03 2010-12-09 Robert Beretta Methods and apparatuses for a compiler server
US20130205388A1 (en) * 2012-02-03 2013-08-08 Apple Inc. Selective randomization for non-deterministically compiled code
CN103377120A (en) * 2012-04-24 2013-10-30 深圳市财付通科技有限公司 Test method and device for application programs
US20150089213A1 (en) * 2013-09-24 2015-03-26 Kabushiki Kaisha Toshiba Information processing apparatus, information processing system, and computer program product
US9122842B2 (en) 2011-11-09 2015-09-01 Samsung Electronics Co., Ltd. Apparatus and method for enhancing security in heterogeneous computing environment
US20150278513A1 (en) * 2012-04-06 2015-10-01 Ivan Krasin Hosted application sandboxing
US20160092674A1 (en) * 2014-09-30 2016-03-31 Apple Inc. Aslr map obfuscation
US20180253549A1 (en) * 2017-03-05 2018-09-06 enSilo Ltd. Secure just-in-time (jit) code generation
US20180365033A1 (en) * 2017-06-15 2018-12-20 Microsoft Technology Licensing, Llc Compatible dictionary layout
US10303885B2 (en) 2016-03-02 2019-05-28 Apple Inc. Methods and systems for securely executing untrusted software
US20190163626A1 (en) * 2017-11-30 2019-05-30 Webroot Inc. Multi-Ring Shared, Traversable, and Dynamic Advanced Database
US10311228B2 (en) 2014-09-30 2019-06-04 Apple Inc. Using a fine-grained address space layout randomization to mitigate potential security exploits
CN111868695A (en) * 2018-03-21 2020-10-30 微软技术许可有限责任公司 Testing kernel mode computer code by executing computer code in user mode
US11029968B1 (en) * 2019-07-31 2021-06-08 Facebook Technologies, Llc Operating system with a single kernel stack per processor

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
US8281293B2 (en) * 2007-07-24 2012-10-02 International Business Machines Corporation Copy-on-write optimization of immutable objects for objects oriented languages
US20100058016A1 (en) * 2008-08-26 2010-03-04 Jari Nikara Method, apparatus and software product for multi-channel memory sandbox
US8180986B2 (en) * 2008-09-17 2012-05-15 Microsoft Corporation Memory conflict detection via mapping of the physical heap to control access permissions to the memory
US8190636B2 (en) * 2008-09-30 2012-05-29 Nokia Corporation Method, apparatus and computer program product for providing object privilege modification
US8276111B2 (en) * 2008-12-19 2012-09-25 Microsoft Corporation Providing access to a dataset in a type-safe manner
US20100199357A1 (en) * 2009-02-02 2010-08-05 Microsoft Corporation Secure hosting for untrusted code
US8850573B1 (en) * 2010-04-14 2014-09-30 Google Inc. Computing device with untrusted user execution mode
US8495750B2 (en) 2010-08-31 2013-07-23 International Business Machines Corporation Filesystem management and security system
US9147085B2 (en) * 2010-09-24 2015-09-29 Blackberry Limited Method for establishing a plurality of modes of operation on a mobile device
KR20120031756A (en) 2010-09-27 2012-04-04 삼성전자주식회사 Method and apparatus for compiling and executing application using virtualization in heterogeneous system using cpu and gpu
US20120159193A1 (en) * 2010-12-18 2012-06-21 Microsoft Corporation Security through opcode randomization
US8646050B2 (en) * 2011-01-18 2014-02-04 Apple Inc. System and method for supporting JIT in a secure system with randomly allocated memory ranges
AU2013202876B2 (en) * 2011-01-18 2016-07-07 Apple Inc. System and method for supporting JIT in a secure system with randomly allocated memory ranges
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103209A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
RU2015121749A (en) 2012-11-07 2016-12-27 Конинклейке Филипс Н.В. COMPILATOR GENERATING NON-OPERATING CODE
CN105453481B (en) * 2012-12-27 2019-02-26 皇家飞利浦有限公司 Calculating equipment including table network
US9336413B2 (en) * 2013-11-22 2016-05-10 Oracle International Corporation Method and system for fast permission changes for virtual addresses
KR101802806B1 (en) * 2013-12-17 2017-11-29 인텔 코포레이션 Secure enclaves for use by kernel mode applications
US9930050B2 (en) * 2015-04-01 2018-03-27 Hand Held Products, Inc. Device management proxy for secure devices
JP6589505B2 (en) * 2015-09-24 2019-10-16 ヤマハ株式会社 Router
FR3047587B1 (en) * 2016-02-10 2023-01-13 Dolphin Integration Sa PROCESSING DEVICE PROVIDED WITH AN ACCESS MODE TO SENSITIVE DATA.
US10983926B2 (en) 2018-08-29 2021-04-20 Red Hat, Inc. Efficient userspace driver isolation for virtual machines
US10754796B2 (en) 2018-08-29 2020-08-25 Red Hat, Inc. Efficient user space driver isolation by CPU page table switching
CN113268349B (en) * 2021-06-04 2022-02-18 科东(广州)软件科技有限公司 Computer memory management method, device, equipment and storage medium
US11816203B2 (en) * 2021-11-23 2023-11-14 Malwarebytes Inc. Stack execution detection in a sandbox environment
CN115842927B (en) * 2023-02-24 2023-06-06 湖北芯擎科技有限公司 Video stream safety display method and device and electronic equipment

Citations (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4926476A (en) * 1989-02-03 1990-05-15 Motorola, Inc. Method and apparatus for secure execution of untrusted software
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6151703A (en) * 1996-05-20 2000-11-21 Inprise Corporation Development system with methods for just-in-time compilation of programs
US6275938B1 (en) * 1997-08-28 2001-08-14 Microsoft Corporation Security enhancement for untrusted executable code
US6505300B2 (en) * 1998-06-12 2003-01-07 Microsoft Corporation Method and system for secure running of untrusted content
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US20030115573A1 (en) * 2001-12-18 2003-06-19 Syme Donald Robert Efficient generic code in a dynamic execution environment
US6625710B2 (en) * 1998-08-26 2003-09-23 Hewlett-Packard Development Company, L.P. System, method, and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system
US6640279B2 (en) * 1997-04-15 2003-10-28 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US20040025009A1 (en) * 2002-07-31 2004-02-05 Camber August A. Method and apparatus for acceleration of multimedia content
US6775779B1 (en) * 1999-04-06 2004-08-10 Microsoft Corporation Hierarchical trusted code for content protection in computers
US20040255268A1 (en) * 2003-06-13 2004-12-16 Erik Meijer Systems and methods providing lightweight runtime code generation
US20050071616A1 (en) * 2003-09-25 2005-03-31 Zimmer Vincent J. Use of common language infrastructure for sharing drivers and executable content across execution environments
US20050071513A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation System and method for processor dedicated code handling in a multi-processor environment
US6883098B1 (en) * 2000-09-20 2005-04-19 International Business Machines Corporation Method and computer system for controlling access by applications to this and other computer systems
US20050138612A1 (en) * 2003-12-22 2005-06-23 Shinobu Asao Compilation method, compiler apparatus and compiler
US20050172126A1 (en) * 2004-02-03 2005-08-04 Microsoft Corporation Security requirement determination
US6952722B1 (en) * 2002-01-22 2005-10-04 Cisco Technology, Inc. Method and system using peer mapping system call to map changes in shared memory to all users of the shared memory
US20050257243A1 (en) * 2004-04-27 2005-11-17 Microsoft Corporation Method and system for enforcing a security policy via a security virtual machine
US20050273605A1 (en) * 2004-05-20 2005-12-08 Bratin Saha Processor extensions and software verification to support type-safe language environments running with untrusted code
US6978018B2 (en) * 2001-09-28 2005-12-20 Intel Corporation Technique to support co-location and certification of executable content from a pre-boot space into an operating system runtime environment
US7020772B2 (en) * 1999-04-06 2006-03-28 Microsoft Corporation Secure execution of program code
US20060101446A1 (en) * 2004-10-18 2006-05-11 Microsoft Corporation System and method for sharing objects between applications in a virtual runtime environment
US7111307B1 (en) * 1999-11-23 2006-09-19 Microsoft Corporation Method and system for monitoring and verifying software drivers using system resources including memory allocation and access
US20070050586A1 (en) * 2005-08-26 2007-03-01 Kabushiki Kaisha Toshiba Memory access control apparatus
US7216341B2 (en) * 2003-05-09 2007-05-08 Microsoft Corporation Instrumenting software for enhanced diagnosability
US20070180246A1 (en) * 2002-06-24 2007-08-02 Microsoft Corporation Secure Media Path Methods, Systems, and Architectures
US20080040800A1 (en) * 2006-08-03 2008-02-14 Seung Bae Park Code injection prevention
US20080126740A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Restricting type access to high-trust components
US7409694B2 (en) * 1998-09-09 2008-08-05 Microsoft Corporation Highly componentized system architecture with loadable virtual memory manager
US7587724B2 (en) * 2005-07-13 2009-09-08 Symantec Corporation Kernel validation layer

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6622300B1 (en) * 1999-04-21 2003-09-16 Hewlett-Packard Development Company, L.P. Dynamic optimization of computer programs using code-rewriting kernal module
CA2469633C (en) * 2001-12-13 2011-06-14 Japan Science And Technology Agency Software safety execution system
US7234144B2 (en) * 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
US7124445B2 (en) * 2002-06-21 2006-10-17 Pace Anti-Piracy, Inc. Protecting software from unauthorized use by converting source code modules to byte codes
DE10335989B4 (en) * 2003-08-01 2019-07-11 Kw-Software Gmbh Online changes to CIL code programs for industrial automation
US7647629B2 (en) * 2004-02-03 2010-01-12 Microsoft Corporation Hosted code runtime protection
JP2007233426A (en) * 2004-04-05 2007-09-13 Matsushita Electric Ind Co Ltd Application execution device
JP2006048186A (en) * 2004-08-02 2006-02-16 Hitachi Ltd Language processing system protecting generated code of dynamic compiler
DE102004057490B4 (en) * 2004-11-29 2007-02-22 Infineon Technologies Ag Device and method for processing a program code

Patent Citations (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4926476A (en) * 1989-02-03 1990-05-15 Motorola, Inc. Method and apparatus for secure execution of untrusted software
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
US6151703A (en) * 1996-05-20 2000-11-21 Inprise Corporation Development system with methods for just-in-time compilation of programs
US6640279B2 (en) * 1997-04-15 2003-10-28 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US6275938B1 (en) * 1997-08-28 2001-08-14 Microsoft Corporation Security enhancement for untrusted executable code
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6505300B2 (en) * 1998-06-12 2003-01-07 Microsoft Corporation Method and system for secure running of untrusted content
US6625710B2 (en) * 1998-08-26 2003-09-23 Hewlett-Packard Development Company, L.P. System, method, and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system
US7409694B2 (en) * 1998-09-09 2008-08-05 Microsoft Corporation Highly componentized system architecture with loadable virtual memory manager
US6775779B1 (en) * 1999-04-06 2004-08-10 Microsoft Corporation Hierarchical trusted code for content protection in computers
US7020772B2 (en) * 1999-04-06 2006-03-28 Microsoft Corporation Secure execution of program code
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6851108B1 (en) * 1999-09-01 2005-02-01 Microsoft Corporation Verifying intermediate language code
US7111307B1 (en) * 1999-11-23 2006-09-19 Microsoft Corporation Method and system for monitoring and verifying software drivers using system resources including memory allocation and access
US6883098B1 (en) * 2000-09-20 2005-04-19 International Business Machines Corporation Method and computer system for controlling access by applications to this and other computer systems
US6978018B2 (en) * 2001-09-28 2005-12-20 Intel Corporation Technique to support co-location and certification of executable content from a pre-boot space into an operating system runtime environment
US20030115573A1 (en) * 2001-12-18 2003-06-19 Syme Donald Robert Efficient generic code in a dynamic execution environment
US6952722B1 (en) * 2002-01-22 2005-10-04 Cisco Technology, Inc. Method and system using peer mapping system call to map changes in shared memory to all users of the shared memory
US20070180246A1 (en) * 2002-06-24 2007-08-02 Microsoft Corporation Secure Media Path Methods, Systems, and Architectures
US20040025009A1 (en) * 2002-07-31 2004-02-05 Camber August A. Method and apparatus for acceleration of multimedia content
US7216341B2 (en) * 2003-05-09 2007-05-08 Microsoft Corporation Instrumenting software for enhanced diagnosability
US20040255268A1 (en) * 2003-06-13 2004-12-16 Erik Meijer Systems and methods providing lightweight runtime code generation
US20050071616A1 (en) * 2003-09-25 2005-03-31 Zimmer Vincent J. Use of common language infrastructure for sharing drivers and executable content across execution environments
US7162626B2 (en) * 2003-09-25 2007-01-09 Intel Corporation Use of common language infrastructure for sharing drivers and executable content across execution environments
US20050071513A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation System and method for processor dedicated code handling in a multi-processor environment
US7458071B2 (en) * 2003-12-22 2008-11-25 Panasonic Corporation Compilation method, compiler apparatus and compiler
US20050138612A1 (en) * 2003-12-22 2005-06-23 Shinobu Asao Compilation method, compiler apparatus and compiler
US20050172126A1 (en) * 2004-02-03 2005-08-04 Microsoft Corporation Security requirement determination
US20050257243A1 (en) * 2004-04-27 2005-11-17 Microsoft Corporation Method and system for enforcing a security policy via a security virtual machine
US20050273605A1 (en) * 2004-05-20 2005-12-08 Bratin Saha Processor extensions and software verification to support type-safe language environments running with untrusted code
US20060101446A1 (en) * 2004-10-18 2006-05-11 Microsoft Corporation System and method for sharing objects between applications in a virtual runtime environment
US7587724B2 (en) * 2005-07-13 2009-09-08 Symantec Corporation Kernel validation layer
US20070050586A1 (en) * 2005-08-26 2007-03-01 Kabushiki Kaisha Toshiba Memory access control apparatus
US20080040800A1 (en) * 2006-08-03 2008-02-14 Seung Bae Park Code injection prevention
US20080126740A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Restricting type access to high-trust components

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Purohit, et al., "Cosy: Develop in User-Land, Run in Kernel-Mode", 2003, 9th workshop on Hot Topics in Operating Systems; [retrieved on 01-25-2012]; Retrieved from Internet ;pp1-6. *

Cited By (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8296730B2 (en) * 2008-03-12 2012-10-23 Microsoft Corporation Using extension methods to extend COM objects
US20090234804A1 (en) * 2008-03-12 2009-09-17 Microsoft Corporation Using extension methods to extend com objects
US20090319991A1 (en) * 2008-06-20 2009-12-24 Microsoft Corporation Managed code type equivalence
US9117071B2 (en) 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US20100313079A1 (en) * 2009-06-03 2010-12-09 Robert Beretta Methods and apparatuses for a compiler server
US8677329B2 (en) * 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US20100313189A1 (en) * 2009-06-03 2010-12-09 Robert Beretta Methods and apparatuses for secure compilation
US9946873B2 (en) 2009-06-03 2018-04-17 Apple Inc. Methods and apparatuses for secure compilation
US9880819B2 (en) 2009-06-03 2018-01-30 Apple Inc. Methods and apparatuses for a compiler server
US9122842B2 (en) 2011-11-09 2015-09-01 Samsung Electronics Co., Ltd. Apparatus and method for enhancing security in heterogeneous computing environment
US20130205388A1 (en) * 2012-02-03 2013-08-08 Apple Inc. Selective randomization for non-deterministically compiled code
US9128732B2 (en) * 2012-02-03 2015-09-08 Apple Inc. Selective randomization for non-deterministically compiled code
US9626507B2 (en) * 2012-04-06 2017-04-18 Google Inc. Hosted application sandboxing
US20150278513A1 (en) * 2012-04-06 2015-10-01 Ivan Krasin Hosted application sandboxing
CN103377120A (en) * 2012-04-24 2013-10-30 深圳市财付通科技有限公司 Test method and device for application programs
US20150089213A1 (en) * 2013-09-24 2015-03-26 Kabushiki Kaisha Toshiba Information processing apparatus, information processing system, and computer program product
US9536113B2 (en) * 2013-09-24 2017-01-03 Kabushiki Kaisha Toshiba Information processing apparatus, information processing system, and computer program product
US20160092674A1 (en) * 2014-09-30 2016-03-31 Apple Inc. Aslr map obfuscation
US11188638B2 (en) 2014-09-30 2021-11-30 Apple Inc. Fine-grained memory address space layout randomization
US10311227B2 (en) * 2014-09-30 2019-06-04 Apple Inc. Obfuscation of an address space layout randomization mapping in a data processing system
US10311228B2 (en) 2014-09-30 2019-06-04 Apple Inc. Using a fine-grained address space layout randomization to mitigate potential security exploits
US10303885B2 (en) 2016-03-02 2019-05-28 Apple Inc. Methods and systems for securely executing untrusted software
US20180253549A1 (en) * 2017-03-05 2018-09-06 enSilo Ltd. Secure just-in-time (jit) code generation
US10795989B2 (en) * 2017-03-05 2020-10-06 Fortinet, Inc. Secure just-in-time (JIT) code generation
US10572275B2 (en) * 2017-06-15 2020-02-25 Microsoft Technology Licensing, Llc Compatible dictionary layout
US20180365033A1 (en) * 2017-06-15 2018-12-20 Microsoft Technology Licensing, Llc Compatible dictionary layout
US10579520B2 (en) * 2017-11-30 2020-03-03 Webroot Inc. Multi-ring shared, traversable, and dynamic advanced database
US20190163626A1 (en) * 2017-11-30 2019-05-30 Webroot Inc. Multi-Ring Shared, Traversable, and Dynamic Advanced Database
US11016886B2 (en) 2017-11-30 2021-05-25 Webroot Inc. Multi-ring shared, traversable, and dynamic advanced database
US11556468B2 (en) 2017-11-30 2023-01-17 Webroot Inc. Multi-ring shared, traversable, and dynamic advanced database
CN111868695A (en) * 2018-03-21 2020-10-30 微软技术许可有限责任公司 Testing kernel mode computer code by executing computer code in user mode
US11029968B1 (en) * 2019-07-31 2021-06-08 Facebook Technologies, Llc Operating system with a single kernel stack per processor

Also Published As

Publication number Publication date
IL198058A0 (en) 2009-12-24
KR20090093967A (en) 2009-09-02
MX2009004893A (en) 2009-05-19
US7673109B2 (en) 2010-03-02
CA2665027A1 (en) 2008-06-05
BRPI0719800A2 (en) 2014-04-22
TW200830184A (en) 2008-07-16
CN101553784A (en) 2009-10-07
RU2439665C2 (en) 2012-01-10
WO2008067329A1 (en) 2008-06-05
AU2007325237B2 (en) 2011-10-27
RU2009120207A (en) 2010-12-10
EP2115580A4 (en) 2012-03-07
EP2115580A1 (en) 2009-11-11
AU2007325237A1 (en) 2008-06-05
US20080126740A1 (en) 2008-05-29
JP2010511227A (en) 2010-04-08

Similar Documents

Publication Publication Date Title
AU2007325237B2 (en) Compiling executable code into a less-trusted address space
JP6248153B2 (en) Activate trust level
US8443188B2 (en) Using code access security for runtime accessibility checks
AU2012352754B2 (en) Facilitating system service request interactions for hardware-protected applications
US11188639B2 (en) System, method and apparatus for automatic program compartmentalization
US8646050B2 (en) System and method for supporting JIT in a secure system with randomly allocated memory ranges
US9871800B2 (en) System and method for providing application security in a cloud computing environment
RU2584507C1 (en) Method of providing safe execution of script file
Wan et al. RusTEE: developing memory-safe ARM TrustZone applications
JP7228751B2 (en) Method and apparatus for authority management, computer equipment and storage medium
Gollamudi et al. Automatic enforcement of expressive security policies using enclaves
US20050172133A1 (en) Cross assembly call interception
Austin et al. Multiple facets for dynamic information flow with exceptions
Bijlani et al. A lightweight and fine-grained file system sandboxing framework
AU2011239288A1 (en) Compiling executable code into a less-trusted address space
US20100042656A1 (en) Claim generation for testing claims-based applications
Yang et al. Lbac web: a lattice-based access control model for mobile thin client based on web oses
US20230139429A1 (en) Privilege Metric for Evaluating the Security of a Library
Cude Wayless: a Capability-Based Microkernel
AU2013202876B2 (en) System and method for supporting JIT in a secure system with randomly allocated memory ranges
Lu Java Mobile Code Dynamic Verification by Bytecode Modification
Jia et al. System M: A Program Logic for Code Sandboxing and Identification

Legal Events

Date Code Title Description
AS Assignment

Owner name: MICROSOFT CORPORATION, WASHINGTON

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:WRIGHTON, DAVID CHARLES;UNOKI, ROBERT SADAO;REEL/FRAME:018559/0972

Effective date: 20061128

STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION

AS Assignment

Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, WASHINGTON

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MICROSOFT CORPORATION;REEL/FRAME:034766/0509

Effective date: 20141014