CA2386100A1 - Method and system for intercepting application program interface - Google Patents

Method and system for intercepting application program interface Download PDF

Info

Publication number
CA2386100A1
CA2386100A1 CA002386100A CA2386100A CA2386100A1 CA 2386100 A1 CA2386100 A1 CA 2386100A1 CA 002386100 A CA002386100 A CA 002386100A CA 2386100 A CA2386100 A CA 2386100A CA 2386100 A1 CA2386100 A1 CA 2386100A1
Authority
CA
Canada
Prior art keywords
api
routine
code
user
execution
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
CA002386100A
Other languages
French (fr)
Inventor
Yona Hollander
Ophir Rachman
Oded Horovitz
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.)
McAfee LLC
Original Assignee
Networks Associates Technology Inc
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
Priority claimed from IL13291699A external-priority patent/IL132916A/en
Priority to EP00978530A priority Critical patent/EP1236114A1/en
Priority to PCT/US2000/031032 priority patent/WO2001037095A1/en
Priority to JP2001539121A priority patent/JP2003515219A/en
Priority to AU15986/01A priority patent/AU1598601A/en
Application filed by Networks Associates Technology Inc filed Critical Networks Associates Technology Inc
Priority to CA002386100A priority patent/CA2386100A1/en
Priority to AU48883/02A priority patent/AU768758B2/en
Publication of CA2386100A1 publication Critical patent/CA2386100A1/en
Abandoned legal-status Critical Current

Links

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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/542Intercept

Abstract

A method of intercepting application program interface, including dynamic installation of associated software, within the user portion of an operating system. An API interception control server in conjunction with a system call interception module loads into all active process spaces an API
interception module. An initializer module within the API interception module hooks and patches all API modules in the active process address space. When called by the application programs, the API routines' flow of execution, by virtue of their patched code, is re-directed into a user-supplied code in a pre-entry routine of the API interception module. The API- routine might be completely by-passed or its input parameters might be filtered and changed by the user code. During the operation, the API routine is double-patched by the API
interception module to ensure that all simultaneous calls to the API routine will re-direct its flow of control into the API interception module. A user-supplied code in a post-entry module of the API interception module might filter or change the return values of the API.

Description

PATENT

METHOD AND SYSTEM FOR INTERCEPTING AN APPLICATION PROGRAM
INTERFACE
s BACKGROUND OF THE INVENTION
The present invention relates to a method and system for intercepting an application program interface within a computer system, in genera! and to a method and system of diverting control from an application program interface to user supplied functions within a computer system, in particular. The present io invention further includes dynamic installation of associated software, within the user portion of an operating system and within the kernel portion of the operating system for the implementation thereof.
The present invention provides a method of implementing better security within a computer system and enhances security capabilities far systems such t5 as Windows and NT. The present invention further provides a method of better control over function ca!! routines also known as application program interface routines (API) in a mariner transparent to the user.
Numerous security systems have previously been proposed and implemented in various systems such as UNIX and the like. None of the 2o previous solutions provide an efficient, time saving and cost effective manner .
for controlling APIs. On the contrary, previous systems, relating to security in ua.~4oszs., Patent general, have resulted in high costs to users to implement, maintain and upgrade said systems.
Previously known systems, such as the Windows and NT operating systems, fail to secure computer systems making use of APIs from misuse of s APIs. There is thus a need for a method tar intercepting an application program interface within a computer system.
Therefore it is the object of the present invention to provide a method and system whereby API functions called by user applications are not allowed to execute unless the calling process has the requisite authority and privilege.
,o One application of such a system could be a security application whereby certain APl functions called by user applications are not allowed to execute unless the calling process has the requisite authority and privilege.
Another application might include a system profiler whereby any or all API. function,calls.issued by an application are tracked and used to generate ~s statistics about the behavior of the user application.
Yet another application might include intensive parameter checking in conjunction with parameter filtering or parameter correction, whereby any or all AP1 function input parameters sent by the calling application program and the return values from the API routine itself are handled according to prescribed zo rules.
Patent Constructive in the abstraction of providing API function interception in a computerized environment is that the user-supplied code can be inserted and installed within the operating system where it can be accessed.
s SUMMARY OF THE INVENTION
API routines ace a primary target of intrudefs'and executing API routines is a major objective of intruders in the acts of illegal access attempts from outside the operating system platform.
In Operating Systems (0/S) having many APIs as the interface between o the program applications and the OIS, intruders are required to execute API
functions if they want to gain access to higher privileges or obtain OIS
services.
Thus, intruders are able to obtain critical resources of the computing environment.
It is therefore the object of the present invention to provide a method and ~s system whereby API functions called by user applications are not allowed to execute unless the calling process has the requisite authority and privilege.
It is also the object of the present invention to provide a method and system whereby parameters associated with the API functions to be examined and processed according to the authority and privilege of the calling process.
2o It is also the object of the present invention to provide a method and system whereby resulting values associated with the API functions to be Patent examinzd and processed according to the authority and privilege of the calling process.
It is an object of the present invention to initialize API controlling routine and to hook at least one API routine in memory space associated with user s application.
It is also the object of the present invention to replace the hooked API
routine code with user supplied code, the user supplied code to be executed upon calling the API by the user application program.
It is also the object of the present invention to receive a call from a ~o previously hooked API and generating a predefined series of operations to control said API operation.
It is also an object of the present invention to manage operation of API
controlling routine, to collect and store information corresponding to the API
routine.
~s It is also the object of the present invention to identify the API routine, to obtain the API routine address and to determine the address of at least one user supplied module associated with re-direction of flow of execution of the AP1 routine.
It is further the object of the present invention to enable enhanced 2a privileges relating to memory space associated with the AP1 routine, to store API routine code associated with first re-direction of flow of execution to be later replaced, to store API routine code address associated with second re-direction Patent 253!068 of flow of execution, to scare API routine code associated with second re-direction of flow of execution and replacing the API routine code stored with user supplied code associated with first re-direction of flow of the API
routine.
Lt is also the object of the present invention to restore API routine code s previously stored associated with first re-direction of flow of execution to be later replaced, to replace AP! routine code with user supplied code associated with second re-direction of flow of execution of the AP! routine and to call the API routine based upon response generated corresponding whether API
routine is to be executed in association with user predefined rules.
~o ~ 1t is further the object of the present invention to replace the API
routine code stored with user supplied code associated with first re-direction of flow of execution of the APl routine and to restore previously stored API routine code associated with second re-direction of flow of execution.
It is also the object of the present invention to limit execution of the user is application to the specific API routine corresponding to execution time of API
routine based on response generated corresponding to whether API routine is to be executed in association with user predefined rules.
It is also the object of the present invention to cancel the limit on execution of the user application to the specific API routine corresponding to 2o execution time of AP! routine.

Patent It is a further object of the present invention to execute user supplied code for determining return values of the AP1 routine and to manipulate process level flow control structure to enable return of control to user application.
There is also provided in the present invention a method of inserting s user supplied code into memory space of user application by injecting loader code into active process memory space associated with the user application and executing loader code to further load user supplied code into memory space, the user supplied code operative to further control API execution.
Also provided in the present invention are an apparatus controlling the ~o method of providing user control of the API, which includes an initalizer for obtaining list of active processes within the computer system, an injector for injecting APl interception module into said active processes, means for monitoring predetermined system calls operative to further injection of API
interception routine into new created process and means for updating the list of ~s active processes.
There is also provided in the present invention an apparatus to provide system call interception, which includes means to obtain a list of active processes within the computer system, means to open processes within a computer system and means to issue notification massages associated with the Zo system calls.

Patent BRIEF DESCRIPTION OF THE DRAWINGS
The accompanying drawings, which are incorporated in and constitute a part of the specification, illustrate preferred embodiments of the invention and, together with the description, serve to explain the invention:
s Fig. 1 is a schematic block diagram of an API Interception System environment generally referenced 10. ' Fig. 2 is a high-level flow diagram of the API Interception Control Server operation referenced in Fig. 1.
Fig. 3 is a flow diagram of the AP1 Interception Module injection process ~o referenced in Fig. 2.
Fig. 4 is a flow diagram of the System Call Interceptor Component operation referenced in Fig. 1, Fig. 5 is a high-level flow diagram of the API Interception Module operation referenced in Fig. 1.
Fig. 6 is a flow diagram of the API Interception Module Initialization routine operation referenced in Fig. 5.
Fig. 7 is a flow diagram of the API Interception Module Hook and Patch API Routine operation referenced in Fig. 5.
Fig. 8 is a block diagram of the API Interception Module run-time Zo operation referenced in Fig. 1.
Fig. 9 is a flow diagram of the API Interception Module Dispatch Routine run-time operation referenced in Fig. 8.

Patent Fig. 10 is a flow diagram of the APt Interception Module Pre-Entry Routine operation referenced in Fig. 8.
Fig. 11 is a high-level flow diagram of API Interception Module Depatch routine operation referenced in Fig. 8.
s Fig. 12 is a flow diagram of the API Interception Module Post-Entry routine operation referenced in Fig. 8.
Fig. 13 is a flow diagram of the API Interception Control Server shut down operation.
1o DETAILED DESCR1PT10N OF THE PREFERRED EMBODIMENTS
An AP1 is a set of routines that an application program calls to request and carry out services performed by the operating system. An API serves as an interface between the application program and the operating system. API
functions' handle important and sensitive areas of the computerized ~s environment such as communications, debugging, file handling, memory management, networks, printing, processes control and threads, security, services and the like. API functions' object code is generaNy implemented through the use of dynamic-link libraries (DLL). DLLs are commonly organized in modules ready to be loaded into the computer's memory device. When a 2o process is created within a computer system, the DLI. modules consisting of the API functions are loaded into the process address space.

Paten' 253!068 APl functions are powerful and most of them operate on the critical levels or the computerized environment. Because API functions serve as an interface between the Application Program and the Operating System, they commonly run having enhanced privileges.
s Consequently, API routines are a crucial element in the course of illegal access attempts from outside the operating system platform.
1n~ OIS: having many APIs as ' the interface between the program applications and the O/S, intruders are required to execute API functions if they want to gain access to higher privileges or obtain OJS services. Thus, intruders ~o are able to obtain critical resources of the computing environment.
0/S do not include a built in mechanism to intercept and examine API
functions called from a user application. Once a user run application program calls an API function, there is no possibility of pre-processing said application program arguments, controlling said application program execution flow, ~s monitoring said application program activities, or blocking said application program activation, if and when necessary.
As some~APl routines operate, while having the highest privileges within the computer operating system, it is desirable in many instances, to intercept API function calls and re-direct them to execute user-supplied custom code zo instead. Such instances may include, general system management functions generally, and system security management functions particuiariy.

Patent 2~3I063 The APl Interception System 10 environment and the operational logic of the present invention provides a method of intercepting an APf and or diverting control from the API to user-defined custom code. The present invention provides novel methods, which enhance and add to capabilities of a user to s gain access 'tv system events. The user's capabilities to control, to manage, and to handle system events.are also extended thereby.
The present invention will be described with reference to the accompanying drawings.
Turning now to Fig. 1 there is provided a schematic illustration of the ~o system environment wherein the APi Interception System is operating, generally referred to as system 10, in accordance with a preferred embodiment of the present invention.
System 10 comprises four major components of the API Interception System, three of which are active and one passive;
~s a) API Interception Control Server 16 is an active component. APi Interception Control Server 16 is the operational center of the API
Interception System 10. The API Interception Control Server 16 is loaded into the user space memory device 12 of a computer system implementing the present invention.
b) API Interception Module 32, 36, and 40 is an active component. APi interception Module 32, 36, and 40 is a pt~L module, which is loaded by the AP! Interception Control Server 1 ~ into each active process address space t 8, Patent 20. 22 loaded in user space memory device 12. DLLs ere a set of callable subroutines linked as a binary image that can be dynamically loaded by computer programs that use them. A binary image is a collection of compiled modules that are combined by a linker into a form that is ready to be loaded for s execution. API Interception Module 32 and all its copies 36, 40 inside active process address space 18, 20, 22 are linked with API Interception Control Server 16. The link is established directly by API Interception Module 32, 36, and 40, after API Interception Module 32, 36. 40 have been loaded into active process address space 18, 20, 22. It will be appreciated by those skilled in the ~o art that the number of API interception Modules copies present 4vithin active processes residing within the computer system user address space is associated with the number of process active at any given time. It is, however, one of the objects of the present invention to provide a further user predetermined . control on the number' of API Interceptiori~ Modules to be ~s associated with active process. Means for controlling the number of API
Interception Modules to be associated with active process is preferably achieved using interactive command console present within API Interception Server 16. Allowing said control would greatly enhance the efficiency and speed of performing the methods contemplated by the present invention. It is 2o further clarified that the number of APl interception Modules 30, 34, 38 and associated active processes 18, 20, 22 as shown in the drawings serve for purpose of illustration and it will be appreciated by those skilled in the art that Patent marry more active process may be associated with corresponding API
Interception Modules, c) System Call Interception Component 24. is an active component.
System Call Interception Component 24 operates in the kernel space memory s device 14 and is linked to API Interception Control Server 16, present within user space memory device 12;
d) API routine 30, 34, 38 is a passive component. API routines 30, 34, 38 are potential objects upon which API Interception System 10 operate. AFI
routines 30, 34, 38 are loaded into each corresponding and associated process ~o address space 18, 20, 22, which are loaded into user space memory device 12.
Turning now to Fig. 2 there is provided a high-level flow diagram of the API Interception Control Server 16 operation.
The API Interception Control Server 16 is the command center of the API interception System 70. The API Interception Control Server 16 in the ~5 framework of its tasks, initializes the system, loads and injects the appropriate DLL into the appropriate address spaces, supervises activities, monitors execution and concentrates messages of the API Interception System 10. The API Interception Control Server 16 monitors the host operating system for the creation and termination of processes, through the System Call Interception 2o Module 24 and in turn will suspend,, resume, and terminate processes and threads by issuing commands to the System Call Interception Module 24.

Pa rant A?I Interception Control Server 16 begins its operation by loading Systsm Call Interception Component 24 into kernel space memory dzvice 14.
Altar establishing communication with the System Call Interception Component 24, API Interception Control Server 16 requests from System Call Interception s Component 24 the List of active processes (step 52). The list of active processes enables API interception Control Server 16 to build a fist of Managed processes (step 54). Using the fist of Managed Processes API Interception Control Server 16 injects API Interception Module 32, 36, 40 into the address spaces of all active processes 18, 20, 22 which are in user space memory 1o device 12 (step 56).
During its run-time operation API Interception Control Server 16 constantly monitors the host operating system for system calls through System Call Interception Component 24 (step 58) and takes appropriate action according to the type of system calls detected. If the system call detected is ~s process creation {step 60) then API Interception Control Server 16 injects into the newly created process address space 18, 20, 22 a copy of the API
Interception Module 32, 36, 40 (step 64) and returns monitoring system calls (step 58). If the detected system call of the type of process termination (step 62) APi Interception Control Server 16 removes the process 18, 18, 22 from the zo list of the Managed Processes (step 66), further action might be optionally taken as required according to the type of the operating system.

Patent Optionally, API Interception Contrcl Server 16 may accept reports from API Interception Module 32, 36. 40 for the purpose of creating various Management Information Structures. Such structures could be used as input to Y
Management Reports such as API function profiles or as frequency of use and s length of use, user profiles such as types of API routines 30, 34, 38 used and other statistics. Naturally, such reports would be highly useful and valuable to users in charge of managing and . controlling the over-all operatioh of a computer system and of an operating system platform such as system administrators.
io Optionally, API Interception Server 16 might instruct System Call Interception Component 24 to call and run miscellaneous operating system services that can be executed in kernel space memory device 14 only. For example, API Interception Server 16 might request System Cal) Interception Component 24 to open a new process, to suspend, to resume, or to terminate 'is .an active process and the like.
A high-level flow diagram of the method of injecting AP( Interception Module 30, 34, 38 into address space of an active process 18, 20, 22 is illustrated in Fig. 3. API Interception Control Server 16 allocates memory for a Loader Code in the address space of the process 18, 20, 22 (step 70).
zo Consequently, the Loader Code is inserted into the process address space 18, 20, 22 (step 72). The Loader Code is a small executable binary image that runs as a thread of the process 18, 20, 22. A thread is an entity within a r'dteni process 18, 20, 22 that the host operating system schedules for execution.
The Loader Code is activated and in turn calls an operating sysiem pre-existing function that loads API Interception Module 32, 36, 40 into a predefined area in the process address space memory device 18, 20, 22 (step 74). For example, s Call Remote Thread function, which can be used in conjunction with the NT
operating system manufactured by the Microsoft Corporation, Redwood, Washington, USA, is such an operating system function that may be used to load the API Interception Module into a user predefined process address space memory device.
~o A remote thread is a thread that is created by a process with a specific instruction to run in the context of a different process. It will be appreciated that through the use of the method of injecting API Interception Module into address space of a memory device, a remote thread 75 is created. Consequently, API
Interception Module 32, 36, 40 and the like are injected into the process ~s address space 18, 20, 22 and the like (step 76).
It will be appreciated by those skilled in the art that there are other means that could be utilized for loading API Interception modules into a user process address space memory device such as using Asynchronous Procedure Calls (APCs) and the like. Utilizing APCs enables user programs and/or system 2o routines to execute code in the context of a particular user thread.
A high-level flow diagram of operatioh of the System Ca;l Interceptor Component 24 is illustrated in Fig. 4. System calls are requests made by user Patent 253!068 programs or by other system routines to run operating system routines, functions or services in kernel made. Kernel mode refers to a mode of execution in a processor that grants access to system memory devices and all CPU (Central Processing Unit) instructions. System Call Interception s Component 24 that operates in kernel space memory device 14 intercepts all operating system calls (step 80). System Call Interception Component 24 will nofify API Interception Control Server 16 of system calls relevant to process and thread creation or termination. First System Call Interception Component 24 determines the type of system call (step 82, step 84) and subsequently ~o sends this information to API Interception Control Sever 12 (step 86). tn the present description there is described the operating of the System Call Interception Component 24 in relation to system call instructing the O/S to create a process or to terminate a process. It will be appreciated that many other various system call may be identified and processed by the method and ~s system operative in accordance with the present invention.
System Call Interception Component 24 also executes requests made to it by API Interception Control Server 16 (step 88). To get a fist of active processes 18 which API Interception Control Server 16 needs for the operation of the API Interception System 10, a request for the list of active processes is 2o made to System Cail Interception Component 24 (step 90). The result is this request will be passed back to API Interception Control Server 16 in the form of the requested list.

Patent 253/0o8 Another request that could be made to System Call Interception Component 24 by API Interception Control Server 16 is Open process request (step 92). The execution of this request will open a process and the result will be passed back to the API lnterceptian Control Server 16, s Optionally. API Interception Control Server 16 might make other requests to System Call Interceptor Component 24 such as terminating a thread or a process according to the type of the operating system the API
Interception System 10 is running under.
The high-level flow diagram of the API Interception Module 32 operation ~o is illustrated in Fig. 5.
API Interception Module 32 begins its operation immediately after being loaded into process 18 address space by initializing AP1 Interception System (step 1C1~. Consequently API Interception Module 32 hooks and patches APIs 30 active and loaded into the process 18 address space {step 104). During its is run-time operation API Interception Module 32 handles API calls that are being made by the application programs in the host operating system (step 106). The manner of operation of the AP1 Interception Module 32 is further explained and illustrated in the following description and drawings.
Referring to Fig. 6 there is provided a flow diagram of the API
2o Interception Module 32 initialization operation of Fig. 5 After API interception Module 32 is loaded, the API Interception Module 32 establishes connection with API Interception Control Server 16 for future Patent communications and events delivery (step 110). once communication was established various local variables are allocated within address space (step 112). API Interception Module 32 accesses the pre-defined AP1 Descriptor Structure (step 114) and allocates address space for API Flow Structure (step s 116). API Descriptor Structure is a user predefined table consisting and referring to APIs to be handled by the API Interception Control Server 16. API
Descriptor Structure may consist of the DLL name owning said API, API name, number of parameters passed to API, user function names to be used before API is executed and thereafter. It will be appreciated that such a table may ~o include various other details and information as is consistent with the operation of the present invention. it will be further appreciated that such a table is initially provided as part of the of the API Interception Control Server 16.
API
Interception Structure is a table created dynamically by API Interception Module 32 as is further detailed in Fig. 7 and the accompanying description. AP1 ~s. Interception Structure table is used to maintain information pertinent to the operation of the method and system operative in accordance with the present invention. API Interception Structure Table may include information such as address of the hooked API function and protection flag for the memory device page allowing control over memory device changes and updates. API
2o Interception Structure Table may further include address of user function to be executed before the hooked API (Pre-Entry routine), address of user function to Patent 253/06$
be executed after the hooked API is executed (Post-Entry routine) and the hooked API number of parameters to be passed to said APi.
It will be appreciated that various means for creating and storing such a table may be employed. ft will be further appreciated that such table may be s stored and maintained in various 'locations within said computer system, including within the user. address space of active process in which API
Interception Module is operating and the like.
Hooking, as a concept used in the context of this document, is defined as obtaining control of a desired API function 30.
~o Patching, as a concept used in the context of this document, is defined as intentional overwriting of a section or sections of an executable binary file such as an API function 30 as it appears in the process address space 18 for the purpose of deliberately controlling the code behavior.
A detailed description of Hook and Patch API phase (step 104 in Fig. 5) ~s is illustrated in Fig. 7, First the routine accesses the API Descriptor Structure Table and selects the first API function 30 from the structure (step 149).
Subsequently the API function 30 address is accessed (step 150). The protection flag of the memory page that includes the API function 30 is saved to API Flow Structure Table and then changed to "write-enable" the page (step 20 152). A memory page is a unit of data storage that is brought into real storage from auxiliary storage when a requested item of data is not already in real Patent storage. Changing the memory page protection flag allows the API Lnterception Module to write code or data into the changed memory page.
To activate a function the Cal! instruction is used. Like all other executable instructions, the Cal! instruction represented in object code has a s specific length that is expressed in the number of bytes making up the instruction. The number of bytes making up a Cal! instruction may vary across different processors. Therefore, the Length of the Call Instruction will be referred to as LCI, in order to represent the variable number of bytes.
The first LCI bytes of the API function 30 are saved to API Flow ~o Structure Table (step 154). Additionally, the API function 30 address, Pre-Entry routine address, Post-Entry routine address and the number of the arguments of the API function 30 are loaded into the API Flow Structure Table (step 156).
Calculating the address of the Secondary Patch takes place next (step 158). The address of the Secondary patch is particularly important as it allows ~s re-patching of the first LC1 bytes of the said AP1 to be hooked. Re-patching of the first LCI bytes is desirable in order to allow the API Interception Module to further hook additional or subsequent calls to said API.
In order to calculate the address of the Secondary Patch the API
Interception Module 32 uses a known function that returns the length of the 2o next instruction examined (Command Length function). API Interception Module 32 begins examining the instruction located at the first byte of the said AP1 function 30 to be hooked. API Interception Module 32 calls the Command Patent 253/0o 8 Length function, If the length of the return answer is less than LCI, than the API Interoeption Module 32 advances the number of bytes returned from said Command Length function, and the operation repeats. If the return address is mare than LCl bytes (commutative from the first byte of the APB to be hooked) s than the return address is the Secondary Patch Address. It will be appreciated that the Secondary Patch Address may include a cumulative number if more than one call has been made to the Command Length function. The desired result is that the first LCI bytes of the API to be hooked 30 are reserved and saved and may be used for hooking purposes. The second desired result is ~o that the Second Patch Address points to the next beginning byte of an instruction within the API to be hooked 30, but not within the first LCI bytes of the said AP1. Such result is desirable in order for the method operative in accordance with the present invention to execute the said API 30.
The Secondary Patch address is saved to API Flow Structure Table ~s (step 160) as well as first LCI bytes of the API function 30 on the address of the Secondary Patch (step 162). Finally, the first LCi bytes of the API function are overwritten (patched) with a call instruction to API Interception Module 32.
At this point, the API function 30 is patched with the Primary Patch: LCI
bytes beginning at first byte of the API function 30 are overwritten with the API
2o tntercepGon Module 32 re-direction code. The rest of the API function 30 executable binary image is untouched but irrelevant at this point. Each call to API funetipn 30 (that is in the calling process address 'space 18) in this state will Patent be re-directed to the API Interception Module 32 that loaded into address space of the calling process l 8.
Finally, the next API function 30 is selected from the API Descriptor Structure Table (step 165) until all API functions 30, 34, 40 and the like that s appear in the API ~(?escriptor Structure Table are hooked and patched.
Fig. 8 is a generalized block diagram of the API Interception Module calling .sequence in- association with its various co-routines and in association with the API 30, 34, 38 and the like to be intercepted and the applications that call API 30, 34, 38 and the like.
~o An application program 170 running in process 1 B address space may make an API function 30 call. The APf function 30 is Primary Patched (an operation that was further described on the flow diagram of the Hook and Patch API phase 104 of Fig. 7J by the API Interception Module 32, eifher at system start-up or when the associated process 18 was created. As a result of the ~s Primary Patch previously placed in the first bytes of the APt function 30 control is re-directed from the API function 30 by the calf instruction on the patched first l.Cl bytes of its executable binary image. The API function 30 proceeds with performing the first instruction now placed within the API and calls Dispatch routine 174.
2o Every time a patched API funption .30 calls to Dispatch Routine 174 special entry is created in a specific data structure called Save Return Address list. The entry holds the original return address of the API function 30. The Patent above-described table is necessary in case the API Interception System is terminated without re-booting the operating system or shutting down the computing platform. When API Interception System will go down in an orderly manner, return address on the stack that is in the process address space will s be restored, utiii2ing the Saved Return Address list. The full description of the APl interception System tem7ination process will be described hereunder in association with the following drawings.
Dispatch routine 174 may call Pre-Entry routine 176 to handle API
function 30 arguments. When Pre-Entry routine 176 returns control to Dispatch yo routine 174, the later executes a series of control operations. First Dispatch routine locks out al! other threads present within process 18 from calling the API routine 30 being handled. Such lock mechanism may be implemented via declaring the present operation a critical section, recognized in such operating systems such as NT. NVthin the critical section stage threads or execution flow ~s other than the one currently calling the critical stage would not be serviced by the computer system. Such threads execution is therefore suspended until the critical stage is canceled.
Dispatch routine then re-patches the APi routine 30 with a Secondary Patch. Specifically, the Dispatch routine restores the APl function 30 original zo first LCI bytes to its executable binary image and then overwrites the previously calculated Secondary Patch Address (step 158 of Fig. 7) with a call instruction to the Depatch, routine 180 of Fig. 5. Finally, it calls the API function 30.

Patent API function 30 patched with the Secandary Patch exECUtes its original instructions up to the Secondary Patch. Then as a result of the overwrit',en Secondary Patch Address, it calls the Depatch routine 180.
Depatch routine 180 will restore the Secondary Patch, that is, it will s overwrite the Secondary Patch Address with the previously saved LCl bytes from the Secondary Patch Address (step 162 of Fig, 7). Depatch routine 180 will also re-create the Primary Patch, that is, it will overwrite the API
function 30 executable binary image first L,CI bytes with a call instruction to the Dispatch routine 174. Re-writing the call instructions to the API first LCI bytes ensures ~o other calls to the API are hooked as welt.
Before returning control to the API function 30, Depatch routine 180 will allow all other threads present in process 18 to call API function 30. This is accomplished by canceling the critical section stage. Finally, it will return control to API function 30, which is now patched with the Primary Patch only.
~s API function 30 may now run its instructions to their conclusion. After the end of its execution, it will return control to Dispatch routine 174.
As a result of these operations every process that might cal! API function 30 and the like will either be Pocked out and wait ar will succeed in calling but call only the API function 30 with the Primary Patch. That is, under the APP
20 Interception System 10 control, API function 30 and the like will alvrays calf Dispatch routine 174. API function 30 and the like execution form may be in three .distinct stages:

Patent Stage One) patched with a Primary Patch, when execution begins at the start of the executable binary image, the result of which will be immediate re-direction to Dispatch routine 174;
Stage Two) patched with a Secondary Patch, when execution begins at s the start of the executable binary image, the result o. which will be normal execution up to the Secondary Patch and then re-direction by its contents to the Depatch routine 180; and Stage Three) patched with a Primary Patch when execution begins at the return address from Depatch routine 180 and as a result API function 30 ~o and the like will execute the whole series of its instructions to their conclusion.
When control returns to Dispatch routine 174 from API routine 30, Dispatch routine 174 will return directly to the calling application 170 and not to the calling API function 30. This is accomplished by Dispatch routine code that directly manipulates the process-level flow control'.structures (e.g., a Procedure ~s Activation Record or Logical Stack Frame under some host operating systems) before returning to its caller.
A high-level description of the operation of the Dispatch routine 17d in Fig. 8 is illustrated in Fig. 9. First, Dispatch routine 174 checks if there exists a Pre-Entry routine 176 of Fig. 8 for API function 30 that is being handled (step 20 1 BO). if Pre-Entrf routine 176 exists for the ,API function 30, then the Pre-Entry routine is called (step 182). In association with the Pre-Entry routine 176.
return.values, API Interception Module 32 and API Interception Control Server Patent 16, as per user predefined or user on tine instructions, decide whether to allow the API function 30 to execute (step 184). If the decision is to allow API
function 30 to execute, the following steps are taken: A lock is put on the API
routine 30 to prevent other threads to call it (step 186). A lock is an operating s system mechanism that will keep a certain resource exclusive to a single process. Suct-, lock may be implemented through the use of the critical stage command operative within the NT operating system, as further explained above. Next the API function 30 is re-patched with the Secondary Patch and API function 30 is called (step 188). After the API function 30 returns, Dispatch ~o routine 174 checks if there exists a Post-Entry routine 178 of Fig. 8 for the API
function 30 that is being handled (step 189). if Post-Entry routine 178 of Fig. 8 exists it is called (step 190). After control returns from Post-Entry routine 178 to Dispatch Routine 174, Dispatch Routine 174 returns control and return values (if applicable) to calling application 170 of Fig. 8 (step 194) and not to the API
is function 30 by manipulating a process-level flow control structure (step 192).
Fig. 10 illustrates a high-level flow diagram of the Pre-Entry routine 176 of Fig. 8. First, Pre-Entry routine 176 accesses the AP1 function 30 arguments (step 196). Subsequently Pre-Entry routine 176 executes various user-written custom code sections. (step 197) Such user-written custom code may include ao code required for producing various reports.such as statistical reports, system profiles and the like.

Patent Optionally, the API function 30 arguments are processed (step 199) and a decision is made by the Pre-Entry routine whether the AP1 function 30 is allowed to execute in the present environment (step 200). Such decision may rely on user predefined information or on online decision making by a user or a s system administrator controlling operation of the operating systems. Such decision could further be made according to static pre-defined parameters or dynamically according tb the type and value of the arguments passed by the calling applications. If the decision is not to allow the API function 30 to execute, then a notification associated with prohibition of execution o' the ~o is returned to the Dispatch routine 176 (step 201 ).
Fig. 11 illustrates a high-level flow diagram of the Depatch routine 180 of Fig. 8. First, Depatch routine 180 restores the Secondary Patch saved in step 162 of Fig. 7 to the calling API 30 (step 202). Then Depatch routine 180 will patch the Primary Patch as in step 164 of Fig. 7 (step 204). before returning ~s, control to~caNing API 30, Depatch routine 180 will release the lock from (step 206) enabling other processes to call the said API.
Fig. 12 illustrates a high-level flow diagram of the Post-Entry routine 178 of Fig. 8. Post-Entry routine 178 handles the return values of the API 30.
First, Post-Entry routine checks the return values (step 208). Optionally Past-Entry zo routine 178 could process return values, such as changing said values, filtering the values or blocking the values from returning to the calling application 170 of Parent Fig. 8 (step 210). Finally Post-Entry routine 178 checks the API's return code (step 212) and optionally could change it (step 214).
The AP1 Interception System 10 can be shut down in an orderly manner, and the operation will be completely transparent to the users of the system and s to the running application programs.
The shutdown is performed in a highly organized manner, which does notwecessitate the shutting down the computer platform or the re-booting the operating system from the storage device in order to stop the operations of the API Interception System 10. To close down the API Interception System 10, lo the system manager will simply instruct the API Interception Control Server of Fig. 1 to perform the requested shutdown. Consequently, API Interception Control Server16 of Fig. 1 may initiate the following series of steps' (1) API Interception Control Server 16 of Fig. 1 will send instructions to the appropriate API Interception shutdown routines in each of the API
~s Interception modules 32, 36, 40 of Fig. 1 running in active process address spaces t 8, 20, and 22 of Fig. 1 by utilizing the list of Managed Processes.
(2) The API interception shutdown routines will restore the original return addresses to the prospective stacks from the list of saved return 2o addresses thereby restoring the regular stack frames and addresses.
zs Patent 253/06&
(3) The API Interception shutdown routines will re-patch the previously patched API functions 30, 34, 33 of Fig. 1 in the process address space 18, 20, and 22 of Fig. 1.
(4) The API Interception shutdown routines with notify the API Interception s Control server 16 of Fig. 1 regard(ng the completion of bath operations.
(5) After receiving notifications from the API Interception shutdown routines regarding the conclusion of restore operations the API
Interception Control Server 76 of Fig. 1 wiU allocate memory for the unloader code in each active process address space 18, 20, and 22 of to Fig. 1 _ (6j The API Interceptor Control Server 16 of Fig. 1 will insert unfoader code into each active process address space 18, 20, and 22 of Fig. 1.
(7) The API Interceptor Control Server 16 of Fig. 1 will create remote threads to unload API Interception module DLLs 32, 36, 40 of Fig. 1 15 from process address space 18, 20, and 22 of Fig. 1, (8) The threads thus created will utilize specific' DLL unload modules such as LdrUnloadDlLL function in the ntdll.dll file under Microsoft Windows NT system and unload all the API Interception modules 32, 36, 40 of Fig. 1 running in active process address spaces 18, 20, 22 of Fig. 1.
zo (9) The API Interception Control, Server 16 of Fig. 1 will unload System Call Interception Component 24 of Fig. 1 from kernel space 14 of Fig.
, 1.

ratent (10) The API Interception Control Server 16 of Fig. 1 will go into a wait state while anticipating instructions from the system manager.
Fig, 13 illustrates a high-level flow diagram of the operation performed by the API Interception Control Server executing the shut down command. At s step 220, the list of Managed Processes is obtained. At step 222 the API
Interception module running in the address space of the specific process is instructed to restore the proper structure of the stack and to restore the API
functions running in the process address space to the original object cede thereof. At step 224, the Server checks whether the restore operations were ~o completed by the API Interception modules. When the restore operations are terminated, at step 226 memory is allocated for the unload code at step 228, the unload code is inserted into the process space, and at step 230 a remote code is created to execute the unload process. At step 232, the server checks whether there are more processes on the Managed Process List. if there are ~s no more processes to handle at step 234 the server unload the system call interception module and returns at step 236.
Additional advantages will readily occur to the person skilled in the art.
The invention, in its broader aspects is, therefore, not limited to the specific details, representative methods, systems and examples shown and described.
2o It will be further appreciated by persons skilled in the art that the present invention is not limited to what has been particularly shown and described Patent hereinabove, rather the scope of the applicant's general inventive concept is determined by the claims that follow.

Claims (14)

I CLAIM:
1. In a computer system running an operating system platform, said operating system including a kernel space and a process space, a user application running in process space, said user application using application program interface (API) function, whereby said API function is executed in memory space, a method of providing user control of said API function, said method comprising steps of:

initializing API controlling routine;

hooking at least one API routine in said memory space associated with user application;

replacing said hooked API routine code with user supplied code, said user supplied code to be executed upon calling said API by said user application program; and receiving a call from a previously hooked API and generating a predefined series of operations to control API operation.
2. The method of claim 1, wherein said step of initializing API controlling routine comprises the steps of managing operation of API controlling routine and collecting and storing information corresponding to said API routine.
3. The method according to claim 1, wherein said step of hooking at least one API routine in said memory space associated with user application comprises the steps of:

identifying said API routine;

obtaining said API routine address; and determining an address of at least one user supplied module associated with re-direction of flow of execution of said API routine.
4. The method according to claim 1, wherein said step of replacing said hooked API routine code with user supplied code, further comprises the steps of:

enabling enhanced privileges relating to memory space associated with said API routine;

storing API routine code associated with first re-direction of flow of execution to be later replaced;

storing API routine code address associated with second re-direction of flow of execution;

storing API routine code associated with second re-direction of flow of execution; and replacing said API routine code stored with user supplied code associated with first re-direction of flow of execution of said API routine.
5. The method according to claim 1, wherein said step of replacing said hooked API routine code with user supplied code, further comprises the steps of:

storing API routine code associated with first re-direction of flow of execution to be later replaced;

storing API routine code address associated with second re-direction of flow of execution;

storing API routine code associated with second re-direction of flow of execution; and replacing said API routine code stared with user supplied code associated with first re-direction of flow of execution of said API routine.
6. In a computer system running an operating system platform, said operating system including a kernel space and a process space, a user application running in process space, said user application using application program interface (API) function, whereby said API function is executed in memory space, a method of providing user control of said API function in conjunction with previously hooked API functions associated with user application and responsive to call made to said API function by said user application, said method comprising steps of:

restoring API routine code previously stored associated with first re-direction of flow of execution to be later replaced;

replacing API routine code with user supplied code associated with second re-direction of flow of execution of said API routine;

calling said API routine based on response generated corresponding to whether API routine is to be executed in association with user predefined rules replacing said API routine code stored with user supplied code associated with first re-direction of flow of execution of said API routine;
and restoring previously stored API routine code associated with second re-direction of flow of execution.
7. The method according to claim 6, initially comprising the step of limiting execution of said user application to said specific API routine corresponding to execution time of API routine based on response generated corresponding to whether API routine is to be executed in association with user predefined rules.
8. The method according to claim 6, further comprising the step of canceling limiting execution of said user application to said specific API
routine corresponding to execution time of API routine.
9. The method according to claim 6, further comprising the steps of:
executing user supplied code for determining return values of said API
routine; and manipulating process level flow control structure to enable return control to user application.
10. In a computer system running an operating system platform, said operating system including a kernel space and a process space, a user application running in process space, said user application using application program interface (API) function, whereby said API function is executed in memory space, a method of inserting user supplied code into memory space of user application, said user supplied code operative to further control API
execution, said method comprising steps of:

injecting loader code into active process memory space associated with said user application;

executing loader code to further toad user supplied code into memory space, said user supplied code operative to further control API execution;

injecting unloader code into active process memory space associated with said user application; and executing unloader code to further unload user supplied code from memory space.
11. In a computer system running an operating system platform, said operating system including a kernel space and a process space, a user application running in process space, said user application using application program (API) interface function, whereby said API function is executed in process space, an apparatus controlling the method of providing user control of said API function, said apparatus comprising:

an initializer for obtaining list of active processes within computer system;

an injector for injecting API Interception module into said active processes;

means for monitoring predetermined system calls operative to further injection of API Interception routine into new created process;
means for unloading API Interception routine from a process; and means for updating said list of active processes.
12. The apparatus according to claim 11, wherein said initializer includes a system call interception module operative to obtain list of active processes within a computer system.
13. The apparatus according to claim 11, wherein said initializer includes a system calf interception module further operative to open processes within a computer system.
14. The apparatus according to claim 11, wherein said initializer includes a system call interception module further operative to issue notification associated with system calls.
CA002386100A 1999-11-14 2002-05-13 Method and system for intercepting application program interface Abandoned CA2386100A1 (en)

Priority Applications (6)

Application Number Priority Date Filing Date Title
EP00978530A EP1236114A1 (en) 1999-11-14 2000-11-10 Method and system for intercepting an application program interface
PCT/US2000/031032 WO2001037095A1 (en) 1999-11-14 2000-11-10 Method and system for intercepting an application program interface
JP2001539121A JP2003515219A (en) 1999-11-14 2000-11-10 Method and system for inhibiting application program interface
AU15986/01A AU1598601A (en) 1999-11-14 2000-11-10 Method and system for intercepting an application program interface
CA002386100A CA2386100A1 (en) 1999-11-14 2002-05-13 Method and system for intercepting application program interface
AU48883/02A AU768758B2 (en) 1999-11-14 2002-06-20 Method and system for intercepting an application program interface

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
IL13291699A IL132916A (en) 1999-11-14 1999-11-14 Method and system for intercepting an application program interface
US09/561,395 US6823460B1 (en) 1999-11-14 2000-04-28 Method and system for intercepting an application program interface
CA002386100A CA2386100A1 (en) 1999-11-14 2002-05-13 Method and system for intercepting application program interface

Publications (1)

Publication Number Publication Date
CA2386100A1 true CA2386100A1 (en) 2003-11-13

Family

ID=72714002

Family Applications (1)

Application Number Title Priority Date Filing Date
CA002386100A Abandoned CA2386100A1 (en) 1999-11-14 2002-05-13 Method and system for intercepting application program interface

Country Status (5)

Country Link
EP (1) EP1236114A1 (en)
JP (1) JP2003515219A (en)
AU (2) AU1598601A (en)
CA (1) CA2386100A1 (en)
WO (1) WO2001037095A1 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102799493A (en) * 2012-06-21 2012-11-28 北京伸得纬科技有限公司 Method for intercepting target progress with self-protection
CN103970559B (en) * 2013-02-05 2017-09-29 北京壹人壹本信息科技有限公司 A kind of equipment loading method and device based on android system

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7155741B2 (en) * 2002-05-06 2006-12-26 Symantec Corporation Alteration of module load locations
JPWO2004075060A1 (en) * 2003-02-21 2006-06-01 田部井 光 Computer virus judgment method
JPWO2005029328A1 (en) * 2003-09-18 2007-11-15 有限会社 電机本舗 Operating system and recording medium recording the same
US7624449B1 (en) 2004-01-22 2009-11-24 Symantec Corporation Countering polymorphic malicious computer code through code optimization
US7698731B2 (en) * 2004-10-25 2010-04-13 Panasonic Corporation Security architecture and mechanism to access and use security components in operating system
CN100346611C (en) * 2005-06-30 2007-10-31 西安交通大学 Invading detection method based on stack pattern in Linux environment
US7739740B1 (en) 2005-09-22 2010-06-15 Symantec Corporation Detecting polymorphic threats
KR100843701B1 (en) * 2006-11-07 2008-07-04 소프트캠프(주) Confirmation method of API by the information at Call-stack
US8079039B2 (en) * 2007-03-09 2011-12-13 Microsoft Corporation Isolating, managing and communicating with user interface elements
ES2439804B1 (en) * 2012-04-19 2014-10-29 Universitat Politècnica De Catalunya Procedure, system and piece of executable code to virtualize a hardware resource associated with a computer system
KR101244731B1 (en) * 2012-09-11 2013-03-18 주식회사 안랩 Apparatus and method for detecting malicious shell code by using debug event
JP7036106B2 (en) * 2017-02-22 2022-03-15 日本電気株式会社 Information processing equipment, information processing system, monitoring method, and program

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5577209A (en) * 1991-07-11 1996-11-19 Itt Corporation Apparatus and method for providing multi-level security for communication among computers and terminals on a network
US5826014A (en) * 1996-02-06 1998-10-20 Network Engineering Software Firewall system for protecting network elements connected to a public network
US6067620A (en) * 1996-07-30 2000-05-23 Holden; James M. Stand alone security device for computer networks
US5832228A (en) * 1996-07-30 1998-11-03 Itt Industries, Inc. System and method for providing multi-level security in computer devices utilized with non-secure networks
US5974549A (en) * 1997-03-27 1999-10-26 Soliton Ltd. Security monitor
US6088804A (en) * 1998-01-12 2000-07-11 Motorola, Inc. Adaptive system and method for responding to computer network security attacks
US6185689B1 (en) * 1998-06-24 2001-02-06 Richard S. Carson & Assoc., Inc. Method for network self security assessment

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102799493A (en) * 2012-06-21 2012-11-28 北京伸得纬科技有限公司 Method for intercepting target progress with self-protection
CN103970559B (en) * 2013-02-05 2017-09-29 北京壹人壹本信息科技有限公司 A kind of equipment loading method and device based on android system

Also Published As

Publication number Publication date
AU1598601A (en) 2001-05-30
AU4888302A (en) 2002-12-05
AU768758B2 (en) 2004-01-08
EP1236114A1 (en) 2002-09-04
WO2001037095A1 (en) 2001-05-25
JP2003515219A (en) 2003-04-22

Similar Documents

Publication Publication Date Title
US7213153B2 (en) Application program interface interception system and method
US9195823B1 (en) System and method for intercepting process creation events
US6463583B1 (en) Dynamic injection of execution logic into main dynamic link library function of the original kernel of a windowed operating system
US6584568B1 (en) Network provider loop security system and method
US7451482B2 (en) Protected execution environments within a computer system
AU768758B2 (en) Method and system for intercepting an application program interface
EP0732834B1 (en) System and method for determining and manipulating configuration information of servers in a distributed object environment
US6061795A (en) Network desktop management security system and method
US6823509B2 (en) Virtual machine with reinitialization
DE112009002168T5 (en) Delivery and management of virtual containers
EP1542426A2 (en) Security-related programming interface
US9195450B2 (en) Program execution service windows
US7134123B1 (en) Virtual machine with reset operation
US10191831B2 (en) Macro-script execution control
EP0980545A1 (en) Network desktop management security system and method
KR20200090784A (en) How to start an application, startup device and computer readable storage medium
US20020174161A1 (en) Java startup wrapper
US8458336B2 (en) State machine event restoration
EP1222537B1 (en) Resource access control system
CN115373878B (en) Anti-screenshot extension protocol implementation system based on X framework
US20080235503A1 (en) Event-based dynamic tunables
EP1221085A2 (en) Method and system for dynamic injection of execution logic into a windowed operating system
CN108875359B (en) Process monitoring method and storage medium
JP2982976B2 (en) Method and system for calling a function from a program running in another environment
CN116451273A (en) Behavior hiding method and system based on message mechanism

Legal Events

Date Code Title Description
FZDE Discontinued
FZDE Discontinued

Effective date: 20050513