SCC logoKernel Hypervisors

Hypervisors for Security and Robustness



Sponsors

DARPA logoRome Lab logo



[ Program Overview | Background | Status | Documents | Code | Links | Contract Information


Overview

This web page is a repository for information regarding the Hypervisors for Security and Robustness program, also known as the Kernel Hypervisors program.

The project explores a concept similar to that of a `hypervisor', see the work of Bressoud and Schneider, but implements the hypervisor on top of an operating system kernel rather than on top of the hardware. These kernel hypervisors are constructed from wrappers placed around system calls for selected system components. They could be used to make a component more robust, as described by Bressoud and Schneider, or to perform various security functions such as fine-grained access control and auditing of events.

On this program hypervisors were placed between the kernel and applications, rather than directly on the hardware, to allow for security functions to be defined at the level of abstraction of the applications. This placement also allows several kernel hypervisors, built for different applications, to reside on the same hardware platform. A hypervisor that provides the proper filtering can be used as a firewall around an application. The hypervisor would block inappropriate requests from the application to services such as the file system.

Kernel hypervisors are distinguished by the fact that they consist of loadable kernel code that is used to wrap specific applications. Other approaches have been used to provide wrappers for additional security or robustness including:

Our approach is most like the last, but it differs in that we place our code directly in the kernel and do not use the system debug functionality.

Loadable kernel hypervisors have a number of benefits.

The objective of this project is to support the DARPA mission to develop technology for information systems that are secure and survivable. In particular, this project supports the construction of such systems using COTS components that are neither secure nor robust, thus allowing systems for advanced defense applications to be built more quickly and at less expense. The goal of this work is to establish a methodology for selectively hardening components for security and robustness and to prototype this methodology on a widely available system. Specific objectives are:

Background

A hypervisor is a layer of software, normally operating directly on a hardware platform, that implements the same instruction set as that hardware. They have traditionally been used to implement virtual machines. Bressoud and Schneider built a hypervisor that intercepts, buffers, and distributes signals from outside the system. Thus, if a service is replicated on several nodes of a distributed system, a signal received by one node will be delivered to all of the replicas, and multiple signals will be delivered in the same sequence on each node. Since the client of the service should only get one copy of a reply, the outputs from all but one of the replicas are discarded. The hypervisor is also capable of detecting failed nodes.

For this project, the hypervisors are being designed to run on the abstract machine consisting of the hardware and the operating system kernel, rather than directly on the hardware. The result is that: the kernel hypervisors will be able to interact directly with applications that are reused on many different hardware platforms, the level of abstraction for component interactions will be high enough to permit important security functions to be provided, and multiple kernel hypervisors will be able to coexist on the same hardware platform. Kernel hypervisors can also be applied to traditional operating system services, such as a file server or a network server, rather than just to applications.

A key concern is that kernel hypervisors may have a detrimental impact on system performance. By adding code to system calls, hypervisors will increase the time for these calls to execute. Fortunately, no additional context switches are involved, since a kernel hypervisor runs in the context of the components for which it is providing a service. Program results include a measure of the performance impact of the hypervisors that we prototyped.

Prototype kernel hypervisors were developed in two areas: security and robustness. For security, the level of control provided by a kernel hypervisor can be used to supplement the control provided by the application and the operating system kernel. Issues investigated included the types of policies that a kernel hypervisor can enforce, the manner by which these policies are defined, and the effectiveness of the kernel hypervisor in addressing the threat at which the policy is directed. A wide range of policies were studied: from auditing, to control of active content downloaded from the Web, to protecting server data from unauthorized modifications, to Type Enforcement, to MultiLevel Security. For robustness, a kernel hypervisor was used to replicate server requests to a backup server, forming a Primary-Backup fault-tolerant service. This type of service is capable of handling fail-stop faults in which a component stops interacting with its environment when it fails.

  • A specification for a hardened component is the composition of the specification of the original component and the specification of the wrappers making up the kernel hypervisor. Abadi and Lamport have proposed a methodology for specifying components that includes a theorem for determining the properties of the composition from the properties of the parts. For this project, composability theory was used to specify and prove key properties of the composition of the kernel, kernel hypervisors and system components.

  •  

     
     
     



    Current Status

    The focus of the Kernel Hypervisors program is to adapt the concept of a hypervisor for use at the level of an operating system kernel to selectively harden COTS components to provide robustness and security. Using the concept of a loadable module, Secure Computing has implemented kernel hypervisors on a Linux kernel. These kernel hypervisors provide an approach for providing unbypassable security wrappers for application specific security requirements. Kernel hypervisors have a number of potential applications, including protecting user systems from malicious active content downloaded via a Web browser and wrapping servers and firewall services for limiting possible compromises.

    On the project, a framework was developed based on a master kernel hypervisor, whose job is to coordinate installation and removal of individual hypervisors. The framework allows kernel hypervisors to be stacked so that a variety of application specific policies can be implemented, each by means of its own kernel hypervisor. The hypervisors run in the kernel, but since they are loadable modules, they do not require the kernel to be modified or even rebooted when they are loaded.

    To illustrate the practicality of the kernel hypervisor concept, we prototyped three client kernel hypervisors:

    The goal of the Netscape hypervisor is to protect a user, browsing on the Internet, from downloading and executing malicious active content that might damage the user's system. The Netscape hypervisor accomplishes this by monitoring system calls made by the browser and enforcing a policy that only allows certain resources to be accessed. In particular, the set of files that the browser can open for read, and read/write access is controlled so that the browser effectively operates within its own limited execution context. While this does not prevent malicious code from accessing and possibly damaging resources within this context, it does limit the damage that could be done to only these resources. In the case of the Netscape browser, the context includes the user's .netscape directory as well as limited access to other libraries needed by the browser to execute. Most files on the system, however, are not accessible to the browser and so cannot be damaged. To ensure that applications started from the browser as the result of a download, e.g. a postscript viewer, are also controlled, the hypervisor keeps track of all descendants of the browser and enforces the same policy on them as on the browser.

    Based on our experience with the Netscape kernel hypervisor, a generic security hypervisor has been developed that can be used to isolate any application in a compartment from which its access to files can be completely controlled. This generic security hypervisor, plus additional restrictions using techniques developed for the replication hypervisor, were used to develop a security hypervisor for the Apache Web Server. The web server requires two types of protection. First, the server must be restricted to a subset of the file system so that any attack coming through the server will be contained. The second piece of server protection is to isolate the configuration and html files used by the server from modification by un-authorized individuals.

    The replication hypervisor is used to transparently replicate a file or set of files. The objective is to provide a replication facility that allows immediate backup of changes to a file without having to modify any applications that are making the actual changes. The replication hypervisor monitors all system calls that modify files looking for calls that modify the set of files to be replicated. When such a call is identified, the hypervisor caches the input parameters and allows the call to continue execution. If execution of the call completes successfully, then the hypervisor sends the cached input parameters to a replication daemon, operating in user space, that replays the call with the cached parameters on the copy of the file that it is maintaining. Via this method, files can be replicated locally or across the network (using NFS).

    A composability analysis was performed on the hypervisor framework and the various hypervisors. Four separate, but related, systems were specified. The four specifications are related via refinement. The second and third specifications are refinements of the first; the fourth is a refinement of the second. The systems are:

    Each specification describes the individual components of the system and the common state for the composite system. A list of properties satisfied by each component was derived, and composability theory was used to show that these properties are satisfied by the composite system.

    More detailed descriptions of the design, testing and composability analysis work is contained in the program documents.



    Documents

    Conference papers

    Program Documents

    Code

    The kernel hypervisor code developed on the project is available for download.  The code is being released for research purposes only and contains no warranties. The download contains both source code, binaries and program documentation in a tarred and compressed file.  Please download and read the installation instructions in the User Guide (above) before installing.
    Final Code Release

    Links

    Cornell Hypervisor Project


    [Home] [Products] [Services] [News] [Reseller Support] [Investor Relations] [Contact Us] [About Secure]

    Last update: June 24, 1999.

    Copyright © 1998, 1999 Secure Computing Corporation. All rights reserved.