Method and system for a security model for a computing device
A system, method and computer-readable media are disclosed for a security model and mode of enforcement in a graphics subsystem in a computing device. A uniform, streamlined, and flexible procedure for creating objects that contain their own security policies and are placed in protection domains when they are instantiated based on their specific security needs is described. A process boundary is utilized as the primary security or protection boundary for enforcing the security model. The security model takes advantage of the fact that most object models allow objects to have interfaces. An object's interfaces are used to determine what caller objects are capable of accessing. Thus, there is a mapping of an object's capabilities to interfaces. An object determines what a caller object is entitled to based on the investigation by the caller object and of what the caller object's knowledge of the object's interface. The caller's investigation determines what other aspects of the object the caller is entitled to. The method aspect of the invention comprises an interface of a target object receiving a call from an external object which is aware of the existence of the interface. At the target object, it is determined whether the external object has access to other interfaces of the target object based on the first call. Access is granted to other interfaces based on this determination.
The present invention claims priority to U.S. Provisional Patent Application No. 60/543,108 filed on Feb. 9, 2004, the contents of which are incorporated herein by reference.
RELATED APPLICATIONSThe present application relates to the following applications: (1) Attorney Docket No. 4001.Palm.PSI entitled “A System and Method of Format Negotiation in a Computing Device”; (2) Attorney Docket No. 4002.Palm.PSI entitled “A System and Graphics Subsystem for a Computing Device”; and (3) Attorney Docket 4004.Palm.PSI entitled “A System and Method of Managing Connections with an Available Network”, each of which are filed on the same day as the present application, the contents of each Application are incorporated herein by reference.
BACKGROUND OF THE INVENTION1. Field of the Invention
The present invention relates generally to operating system software. More particularly, the invention relates to software for implementing a security model and enforcement thereof in a graphics subsystem of a computing device.
2. Introduction
Graphics subsystems and operating systems generally allow external applications and plug-in components, often authored by third-party developers (such as application programmers) and other not fully trustworthy sources, to execute in their environments.
This often raises security concerns for the native system. If the third-party component is poorly authored and thus has serious flaws, executing it within the operating system environment might cause serious or fatal error conditions. If the third-party component is malignant (such as a virus), it might intentionally steal sensitive data or perform destructive operations. Some operating systems have no way to enforce protections against poorly-written or malignant code, and so implicitly “trust” this code, when it is run, to be well-written and benign.
However, it is preferable that native systems take precautions against external faulty or malicious code from harming or infiltrating the system. Many modern systems employ the use of processes as a unit of protection; for example, third-party components like application programs might each run in their own process. In this model, code is permitted to do anything it likes within its own process, but boundaries between processes are enforced at the hardware level. Each process is provided by the system with a certain set of permissions to access services outside of that process, and code running within each process is limited to those external operations for which the process is granted permission. This use of processes as a unit of protection can be said to be nearly ubiquitous among operating systems beyond a certain level of complexity.
Implementing adequate safeguards using processes as the unit of protection requires both a policy and associated method for partitioning code and components into processes, and a policy and associated method for granting those processes permissions.
A policy and method for partitioning code into processes is important because this policy establishes the boundaries between components that can be controlled and manipulated by the system. If component A and component B are in the same process, there are no guarantees the system can provide either component with that will ensure it is protected from flaws or malice in the other. For example, code in component A could access code or data in component B, getting access to component B's sensitive data. Similarly, if component B requests and gains access to external resource C, the system has effectively given access to that resource to all code running in the same process as component B. If, however, component A and component B are running in different processes, the system can both reliably protect one's code and data from flaws or malicious code in the other, and can reliably grant a permission to one of these components without granting it to the other.
One simple, common technique for protecting the system from flawed or malicious action by components - and of protecting components from flawed or malicious action on the part of other components - is to place each newly instantiated component into a separate process of its own. For example, for each application that is to be run, a new process is created and the application is placed in it, separated both from other third-party components and from system components by secure process boundaries. However, there is significant overhead associated with each process. This includes both the memory and processing time associated with the creation and destruction of processes and the extra processing required in order to send messages across process boundaries as compared to that required for communication within a process. Thus, creating a process for each new application can be highly inefficient. Often, components will have credentials that show themselves to be trustworthy with respect to certain system operations (such as a cryptographic signature that could not realistically be duplicated by a malicious imposter). In other cases, two or more components may be regarded as trustworthy with relation to each other but not with respect to sensitive system services (for example, component A and component B might both be cryptographically signed by the same third-party publisher or vendor, but this publisher is not necessarily trusted by the system itself), and in this case it might be optimal to place both of these components into a single process. Partitioning these trustworthy objects each into their own process can be very wasteful of system resources, and can lower the overall performance of the system.
A policy and method for granting permissions to processes is important because code running within a process can only access resources external to that process if the system grants it permission to do so. If partitioning code into processes establishes the “rule” (i.e. such and such component can only access those other components available in the same process), granting permissions to processes establishes the “exceptions” to that rule (i.e. except for these specific system services, which code running in that process has the permission to use). In many systems this is done using a central repository for storing all security knowledge, access control data, and so on. For example, if a system service needs to process a request it might ask the central authority if the requester has permission to access that service. This design requires significant centralized knowledge of all system-wide security policies, data and policy duplication between secured components and the central authority that implements the policies, and constant communication between the central authority and objects in the system, both of which are undesirable in a dynamic, scalable, open system.
Also, in most systems, such permissions are defined and tracked in a static way with respect to processes. For example, in such a system a component would be designed to exist in its own dedicated process, and will declare security constraints for that process rather than for the component. In a system where components are partitioned more dynamically into processes, it would be preferable to define security policies at the component level. This would allow per-component information to be used to make good partitioning decisions, and would allow a network of interoperable components to define their security policies in a distributed fashion, eliminating much of the need for centralization and the overhead associated with it.
What is needed in the art is a method by which components may be partitioned into processes based on the security requirements of both the system itself and of components running in it with relation to each other, such that desired protections can be enforced while the inefficiencies associated with processes and crossing process boundaries are minimized. Furthermore, in an environment where this first method exists and components are distributed into processes based on dynamic criteria, what is required is a method allowing security policies to be defined in a distributed manner by components running in the system, both to inform process partitioning decisions and to allow for application-specific security policies to be enforced in a lightweight, scalable manner.
SUMMARY OF THE INVENTIONAdditional features and advantages of the invention will be set forth in the description which follows, and in part will be obvious from the description, or may be learned by practice of the invention. The features and advantages of the invention may be realized and obtained by means of the methods, instruments and combinations particularly pointed out in the appended claims. These and other features of the present invention will become more fully apparent from the following description and appended claims, or may be learned by the practice of the invention as set forth herein.
The present invention addresses the needs in the prior art for an improved system and method for providing a security model for objects and enforcement of the model in the graphics subsystem and operating system of a computing device. The present invention comprises a system, method and computer-readable media that provide security and access control for objects and components using a capabilities model in conjunction with the use of object interfaces and enforcement of security using dynamic protection domains implemented using the process as a protection boundary around objects.
The method aspect of the invention relates to a uniform, streamlined, and flexible procedure for creating objects that contain their own security policies and are placed in protection domains when they are instantiated based on their specific security needs. The method utilizes a process boundary as the primary security or protection boundary for enforcing the security model. The security model takes advantage of the fact that most object models allow objects to have interfaces. An object's interfaces are used to determine what caller objects are capable of accessing. Thus, there is a mapping of an object's capabilities to interfaces. An object determines what a caller object is entitled to based on the investigation by the caller object and of what the caller is aware. The caller's investigation determines what other aspects of the object the caller is entitled to.
In one aspect of the present invention, a method for controlling access to an object in an operating system of a computing device is described. An interface of a target object receives a call from an external object which is aware of the existence of the interface. At the target object, it is determined whether the external object has access to other interfaces of the target object based on the first call. Access is granted to other interfaces based on this determination.
In another aspect of the present invention a method for securing an object in a computing device operating system is described. Access constraints for an object are determined. A protection domain having a security profile that corresponds to the access constraints of the first object are identified. The object is then placed in the protection domain.
BRIEF DESCRIPTION OF THE DRAWINGSIn order to describe the manner in which the above-recited and other advantages and features of the invention can be obtained, a more particular description of the invention briefly described above will be rendered by reference to specific embodiments thereof which are illustrated in the appended drawings. Understanding that these drawings depict only typical embodiments of the invention and are not therefore to be considered to be limiting of its scope, the invention will be described and explained with additional specificity and detail through the use of the accompanying drawings in which:
Various embodiments of the invention are discussed in detail below. While specific implementations are discussed, it should be understood that this is done for illustration purposes only. A person skilled in the relevant art will recognize that other components and configurations may be used without parting from the spirit and scope of the invention.
The present invention provides for systems, methods and computer-readable media that function as a graphics subsystem of an operating system intended for use primarily on mobile and handheld devices, but also executable on any computing device as described in the figures. Examples of other computing devices include notebook computers, tablets, various Internet appliances, and laptop and desktop computers. In a preferred embodiment, the graphics subsystem operates on a handheld mobile computing device such as a combination cellular phone and PDA.
The drawing model aspect 102 defines a highly expressive drawing language. It allows a graphics subsystem programmer to describe an image using primitive drawing commands, including path filling and stroking, and to apply modulations of color, blending, clipping and so on. Rendering is modeled explicitly as a definition of the value of each pixel within a target area. The drawing language provides a small number of drawing primitives to modify current pixel values, including two basic types of primitives: parametric drawing operations (path definition) and raster drawing operations (blitting). More complex rendering is accomplished by compositing multiple operations. Other capabilities of the rendering model of the present invention include: arbitrary path filling, alpha blending, anti-aliasing, arbitrary two-dimensional and color-space transformations, linear color gradients, bitmap rendering with optional bilinear scaling, region-based clipping and general color modulation (from Boolean clipping to spatial color modulation). Components of the drawing model can be removed for lower-end devices. For example, components can be removed in order to not support general color modulation, anti-aliasing, or other such operations that are expensive to compute on low-powered hardware. On the other hand, the model can be configured to benefit from a full three-dimensional hardware accelerator. The drawing model aspect 102 also defines a drawing API that is used by clients to express commands in the drawing language.
Transport aspect 104 enables the transmission of drawing commands from where they are expressed by calls to the drawing API, such as within a client process, to where they are executed, typically within a server process. Transport aspect 104 addresses asynchronous operational issues. For example, it addresses the issue of how a screen or display controlled by a display server can multiplex drawing and update commands coming from different client processes and optionally execute the commands out of order if the display server determines that the resultant image would be identical.
Drawing commands originating from multiple simultaneous clients of a display server are often not strongly ordered, i.e., they can often be executed in a different order and obtain the same image as if they were executed in the order specified by clients. For example, in a preferred embodiment transport aspect 104 and drawing model aspect 102 of graphics subsystem 100 are responsible for ensuring that with drawing command groupings A, B, and C specified in the order A to B to C, wherein the commands in C overlay an area drawn into by A and B draws into an area that is not affected by either A or C, A must be executed before C but B should be permitted to draw at any time. This is very useful in situations where A, B and C originate from different client processes and the client responsible for A is slow, blocked or has crashed, and the client responsible for B is ready to continue processing. Transport aspect 104 also enables a display server to communicate with a distributed hierarchy of views, wherein each view has partial or complete ownership of certain portions of the screen, i.e., the actual pixels in those portions of the display.
Drawing commands are transported from client views to the display server responsible for graphical rendering utilizing objects that function as delivery conduits. These objects, referred to as render streams, are a feature of transport aspect 104.
All types of drawing commands can be transported in render stream 302. In a preferred embodiment, drawing commands, e.g., moveto, lineto, closepath, fill <color>, stroke<color>, and so on, resemble Postscript commands. In a preferred embodiment, render streams facilitate transmission of commands or any other data, such as pixels, modulation data, etc., in one direction. Commands that typically do not require direct responses are best suited to be transported utilizing render streams.
Drawing model aspect 102 can carry out its functions independent of any render stream. For example, if the destination for drawing commands is local, such as to a bitmap, rather than to the screen of a handheld device, the drawing model does not need to utilize a render stream (although it may use other features of transport aspect 104). In cases where the drawing model operates independent of a render stream, the same drawing model API is used. However, depending on the context, commands may be rendered immediately to a local surface, or may be transported to a display somewhere else.
In a preferred embodiment, drawing by client views occurs when they are asked by the display server to refresh the screen. This is done when a view, responsible for a certain area of pixels on the screen is invalid or ‘dirty’ or needs to be re-drawn for any reason, for example after some action or state change has occurred that changes the look of one or more visible components, or that adds or removes views form the hierarchy. In response to an update event, views send drawing commands to the display server so the server can change those pixels according to these commands. In a preferred embodiment, this is the only mechanism by which a view may draw to the screen.
This sequence of events encompassing the request made by the display server and the resulting drawing that occurs by clients is referred to as an update cycle. The display server initiates such a cycle by sending an update event to the root view, which will then distribute the event throughout the view hierarchy as needed to invoke views to draw, together composing the final image. Render streams are used during an update cycle to transport rendering commands from client views to the display server when the server operates in a different process or device from that of one or more of the client views, or when there are multiple systems of views operating asynchronously with respect to one another and conjoined within the same view hierarchy. These conjoined systems of views are asynchronized with respect to one another by the use of view layout root objects, as detailed below.
The graphics subsystem of the present invention allows an update to be executed serially by each view synchronously following the drawing of its predecessor in the hierarchy within a single system of views, or in parallel by multiple systems of views which operate asynchronously with respect to one another. This is enabled in part by the ability of a render stream to branch. Branching is a procedure whereby an offshoot or branched render stream is created and passed to a child view to draw at some later point that the child chooses (i.e. asynchronously with respect to the parent view performing the branching operation), while the original or parent render stream continues to be used synchronously to transport subsequent drawing commands expressed by the parent view.
Each act of branching creates a possibility of re-ordering by the display server. Thus, in this scenario branching has created the possibility that the commands in render stream 308 can execute concurrently or out-of-order with commands in render stream 306. Actual parallel execution can be employed using multiple processors or hardware accelerators, or greater efficiency can be reached by re-ordering commands sent to a single graphics accelerator. The display server receives these commands from render stream 306 and 308 in parallel and decides the actual order in which the commands will be executed based on the expressed order and on the dependencies between and among the commands.
The display server 202 has explicit knowledge of only one view, the root view 208. From the display server perspective, root view 208 is responsible for handling events (including input and update events) for the entire screen. On simple devices the root view may in fact be the only view. If there is a single process that uses only one view and no re-ordering of views, the complexity of the design collapses into a simple code path between the display server and view hierarchy, which is highly efficient on weak hardware. On devices with more advanced hardware and user interfaces the root view distributes its responsibility for handled update and input events to a hierarchy of views.
The loose coupling of the view hierarchy is enforced in part by the hiding of certain of these interfaces from a caller that has access to certain others. For example, the default security policy for views (which can be overridden by each view as desired) is that a child view which is initially given an IViewParent 506 interface for its parent will not be able to convert that to an IView 504 interface. The view itself stores state such as the spatial 2D transformation that should apply to that view's drawing, a reference to its parent, and so on.
A capability-like security model that establishes a peer-to-peer trust network between and among a set of active objects is described in
Capability security models are based on a set of simple principles. Primary among those principles is the Principle of Least Authority, which states that if an object requires access only to resource (or capability) A in order to perform its duties, it should be given access only to A, and not, for example, to arbitrary other capabilities like B and C. Additionally, if an object determines that it requires capability D, it must explicitly ask for D using another capability which permits and may grant this request.
Many object models and object-oriented programming languages allow an object defined using them to expose or publish one or more well-defined interfaces that operate on it. Each interface that an object publishes defines a set of messages that can be sent to the object or methods that can be called on it. In most interface-based object models, a client that wishes to make use of an object must first obtain a reference to an interface of that object by inspecting the object and requesting the desired interface, and then make method calls on or send messages to that interface. Such an interface is typically the smallest granularity at which access to the object is granted.
In a preferred embodiment of the present invention, security policies are defined and implemented by requiring any request to an object for a given interface to be made using an already-known well-defined interface of that object, by informing the object at the time of such request as to which interface the request was made using, by allowing each object to customize which interfaces they publish based on—among other factors—which interface the request was made using, and by mapping each object interface to its own capability-like secure communication channel when that interface is referenced or used by an object within another process or device (in other words, when a method call or message passing is performed on an interface across a secure boundary).
When an object (the “caller” object) wishes to make a request for an interface B of another object (the “callee” object), that request must be made using some interface A of the callee that the caller has already obtained through some means. This interface A could, for example, have been provided to the caller at the time it was created by the creating object, or could have been requested by the caller in an interaction with another object. The callee object will receive the request for B, and will be informed at this time that the request was made using interface A. Based on this knowledge, on whether the callee actually implements interface B, and on any other policies the callee wishes to define, the callee can decide whether or not to provide the caller with the requested interface B.
In addition, other calls made on or messages exchanged using an interface (i.e. those which do not perform interface inspection requests) can themselves return interfaces published by the called object or by any other object. In each such interaction—either explicit interface inspection or the sharing by one object with another a reference to the interface of a third—a trust network among a network of peer objects is progressively and dynamically defined. This trust network defines the range of what operations are permissible by a given object. For example, if a caller object has a reference to interface A of a callee object, it could easily obtain access (and thus should be considered as having access to) any other interfaces on the callee it can obtain by making interface requests through interface A, as well as those interfaces on other objects that the callee might have access to and might make available through A.
The decisions that each object makes as to how, when, and with whom to share its own interfaces or those of another object are up to the specific object implementation, and can be dependent on any number of factors that the object chooses to consider. In the preferred embodiment of the present invention, the primary or sole factor used to determine which interfaces of a callee can be successfully requested by a caller is simply which interface the request was made using. While other factors such as cryptographic signatures, password protection, and user verification may be used by any particular object to establish special rules based on particular situational needs, using these types of factors would require a central authority to be contacted and for certain tests to be performed on the caller to determine whether or not the caller has the necessary permissions. If an object gets a call on one of its interfaces, the object knows that the calling object has authority or permission to make that call, by virtue of having had a reference to that interface in the first place. In a preferred embodiment within any given object, the knowledge of which particular interface was used to request another is all of the information that is needed to determine which interfaces get exposed in response to that request, and thus how the trust network is built. Thus, constant permission checks with a central authority for each call to an object interface are not necessary.
Security policies can be established by dividing an object's functionality into interfaces that define categories of services grouped by what level or type of permission is required to access the service. For example, an object can have an interface that grants minimal access and can give this capability to objects that cannot necessarily be fully trusted, and can provide other interfaces that grant full access to all capabilities to other objects that can be trusted.
As shown in
The default security policy for views (which can be overridden by each view object as desired) is that IViewManager and IViewParent (if even implemented by the object) are both exposed to any request made using the IView interface, but that IView is hidden from any requests made using the other two interfaces (i.e. a request for an IView interfaces using either the IViewManager or IViewParent interfaces will fail), and that IViewParent is hidden from IViewManager. In other words, a caller requesting interfaces for the view using the IView interface will be able to obtain both IViewParent and IViewManager, a caller requesting interfaces using IViewParent will be able to obtain IViewManager, and a caller requesting interfaces through IViewManager will see no additional interfaces.
Each of these interfaces grants a specific set of permissions to any object obtaining a reference to it, and this default view security policy is designed around the assumption that a view essentially owns its children and can manipulate them as desired, but that a child should not in general be able to directly control or manipulate its parent. A parent has an IView interface for each child, and thus can control each child completely because it can access all known interfaces of the child. But because a child view is only given an IViewParent interface for its parent when it is added to the hierarchy, it is not able to obtain an IView interface for the parent, which would allow it, for example, to move or resize its parent, or to obtain yet other information such as a reference to its parent's parent. This gives the child only indirect influence over views above it in the hierarchy, as provided by the limited IViewParent interface. For a specific object with specific needs, a parent view could decide whether or not to provide the IViewManager interface in response to requests made on the IViewParent interface, which would in effect be granting or denying to its children the permission to gain direct access to manipulate its siblings. This permission might make sense in some situations and not in others, and so each object could choose to override the default policy as it sees fit.
Abiding by this policy allows a view hierarchy to cross many processes and propagate messages up and down the hierarchy in a uniform way without the need of special interfaces, while maintaining security.
What is described above is how objects behave and define security policies regardless of what processes they exist in. For example, the caller and callee objects can be in the same or in different processes. The policy or pattern by which objects are distributed across processes does not have to be known at the time code is written or the time security policies are defined. The code is written assuming that the implicit security policies between objects as defined by interface inspection policies will be reliably enforced by the system.
However, what is described above only provides mechanisms for defining security policies. There are various classes of methods of enforcing such a model, including memory protection and language-based security. In a preferred embodiment, one such method of enforcement separates objects that must be protected from one another into separate processes.
In a preferred embodiment of the present invention, when an object in one process obtains an interface on an object in a different process (on the same device or on another), a secure conduit between those processes is established and associated with that interface reference. For each single interface on a particular object in one process, a single secure conduit exists between it and another process if that other process contains objects that hold a reference on that interface. This secure conduit is used to transmit messages and method calls on a particular interface from one process to another, and to return any result values to the caller. This is shown in
These secure conduits are created on-demand as needed, whenever an interface is shared with a particular remote process for the first time. The use of these secure conduits allows an object to be assured that when a request arrives from a remote process, that the caller is authorized to have made the request by virtue of having had a reference to the interface, and that this interface on which the request was made can be reliably identified. A secure conduit is only created when a process boundary exists between two communicating objects, as shown by the broken lines in
While the security policies established by the objects themselves (as detailed above) are always in effect, separating objects into distinct processes—and thus forcing the use of secure conduits to be used to exchange messages, data and interface references between them—is a reliable way to enforce those policies. The goal is to protect the object from malicious or faulty code, and to protect existing objects from it. But enforcement of security policies can have significant performance and memory usage implications. For example, if each object in the system were given its own process, the resulting overhead would be unacceptable. Yet, in an enforcement scheme based on processes and implemented using hardware memory protection, this is what would be needed if strict enforcement of security policies was required for every object in the system. Therefore, it is desirable to only apply enforcement of these policies when such enforcement is deemed necessary.
There are various reasons that enforcement of security policies may be deemed unnecessary. For example, if all of the components that are interacting with one another within a network of objects were authored by the same vendor, it is highly unlikely that they will be malicious with respect to one another, and thus they do not need to be protected from one another. Another example is two or more otherwise unrelated objects with identical security constraints and permissions (such as two normal third-party applications that do not deal with sensitive or private data). In both cases, clustering the set of objects into a common process would greatly reduce the memory overhead required as compared to having one process per object, and the objects themselves would be able to interact very efficiently without the creation of secure conduits to route messages between interfaces. This separation is done judiciously, for example, when it is not overridden by a blanket of trust extended to all objects published by the same vendor.
In a preferred embodiment of the present invention, a security model is enforced selectively by allowing the system to allocate objects at creation time into distinct domains referred to as dynamic protection domains. This is illustrated in
The object that is returned from this instantiation facility may be a reference to an interface on a remote object that was created in a remote protection domain (for example, if the newly created object needs to access sensitive data that the creator does not have permissions to access), or it might be a local object within the same process (for example, if the newly created object is cryptographically signed by a publisher that the creator has declared it trusts). Because the creator is using the interface abstraction facilities discussed above, it does not need to know or behave differently depending on whether the resulting object has been created locally or remotely. The constraints, policies and requirements used to make these decisions are implementation specific, and can vary from device to device. In a preferred embodiment of the present invention, a dynamic protection domain is implemented as a process.
Objects are clustered into protection domains based on protection policies, but are placed as “close” as possible to the caller or to a delegate that the caller designates while still obeying those policies. In other words, if an object can be created in the same process as those objects that will be interacting with it without violating security considerations, it will be.
In a preferred embodiment, in a view hierarchy, a parent view may instantiate a “plug-in” child view object without having prior knowledge of what that component does or what vendor has provided it. Based on the security constraints and policies of the parent, the parent's process, the system, and the child, the system can decide whether to load the child component into the parent's process (which would allow the greatest performance), to create a new process for the child to live in (which would provide the greatest protection), or to place the new child into some other existing process that happens to fit the child's security needs and which contains no objects holding private information (which would provide a good level of security and robustness for the parent and the system while not requiring a wholly new process to serve only a single child view object). This allows the view hierarchy, for example, to be built dynamically out of cooperating pieces of third-party code without the hierarchy configuration being known by any one component, but while still allowing protections to be maintained between those components that express a need for such protections.
Inasmuch as one embodiment of the invention described above relates to a hardware device or system, the basic components associated with a computing device are discussed below.
With reference to
Although the exemplary environment described herein employs the hard disk, the removable magnetic disk and the removable optical disk, it should be appreciated by those skilled in the art that other types of computer readable media which can store data that is accessible by a computer, such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, random access memory (RAM), read only memory (ROM), and the like, may also be used in the exemplary operating environment.
As can be appreciated, the above description of hardware components is only provided as illustrative. For example, the basic components may differ between a desktop computer and a handheld or portable computing device. Those of skill in the art would understand how to modify or adjust the basic hardware components based on the particular hardware device (or group of networked computing devices) upon which the present invention is practiced.
Embodiments within the scope of the present invention may also include computer-readable media for carrying or having computer-executable instructions or data structures stored thereon. Such computer-readable media can be any available media that can be accessed by a general purpose or special purpose computer. By way of example, and not limitation, such computer-readable media can comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to carry or store desired program code means in the form of computer-executable instructions or data structures. When information is transferred or provided over a network or another communications connection (either hardwired, wireless, or combination thereof) to a computer, the computer properly views the connection as a computer-readable medium. Thus, any such connection is properly termed a computer-readable medium. Combinations of the above should also be included within the scope of the computer-readable media.
Computer-executable instructions include, for example, instructions and data which cause a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions. Computer-executable instructions also include program modules that are executed by computers in stand-alone or network environments. Generally, program modules include routines, programs, objects, components, and data structures, etc. that perform particular tasks or implement particular abstract data types. Computer-executable instructions, associated data structures, and program modules represent examples of the program code means for executing steps of the methods disclosed herein. The particular sequence of such executable instructions or associated data structures represents examples of corresponding acts for implementing the functions described in such steps.
Those of skill in the art will appreciate that other embodiments of the invention may be practiced in network computing environments with many types of computer system configurations, including personal computers, hand-held devices, multi-processor systems, microprocessor-based or programmable consumer electronics, network PCs, minicomputers, mainframe computers, and the like. Embodiments may also be practiced in distributed computing environments where tasks are performed by local and remote processing devices that are linked (either by hardwired links, wireless links, or by a combination thereof) through a communications network. In a distributed computing environment, program modules may be located in both local and remote memory storage devices.
Although the above description may contain specific details, they should not be construed as limiting the claims in any way. Other configurations of the described embodiments of the invention are part of the scope of this invention. For example, objects may use features other than interfaces of the object model to which capabilities can be matched. In another example, a protection domain can be defined by a component of the system other than a process, such as memory protection or language-based security. Accordingly, the appended claims and their legal equivalents should only define the invention, rather than any specific examples given.
Claims
1. A method for controlling access to an object in an operating system, the method comprising:
- receiving a call from an external object to a first interface of a target object;
- at the target object, determining whether the external object has access to other interfaces of the target object based on the call to the first interface; and
- granting access to the other interfaces according to the determination.
2. A method as recited in claim 1, wherein determining whether the external object has access to other interfaces of the target object further comprises examining a security policy contained within the target object.
3. A method as recited in claim 2, wherein the security policy is contained entirely within the target object.
4. A method as recited in claim 1, further comprising determining whether the external object and the target object operate in the same process.
5. A method as recited in claim 1, wherein determining whether the external object has access to other interfaces of the target object further comprises:
- identifying other interfaces of the target object that can be accessed when the first interface is being requested by the external object.
6. A method as recited in claim 1, further comprising determining a first process of the target object.
7. A method as recited in claim 6, further comprising determining a second process of the external object.
8. A method as recited in claim 7, further comprising performing a cross-process communication between the target object and the external object.
9. A method as recited in claim 1, further comprising securing a channel for each interface of the target object.
10. A method as recited in claim 1, wherein determining whether the external object has access to other interfaces of the target object further comprises analyzing access constraints within the target object.
11. A method as recited in claim 1, further comprising analyzing interface access data stored within the target object.
12. A method as recited in claim 1, further comprising determining whether the target object and the external object are in a same protection domain.
13. A method as recited in claim 12, wherein the protection domain is a process.
14. A method as recited in claim 1, wherein the target object sets its own security policy.
15. A method as recited in claim 1, wherein determining whether the external object has access to other interfaces further comprises determining the capabilities of the external object.
15. A method as recited in claim 14, further comprising mapping the capabilities of the external object to the interfaces of the target object.
16. A method as recited in claim 1, wherein the target object and the external object are created using a same methodology.
17. A method as recited in claim 1, wherein the target object and the external object are views in a view hierarchy.
18. A method as recited in claim 17, wherein a view has a parent calling interface, a child calling interface, and a child managing interface.
19. A system that controls access to an object in an operating system, the system comprising:
- a module configured to receive a call from an external object to a first interface of a target object;
- a module configured to determining whether the external object has access to other interfaces of the target object based on the call received at the first interface; and
- a module configured to grant access to the other interfaces according to the determination.
20. A system that controls access to an object in an operating system, the system comprising:
- means for receiving a call from an external object to a first interface of a target object;
- means for determining, at the target object, whether the external object has access to other interfaces of the target object based on the call to the first interface; and
- means for granting access to the other interfaces according to the determination.
21. A computer readable medium storing instructions for controlling a computer device to control access to an object in an operating system, the instructions comprising:
- receiving a call from an external object to a first interface of a target object;
- at the target object, determining whether the external object has access to other interfaces of the target object based on the call to the first interface; and
- granting access to the other interfaces according to the determination.
22. A method for securing an object in a computing device operating system, the method comprising:
- determining one or more access constraints of a first object;
- identifying a protection domain that has a security profile that corresponds to the one or more access constraints of the first object; and
- placing the first object in the protection domain.
23. A method as recited in claim 22, further comprising creating the first object and a second object using the same methodology.
24. A method as recited in claim 23, wherein the first object and the second object can communicate transparently across two or more protection domains.
25. A method as recited in claim 22, wherein the protection domain is a process.
26. A method as recited in claim 22, further comprising creating an object-to-object security model wherein security constraints for an object are contained within the object.
27. A method as recited in claim 22, wherein identifying a protection domain further comprises attempting to identify a protection domain that is local relative to the first object.
28. A method as recited in claim 22, further comprising creating a process based on security requirements of the operating system.
28. A method as recited in claim 28, further comprising clustering objects in the process based on security policies of the objects.
29. A system for securing an object in a computing device operating system, the system comprising:
- means for determining one or more access constraints of a first object;
- means for identifying a protection domain that has a security profile that corresponds to the one or more access constraints of the first object; and
- means for placing the first object in the protection domain.
Type: Application
Filed: Feb 8, 2005
Publication Date: Jun 14, 2007
Inventors: George Hoffman (Santa Clara, CA), Dianne Hackborn (Santa Clara, CA)
Application Number: 10/588,879
International Classification: H04L 9/32 (20060101);