dawn song
play

Dawn Song dawnsong@cs.berkeley.edu 1 Enforcing Isolation Using - PDF document

Safe Extensions (II) Dawn Song dawnsong@cs.berkeley.edu 1 Enforcing Isolation Using Type Safety XFIs protection is still not fine-grained Safe languages provide type safety, but cannot handle legacy code Retrofit legacy code for


  1. Safe Extensions (II) Dawn Song dawnsong@cs.berkeley.edu 1 Enforcing Isolation Using Type Safety • XFI’s protection is still not fine-grained • Safe languages provide type safety, but cannot handle legacy code • Retrofit legacy code for type safety – E.g., CCured, Cyclone » Issues: fat pointer, change data layout 2 Enforcing Safety Previous Approach (Cyclone, CCured, SafeC) struct buffer { int *data; int len; int *data_b; // lower bound (base) } b; int *data_e; // upper bound (end) for (i = 0; i < b.len; i++) { // verify that b.data[i] is safe assert(data_b <= b.data + i < data_e); ... b.data[i] ... } Jeremy Condit 3

  2. Isolating Extensions with CCured Problems: � Driver bug can’t Kernel corrupt kernel � Driver can’t corrupt itself Adapter • Adapter is Driver complicated! Driver � CCured [PLDI 03], Cyclone [Jim et al., USENIX 02] 4 Jeremy Condit Enforcing Safety with Deputy struct buffer { int * count(len) data; int len; } b; for (i = 0; i < b.len; i++) { assert(0 <= i < b.len); ... b.data[i] ... Advantages: } 1. No change in data layout 2. Easier to optimize 3. Contract is in the code! 5 Isolating Extensions with Deputy Problems: � Driver bug can’t Kernel corrupt kernel � Driver can’t corrupt itself � No adapter Driver required Driver � Annotated interface Need driver source Deputy [ESOP 07, OSDI 06] 6 Jeremy Condit

  3. Deputy struct buffer { int * count(len) data; int len; } b; Key Insight: Most pointers’ bounds information is already present in the program in some form--just not in a form the compiler understands! 7 Jeremy Condit Deputy struct buffer { int * count(len) data; int len; } b; Dependent Types: Types whose meaning depends on the run-time value of a program expression. Dependent types enable modular checking! 8 Jeremy Condit Modularity Alternative to whole-program analysis and instrumentation – Source code unavailable – Source code cannot be recompiled Incremental improvements – Improve program module by module – Improve overall code quality gradually 9 Jeremy Condit

  4. Why Dependent Types? struct buffer { struct buffer { Used by many char * data; char * data; int len; int len; common idioms }; }; in C code int strlcpy(char * dst, int strlcpy(char * dst, char * src, char * src, int n); int n); struct message { struct message { int tag; int tag; union { union { int num; int num; char *str; char *str; } u; } u; }; }; 10 Why Dependent Types? struct buffer { struct buffer { Used by many char * count(len) data; char * count(len) data; int len; int len; common idioms }; }; in C code int strlcpy(char * nt count(n) dst, int strlcpy(char * nt count(n) dst, char * nt count(0) src, char * nt count(0) src, int n); int n); If we annotate struct message { struct message { these idioms, int tag; int tag; we can check union { union { int num when(tag == 1); int num when(tag == 1); for correct use! char *str when(tag == 2); char *str when(tag == 2); } u; } u; }; }; 11 Compiler Overview code with programmer annotations infer annotations infer annotations add run-time checks add run-time checks optimize checks optimize checks safe � executable 12

  5. Discussion (I) • Do annotations need to be trusted? – What happens when annotations are conservative? » E.g., a COUNT(3) pointer actually points to a buffer of length 6? • How well does the “Deputy assumption” hold? – “Pretty good for array bounds. Breaks down a bit for more complicated cases such as OO-style inheritance...” [Condit] 13 Discussion (II) • How can attackers circumvent SafeDrive? – SafeDrive/Deputy assumptions: » Trusted casts are safe » Deallocation is safe » Concurrency is correct (TOCTTOU) • What do you think about “incremental improvement” property from security point of view? 14 Discussion (III) • So far, most work has focused on isolation. Is this the whole picture? What’s missing? • What properties should interface design consider? • What security measures do you need to take for shared data structure? 15

  6. Discussion (IV) • How may attacker get around XFI? • What would you do to solve the safe extension problem if you were Bill Gates? – SDV (Static Driver Verifier) shipped with WDK 16 Summary • Safe extension – Challenging & important problem • Next class: Virtual Machines & Security • Mid-semester questionnaire 17

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend