Worse yet, critical software is increasingly developed outside of the United States and/or using "community-based open-source'' processes. Some of the developers might actually be agents of foreign nation states. Although one of the tenets of the open-source movement is that the resulting code is safer because users can inspect programs for the possible existence of back-doors, this is mostly wishful thinking. It is virtually impossible to manually audit millions of lines of code. On the other hand, most open source projects have virtually no audit controls, so that it is impossible to attribute individual code fragments to the programmers who inserted them. As a consequence, we may be basing trustworthy application programs on completely *un*trustworthy operating-system foundations. I believe the solution lies in "verifying everything". By applying recent mobile-code research results, we believe it is now possible to build a complete system in which *all of the operating system code* is verified prior to every execution---and we propose to build such a system. The only thing that would need to be trusted in such a system is a minimal safe-code platform core (encompassing a verifier and a small dynamic code generator), which would be small enough to make it feasible to manually verify it line by line, using techniques appropriate for mission-critical software, such as fly-by-wire control systems. The core could then be sealed along with the processing unit into a tamper-proof hardware implement. Everything above this layer would be verified, i.e., even the code in the root directory of the local hard drive would no longer need to be trusted.
In this talk, I will address our first steps with the goal of creating
such a system. The challenges are plentiful, ranging from the
performance of the underlying platform to the performance of the
verification mechanism. As I will illustrate as a sideline, the
approach also opens up new vulnerabilities, namely complexity-based
denial of service attacks.
Slides and video