Members Publications Software


This project is supported by the Office of Naval Research under the Critical Infrastructure Protection and High Confidence, Adaptable Software (CIP/SW) Research Program of the University Research Initiative (URI).


This project is aimed at developing a new approach for securing mobile (or downloaded) code, which has become an integral part of the Internet. Examples of untrusted partially trusted software include: document handlers and viewers (e.g., Real Audio, ghostview), games, peer-to-peer applications (e.g., file sharing, instant messaging), freeware, shareware and trialware, and mobile code (applets, JavaScript, ActiveX). Contemporary operating systems provide little support for coping with such applications.

The goal of the Model-Carrying Code (MCC) project is to develop a practical and usable tools that enable mobile-code consumers to:

  • precisely specify their security policies,
  • formally verify whether a piece of mobile code satisfies these policies, and
  • execute mobile code with the guarantee that it will not violate these policies.

A key benefit of the MCC approach is that once static verification succeeds, the consumer can safely assume that the mobile code will complete its task without encountering further security errors. Should the verification not succeed, the consumer has the option of refining his/her security policies in ways that allow the mobile code to provide its functionality without unduly increasing the security risk posed by it. The task of policy refinement can itself be partially automated in order to assist unsophisticated users.

Overview of Approach

Formal verification of software has been a subject of intense research over many decades, and has proven to be a difficult problem. For mobile code, the situation is further complicated by the fact that code producers tend to provide only binary (rather than source) versions of their code. The fundamental insight in the MCC project that has enabled us to overcome these difficulties is that of decomposing verification into two stages:

  • model extraction: the process by which code producers generate abstract models of the security-relevant behavior of their code.
  • consistency resolution: the process by which code consumers verify that their security policies are satisfied by the mobile code.

Since models are significantly simpler than programs, automated verification of security policies against models (using model-checking techniques) becomes feasible under the MCC approach. Furthermore, the decomposition provided by MCC shields a code producer from having to know about specific security concerns of different consumers, and the code consumer from having to understand implementation decisions made by a code producer. As a result, consumers need not reveal their security policies to a producer, nor do producers have to reveal their source code to a consumer.

The techniques developed in the MCC project is being incorporated into software tools that are placed at the entry points for mobile code, namely, software installers, through which explicitly downloaded and installed software enters the system, and email/web browser, through which implicitly downloaded code enters the system. These tools will be available as downloadable software for on Linux/Intel systems. The project results are expected to be commercialized through our industrial partners.

MCC Overview

The figure above shows the key idea in MCC: introducing program behavioral models that help bridge the semantic gap between (very low-level) binary code and high-level security concerns of consumers. MCC includes a model generator, which automatically generates models at the producer-side. A consumer receives both the model and the program from the producer. The policy selection component checks whether the model satisfies the consumer's policy. If the model is not consistent with the policy, the consistency resolver reports a compact and user-friendly conflict feedback to the consumer. The consumer can either discard the code at this point, or refine his/her policy to permit execution of the code without posing undue security risks. If the model is consistent with the (refined) policy, then the code and the model are forwarded to the enforcement component. The enforcement/recovery component checks whether the model captures all the program's behaviors. Our current implementation of enforcement is based on system call interception. If the enforcement component detects a deviation from the model, the the execution of the untrusted code is terminated.

This research is conducted at the Secure Systems Lab and the Applied Logic Lab at Stony Brook University. For more technical details of MCC, please refer to our SOSP03 paper.

Last updated: August 1, 2005.
Suggestions, comments or questions: contact R. Sekar (