information flow control for standard os abstractions
play

Information Flow Control For Standard OS Abstractions Max Krohn, - PowerPoint PPT Presentation

Information Flow Control For Standard OS Abstractions Max Krohn, Alex Yip, Micah Brodsky, Natan Cliffer, Frans Kaashoek, Eddie Kohler, Robert Morris Vulnerabilities in Websites Exploits Web software is buggy Attackers find and


  1. Information Flow Control For Standard OS Abstractions Max Krohn, Alex Yip, Micah Brodsky, Natan Cliffer, Frans Kaashoek, Eddie Kohler, Robert Morris

  2. Vulnerabilities in Websites  Exploits • Web software is buggy • Attackers find and exploit these bugs • Data is stolen / Corrupted – “USAJobs.gov hit by Monster.com attack, 146,000 people affected” – “UN Website is Defaced via SQL Injection” – “Payroll Site Closes on Security Worries” – “Hacker Accesses Thousands of Personal Data Files at CSU Chico” – “FTC Investigates PETCO.com Security Hole” – “Major Breach of UCLA’s Computer Files” – “Restructured Text Include Directive Does Not Respect ACLs”

  3. Decentralized Information Flow Control (DIFC) CEO P Layoff Web App Web App Plans Declassifier Free TShirts Intern

  4. Decentralized Information Flow Control (DIFC) CEO Layoff Web App Web App Plans Declassifier /tmp Free File TShirts Helper Process Intern

  5. Why is DIFC a cult?

  6. Who Needs to Understand DIFC? CEO Layoff Web App Web App Plans Declassifier /tmp Free File TShirts Helper Process Intern

  7. Why is Today’s DIFC DIF fi C ult? • Label systems are complex • Unexpected program behavior • Cannot reuse existing code – Drivers, SMP support, standard libraries

  8. Unexpected Program Behavior (Unreliable Communication) Process p Process q P “Fire Alice, Bob, Charlie, Doug, Eddie, Frank, George, Hilda, Ilya …” “I stopped reading” “I crashed”

  9. Unexpected Program Behavior (Mysterious Failures) File Process q Process p

  10. Solution/Outline 1. Flume: Solves DIFC Problems – User-level implementation of DIFC on Linux – Simple label system – Endpoints: Glue Between Unix API and Labels 2. Application + Evaluation – Real Web software secured by Flume

  11. Outline 1. Flume: Solves DIFC Problems – User-level implementation of DIFC on Linux – Simple label system – Endpoints: Glue Between Unix API and Labels 2. Application + Evaluation

  12. Flume Implementation • Goal: User-level implementation – apt-get install flume • Approach: – System Call Delegation [ Ostia by Garfinkel et al, 2003] – Use Linux 2.6 (or OpenBSD 3.9)

  13. System Call Delegation open(“/hr/ LayoffPlans ”, O_RDONLY); Web App glibc Linux Kernel Layoff Plans

  14. System Call Delegation open(“/hr/ LayoffPlans ”, O_RDONLY); Flume Web App Web App Reference Monitor Flume Libc Linux Kernel Layoff Plans

  15. Three Classes of Processes Flume-Oblivious Unconfined/ Confined Mediators Flume Flume Flume Reference Reference Reference Monitor Monitor Monitor Process p Process p Process p Linux Linux Linux Kernel Kernel Kernel

  16. Outline 1. Flume: Solves DIFC Problems – User-level implementation of DIFC on Linux – Simple label system – Endpoints: Glue Between Unix API and Labels 2. Application + Evaluation

  17. Information Flow Control (IFC) • Goal: track which secrets a process has seen • Mechanism: each process gets a secrecy label – Label summarizes which categories of data a process is assumed to have seen. “tag” – Examples: “label” • { “Financial Reports” } • { “HR Documents” } • { “Financial Reports” and “HR Documents” }

  18. Tags + Labels change_label({Finance}); Process p tag_t HR = create_tag(); change_label({}); change_label({Finance,HR}); Any process can add S p = { Finance, HR } S p = { Finance } S p = {} change_label({Finance}); any tag to its label. D p = {} D p = { HR } DIFC Rule: A process can create a new tag; gets Same as Step 1. ability to declassify it. DIFC: Declassification in action. Legal HR Finance Universe of Tags: SecretProjects

  19. Communication Rule S p = { HR } P Process p Process q S q = { HR , Finance } p can send to q iff S p S q

  20. Outline 1. Flume: Solves DIFC Problems – User-level implementation of DIFC on Linux – Simple label system – Endpoints: Glue Between Unix API and Labels 2. Application + Evaluation

  21. Recall: Communication Problem stdout stdin Process p Process q S p = {} S q = { HR } D p = { HR } “I crashed” P “Fire Alice, Bob, Charlie, Doug, Eddie, Frank, George, Hilda, Ilya …” ? “SLOW DOWN!!”

  22. New Abstraction: Endpoints Process p Process q e f S e = { HR } S f = { HR } S p = {} S q = { HR } D p = { HR } “I crashed” P • If S e S f , then allow e to send to f “Fire Alice, Bob, Charlie, Doug, Eddie, Frank, George, Hilda, Ilya …” • If S f S e , then allow f to send to e • If S f = S e , then allow bidirectional flow P “SLOW DOWN!!”

  23. Endpoints Declassify Data Data enters process p with secrecy { HR } But p keeps its Process p e S e = { HR } label S p = {} S p = {} D p = { HR } Thus p needs HR D p

  24. Endpoint Invariant Writing • For any tag t S p and t S e • Or any tag t S e and t S p Reading • It must be that t D p Process p e S e = { HR } S p = { Finance } D p = { Finance, HR}

  25. Endpoints Labels Are Independent g S g = {} Process p Process q e f S e = { HR } S f = { HR } S p = {} S q = { HR } D p = { HR }

  26. Recall: Mysterious Failures File Process q Process p

  27. Endpoints Reveal Errors Eagerly D p = {} /tmp/public.dat Process p e S e = {} S p = {} S public.dat = {} ? Violates endpoint invariant! S p = { HR } Process q S p – S e = { HR } D p S q = { HR }  open(“/ tmp /public.dat”, O_WRONLY);  change_label({HR})

  28. Endpoints Reveal Errors Eagerly D p = {} /tmp/public.dat Process p e S e = {} S p = {} S public.dat = {} S p = { HR } Process q S q = { HR }  fd = open(“/ tmp /public.dat”, O_WRONLY);  close(fd);  change_label({HR})

  29. Outline 1. Flume: Solves DIFC Problems 2. Application + Evaluation

  30. Questions for Evaluation • Does Flume allow adoption of Unix software? • Does Flume solve security vulnerabilities? • Does Flume perform reasonably?

  31. Example App: MoinMoin Wiki

  32. How Problems Arise… if not self.request.user.may.read(pagename): x43 LayoffPlans return self.notAllowedFault() MoinMoin Wiki (100 kLOC) FreeTShirts

  33. MoinMoin + DIFC LayoffPlans MoinMoin Apache Declassifier Wiki 1 kLOC Web Server (100 kLOC) FreeTShirts Trusted Untrusted

  34. FlumeWiki Flume- Web Client unconfined reliable IPC confined Oblivious GET /LayoffPlans?user=Intern&PW=abcd LayoffPlans S ={ HR } MoinMoin Declassifier Apache 1 kLOC (100 kLOC) FreeTShirts S ={} file I/O

  35. Future Work Web Client GET /LayoffPlans?user=Intern&PW=abcd LayoffPlans S ={ HR } Totally Declassifier Apache Suspect 1 kLOC Software FreeTShirts S ={}

  36. Results • Does Flume allow adoption of Unix software? – 1,000 LOC launcher/declassifier – 1,000 out of 100,000 LOC in MoinMoin changed – Python interpreter, Apache, unchanged • Does Flume solve security vulnerabilities? – Without our knowing, we inherited two ACL bypass bugs from MoinMoin – Both are not exploitable in Flume’s MoinMoin • Does Flume perform reasonably? – Performs within a factor of 2 of the original on read and write benchmarks

  37. Most Related Work • Asbestos, HiStar: New DIFC OSes • Jif: DIFC at the language level • Ostia, Plash: Implementation techniques • Classical MAC literature (Bell-LaPadula, Biba, Orange Book MAC, Lattice Model, etc.)

  38. Limitations • Bigger TCB than HiStar / Asbestos – Linux stack (Kernel + glibc + linker) – Reference monitor (~22 kLOC) • Covert channels via disk quotas • Confined processes like MoinMoin don’t get full POSIX API. – spawn() instead of fork() & exec() – flume_pipe() instead of pipe()

  39. Summary • DIFC is a challenge to Programmers • Flume: DIFC in User-Level – Preserves legacy software – Complements today’s programming techniques • MoinMoin Wiki: Flume works as promised • Invite you to play around: http://flume.csail.mit.edu

  40. Thanks! To: ITRI, Nokia, NSF and You

  41. Reasons to Read the Paper • Generalized security properties – Including: Novel integrity policies • Support for very large labels • Support for clusters of Flume Machines

  42. Flume’s Rule is Fast • Recall: p can send to q iff: S p – D p S q D q • To Compute : – for each tag t S p : • If t S q and t D p and t D q : – output “NO” – output “OK” • Runs in time proportional to size of S p . • No need to enumerate D p or D q !!!

  43. Flume Communication Rule P ? ? MoinMoin MoinMoin Database ( p ) ( r ) ( q ) S r = { Bob } S p = { Alice } S q = { Alice } S q = {} D q = { Alice, Bob } D q = { Alice, Bob } S p S q 1. q changes to S q = { Alice } 2. p sends to q 3. q changes back to S q = {}

  44. Flume Communication Rule P P MoinMoin MoinMoin Database ( p ) ( r ) ( q ) S r = { Bob } S p = { Alice } S q = {} Senders get extra latitude D q = { Alice, Bob } Receivers get extra latitude • p can send to q iff : – In IFC : S p S q – In Flume: S p – D p S q D q

  45. Flume Kernel Module open(“/ alice /inbox.dat”, O_RDONLY); Flume Web App mov $0x5, %eax Reference open(…) int $0x80 Monitor P Flume Libc Flume Kernel Module Linux Kernel Alice’s Data

  46. Reference Monitor Proxies Pipes write(0, “some data”, 10); Flume Web App Helper Process Reference Monitor Linux Kernel

Recommend


More recommend