Formal Verification of Memory Preservation of x86-64 Binaries

Joshua A. Bockenek, Freek Verbeek, Peter Lammich, Binoy Ravindran

Research output: Chapter in Book/Conference proceedingConference contributionpeer-review

152 Downloads (Pure)

Abstract

Formal verification of a binary can provide high software assurance, even when the source code is unavailable. It is, however, inherently hard due to the low level of abstraction involved; instead of verifying typed and structured source code, one has to verify machine code or reconstructed assembly. This paper presents a semi-automated methodology for formally verifying memory preservation, as well as register preservation, over disassembled binaries. The methodology is based on formal symbolic execution and Floyd-style verification. We show that the methodology is compositional on the function level, which is crucial for scalability. The methodology works for loops, recursion, and both optimized and non-optimized code. It can be used to expose preconditions required for non-exceptional behavior. We demonstrate applicability by verifying a set of functions from the HermitCore unikernel library.
Original languageEnglish
Title of host publication38th International Conference on Computer Safety, Reliability and Security
Publication statusPublished - 13 Sept 2019
Event38th International Conference on Computer Safety, Reliability and Security - Turku , Finland
Duration: 10 Sept 201913 Sept 2019

Conference

Conference38th International Conference on Computer Safety, Reliability and Security
Abbreviated titleSAFECOMP 2019
Country/TerritoryFinland
CityTurku
Period10/09/1913/09/19

Keywords

  • x86-64
  • Assembly
  • Isabelle/HOL
  • Formal verification

Fingerprint

Dive into the research topics of 'Formal Verification of Memory Preservation of x86-64 Binaries'. Together they form a unique fingerprint.

Cite this