39
The Correctness-Security Gap in Compiler Optimization Vijay D’Silva, Mathias Payer, Dawn Song LangSec 2015

The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

The Correctness-Security Gap in Compiler Optimization

Vijay D’Silva, Mathias Payer, Dawn Song

LangSec 2015

Page 2: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

2

1 Compilers and Trust

2 Correctness vs. Security by Example

3 Correctness vs. Security, Formally

4 Future Directions

Page 3: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation
Page 4: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

TURING AWARD LECTURE

Reflections on Trusting Trust To what extent should one trust a statement that a program is free of Trojan horses? Perhaps it is more important to trust the people who wrote the software.

KEN THOMPSON

INTRODUCTION I thank the ACM for this award. I can' t help but feel that I am receiving this honor for t iming and serendip- ity as much as technical merit. UNIX 1 swept into popu- larity with an industry-wide change from central main- frames to autonomous minis. I suspect that Daniel Bob- row [1] would be here instead of me if he could not afford a PDP-10 and had had to "settle" for a PDP-11. Moreover, the current state of UNIX is the result of the labors of a large number of people.

There is an old adage, "Dance with the one that brought you," which means that I should talk about UNIX. I have not worked on mainstream UNIX in many years, yet I continue to get undeserved credit for the work of others. Therefore, I am not going to talk about UNIX, but I want to thank everyone who has contrib- uted.

That brings me to Dennis Ritchie. Our collaboration has been a thing of beauty. In the ten years that we have worked together, I can recall only one case of miscoordination of work. On that occasion, I discovered that we both had wri t ten the same 20-line assembly language program. I compared the sources and was as- tounded to find that they matched character-for-char- acter. The result of our work together has been far greater than the work that we each contributed.

I am a programmer. On my 1040 form, that is what I put down as my occupation. As a programmer, I wri te

1 UNIX is a trademark of AT&T Bell Laboratories.

©1984 0001-0782/84/0800-0761 75¢

programs. I would like to present to you the cutest program I ever wrote. I will do this in three stages and try to bring it together at the end.

STAGE I In college, before video games, we would amuse our- selves by posing programming exercises. One of the favorites was to write the shortest self-reproducing pro- gram. Since this is an exercise divorced from reality, the usual vehicle was FORTRAN. Actually, FORTRAN was the language of choice for the same reason that three-legged races are popular.

More precisely stated, the problem is to write a source program that, when compiled and executed, will produce as output an exact copy of its source. If you have never done this, I urge you to try it on your own. The discovery of how to do it is a revelat ion that far surpasses any benefit obtained by being told how to do it. The part about "shortest" was just an incentive to demonstrate skill and determine a winner.

Figure 1 shows a self-reproducing program in the C 3 programming language. (The purist will note that the program is not precisely a self-reproducing program, but will produce a self-reproducing program.) This en- try is much too large to win a prize, but it demonstrates the technique and has two important properties that I need to complete my story: 1) This program can be easily wri t ten by another program. 2) This program can contain an arbi trary amount of excess baggage that will be reproduced along with the main algorithm. In the example, even the comment is reproduced.

August 1984 Volume 27 Number 8 Communications of the ACM 781

Turing Award Lecture

pile" is called to compile the next line of source. Figure 3.2 shows a simple modification to the compiler that will del iberately miscompile source whenever a partic- ular pat tern is matched. If this were not deliberate, it would be called a compiler "bug." Since it is deliberate, it should be called a "Trojan horse."

The actual bug I planted in the compiler would match code in the UNIX "login" command. The re- placement code would miscompile the login command so that it would accept ei ther the in tended encrypted password or a part icular known password. Thus if this code were installed in binary and the binary were used to compile the login command, I could log into that system as any user.

Such blatant code would not go undetected for long. Even the most casual perusal of the source of the C compiler would raise suspicions.

The final step is represented in Figure 3.3. This sim- ply adds a second Trojan horse to the one that a lready exists. The second pattern is a imed at the C compiler. The replacement code is a Stage I self-reproducing pro- gram that inserts both Trojan horses into the compiler. This requires a learning phase as in the Stage II exam- ple. First we compile the modified source with the nor- mal C compiler to produce a bugged binary. We install this binary as the official C. We can now remove the bugs from the source of the compiler and the new bi- nary will reinsert the bugs whenever it is compiled. Of course, the login command will remain bugged with no trace in source anywhere.

compile(s) char ,s; I

F IGURE 3.1.

compile(s) char ,s; I

if(match(s, "pattern")) { compUe("bug"); return;

J F IGURE 3.2.

compile(s) char ,s;

if(match(s, "pattern1 ")) { compile ('bug1 "); return;

I if(match(s, =pattern 2")) I

compile ('bug 2"); return;

J F IGURE 3.3.

MORAL The moral is obvious. You can' t trust code that you did not totally create yourself. (Especially code from com- panies that employ people like me.) No amount of source-level verification or scrut iny will protect you from using untrusted code. In demonstrat ing the possi- bility of this kind of attack, I picked on the C compiler. I could have picked on any program-handling program such as an assembler, a loader, or even hardware mi- crocode. As the level of program gets lower, these bugs will be harder and harder to detect. A well- instal led microcode bug will be almost impossible to detect.

After trying to convince you that I cannot be trusted, I wish to moralize. I would like to criticize the press in its handling of the "hackers," the 414 gang, the Dalton gang, etc. The acts performed by these kids are vandal- ism at best and probably trespass and theft at worst. It is only the inadequacy of the cr iminal code that saves the hackers from very serious prosecution. The compa- nies that are vulnerable to this activity, (and most large companies are very vulnerable) are pressing hard to update the criminal code. Unauthorized access to com- puter systems is a lready a serious crime in a few states and is current ly being addressed in many more state legislatures as well as Congress.

There is an explosive situation brewing. On the one hand, the press, television, and movies make heros of vandals by calling them whiz kids. On the other hand, the acts performed by these kids will soon be punisha- ble by years in prison.

I have watched kids testifying before Congress. It is clear that they are completely unaware of the serious- ness of theft acts. There is obviously a cultural gap. The act of breaking into a computer system has to have the same social stigma as breaking into a neighbor 's house. It should not mat ter that the neighbor 's door is un- locked. The press must learn that misguided use of a computer is no more amazing than drunk driving of an automobile.

Acknowledgment. I first read of the possibility of such a Trojan horse in an Air Force cri t ique [4] of the secu- rity of an early implementat ion of Multics. I cannot find a more specific reference to this document. I would appreciate it if anyone who can supply this reference would let me know.

REFERENCES 1, Bobrow, D.G., Burchfiel, J.D., Murphy, D.L., and Tomlinson, R.S.

TENEX, a paged time-sharing system for the PDP-10. Commun. ACM 15, 3 {Mar. 1972}, 135-143.

2. Kernighan, B.W., and Ritchie, D.M. The C Programming Language. Prentice-Hall, Englewood Cliffs, N.J., 1978.

3. Ritchie, D.M., and Thompson, K. The UNIX time-sharing system. Commun. ACM 17, 0uly 1974), 365-375.

4. Unknown Air Force Document.

Author's Present Address: Ken Thompson, AT&T Bell Laboratories, Room 2C-519, 600 Mountain Ave., Murray Hill, NJ 07974.

Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commer- cial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission.

August 1984 Volume 27 Number 8 Communications of the ACM 763

Page 5: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation
Page 6: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Testing Verification

Whalley, ’94, vpoiso

McKeeman, ’98

McPeak & Wilkerson, ’03, Delta

Yang et al. ’11, C-Smith

Regehr et al. ’12,C-Reduce Tatlock & Lerner, ’10, XCert

Taming Compiler Fuzzers,PLDI ’13

Formal Verification of a Realistic Compiler, CACM ’08

Leroy et al. ’06, CompCert

Lerner et al. ’05, Rhodium

Goerigk, ’00 (in ACL2)

Lacey et al. ’02

Page 7: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation
Page 8: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

8

1 A very brief history of compiler correctness

2 Correctness vs. Security by Example

3 Correctness vs. Security, Formally

4 Future Directions

Page 9: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

9

#include <string>using std::string;

#include <memory>

// The specifics of this function are// not important for demonstrating this bug.const string getPasswordFromUser() const;

bool isPasswordCorrect() { bool isPasswordCorrect = false; string Password("password"); if(Password == getPasswordFromUser()) { isPasswordCorrect = true; } // This line is removed from the optimized code // even though it secures the code by wiping // the password from memory. memset(Password, 0, sizeof(Password)); return isPasswordCorrect;}

From the GCC mailing list, 2002https://gcc.gnu.org/bugzilla/show_bug.cgi?id=8537

Dead Store Elimination

Page 10: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

10

From: "Joseph D. Wagner" <[email protected]>To: <[email protected]>,! <[email protected]>,! <[email protected]>,! <[email protected]>,! <[email protected]>,! <[email protected]>Cc: Subject: RE: optimization/8537: Optimizer Removes Code Necessary for SecurityDate: Sun, 17 Nov 2002 08:59:53 -0600

Direct quote from: http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Bug-Criteria.html "If the compiler produces valid assembly code that does not correctly execute the input source code, that is a compiler bug." So to all you naysayers out there who claim this is a programming error or poor coding, YES, IT IS A BUG!

From the GCC mailing list, 2002https://gcc.gnu.org/bugzilla/show_bug.cgi?id=8537

Page 11: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Motivating Questions:

11

Can a formally verified, correctly implemented compiler optimization introduce a security

bug not present in the source?

Page 12: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

12

POPL 2004

POPL 2006

POPL 2002

PLDI 2003

Page 13: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Motivating Questions:

13

Can a formally verified, correctly implemented compiler optimization introduce a security

bug not present in the source?

YES!

This is the Correctness-Security Gap

Page 14: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Motivating Questions:

14

Can a formally verified, correctly implemented compiler optimization introduce a security

bug not present in the source?

YES!

How prevalent is the problem?Also, what gives?

Page 15: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Memory Persistence

Side Channels

Language Specifics

Dead store eliminationFunction call inlining

Code motion

Subexpression EliminationStrength reduction

Peephole Optimizations

Undefinedness in C/C++Memory model issuesSynchronization issues

Page 16: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

16

char *getPWHash() {// code performing a secure computation// assuming a trusted execution environment.}void compute() { // local variableslong i, j;char *sha;// Code in this function does not assume// a trusted execution environment....//call secure function sha=getPWHash();

...}

(from the paper)

Function Call Inlining

Page 17: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

17

*SCALE=\(2); # 2 or 8, that is the question:-) Value of 8 results# in 16KB large table, which is tough on L1 cache, but eliminates# unaligned references to it. Value of 2 results in 4KB table, but# 7/8 of references to it are unaligned. AMD cores seem to be# allergic to the latter, while Intel ones - to former [see the# table]. I stick to value of 2 for two reasons: 1. smaller table# minimizes cache trashing and thus mitigates the hazard of side-# channel leakage similar to AES cache-timing one; 2. performance# gap among different µ-archs is smaller....&set_label("roundsdone",16);! &mov! ("esi",&DWP(0,"ebx"));!! # reload argument block! &mov! ("edi",&DWP(4,"ebx"));! &mov! ("eax",&DWP(8,"ebx"));

! for($i=0;$i<8;$i++) { &pxor(@mm[$i],&QWP($i*8,"edi")); } # L^=inp! for($i=0;$i<8;$i++) { &pxor(@mm[$i],&QWP($i*8,"esi")); } # L^=H! for($i=0;$i<8;$i++) { &movq(&QWP($i*8,"esi"),@mm[$i]); } # H=L

! &lea! ("edi",&DWP(64,"edi"));!! # inp+=64! &sub! ("eax",1);! ! ! # num--! &jz!(&label("alldone"));! &mov! (&DWP(4,"ebx"),"edi");!! # update argument block! &mov! (&DWP(8,"ebx"),"eax");! &jmp! (&label("outerloop"));

https://github.com/openssl/openssl/blob/e0fc7961c4fbd27577fb519d9aea2dc788742715/crypto/whrlpool/asm/wp-mmx.pl

Side Channels

Page 18: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

18

int crypt(int k*){int key = 0;if (k[0]==0xC0DE){ key=k[0]*15+3; key+=k[1]*15+3; key+=k[2]*15+3;} else { key=2*15+3; key+=2*15+3; key+=2*15+3;}

(from the paper)

Common Subexpression Elimination

int crypt(int k*){int key = 0;if (k[0]==0xC0DE){ key=k[0]*15+3; key+=k[1]*15+3; key+=k[2]*15+3;} else { // replaced by tmp = 2*15+3; key = 3*tmp;}

Page 19: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

19

static unsigned int tun_chr_poll(struct file *file, poll_table * wait){ struct tun_file *tfile = file->private_data; struct tun_struct *tun = __tun_get(tfile); struct sock *sk = tun->sk; unsigned int mask = 0;

if (!tun) return POLLERR;

...}

Undefinedness (null dereferences)

static unsigned int tun_chr_poll(struct file *file, poll_table * wait){ struct tun_file *tfile = file->private_data; struct tun_struct *tun = __tun_get(tfile); struct sock *sk = tun->sk; unsigned int mask = 0;

return POLLERR;

...}

http://lwn.net/Articles/341773/

Page 20: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

20

https://lkml.org/lkml/2007/5/7/213

Page 21: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

21

SOSP 2013

Page 22: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

22

1 A very brief history of compiler correctness

2 Correctness vs. Security by Example

3 Correctness vs. Security, Formally

4 Future Directions

Page 23: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Observations

23

Compiler correctness proofs show that the “behaviour” of the code is the same before

and after a transformation.

Behaviour is defined as some observable aspect of execution, typically state.

Execution is defined with respect to a hypothetical abstract machine.

Page 24: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

24

int increment(int a) { int b = a; b++; return b;}

A Simple, Correct Transformation

int increment(int a) {

return a + 1;}

Page 25: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

25

int increment(int a) { int b = a; b++; return b;}

A Simple, Correct Transformation

int increment(int a) {

return a + 1;}

pc, x:5, y:10

Call stack

p1, a:5

pc, x:5, y:10

Call stack

p2, a:5, b:5

pc, x:5, y:10

Call stack

p3, a:5, b:6

pc, x:5, y:10

Call stack

call inc(x); y = ret b;

pc’, x:5, y:6

Call stack

Page 26: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

26

int increment(int a) { int b = a; b++; return b;}

A Simple, Correct Transformation

int increment(int a) {

return a + 1;}

pc, x:5, y:10

Call stack

pc’, x:5, y:6

Call stack

p4, a:5

pc, x:5, y:10

Call stack

call inc(x); y = ret b;

Page 27: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

27

int increment(int a) { int b = a; b++; return b;}

A Simple, Correct Transformation

int increment(int a) {

return a + 1;}

pc, x:5, y:10

Call stack

p1, a:5

pc, x:5, y:10

Call stack

p2, a:5, b:5

pc, x:5, y:10

Call stack

p3, a:5, b:6

pc, x:5, y:10

Call stack

pc’, x:5, y:6

Call stack

p4, a:5

pc, x:5, y:10

Call stack

call inc(x); y = ret b;

Page 28: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Compiler Writer vs. Attacker

28

Source Program

Compiled Program

Execution Environment

Abstract Machine

Runtime Machine

OS, Architecture,

etc.

Optimizations,Correctness

Exploits,Vulnerabilities,

Page 29: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

More Observations

29

Attackers reason about details (residual state, timing, etc.) not modelled by the abstract

semantics machine.

Correctness guarantees do not preserve security because those exploits are not even possible in

the machine used in proofs!

Page 30: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

However ...

30

Page 31: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

31

int increment(int a) { int b = a; b++; return b;}

A Less Abstract Execution

int increment(int a) {

return a + 1;}

pc, x:5, y:10

Call stack

p1, a:5

pc, x:5, y:10

Call stack

p2, a:5, b:5

pc, x:5, y:10

Call stack

p3, a:5, b:6

pc, x:5, y:10

Call stack

call inc(x);y = ret b;

p3, a:5, b:6

pc’, x:5, y:6

Call stack

Call stack is closer to implementation.

Page 32: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

32

int increment(int a) { int b = a; b++; return b;}

A Simple, Correct Transformation

int increment(int a) {

return a + 1;}

pc, x:5, y:10

Call stack

p4, a:5

pc, x:5, y:10

Call stack

p4, a:5

pc, x:5, y:5

Call stack

Page 33: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

33

int increment(int a) { int b = a; b++; return b;}

A Less Abstract Execution

int increment(int a) {

return a + 1;}

pc, x:5, y:10

Call stack

p1, a:5

pc, x:5, y:10

Call stack

p2, a:5, b:5

pc, x:5, y:10

Call stack

p3, a:5, b:6

pc, x:5, y:10

Call stack

p3, a:5, b:6

pc’, x:5, y:6

Call stack

p4, a:5

pc, x:5, y:10

Call stack

p4, a:5

pc, x:5, y:5

Call stack

Page 34: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Formal Model vs. Proof Technique

34

Source Program

Compiled Program

Execution Environment

Abstract Machine

Runtime Machine

OS, Architecture,

etc.

Proof technique

Model

Different models

Same proof technique!

Page 35: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

35

1 Compilers and Trust

2 Correctness vs. Security by Example

3 Correctness vs. Security, Formally

4 Future Directions

Page 36: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Testing for a Correctness-Security Gap

36

Memory Persistence

Side Channels

Language Specifics

Dead store eliminationFunction call inlining

Code motion

Subexpression EliminationStrength reduction

Peephole Optimizations

Undefinedness in C/C++Memory model issuesSynchronization issues

Page 37: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

New, Formal Machine Models

37

SourceSemantics Machine

Timing Machines

AssemblerSemantics Machine

IRSemantics Machine

Memory Hierarchy Machines

Power Machines

Page 38: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Parameterized Correctness Proofs

38

Optimization Machine Attacker

Is the code before and after optimization, equivalent from the viewpoint of an attacker

observing the machine?

Page 39: The Correctness-Security Gap in Compiler Optimizationnebelwelt.net/files/15LangSec-presentation.pdf · a Trojan horse in an Air Force critique [4] of the secu- rity of an early implementation

Weak Memory Models

Security-Preserving Compilers

Litmus tests

Memory barriers

Fence insertion

New formal models

Correctness modulo memory

...

?