Countering Trusting Trust through Diverse Double-Compiling

Slides:



Advertisements
Similar presentations
Automating Software Module Testing for FAA Certification Usha Santhanam The Boeing Company.
Advertisements

Operating System Security
Verification and Validation
Overcoming an UNTRUSTED COMPUTING BASE: Detecting and Removing Malicious Hardware Automatically Matthew Hicks Murph Finnicum Samuel T. King University.
Day anti-virus anti-virus 1 detecting a malicious file malware, detection, hiding, removing.
Countering Trusting Trust with Diverse Double-Compiling (by David A Wheeler) Dan Frohlich.
The Security Analysis Process University of Sunderland CIT304 Harry R. Erwin, PhD.
Linear Obfuscation to Combat Symbolic Execution Zhi Wang 1, Jiang Ming 2, Chunfu Jia 1 and Debin Gao 3 1 Nankai University 2 Pennsylvania State University.
1 Lecture 24 Hiding Exploit in Compilers bootstrapping, self-generating code, tombstone diagrams Ras Bodik Mangpo and Ali Hack Your Language! CS164: Introduction.
Software Process and Product Metrics
Threat Modeling for Cloud Computing (some slides are borrowed from Dr. Ragib Hasan) Keke Chen 1.
Detection and Resolution of Anomalies in Firewall Policy Rules
©Ian Sommerville 2000Software Engineering, 6th edition. Chapter 19Slide 1 Verification and Validation l Assuring that a software system meets a user's.
Vulnerability-Specific Execution Filtering (VSEF) for Exploit Prevention on Commodity Software Authors: James Newsome, James Newsome, David Brumley, David.
VEX: VETTING BROWSER EXTENSIONS FOR SECURITY VULNERABILITIES XIANG PAN.
The Security Analysis Process University of Sunderland CSEM02 Harry R. Erwin, PhD.
Operator Precedence First the contents of all parentheses are evaluated beginning with the innermost set of parenthesis. Second all multiplications, divisions,
CSCE 548 Code Review. CSCE Farkas2 Reading This lecture: – McGraw: Chapter 4 – Recommended: Best Practices for Peer Code Review,
3.2 Data Checking.
Proof Carrying Code Zhiwei Lin. Outline Proof-Carrying Code The Design and Implementation of a Certifying Compiler A Proof – Carrying Code Architecture.
Ether: Malware Analysis via Hardware Virtualization Extensions Author: Artem Dinaburg, Paul Royal, Monirul Sharif, Wenke Lee Presenter: Yi Yang Presenter:
Virus Detection Mechanisms Final Year Project by Chaitanya kumar CH K.S. Karthik.
 Once the system has been installed it will be monitored to check whether it is working correctly. Sometimes problems with a system will not be found.
Quality of System requirements 1 Performance The performance of a Web service and therefore Solution 2 involves the speed that a request can be processed.
Program Development Cycle Modern software developers base many of their techniques on traditional approaches to mathematical problem solving. One such.
CS Data Structures I Chapter 2 Principles of Programming & Software Engineering.
ASys: Demo Problem to solve ASys (Assessment system) Analisys of the properties Architecture of the system DFD to mark one exam Testing using test cases.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
Sai Zhang Michael D. Ernst Google Research University of Washington
N-Variant Systems A Secretless Framework for Security through Diversity Benjamin Cox David Evans, Adrian Filipi, Jonathan Rowanhill, Wei Hu, Jack Davidson,
CS216: Program and Data Representation University of Virginia Computer Science Spring 2006 David Evans Lecture 6: Ordered Data Abstractions
Page 1 Viruses. Page 2 What Is a Virus A virus is basically a computer program that has been written to perform a specific set of tasks. Unfortunately,
PREPARED BY: MS. ANGELA R.ICO & MS. AILEEN E. QUITNO (MSE-COE) COURSE TITLE: OPERATING SYSTEM PROF. GISELA MAY A. ALBANO PREPARED BY: MS. ANGELA R.ICO.
“What the is That? Deception and Countermeasures in the Android User Interface” Presented by Luke Moors.
1 Countering Trusting Trust through Diverse Double-Compiling David A. Wheeler February 28, 2006 (Minor update from December 2, 2005)
Database and Cloud Security
CSE15 Discrete Mathematics 03/06/17
Threat Modeling for Cloud Computing
Programming Logic and Design Seventh Edition
Software Configuration Management
Execution with Unnecessary Privileges
Static Detection of Cross-Site Scripting Vulnerabilities
AUDACIOUS: USER DRIVEN ACCESS CONTROL WITH UNMODIFIED OPERATING SYSTEM
Chapter 17 - Component-based software engineering
Chapter 8 – Software Testing
Software Design and Development
Algorithm and Ambiguity
Teaching Computing to GCSE
Compiler Construction
Fault Injection: A Method for Validating Fault-tolerant System
Executive Director and Endowed Chair
Lecture 09:Software Testing
Lecture 22 Inheritance Richard Gesick.
Executive Director and Endowed Chair
Programming Logic and Design Fourth Edition, Comprehensive
Information Redundancy Fault Tolerant Computing
Lecture 2 - SQL Injection
CS240: Advanced Programming Concepts
Chapter 15 Debugging.
Applied Software Project Management
Integration Testing CS 4311
Knowing When to Stop: An Examination of Methods to Minimize the False Negative Risk of Automated Abort Triggers RAM XI Training Summit October 2018 Patrick.
Chapter 29: Program Security
5 POINT PLAN THE SYSTEMS LIFE CYCLE ANALYSE DESIGN
Regression Testing.
Chapter 17 - Component-based software engineering
Introduction – “Writing A Program”
Chapter 6: Integrity Policies
Chapter 1: Creating a Program.
Mutation Testing Faults are introduced into the program by creating many versions of the program called mutants. Each mutant contains a single fault. Test.
Presentation transcript:

Countering Trusting Trust through Diverse Double-Compiling Russ Giordano CSC 8410 Operating Systems 4/23/2007

Product Security Evaluations Generally, it is assumed that a check of source code is enough Check every time the source code is recompiled to see if you get the same binary results But what happens if malicious code has been inserted into the binary files of the compiler itself?

Inadequate Solutions Compiler binary files could be manually compared with their source code Automating the comparison of compiler source to compiler binary Compile source code with a second compiler Receivers could require that they only receive source code Programs can be written in interpreted languages

What is Trusting Trust? When an attacker modifies one or more binaries so that the compilation process inserts different code than would be expected Recompilation of the compiler still results in the reinsertion of malicious code Original source code can be examined without finding the attack, and the compiler itself can be recompiled without removing the attack

Analysis of Threat – Attacker Motivation Potential benefits of a “trusting trust” attack include: Complete control of all systems compiled by affected binary [and it’s descendants] Backdoor passwords/logins that allow unlimited privileges on entire classes of systems For a widely-used compiler, or one used to compile a widely-used program or operating system, an attack could result in global control over banks, financial markets, military systems etc.

Analysis of Threat – Attacker Motivation Such an attack requires: Knowledge of compilers The effort involved with creating an attack Access to the compiler binary

Triggers, payloads, and non-discovery A successful attack depends on three things: Triggers Payloads Non-discovery

Triggers, payloads, and non-discovery For a trusting trust attack to be valuable, there must be at least two triggers: One that causes a malicious attack that provides some direct value to the attack One that propagates the ability to attack in future versions of the code

Triggers, payloads, and non-discovery The “fragility” of an attack is the susceptibility of the attack to failure Fragility of an attack can be countered by an attacker by incorporating many narrowly defined triggers and payloads There may be enough vulnerabilities in the resulting system to allow an attack to re-enter a compiler at will to add new/modify existing triggers and payloads

Diverse Double Compiling To perform Diverse Double Compiling [DDC], you recompile a compiler’s source code twice: once with a second “trusted” compiler, and then again using the result of the first compilation. Check if the final result exactly matches the original compiler binary In order to perform DDC on a compiler, it must be able to self-regenerate

Diverse Double Compiling Start by using a trusted compiler T to compile the source code SA of an untrusted complier A resulting in c(SA,T) Next, use c(SA,T) to compile SA again, resulting in c(SA,c(SA,T)) Finally compare c(SA,c(SA,T)), A, and c(SA,T) If all three are identical, we can say that SA accurately reflects A

Justification To justify the DDC technique, we must make some assumptions: We must have a trusted compilation process T, comparer, and environments to perform all of the actions involved with DDC T must have the same semantics for the same constructs as A Information that affects the output of compilation must be semantically identical when generating c(SA,T), and c(SA,c(SA,T)) The compiler defined by SA should be deterministic given only its inputs, and not use or write undefined values

Methods to increase diversity Diversity in compiler implementation Compiler T’s binary should be for a completely different implementation than of compiler A Diversity in time Compiler T developed long before compiler A, and they do not share a common implementation heritage Diversity in environment Compiler T could generate code for a different environment, c(SA,T) could run on a different environment Diversity in source code input Use mutations of compiler A’s source code as the input to the first stage of DDC

Ramifications DDC technique has many strengths: can be complete automated, applied to any common language, and does not require the use of complex mathematical proofs Unintentional defects in either compiler are also detected by the technique

Ramifications The DDC only shows that the source code corresponds with a given compiler’s binary [nothing is hidden in the code] The binary may have errors or malevolent code; the DDC technique simply ensures that these errors and malevolent code can be found by examining the source code

Cited Works Countering Trusting Trust through Diverse Double-Compiling by David A Wheeler: http://www.acsa-admin.org/2005/papers/47.pdf

Questions?