SAFE AND SECURE PROGRAM EXECUTION FRAMEWORK

Information

  • Patent Application
  • 20100031308
  • Publication Number
    20100031308
  • Date Filed
    February 16, 2008
    16 years ago
  • Date Published
    February 04, 2010
    14 years ago
Abstract
A system and method is provided here that can make sure that the instruction sets executing on a computer are certified and secure. The system and method further facilitates a generic way to intercept instruction loading process to inspect loaded code segment 1st before computer get a chance to execute them.
Description
TECHNICAL FIELD

The present invention relates to program loading, program execution, monitoring and verifying loaded instruction module inside a program, computer security and more specifically making sure that the instruction set loaded inside a program is secure and safe.


BACKGROUND OF THE INVENTION

In modern computing environment security is one of the most important factors. It should be highest priority to make sure that a computer always executes safe computer instructions to maintain privacy and security. A computer will be connected to the network, and there will be outside attacker who will try to destabilize computing environment or steal valuable information stored somewhere in the network. The most common way to achieve those things is to find some exploitable hole and then inject some computer instruction that can be executed internally.


Theoretically, there will be always security vulnerability, and there will be a possibility that someone will be trying to push some bad stuff exploiting that vulnerability. Then it's up to the user/computer to deal with those bad stuffs. Most of the users are not expert and for example they can easily double click on an email attachment to welcome those bad stuffs. Or sometimes OS or some running program automatically welcome those bad stuff because of exploitable security hole in those application or OS.


Antivirus program is kind of passive protection. It can scan files for possible infection; it can scan memory for the similar thing. Those scanning process is assisted by some preset signatures to flag that memory or files are infected. However, there is no easy way to make conventional anti-virus application smart enough so that it can determine any newly written future virus. Firewall application typically blocks request from unknown or suspicious sources. However they can't block legitimate request. For example user need to browse internet, send email, use other network resources communicate other computers in the network. Sometimes some unintentional or ignorant act might cause problems. An email attachment might contain bad instructions. Or an employee might download a file from the internet and execute them locally that can eventually install bad stuff on computer. Therefore, those virus or firewall based protection are not good enough to identify new innovative future attack. In this invention, we present a novel approach that can identify bad instructions module in the system at the time they get loaded in the system and do the verification using a unique easily deployable authentication framework. The proposed invention can make sure that the instructions running in the system are safe.


Local Authentication Framework can acquire knowledge from the global Authentication Framework (AF). AF already knows what modules are available that can be safely executed on local system. The knowledge base of the framework can be adaptive; continuously learn about new modules relating new products, updates available to the users, new findings on a module or products. FA helps applying the knowledge acquired from the global FA to end user system to make computing system more secure and safe. The Authentication Framework helps administrator to set some rules or policy to define certified instruction set/modules to run across computers. That makes the network environment more efficient and manageable because administrator can control what can be run in the system and what can't. If some certified instruction module becomes vulnerable to attack, administrator can make the module uncertified and update its central database with a new certified module (for example available from vendor). In that case all computers in the network can pickup the certified module quickly and automatically. Also this can help administrator to manage licensed product. Administrator can certify program modules based on user account, Machine account. That way, administrator can centrally manage that no unlicensed product are in use in the network.


SUMMARY OF THE INVENTION

The following presents a simplified summary of the present invention in order to provide some basic details of some aspects of the invention. This summary is not an extensive overview of the invention. It is not intended to identify key/critical elements of the invention or to reduce the scope of the invention. Its sole purpose is to present some concept of the invention in a simplified form; more detailed description is presented later.


The present invention provides a system and method that can intercept and manipulate program/instruction loading process, verify that those loaded instructions are certified and safe before computer actually execute them. Also it can replace any uncertified instruction set/modules with compatible certified instruction/modules to deploy any security patch quickly in a more manageable way.


When OS load a program, it typically allocates some memory and load required instructions in modules the program depends on. A call interceptor will intercept the loading process and figure out which modules Operating system loader is trying to load. Then for each program module it will check with authentication framework to verify that the module is certified safe to load and can be loaded based on given credentials. The credentials might include, user name, machine account, module information (time stamp, vendor info, size, checksum etc). Authentication Framework resolve the module load info using a resolving mechanism and generate an action policy record something like given module is unsafe to load, given module need to be replaced with a updated module etc. Then deployment module takes necessary action to implement the action record. If needed, deployment module can replace the local module with a certified module and load the certified one instead.


Authentication Framework can work in the similar way DNS framework works. The framework can maintain some local table with some information related to module info and policy local to the system. Whenever required it can contact a remote authentication server to retrieve more information when local table don't have enough information. Initial data in the local table can be update by contacting remote server and inspecting local system. A module can be uniquely identified by combination of its name, size, checksum, vendor info etc. Each module can have some attributes entry specifying which user/machine can execute them. A remote authentication server can contact additional top level server in the framework to resolve authentication request if needed.


Authentication framework is an important independent piece that will facilitate to catalog all publicly available instruction modules. Instruction modules is a place holder of computer instruction that can control the execution of program that eventually dictate end result a user gets from computer. DLL, EXE, web scripts, java class, etc can be considered as program modules. Catalog containing module information will be updated regularly as new program modules becomes available for public uses through different trusted channels including retail products wed downloads etc. It is also possible to catalog modules within certain scope. For example in corporate environment, corporation might have proprietary program modules that need to be authenticated within their network only So the authentication server serving the private network can have catalog containing module information local to the network.


The framework can be implemented in many ways in combination of few core elements:

    • a) Clients that need authentication service
    • b) Servers handling those authentication requests
    • c) A set of protocols to establish communication between clients and servers in secure way.
    • d) Optimization modules that can cache authentication requests in different stages.
    • e) Catalog service that will catalog available modules that will be used by the authentication servers.
    • f) A way to resolve authentication request the way internet name get resolved.


Another aspect of this invention would be to apply module verification process in managing program licensing. Every time a product gets launched, it will check with the table if the loaded module is certified. An administrator can set policy to certify module based on user or machine account and possibly a licensing period. Administrator can also specify action to be taken if users try to load a module with expired license, uncertified, etc. So the capability can be enhanced in many ways.


This is analogous to securing or protecting human body system where human body is always vulnerable to attack from internal or external micro organism like bacteria or virus. Constant screening diagnosis and some built-in antibody can reduce the scope of those attacks and reduce prevalence of infection from micro organism significantly. Also there is a central authority like FDA that can certify what kind of food/preventive medicine can be safe for public health by setting some standards. Analogous to the system a) monitoring process modules works like screening process a) intercepting module kind of antibody/preventive medicine c) Authentication Framework setting standards what can be executed like FDA does and d) deployment module act like caring facility to make computing system more secure and safe and less vulnerable.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 is a Block diagram of call Intercept processor, Authentication Framework and Deployment module



FIG. 2 is a flow diagram of how active call Intercept processor works.



FIG. 3 is a flow diagram of how passive call Intercept processor works.



FIG. 4 is a flow diagram how Authentication framework works.



FIG. 5 illustrates how deployment module work



FIG. 6 Different Framework Components





DETAIL DESCRIPTION OF THE INVENTION

The present invention is now described with reference to the drawings. In the following description, for purpose of explanation, numerous specific details are set forth in order to provide a through understanding of the present invention.



FIG. 1 shows block diagram of different components in a typical environment. Block 120 is computing system representing any computer system with any hardware configuration running any operating system like Windows UNIX etc. User can run their application like web application, word processor, database application etc the on the system. Block 110 shows user interaction commands; they way user might initiate running application on the system. User interaction might be as simple as clicking on an icon on computer, or activating an application remotely or running an application at some preset schedule. Block 2000 is disk storage containing necessary persistent information different components might need. 300 is the component responsible to check which modules is loaded or getting loaded in the system. 300 might be embedded in any running process on the computing system 120. 300 might monitor routinely what are the instruction modules already loaded on 120. For example while running an application say hello.exe, it might load more modules say foo.dll and goo.dll. User might issue command to run hello.exe on 120. Interceptor will report the event actively when hello.exe foo.dll and goo.dll get loaded and will initiate some process to complete before hello.exe gets executed on the system. Interceptor will report passively that hello.exe is running on the system and it has loaded components goo.dll and foo.dll. System administrator can configure how interceptor should work.



600 is the infrastructure in combination of a set of protocols, connected servers where a request from 300 may be served. 300 might issue some query if hello.exe foo.dll and goo.dll is recognized components that can be safely run on the system. It might receive some feedback like the module is not safe to run on the system. 600 will define how a request should be formed and constituted. 600 would define how the request should be delivered. It would define the response as well. A computing system can be part of framework that can work as a remote server serving a set of queries. Those servers will have access to some catalog containing information of modules a computing system might use. Catalog can be used to build system policy 2100 suitable for a computing system or a private network. Another component in the framework might dynamically update catalog or system policy whenever new modules or information associated new modules are available or new information on a module is found or system need to be configured.



2100 constitute system policy which is a table containing collection of information of available modules relevant to the scope of the framework. System policy can be constituted from a catalog of modules that can be relevant in a network. For example in a private network, there are certain numbers of modules only used in the private network. A system policy can be developed based on those modules and network needs.



820 is deployment modules that can make sure a policy is properly followed. System policy might define “foo.dll with some signature “S” can safely run in the network but foo.dll with signature Y can't run.



2200 is the optional report module that basically compiles information on any violation of system policy in the network or system and report to administrator.



FIG. 2 shows how an active interceptor can be implemented in a typical computing environment and how it would work. In FIG. 2, module 100 issue command to launch application. Say user issue a command to lunch an application hello.exe. 200 is part of the OS that interpret the user command and initiate launch sequence. Launch sequence typically covers, allocating memory, reading hello.exe from disk, load all the modules hello.exe depends on etc. module 300 is the key component which is capable of intercepting all the call OS uses to load all the modules. Those calls might be mapping hello.exe into memory along with its dependent modules. Dependent modules mean hello.exe needs more modules it has dependency on to be loaded as well. Thus interceptor takes a 1st look at all modules before OS get a chance to use them for hello.exe. Thus interceptor knows which module is about to get loaded (say foo.dll) for hello.exe program. Then it extracts some information from foo.dll and makes a request to authentication framework module 600 asking “a program is about to load foo.dll with signature X “what should I do”. Signature X might be some unique ID that can uniquely identify the module. Every component in the framework will understand the signature and what it correspond to. Framework will resolve the request and send the caller some feed back like “the module is safe to load” or “the module is completely unknown” or the “module is marked as risk to the system” or “the module need to be patched” or any combinations. Once interceptor receives the result from the framework, it can allow the OS call to succeed to continue hello.exe loading process. Or it can deliver the result to deployment module 800 to implement the result returned from the framework to make sure loading the program with dependent components doesn't violate any local system policy. Deployment module will analyze the result and check with local system policy (if any) to determine action items. In some case the action might be to replace the module with a newer or different version of the module, sometimes delay the execution to comply with the license etc. If deployment module fails to resolve the issue raised by local policy or framework it can request interceptor to terminate loading sequence and ask report module 1000 to notify user/administrators with appropriate information explaining what happened.



FIG. 3 shows how a passive interceptor can be implemented in a typical computing environment and how it would work. Contrary to active interceptor passive interceptor is kind of monitoring process that look at what module get loaded in a program and verify if those module are the right one. In FIG. 3 module 300 start inspecting all program loaded in the system. It walks through each module M loaded in a process P, then it extracts some information from module M to construct some identification signature S. The signature can be generated computing hash on the module, taking module creation time stamp, vendors who created the module if available etc. The signature must be unique and well understood by the different components in the framework identifying the same module. Interceptor then send a request to authentication framework seeking if any action need to be performed with the module M with signature S. Authentication framework resolve the request and send the result to interceptor. The result might say “the module is not recognized” or “the module need to be replaced by a newer version” etc. Interceptor then contact deployment module if any action need to be taken to comply the AF result and system policy.



FIG. 4 shows how an authentication framework can be implemented in a typical computing environment and how it would work. Authentication framework is the core component that is the central nervous system of this authentication mechanism. This can be implemented as a module in a single computer system with some local scope or it might be implemented with a client module in all computer system with the support of server modules deployed in the network where client module ca talk to server module to resolve a request. A server might contact additional server to resolve the request if needed. In the FIG. 4, module 300, the interceptor collect information from a module say M. The framework will define a set of protocols so that different servers and client's module can interact with each other. 300 will construct a request for the module M using some functionality provided by the client framework module. It then sends the request to that framework which is the client framework module in the local system. Local client framework module will maintain a local table that will contain information about local policy, local user info, local execution environment, local cache etc. To resolve the request for module M, it search local table to find a match, if match is not found it then contact a remote framework server requesting to resolve the request if needed. The remote server might contact additional server to resolve the request if needed. Local framework module might scan the local system initially to populate the local table or contact a remote server to initialize its local table. An administrator can configure how the initial state can be populated. Remote server or servers can be connected to some DB containing module information. Another process will periodically update the DB with the most up-to-date information.



FIG. 5 shows how a deployment module can be implemented in a typical computing environment and how it would work. This implement any action items computed from local policy and framework result. Local policy is the policy set by local administrator for the local system. Local policy might say “don't allow execution of any module not authenticated by the framework” or “if newer version of module foo.dll is available” always use that module. Or “if user U is launching hello.exe don't allow that” Those policy becomes part of Local framework client module. Administrator can also set policy only applicable to private network. When interceptor issue a request to authentication framework “Can user U execute hello.exe with signature S” Local framework module might check its local table to see if the request can be resolved. Say it find some local policy stating “User U can execute hello.exe if signature is valid.” Then it checks again if local table contain the signature identifying hello.exe. If signature is not found it contacts remote server. Remote server than check with its DB and resolve the request as “hello.exe with the signature has severe security hole, it must be replaced with a newer version.” When deployment module receives the result, it might contact some server (may be another server part of framework) to copy newer version of hello.exe. The authentication framework might not find the signature. In that scenario, the file might be infected by some virus or some temperament might have caused to change the signature. Deployment module might try to fix it the way an antivirus application would have tried to disinfect the module. It might also try to replace the module if the original signature can be retrieved in some way. File location, vendor info, date might lead to a unique combination that can be used to look up original signature. Once original signature is found another database can be searched for the original file to replace.


The Authentication framework can be used for licensing management. Administrator can set some policy applicable to local system or within a network. The policy can be something like “hello.exe can be launched on predefined number of computer in the network”. Or “hello.exe can be launched within a predefined time on system with a user account in a given set. When hello.exe gets launched on a system, interceptor in AF intercept modules loaded by the application. The intercepted modules then checked against AF database along with the user info. Authentication Framework can check with local policy and return “time has expired” or “more instance of the module can't be launched” or The user doesn't have license to run this, or user need to pay subscription 1st.



FIG. 6 shows different components of AF with more examples. In the FIG. 6, Remote Authentication Framework Server (RAFS) is the server having access to database (DB) containing module information. RAFS might be dedicated to a private network or can be part of Global network. Network administrator can set policy which will be part of DB accessed from RAFS.


When a user set up a system S it needs to have Local Authentication Framework client (LAFC) module AF. AF will initialize its local database D with at least one table Tlm to contain module information. Tlm will have associated version number that would define how a record is constituted for a module. <Module Signature, Module name, Module Creation Date, Vendor name> can represent individual field or column of table Tlm. A different table version can have different set of attributes. Module Signature is a unique ID that uniquely represents a module. Signature is computed applying an algorithm A(i) over a module. Different version of A will represent different Signature for the same module. For example Module signature can be MD5 hash computed over the module taking whole or part of the module. The version of the algorithm can dictate if MD5 or other algorithm was used over whole or part of a module.


The administrator can configure the LAFC to trust all the modules at given time and initialize the Table. At that point, LAFC can scan the system to populate the Tlm. Administrator can configure which remote Authentication Framework server (RAFS) it needs to contact when needed. This AF configuration can be done remotely and automatically as well. Administrator can set Local system policy that will sit in another table Tlp in D. Administrator can set any kind of policy to populate Tlp and AF can interpret. LAFC can contact remote Authentication Framework Server to sync-up its Table Tlm and Tlp if needed.


When user attempt to run an application on system S, LAFC interceptor intercepts modules loaded by the application. Then consult with AF DB and take necessary action. User can simply download an application from the internet. While attempting to run the downloaded application, LAFC interceptor will intercept the event, compute data including signature to identify the module, search for the module in local DB, finds no hit in its local DB. It then contact remote AF server. Few scenarios can happen:

    • 1. The remote AF server can have preset strict policy not to allow any new module in the network with full user account privilege. In that can user can try to run the app with less privilege system account that has restricted user access remote AF server can allow. AF can deny running any unrecognized module without network administrator privilege.
    • 2. Remote Authentication doesn't find any hit in its DB, and preset policy allows running any authorized module. It then contact more remote AF server to check if the module can be authenticated.
    • 3. RAFS doesn't find its module signature in its DB. It then contact 2nd level RAFS. 2nd level RAFS find the match and send back to 1st RAFS. RAFS then might update its DB and send the information to the LAFC. LAFC can update its local DB if needed and allow running the application smoothly.
    • 4. RAFS find the match however it find a policy associated with the module that can be interpreted as “The module has expired” or the use need to pay for the subscription. When LAFC receives the result, deployment module in LAFC takes necessary actions.
    • 5. RAFS returns the signature was not found. Deployment module in LAFC tries to see if the module is infected by virus that caused changing signature. It will try to scan the module for know virus signature, if found it will clean the module and try to re-authenticate.


A set of protocols will define how client and server modules should communicate. When LAFC send a request to RAFS to authenticate a module M, it combines the request as <Module Signature, Algorithm used to compute signature, Userinfo>. When RAFS search the DB it must make sure that the algorithm used to compute signature on both end are the same. Protocol will define how initial state of DB in LAFC can be initialized and can be synced up with the global DB. Protocol will define how data from server client can be interpreted by participating trusted party. Communication between LAFC and RAFS must be very secure and some data can be encrypted defined by the protocol.


Interconnected RAFS with global database (DB) components will constitute global Authentication framework. The global DB will be populated with module information from trusted source. A single DB or multiple DB will be managed by different RAFS. RAFS in private network or individual LAFC will know the location of those global RAFS if available. DB will contain few tables; Tgm for module information and Tgp for policy associated with modules. Each entry in Tgm will be populated extracting information from instruction module. Record of Tg will be something like <Module Signature, Module Name, Vendor Info, Creation Date, PolicyID number>. Module signature will be calculated using some algorithm A(i) supported by the AF. When LAFC send some request to RAFS the request contains how the module signature was computed so that RAFS understand how to match the signature. A different process can update the DB when new instruction module is available.


It's possible that in some environment Remote Authentication Server is not there or its DB it totally empty. Or it's possible to have a network without any remote authentication server. A framework component can connect with other framework component to share information and some times act as master framework component playing a role of Remote authentication server. Or the whole framework might be just a simple system without any interaction with other framework components at home.


With a single system framework, it might take some input from its user to educate itself. For example, it might ask user to provide actual source of all installed software. Then it can scan those sources to gather intelligence and build a safe rating table for safe program module. Or it can use the current system as a checkpoint and use all existing program module as trusted. User can check point system immediately after buying the system or building a new system then check point every time user upgrade system with software from trusted sources. This way framework can scan the system after every check point and collect necessary information. Framework might ask user to set initial policy rules which can be as simple as “don't allow loading any new program module on this system” or “don't allow any program module or update operation to change any binary files on my system” or “don't copy a new binary in my system”


When user browse internet, browser might try to install a new component. Interceptor will catch the operation that browser it trying to copy a binary file. Authentication framework will see that the new module is not know and then policy component will see that there is a rule set by user “don't allow a new binary to be copied into the system” and simply deny such operation. Same way when a malicious virus tries to change some binary in the system it would be blocked.


In a network environment, framework can learns from the activities in other framework components with very minimal input from user. For example when a framework sees a new module, it can communicate with other framework component to figure out if other framework component knows such module as safe module. If other framework component certifies that the module is good, framework will allow loading the module and still provide secure environment where user need not to add any input on each system.


What has been described above includes example of the present invention. It is not possible to describe every conceivable combination of components or methodologies for purpose of describing the present invention. However someone with some general skill in the art may find some combination steps, components or methodologies to implement the main theme of the present invention to achieve the same goal.


Accordingly, the present invention is intended to embrace all such alternations, modifications and variations that fall within the spirit and aspect of the appended claims.

Claims
  • 1. A safe program execution framework, the framework comprising: a) a call intercept processor to inspect or intercept what program or data module is getting loaded or already loaded in a process or what APIs are going to be called,b) a policy component with a set of rules and means to enforce those rules to allow or block operations,c) an authentication framework to gather intelligence about program modules, API call sequence or data being used across network,
  • 2. A safe program execution framework as recited in claim 1 further comprises a collection of systems each running framework component and interact with each other.
  • 3. A safe program execution framework as recited in claim 1 further comprises: a) one rating table that contains different ratings of program module that can be used to evaluate some program module,b) a policy table to contain set of rules that can be applied on program modules.
  • 4. Program or data module as recited in claim 1 referrer to any program files like files with EXE DLL OCX extension or program script files that can be used to run program or any data for example a table from data base or record that can be used or processed in a program.
  • 5. Collection of systems as recited in claim 2 will share information or rate information to build intelligence what is safe to use and not safe to use.
  • 6. Collection of systems as recited in claim 2 will rate some information with low rating if smaller number of member of the collection is exposed to it for a smaller time and will rate information with a higher rating when many members are using the information for an extended period without any problem.
  • 7. A call intercept processor as recited in claim 1 determines what program module is going to be loaded or already loaded in a process comprises: a) active intercept processor that intercept program module load before any computer instruction or data in that module get a chance to be executed or being referenced in the processb) passive inspect processor to inspect a process for modules already loaded by inspecting some process data structure or using some OS supported functions.
  • 8. Call intercept processor as recited in claim 1 will construct a unique ToBeValidated ID by extracting one or multiple module attributes like hash value of module content, checksum/signature in the header, File attributes of the module file, pattern of API call sequence data content, or any info that can be used to identify them uniquely.
  • 9. Call intercept processor as recited in claim 1 further forms ToBeValidated Module record using the module version info or combining Module ID with some system attributes like user account info, CPU ID, machine info etc.
  • 10. A safe program execution framework as recited in claim 1 will collect intelligence by contacting other framework component across the network or by contacting a master framework component.
  • 11. Master framework component as recited in claim 10 is connected with multiple framework components and exchange information and rate them if some information is new, how information is being used, if they are safe or unsafe.
  • 12. A safe program execution framework as recited in claim 1 will create rules for policy component based on gathered intelligence and some other rules in the policy component or taking some feedback from end users.
  • 13. A safe program execution framework as recited in claim 1 will create a rule to deny loading a program module if the module is new or is not recognized by other framework components, or user feedback doesn't allow loading the module thus giving a low rating to the module.
  • 14. A safe program execution framework as recited in claim 1 will create a rule to allow loading a program module if the module is from an established known source, or is being using used by other framework components for extended period of time without issues thus giving a high rating to the program module.
  • 15. A safe program execution framework as recited in claim 1 will create a rule to rate any kind of information used in the network used on its uses response and create safe rule for the system
  • 16. A safe program execution framework as recited in claim 1 Comprising: a) a local client module that try to get a rating for ToBeValidated module ID using information stored in a local rating table, if can't be resolved using local rating table contact master framework component if available.b) b local or master framework component that can get or generate rating for any ToBeValidated module ID using local rating table accessible to the framework component or by contacting other framework components.
  • 17. Policy component as recited in claim 1, will block any program module from loading or block any operation if a policy record(s) stored in policy table identify the module information as unsafe with low rating.
  • 18. Policy record as recited in claim 17 will contains information about program module or API call sequence containing at least one of the following: a) the module shouldn't be loaded.b) module can be loaded disabling some features,c) module should be replaced with another module.d) renew license of the module.e) unsecured attempt to execute, terminate the process.f) module uses set to expire at some time.g) any actionable item on module or process.
  • 19. A safe program execution framework as recited in claim 1 will have an update method that can update local rating or policy table gathering information from other framework components.
  • 20. Rating table as recited in 3 will contain information of known code segments and related licensing policy or their update information.
  • 21. Master framework component as recited in claim 10 will update rating and policy table in other framework components guided by a schedule.
  • 22. A safe program execution framework as recited in claim 1 contains multiple master framework components interacting with each other to update their rating and policy table and connecting to a top level master of master framework component where they altogether form a larger simplified safe execution framework.
  • 23. A safe program execution framework as recited in claim 1 further comprises a method and means to set policy and enforce it to achieve one or multiple of the followings: a) report the administrator through available reporting mechanism.b) terminate the program or disable certain feature in the current program.c) in case of license violation, renew the feature that has the segment.d) update the program module if necessary.e) renew or initiate subscription of a feature is necessary.f) any helpful action/logging action that might help system user in any way.