Visible to the public End-to-end Verification of Information-flow Security for C and Assembly Programs

TitleEnd-to-end Verification of Information-flow Security for C and Assembly Programs
Publication TypeConference Paper
Year of Publication2016
AuthorsCostanzo, David, Shao, Zhong, Gu, Ronghui
Conference NameProceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation
PublisherACM
Conference LocationNew York, NY, USA
ISBN Number978-1-4503-4261-2
KeywordsCertified OS Kernels, Information Flow Control, Metrics, program verification, pubcrawl, Resiliency, scalabilty, Securing Compilers, Security Policy Specification, Security-Preserving Simulation
Abstract

Protecting the confidentiality of information manipulated by a computing system is one of the most important challenges facing today's cybersecurity community. A promising step toward conquering this challenge is to formally verify that the end-to-end behavior of the computing system really satisfies various information-flow policies. Unfortunately, because today's system software still consists of both C and assembly programs, the end-to-end verification necessarily requires that we not only prove the security properties of individual components, but also carefully preserve these properties through compilation and cross-language linking. In this paper, we present a novel methodology for formally verifying end-to-end security of a software system that consists of both C and assembly programs. We introduce a general definition of observation function that unifies the concepts of policy specification, state indistinguishability, and whole-execution behaviors. We show how to use different observation functions for different levels of abstraction, and how to link different security proofs across abstraction levels using a special kind of simulation that is guaranteed to preserve state indistinguishability. To demonstrate the effectiveness of our new methodology, we have successfully constructed an end-to-end security proof, fully formalized in the Coq proof assistant, of a nontrivial operating system kernel (running on an extended CompCert x86 assembly machine model). Some parts of the kernel are written in C and some are written in assembly; we verify all of the code, regardless of language.

URLhttp://doi.acm.org/10.1145/2908080.2908100
DOI10.1145/2908080.2908100
Citation Keycostanzo_end–end_2016