A software primitive for externally-verifiable untampered execution and its applications to securing computing systems

We present Outpost, a software-based primitive that provides the property of externally-verifiable untampered execution. Using Outpost, an external verifier can verify that the execution of an arbitrary target code on an untrusted computing system will not be tampered by any malware that may be present. The key design feature of Outpost is that it is software-based and does not require any security hardware. Outpost can therefore be deployed on a wide variety of legacy and current computing systems, ranging from tiny resource-constrained sensor nodes to high-end servers. We describe two systems, ICE and PioneerNG, that implement Outpost on sensor nodes and x86 servers respectively. Outpost is a versatile security primitive. To illustrate its wide applicability, we implement three systems using Outpost: SAKE and SCUBA, protocols for key establishment and secure code updates in sensor networks, and SecVisor, a tiny reference monitor that guarantees lifetime OS kernel code integrity. SAKE guarantees the secrecy and authenticity of the key that is established against an attacker that can perform any active or passive attack. SAKE does not require any prior secret or authentic cryptographic information, secure side channels, or hardware modifications. SCUBA enables a base station to perform code updates to a compromised sensor node to undo the attacker's modifications. SecVisor prevents an attacker from either modifying existing code in the OS kernel or from executing injected code with kernel privilege. SecVisor's trusted computing base consists of just the CPU and the memory subsystem. Also, the tiny code size of SecVisor (approximately 1100 lines of runtime), and its small external interface (2 calls), increase its resilience to attacks.