0x1A Great Papers in Computer Security

Similar documents
Control Flow Integrity & Software Fault Isolation. David Brumley Carnegie Mellon University

Confinement (Running Untrusted Programs)

Sandboxing Untrusted Code: Software-Based Fault Isolation (SFI)

Control Flow Integrity

Securing Untrusted Code

Sandboxing. CS-576 Systems Security Instructor: Georgios Portokalidis Spring 2018

Inline Reference Monitoring Techniques

Runtime Defenses against Memory Corruption

CSE 227 Computer Security Spring 2010 S f o t ftware D f e enses I Ste St f e an f Sa v Sa a v g a e g

Module: Return-oriented Programming. Professor Trent Jaeger. CSE543 - Introduction to Computer and Network Security

Efficient Software Based Fault Isolation. Software Extensibility

Hardware OS & OS- Application interface

ISOLATION DEFENSES GRAD SEC OCT

CS 6V Control-Flow Integrity Principles, Implementations, and Applications. Sureshbabu Murugesan

Software Vulnerabilities August 31, 2011 / CS261 Computer Security

16 Sharing Main Memory Segmentation and Paging

0x1A Great Papers in Computer Security

Lecture Notes for 04/04/06: UNTRUSTED CODE Fatima Zarinni.

CS399 New Beginnings. Jonathan Walpole

15 Sharing Main Memory Segmentation and Paging

Last 2 Classes: Introduction to Operating Systems & C++ tutorial. Today: OS and Computer Architecture

Lec 22: Interrupts. Kavita Bala CS 3410, Fall 2008 Computer Science Cornell University. Announcements

Operating Systems CMPSCI 377 Spring Mark Corner University of Massachusetts Amherst

Spectre and Meltdown. Clifford Wolf q/talk

Module: Return-oriented Programming. Professor Trent Jaeger. CSE543 - Introduction to Computer and Network Security

CS 5460/6460 Operating Systems

Anne Bracy CS 3410 Computer Science Cornell University

Address spaces and memory management

Processes. Johan Montelius KTH

4. Jump to *RA 4. StackGuard 5. Execute code 5. Instruction Set Randomization 6. Make system call 6. System call Randomization

Inject malicious code Call any library functions Modify the original code

A process. the stack

Bypassing Browser Memory Protections

Anne Bracy CS 3410 Computer Science Cornell University

A program execution is memory safe so long as memory access errors never occur:

Fast Byte-Granularity Software Fault Isolation

INFLUENTIAL OPERATING SYSTEM RESEARCH: SECURITY MECHANISMS AND HOW TO USE THEM CARSTEN WEINHOLD

Buffer overflow background

Syscalls, exceptions, and interrupts, oh my!

OS Extensibility: SPIN and Exokernels. Robert Grimm New York University

0x1A Great Papers in Computer Security

Recall: Address Space Map. 13: Memory Management. Let s be reasonable. Processes Address Space. Send it to disk. Freeing up System Memory

CS533 Concepts of Operating Systems. Jonathan Walpole

Hakim Weatherspoon CS 3410 Computer Science Cornell University

Practical Malware Analysis

2 Sadeghi, Davi TU Darmstadt 2012 Secure, Trusted, and Trustworthy Computing Chapter 6: Runtime Attacks

Protection and System Calls. Otto J. Anshus

PRESENTED BY: SANTOSH SANGUMANI & SHARAN NARANG

White Paper SOFTWARE TECHNIQUES FOR MANAGING SPECULATION ON AMD PROCESSORS

Confinement (Running Untrusted Programs)

CS 550 Operating Systems Spring System Call

High-Level Language VMs

Control Flow Integrity for COTS Binaries Report

John Wawrzynek & Nick Weaver

Department of Electrical Engineering and Computer Science MASSACHUSETTS INSTITUTE OF TECHNOLOGY Fall 2011.

SYSTEM CALL IMPLEMENTATION. CS124 Operating Systems Fall , Lecture 14

Beyond Stack Smashing: Recent Advances in Exploiting. Jonathan Pincus(MSR) and Brandon Baker (MS)

Cling: A Memory Allocator to Mitigate Dangling Pointers. Periklis Akritidis

by Marina Cholakyan, Hyduke Noshadi, Sepehr Sahba and Young Cha

Identity-based Access Control

Java Internals. Frank Yellin Tim Lindholm JavaSoft

6.828: OS/Language Co-design. Adam Belay

Portland State University ECE 587/687. Virtual Memory and Virtualization

What the CPU Sees Basic Flow Control Conditional Flow Control Structured Flow Control Functions and Scope. C Flow Control.

CS5460: Operating Systems

238P: Operating Systems. Lecture 5: Address translation. Anton Burtsev January, 2018

An Interrupt is either a Hardware generated CALL (externally derived from a hardware signal)

Virtual Machines and Dynamic Translation: Implementing ISAs in Software

The Kernel Abstraction. Chapter 2 OSPP Part I

Department of Electrical Engineering and Computer Science MASSACHUSETTS INSTITUTE OF TECHNOLOGY Fall Quiz I

Portable Software Fault Isolation

Addresses in the source program are generally symbolic. A compiler will typically bind these symbolic addresses to re-locatable addresses.

Department of Electrical Engineering and Computer Science MASSACHUSETTS INSTITUTE OF TECHNOLOGY Fall Quiz I Solutions

T Jarkko Turkulainen, F-Secure Corporation

Classifying Information Stored in Memory! Memory Management in a Uniprogrammed System! Segments of a Process! Processing a User Program!

Low-level software security

Operating System Architecture. CS3026 Operating Systems Lecture 03

Meltdown or "Holy Crap: How did we do this to ourselves" Meltdown exploits side effects of out-of-order execution to read arbitrary kernelmemory

Security Architecture

CS252 S05. Main memory management. Memory hardware. The scale of things. Memory hardware (cont.) Bottleneck

Virtual Memory. Kevin Webb Swarthmore College March 8, 2018

PRACTICAL CONTROL FLOW INTEGRITY & RANDOMIZATION FOR BINARY EXECUTABLES

Software Security: Buffer Overflow Defenses

Administrivia. Lab 1 due Friday 12pm. We give will give short extensions to groups that run into trouble. But us:

Operating System Security

Outline. V Computer Systems Organization II (Honors) (Introductory Operating Systems) Language-based Protection: Solution

Honours/Master/PhD Thesis Projects Supervised by Dr. Yulei Sui

Operating System Kernels

CS412/CS413. Introduction to Compilers Tim Teitelbaum. Lecture 21: Generating Pentium Code 10 March 08

24-vm.txt Mon Nov 21 22:13: Notes on Virtual Machines , Fall 2011 Carnegie Mellon University Randal E. Bryant.

OS COMPONENTS OVERVIEW OF UNIX FILE I/O. CS124 Operating Systems Fall , Lecture 2

Operating Systems. System calls. Guillaume Salagnac. Fall Insa-Lyon IST Semester

int $0x32 // call interrupt number 50

Towards a Resilient Operating System for Wireless Sensor Networks

Short Notes of CS201

Control Abstraction. Hwansoo Han

Problem Set 1. 1 Implementing ACLs. CSE 409 Fall October 2015

Memory Allocation. Copyright : University of Illinois CS 241 Staff 1

Introduction to Operating Systems Prof. Chester Rebeiro Department of Computer Science and Engineering Indian Institute of Technology, Madras

CSE 565 Computer Security Fall 2018

Transcription:

CS 380S 0x1A Great Papers in Computer Security Vitaly Shmatikov http://www.cs.utexas.edu/~shmat/courses/cs380s/ slide 1

Reference Monitor Observes execution of the program/process At what level? Possibilities: hardware, OS, network Halts or confines execution if the program is about to violate the security policy What s a security policy? Which system events are relevant to the policy? Instructions, memory accesses, system calls, network packets Cannot be circumvented by the monitored process slide 2

Enforceable Security Policies Reference monitors can only enforce safety policies [Schneider 98] Execution of a process is a sequence of states Safety policy is a predicate on a prefix of the sequence Policy must depend only on the past of a particular execution; once it becomes false, it s always false Not policies that require knowledge of the future If this server accepts a SYN packet, it will eventually send a response Not policies that deal with all possible executions This program should never reveal a secret slide 3

Reference Monitor Implementation Kernelized Wrapper Modified program Program RM Program Program RM RM Kernel Kernel Kernel Integrate reference monitor into program code during compilation or via binary rewriting Policies can depend on application semantics Enforcement doesn t require context switches in the kernel Lower performance overhead slide 4

What Makes a Process Safe? Memory safety: all memory accesses are correct Respect array bounds, don t stomp on another process s memory, don t execute data as if it were code Control-flow safety: all control transfers are envisioned by the original program No arbitrary jumps, no calls to library routines that the original program did not call Type safety: all function calls and operations have arguments of correct type slide 5

OS as a Reference Monitor Collection of running processes and files Processes are associated with users Files have access control lists (ACLs) saying which users can read/write/execute them OS enforces a variety of safety policies File accesses are checked against file s ACL Process cannot write into memory of another process Some operations require superuser privileges But may need to switch back and forth (e.g., setuid in Unix) Enforce CPU sharing, disk quotas, etc. Same policy for all processes of the same user slide 6

Hardware Mechanisms: TLB TLB: Translation Lookaside Buffer Maps virtual to physical addresses Located next to the cache Only supervisor process can manipulate TLB But if OS is compromised, malicious code can abuse TLB to make itself invisible in virtual memory (Shadow Walker) TLB miss raises a page fault exception Control is transferred to OS (in supervisor mode) OS brings the missing page to the memory This is an expensive context switch slide 7

Steps in a System Call Time User Process calls f=fopen( foo ) library executes break calls fread(f,n,&buf) library executes break trap Kernel [Morrisett] saves context, flushes TLB, etc. checks UID against ACL, sets up IO buffers & file context, pushes ptr to context on user s stack, etc. restores context, clears supervisor bit saves context, flushes TLB, etc. checks f is a valid file context, does disk access into local buffer, copies results into user s buffer, etc. restores context, clears supervisor bit slide 8

Modern Hardware Meets Security Modern hardware: large number of registers, big memory pages Isolation each process should live in its own hardware address space but the performance cost of inter-process communication is increasing Context switches are very expensive Trapping into OS kernel requires flushing TLB and cache, computing jump destination, copying memory Conflict: isolation vs. cheap communication slide 9

Software Fault Isolation (SFI) Processes live in the same hardware address space; software reference monitor isolates them Each process is assigned a logical fault domain Check all memory references and jumps to ensure they don t leave process s domain Tradeoff: checking vs. communication [Wahbe et al. SOSP 93] Pay the cost of executing checks for each memory write and control transfer to save the cost of context switching when trapping into the kernel slide 10

Fault Domains Process s code and data in one memory segment Identified by a unique pattern of upper bits Code is separate from data (heap, stack, etc.) Think of a fault domain as a sandbox Binary modified so that it cannot escape domain Addresses are masked so that all memory writes are to addresses within the segment Coarse-grained memory safety (vs. array bounds checking) Code is inserted before each jump to ensure that the destination is within the segment Does this help much against buffer overflows? slide 11

Verifying Jumps and Stores If target address can be determined statically, mask it with the segment s upper bits Crash, but won t stomp on another process s memory If address unknown until runtime, insert checking code before the instruction Ensure that code can t jump around the checks Target address held in a dedicated register Its value is changed only by inserted code, atomically, and only with a value from the data segment slide 12

Simple SFI Example Fault domain = from 0x1200 to 0x12FF Original code: write x Naïve SFI: Better SFI: x := x & 00FF x := x 1200 write x tmp := x & 00FF tmp := tmp 1200 write tmp convert x into an address that lies within the fault domain What if the code jumps right here? slide 13

Inline Reference Monitor Generalize SFI to more general safety policies than just memory safety Policy specified in some formal language Policy deals with application-level concepts: access to system resources, network events, etc. No process should send to the network after reading a file, No process should open more than 3 windows, Policy checks are integrated into the binary code Via binary rewriting or when compiling Inserted checks should be uncircumventable Rely on SFI for basic memory safety slide 14

Policy Specification in SASI [Cornell project] (op = div arg2 = 0) read read send No division by zero No network send after file read SASI policies are finite-state automata Can express any safety policy Easy to analyze, emulate, compile Written in SAL language (textual version of diagrams) slide 15

Policy Enforcement Checking before every instruction is an overkill Check No division by zero only before DIV SASI uses partial evaluation Insert policy checks before every instruction, then rely on static analysis to eliminate unnecessary checks There is a semantic gap between individual instructions and policy-level events Applications use abstractions such as strings, types, files, function calls, etc. Reference monitor must synthesize these abstractions from low-level assembly code slide 16

M. Abadi, M. Budiu, U. Erlingsson, J. Ligatti Control-Flow Integrity: Principles, Implementations, and Applications (CCS 2005) slide 17

CFI: Control-Flow Integrity [Abadi et al.] Main idea: pre-determine control flow graph (CFG) of an application Static analysis of source code Static binary analysis CFI Execution profiling Explicit specification of security policy Execution must follow the pre-determined control flow graph slide 18

CFI: Binary Instrumentation Use binary rewriting to instrument code with runtime checks (similar to SFI) Inserted checks ensure that the execution always stays within the statically determined CFG Whenever an instruction transfers control, destination must be valid according to the CFG Goal: prevent injection of arbitrary code and invalid control transfers (e.g., return-to-libc) Secure even if the attacker has complete control over the thread s address space slide 19

CFG Example slide 20

CFI: Control Flow Enforcement For each control transfer, determine statically its possible destination(s) Insert a unique bit pattern at every destination Two destinations are equivalent if CFG contains edges to each from the same source This is imprecise (why?) Use same bit pattern for equivalent destinations Insert binary code that at runtime will check whether the bit pattern of the target instruction matches the pattern of possible destinations slide 21

CFI: Example of Instrumentation Original code Instrumented code Jump to the destination only if the tag is equal to 12345678 Abuse an x86 assembly instruction to insert 12345678 tag into the binary slide 22

CFI: Preventing Circumvention Unique IDs Bit patterns chosen as destination IDs must not appear anywhere else in the code memory except ID checks Non-writable code Program should not modify code memory at runtime What about run-time code generation and self-modification? Non-executable data Program should not execute data as if it were code Enforcement: hardware support + prohibit system calls that change protection state + verification at load-time slide 23

Improving CFI Precision Suppose a call from A goes to C, and a call from B goes to either C, or D (when can this happen?) CFI will use the same tag for C and D, but this allows an invalid call from A to D Possible solution: duplicate code or inline Possible solution: multiple tags Function F is called first from A, then from B; what s a valid destination for its return? CFI will use the same tag for both call sites, but this allows F to return to B after being called from A Solution: shadow call stack slide 24

CFI: Security Guarantees Effective against attacks based on illegitimate control-flow transfer Stack-based buffer overflow, return-to-libc exploits, pointer subterfuge Does not protect against attacks that do not violate the program s original CFG Incorrect arguments to system calls Substitution of file names Other data-only attacks slide 25

Possible Execution of Memory [Erlingsson] slide 26

Next Step: XFI [Erlingsson et al. OSDI 06] Inline reference monitor added via binary rewriting Can be applied to some legacy code CFI to prevent circumvention Fine-grained access control policies for memory regions More than simple memory safety (cf. SFI) Relies in part on load-time verification Similar to proof-carrying code slide 27

Two Stacks XFI maintains a separate scoped stack with return addresses and some local variables Keeps track of function calls, returns and exceptions Secure storage area for function-local information Cannot be overflown, accessed via a computed reference or pointer, etc. Stack integrity ensured by software guards Presence of guards is determined by static verification when program is loaded Separate allocation stack for arrays and local variables whose address can be passed around slide 28

XFI: Memory Access Control Module has access to its own memory With restrictions (e.g., shouldn t be able to corrupt its own scoped stack) Host can also grant access to other contiguous memory regions Fine-grained: can restrict access to a single byte Access to constant addresses and scoped stack verified statically Inline memory guards verify other accesses at runtime Fast inline verification for a certain address range; if fails, call special routines that check access control data structures slide 29

XFI: Preventing Circumvention Integrity of the XFI protection environment Basic control-flow integrity Scoped stack prevents out-of-order execution paths even if they match control-flow graph Dangerous instructions are never executed or their execution is restricted For example, privileged instructions that change protection state, modify x86 flags, etc. Therefore, XFI modules can even run in kernel slide 30

WIT: Write Integrity Testing [Akritidis et al. Preventing memory error exploits with WIT Oakland 08] Combines static analysis For each memory write, compute the set of memory locations that may be the destination of the write For each indirect control transfer, compute the set of addresses that may be the destination of the transfer Color table assigns matching colors to instruction (write or jump) and all statically valid destinations Is this sound? Complete? with dynamic enforcement Code is instrumented with runtime checks to verify that destination of write or jump has the right color slide 31

WIT: Write Safety Analysis Start with off-the-shelf points-to analysis Gives a conservative set of possible values for each ptr A memory write instruction is safe if It has no explicit destination operand, or destination operand is a temporary, local or global variable Such instructions either modify registers, or a constant number of bytes starting at a constant offset from the frame pointer or the data segment (example?) or writes through a pointer that is always in bounds How do we know statically that a pointer is always in bounds? Safe instructions require no runtime checks Can also infer safe destinations (how?) slide 32

WIT: Runtime Checks Statically, assign a distinct color to each unsafe write instruction and all of its possible destinations What if some destination can be written by two different instructions? Any security implications? Add a runtime check that destination color matches the statically assigned color What attack is this intended to prevent? Same for indirect (computed) control transfers Except for indirect jumps to library functions (done through pointers which are protected by write safety) How is this different from CFI? Hint: think RET address slide 33

WIT: Additional Protections Change layout of stack frames to segregate safe and unsafe local variables Surround unsafe objects by guards/canaries What attack is this intended to prevent? How? Wrappers for malloc()/calloc() and free() malloc() assigns color to newly allocated memory free() is complicated Has the same (statically computed) color as the freed object At runtime, treated as an unsafe write to this object Reset color of object to 0 what attack does this prevent? Several other subtle details and checks slide 34

WIT: Handling Libraries Basic WIT doesn t work for libraries (why?) Instead, assign the same, standard color to all unsafe objects allocated by library functions and surround them by guards Different from the colors of safe objects and guards Prevents buffer overflows What attack does this not prevent? Wrappers for memory copying functions For example, memcpy() and strcpy() Receive color of the destination as an extra argument, check at runtime that it matches static color slide 35

B. Yee et al. Native Client: A Sandbox for Portable, Untrusted x86 Native Code (Oakland 2009) slide 36

Native Client Goal: download an x86 binary and run it safely Much better performance than JavaScript, Java, etc. ActiveX: verify signature, then unrestricted Critically depends on user s understanding of trust.net controls: IL bytecode + verification Native Client: sandbox for untrusted x86 code Restricted subset of x86 assembly SFI-like sandbox ensures memory safety Restricted system interface (Close to) native performance slide 37

NaCl Sandbox Code is restricted to a subset of x86 assembly Enables reliable disassembly and efficient validation No unsafe instructions syscall, int, ret, memory-dependent jmp and call, privileged instructions, modifications of segment state No loads or stores outside dedicated segment Address space constrained to 0 mod 32 segment Similar to SFI Control-flow integrity slide 38

Constraints for NaCl Binaries slide 39

Control-Flow Integrity in NaCl For each direct branch, statically compute target and verify that it s a valid instruction Must be reachable by fall-through disassembly Indirect branches must be encoded as and %eax, 0xffffffe0 jmp *%eax Guarantees that target is 32-byte aligned Works because of restriction to the zero-based segment Very efficient enforcement of control-flow integrity No RET Sandboxing sequence, then indirect jump slide 40

Interacting with Host Machine Trusted runtime environment for thread creation, memory management, other system services Untrusted trusted control transfer: trampolines Start at 0 mod 32 addresses (why?) in the first 64K of the NaCl module address space First 4K are read- and write-protected (why?) Reset registers, restore thread stack (outside module s address space), invoke trusted service handlers Trusted untrusted control transfer: springboard Start at non-0 mod 32 addresses (why?) Can jump to any untrusted address, start threads slide 41

Other Aspects of NaCl Sandbox No hardware exceptions or external interrupts Because segment register is used for isolation, stack appears invalid to the OS no way to handle No network access via OS, only via JavaScript in browser No system calls such as connect() and accept() JavaScript networking is subject to same-origin policy IMC: inter-module communication service Special IPC socket-like abstraction Accessible from JavaScript via DOM object, can be passed around and used to establish shared memory slide 42