Design Principles for Secure Systems

CS 513 -- System Security -- January 29, 1998 -- Lecture 4
Lecturer: Professor Fred B. Schneider

Lecture notes by Lynette I. Millett


We started the semester by arguing the need for trustworthiness in networked information systems. Security is an element of trustworthiness. We talked about the political and economic considerations that affect the development and adoption of security mechanisms. We considered security concerns in the physical world and in daily life. These provide a basis (locks, value, police) upon which to build security in cyberspace. We refer to this as the gold (Au) standard: authentication, authorization, and audit. Last time, we went over a real-life attack on the Internet. Our analysis of the Internet worm suggests that today's security attacks are not likely to be particularly subtle or deep, but rather will exploit dull, known vulnerabilities.

Today, we will examine general architectural issues concerning the building of secure systems and providing assurance of said security. We do this now, rather than at the end of the course, in the hope that these principles can drive discussion of specific security issues that are brought up later on. Much of today's lecture is based on the paper referenced in Further Reading.

Design principles for secure systems are as follows:

It is true that there are tensions among the above principles. System designers make tradeoffs based on knowledge of context, etc.

Two System Architectures

We turn to the question of how to engineer a system to be secure. There are two system architectures we will discuss here.

A protected subsystem is a collection of programs and data. Only programs in the collection can be used to access the data. Also, access to programs is limited to allowing execution starting from specified entry points. This structure presumes that the subsystem has a way of running authentication routines, or does authentication itself. In short, a programmable form of access control to objects is created. The result is flexible, but changing the access control policy requires changing the program, and thus this is not a clear separation of policy and mechanism. The search for mechanisms to create protected subsystems drove security research in operating systems in the late 1970s.

The second architecture of interest is a security kernel. We have already argued that to provide assurance that a system is secure, all security mechanisms should be small and localized. Security should be a fundamental abstraction built into the lowest level of the system. The resulting abstraction, a reference monitor, mediates all access to all objects. To implement a reference monitor, a security kernel must be at the lowest level of the system so that all accesses will be mediated.

There are several principles for implementing a security kernel:

Completeness and isolation are usually done with some kind of hardware support (e.g. supervisor vs. user modes in a system). Verifiability is accomplished through a mathematical proof.

The success of the security kernel depends on mechanisms for completeness and isolation. In the case of the protected subsystem, success depends on authentication and access to data. In both cases we have identified a trusted security base (TCB). This is the thing that must work for security to work. Throughout the course we will be trying to uncover the TCB in our systems.