University of Washington Today Happy Monday! HW2 due, how is Lab 3 going? Today we’ll go over:  Address space layout  Input buffers on the stack  Overflowing.

Slides:



Advertisements
Similar presentations
Buffer Overflows Nick Feamster CS 6262 Spring 2009 (credit to Vitaly S. from UT for slides)
Advertisements

Machine-Level Programming V: Miscellaneous Topics Topics Buffer Overflow Linux Memory Layout Understanding Pointers Floating-Point Code CS 105 Tour of.
Machine Programming – Procedures and IA32 Stack CENG334: Introduction to Operating Systems Instructor: Erol Sahin Acknowledgement: Most of the slides are.
Today C operators and their precedence Memory layout
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics : Introduction to Computer Systems 8 th Lecture, Sep. 16, 2010 Instructors: Randy.
University of Washington Last Time For loops  for loop → while loop → do-while loop → goto version  for loop → while loop → goto “jump to middle” version.
Machine-Level Programming V: Miscellaneous Topics Sept. 24, 2002 Topics Linux Memory Layout Understanding Pointers Buffer Overflow Floating Point Code.
Machine-Level Programming V: Miscellaneous Topics Topics Linux Memory Layout Buffer Overflow Floating Point Code CS213.
Assembly תרגול 8 פונקציות והתקפת buffer.. Procedures (Functions) A procedure call involves passing both data and control from one part of the code to.
September 22, 2014 Pengju (Jimmy) Jin Section E
Fabián E. Bustamante, Spring 2007 Machine-Level Prog. V – Miscellaneous Topics Today Buffer overflow Floating point code Next time Memory.
University of Washington CSE 351 : The Hardware/Software Interface Section 5 Structs as parameters, buffer overflows, and lab 3.
Introduction to x86 Assembly or “How does someone hack my laptop?”
Security Exploiting Overflows. Introduction r See the following link for more info: operating-systems-and-applications-in-
Machine Programming – IA32 memory layout and buffer overflow CENG331: Introduction to Computer Systems 7 th Lecture Instructor: Erol Sahin Acknowledgement:
Carnegie Mellon 1 This week Buffer Overflow  Vulnerability  Protection.
1 UCR Common Software Attacks EE 260: Architecture/Hardware Support for Security Slide credits: some slides from Dave O’halloran, Lujo Bauer (CMU) and.
Fall 2008CS 334: Computer SecuritySlide #1 Smashing The Stack A detailed look at buffer overflows as described in Smashing the Stack for Fun and Profit.
Functions & Activation Records Recursion
IA32 Linux Memory Layout Stack Heap Data Text not drawn to scale FF
1 Carnegie Mellon Stacks : Introduction to Computer Systems Recitation 5: September 24, 2012 Joon-Sup Han Section F.
Buffer Overflow Computer Organization II 1 © McQuain Buffer Overflows Many of the following slides are based on those from Complete Powerpoint.
University of Washington Today Memory layout Buffer overflow, worms, and viruses 1.
Computer Security  x86 assembly  How did it go?  IceCTF  Lock picking  Survey to be sent out about lock picking sets  Bomblab  Nice job!
III:1 X86 Assembly – Buffer Overflow. III:2 Administrivia HW3 – skip the farmer game portion, moved to HW5  Due today HW4 – Endian swap in ASM and C.
Machine-Level Programming V: Miscellaneous Topics Topics Buffer Overflow Floating Point Code.
1 Machine-Level Programming V: Advanced Topics Andrew Case Slides adapted from Jinyang Li, Randy Bryant & Dave O’Hallaron.
Ithaca College 1 Machine-Level Programming IX Memory & buffer overflow Comp 21000: Introduction to Computer Systems & Assembly Lang Systems book chapter.
Smashing the Stack Overview The Stack Region Buffer Overflow
Buffer Overflows Many of the following slides are based on those from
Overflows & Exploits. In the beginning 11/02/1988 Robert Morris, Jr., a graduate student in Computer Science at Cornell, wrote an experimental, self-replicating,
Machine-Level Programming V: Miscellaneous Topics
Carnegie Mellon 1 Odds and Ends Intro to x86-64 Memory Layout.
1 Understanding Pointers Buffer Overflow. 2 Outline Understanding Pointers Buffer Overflow Suggested reading –Chap 3.10, 3.12.
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming V: Buffer overflow Slides.
Information Security - 2. A Stack Frame. Pushed to stack on function CALL The return address is copied to the CPU Instruction Pointer when the function.
Machine-Level Programming Advanced Topics Topics Linux Memory Layout Buffer Overflow.
Machine-Level Programming V: Miscellaneous Topics Feb 10, 2004 Topics Linux Memory Layout Understanding Pointers Buffer Overflow Floating Point Code class09.ppt.
Machine-Level Programming V: Miscellaneous Topics
CS 3214 Computer Systems Godmar Back Lecture 7. Announcements Stay tuned for Project 2 & Exercise 4 Project 1 due Sep 16 Auto-fail rule 1: –Need at least.
Machine-Level Programming V: Miscellaneous Topics Topics Linux Memory Layout Understanding Pointers Buffer Overflow Floating-Point Code CS 105 Tour of.
Machine-Level Programming Advanced Topics Topics Linux Memory Layout Understanding Pointers Buffer Overflow.
Machine-Level Programming V: Miscellaneous Topics Feb 6, 2003 Topics Linux Memory Layout Understanding Pointers Buffer Overflow Floating Point Code class09.ppt.
Machine-Level Programming V: Miscellaneous Topics Topics Buffer Overflow Floating Point Code class09.ppt.
Machine-Level Programming Advanced Topics Topics Buffer Overflow.
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics / : Introduction to Computer Systems 9 th Lecture, Sep. 25, 2012 Instructors:
1 Binghamton University Machine-Level Programming V: Advanced Topics CS220: Computer Systems II.
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics Slides courtesy of: Randy Bryant & Dave O’Hallaron.
Buffer Overflow Buffer overflows are possible because C doesn’t check array boundaries Buffer overflows are dangerous because buffers for user input are.
Machine-Level Programming V: Buffer overflow
Instructor: Fatma CORUT ERGİN
CS 177 Computer Security Lecture 9
The Hardware/Software Interface CSE351 Winter 2013
Machine-Level Programming V: Miscellaneous Topics
Machine Language V: Miscellaneous Topics Sept. 25, 2001
Instructors: Gregory Kesden
Machine-Level Programming V: Miscellaneous Topics
Buffer overflows Buffer overflows are possible because C does not check array boundaries Buffer overflows are dangerous because buffers for user input.
Machine-Level Programming 4 Procedures
Buffer Overflows CSE 351 Autumn 2016
Machine-Level Programming V: Advanced Topics
Machine Level Representation of Programs (IV)
Machine-Level Programming V: Miscellaneous Topics
Machine-Level Programming V: Miscellaneous Topics October 2, 2008
Buffer Overflows CSE 351 Autumn 2018
Machine-Level Programming V: Advanced Topics
Instructors: Majd Sakr and Khaled Harras
“Way easier than when we were students”
Buffer Overflows CSE 351 Spring 2019
Machine-Level Programming V: Miscellaneous Topics
Presentation transcript:

University of Washington Today Happy Monday! HW2 due, how is Lab 3 going? Today we’ll go over:  Address space layout  Input buffers on the stack  Overflowing buffers and injecting code  Defenses against buffer overflows

University of Washington IA32 Linux Memory Layout Stack  Runtime stack (8MB limit) Heap  Dynamically allocated storage  Allocated by malloc(), calloc(), new() Data  Statically allocated data  Read-only: string literals  Read/write: global arrays and variables Text  Executable machine instructions  Read-only Upper 2 hex digits = 8 bits of address FF 00 Stack Text Data Heap 08 8MB not drawn to scale 2

University of Washington IA32/Linux Stack Frame Current Stack Frame (“Top” to Bottom)  “Argument build” area (parameters for function about to be called)  Local variables (if can’t be kept in registers)  Saved register context (when reusing registers)  Old frame pointer (for caller) Caller’s Stack Frame  Return address  How does call/ret change the stack?  Arguments for this call Return Addr Saved Registers + Local Variables Argument Build Old %ebp Arguments Caller Frame Frame pointer %ebp Stack pointer %esp 3

University of Washington Memory Allocation Example char big_array[1<<24]; /* 16 MB */ char huge_array[1<<28]; /* 256 MB */ int beyond; char *p1, *p2, *p3, *p4; int useless() { return 0; } int main() { p1 = malloc(1 <<28); /* 256 MB */ p2 = malloc(1 << 8); /* 256 B */ p3 = malloc(1 <<28); /* 256 MB */ p4 = malloc(1 << 8); /* 256 B */ /* Some print statements... */ } FF 00 Stack Text Data Heap 08 not drawn to scale Where does everything go? 4

University of Washington IA32 Example Addresses $esp0xffffbcd0 p3 0x p1 0x p40x1904a110 p20x1904a008 &p20x beyond 0x big_array 0x huge_array 0x main()0x080483c6 useless() 0x final malloc()0x006be166 address range ~2 32 FF 00 Stack Text Data Heap not drawn to scale malloc() is dynamically linked address determined at runtime 5

University of Washington Internet Worm These characteristics of the traditional IA32 Linux memory layout provide opportunities for malicious programs  Stack grows “backwards” in memory  Data and instructions both stored in the same memory November, 1988  Internet Worm attacks thousands of Internet hosts.  How did it happen? 6

University of Washington Internet Worm These characteristics of the traditional IA32 Linux memory layout provide opportunities for malicious programs  Stack grows “backwards” in memory  Data and instructions both stored in the same memory November, 1988  Internet Worm attacks thousands of Internet hosts.  How did it happen? The Internet Worm was based on stack buffer overflow exploits!  Many Unix functions do not check argument sizes  Allows target buffers to overflow 7

University of Washington Buffer Overflow in a nutshell Buffer overflows are possible because C doesn’t check array boundaries Buffer overflows are dangerous because buffers for user input are often stored on the stack  Probably the most common type of security vulnerability 8

University of Washington String Library Code Implementation of Unix function gets()  What could go wrong in this code? /* Get string from stdin */ char *gets(char *dest) { int c = getchar(); char *p = dest; while (c != EOF && c != '\n') { *p++ = c; c = getchar(); } *p = '\0'; return dest; } 9

University of Washington String Library Code Implementation of Unix function gets()  No way to specify limit on number of characters to read Similar problems with other Unix functions  strcpy : Copies string of arbitrary length  scanf, fscanf, sscanf, when given %s conversion specification /* Get string from stdin */ char *gets(char *dest) { int c = getchar(); char *p = dest; while (c != EOF && c != '\n') { *p++ = c; c = getchar(); } *p = '\0'; return dest; } 10

University of Washington Vulnerable Buffer Code int main() { printf("Type a string:"); echo(); return 0; } /* Echo Line */ void echo() { char buf[4]; /* Way too small! */ gets(buf); puts(buf); } unix>./bufdemo Type a string: unix>./bufdemo Type a string: Segmentation Fault unix>./bufdemo Type a string: ABC Segmentation Fault 11

University of Washington Buffer Overflow Disassembly f0 : 80484f0:55 push %ebp 80484f1:89 e5 mov %esp,%ebp 80484f3:53 push %ebx 80484f4:8d 5d f8 lea 0xfffffff8(%ebp),%ebx 80484f7:83 ec 14 sub $0x14,%esp 80484fa:89 1c 24 mov %ebx,(%esp) 80484fd:e8 ae ff ff ff call 80484b :89 1c 24 mov %ebx,(%esp) :e8 8a fe ff ff call a:83 c4 14 add $0x14,%esp d:5b pop %ebx e:c9 leave f:c3 ret 80485f2:e8 f9 fe ff ff call 80484f f7:8b 5d fc mov 0xfffffffc(%ebp),%ebx 80485fa:c9 leave 80485fb:31 c0 xor %eax,%eax 80485fd:c3 ret 12

University of Washington Buffer Overflow Stack echo: pushl %ebp# Save %ebp on stack movl %esp, %ebp pushl %ebx# Save %ebx leal -8(%ebp),%ebx# Compute buf as %ebp-8 subl $20, %esp# Allocate stack space movl %ebx, (%esp)# Push buf addr on stack call gets# Call gets... /* Echo Line */ void echo() { char buf[4]; /* Way too small! */ gets(buf); puts(buf); } 13 Return Address Saved %ebp %ebp Stack Frame for main [3][2][1][0] buf Before call to gets Saved %ebx buf

University of Washington Buffer Overflow Stack Example f2:call 80484f f7:mov 0xfffffffc(%ebp),%ebx # Return Point 0xffffc638 buf 0xffffc658 Return Address Saved %ebp Stack Frame for main [3][2][1][0] Stack Frame for main xx buf 58c6ff f Before call to gets Saved %ebx buf 0xffffc630

University of Washington Buffer Overflow Example #1 15 Overflow buf, and corrupt saved %ebx, but no problem, why? What happens if input has one more byte? 0xffffc638 0xffffc658 Stack Frame for main buf 58c6ff f Input buf Stack Frame for main xx Before call to gets Saved %ebx 58c6ff f xffffc638 0xffffc658 0xffffc630

University of Washington Buffer Overflow Example #2 16 Frame pointer corrupted a:83 c4 14 add $0x14,%esp # deallocate space d:5b pop %ebx # restore %ebx e:c9 leave # movl %ebp, %esp; popl %ebp f:c3 ret # Return 0xffffc638 0xffffc658 Stack Frame for main buf 58c6ff00 f Input buf Stack Frame for main xx Before call to gets Saved %ebx 58c6ff f xffffc638 0xffffc658 0xffffc630

University of Washington Buffer Overflow Example #3 17 Return address corrupted f2:call 80484f f7:mov 0xfffffffc(%ebp),%ebx # Return Point 0xffffc638 0xffffc658 Stack Frame for main buf f Input ABC buf Stack Frame for main xx Before call to gets Saved %ebx 58c6ff f xffffc638 0xffffc658 0xffffc630 Hmmm, what can you do with it?

University of Washington Malicious Use of Buffer Overflow 18 Input string contains byte representation of executable code Overwrite return address A with address of buffer (need to know B) When bar() executes ret, will jump to exploit code (instead of A) int bar() { char buf[64]; gets(buf);... return...; } void foo(){ bar();... } Stack after call to gets() B (was A) return address A foo stack frame bar stack frame B exploit code pad data written by gets()

University of Washington Exploits Based on Buffer Overflows Buffer overflow bugs allow remote machines to execute arbitrary code on victim machines Internet worm  Early versions of the finger server (fingerd) used gets() to read the argument sent by the client:  finger  Worm attacked fingerd server by sending phony argument:  finger “exploit-code padding new-return- address”  exploit code: executed a root shell on the victim machine with a direct TCP connection to the attacker 19

University of Washington Avoiding Overflow Vulnerability Use library routines that limit string lengths  fgets instead of gets (second argument to fgets sets limit)  strncpy instead of strcpy  Don’t use scanf with %s conversion specification  Use fgets to read the string  Or use %ns where n is a suitable integer Other ideas? /* Echo Line */ void echo() { char buf[4]; /* Way too small! */ fgets(buf, 4, stdin); puts(buf); } 20

University of Washington System-Level Protections Randomized stack offsets  At start of program, allocate random amount of space on stack  Makes it difficult for exploit to predict beginning of inserted code Use techniques to detect stack corruption Nonexecutable code segments  Only allow code to execute from “text” sections of memory  Do NOT execute code in stack, data, or heap regions  Hardware support needed 21 FF 00 Stack Text Data Heap 08 not drawn to scale