1 Buffer Overflow Attacks and Format String bugs.

Slides:



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

CNS2009handout 20 :: software security1 ELEC5616 computer and network security matt barrie
Defenses. Preventing hijacking attacks 1. Fix bugs: – Audit software Automated tools: Coverity, Prefast/Prefix. – Rewrite software in a type safe languange.
CSc 352 Programming Hygiene Saumya Debray Dept. of Computer Science The University of Arizona, Tucson
Computer Security: Principles and Practice EECS710: Information Security Professor Hossein Saiedian Fall 2014 Chapter 10: Buffer Overflow.
Computer Security: Principles and Practice First Edition by William Stallings and Lawrie Brown Lecture slides by Lawrie Brown Chapter 11 – Buffer Overflow.
Lecture 16 Buffer Overflow modified from slides of Lawrie Brown.
Basic Control Hijacking Attacks
K. Salah1 Buffer Overflow The crown jewel of attacks.
Avishai Wool, lecture Introduction to Information Security Lecture 1.
1 Information Security – Theory vs. Reality , Winter 2011 Lecture 8: Control hijacking attacks Eran Tromer Slides credit: Dan Boneh, Stanford.
Intro to Exploitation Stack Overflows James McFadyen UTD Computer Security Group 10/20/2011.
CMSC 414 Computer and Network Security Lecture 24 Jonathan Katz.
1 Control Hijacking Attacks Buffer overflows and format string bugs.
Preventing Buffer Overflow Attacks. Some unsafe C lib functions strcpy (char *dest, const char *src) strcat (char *dest, const char *src) gets (char *s)
1 Control Hijacking Attacks Buffer overflows and format string bugs.
Control Hijacking Attacks Note: project 1 is out Section this Friday 4:15pm.
Buffer OVERFLOW Attacks and DEFENses Edward Chow
CMSC 414 Computer and Network Security Lecture 25 Jonathan Katz.
CS426Fall 2010/Lecture 111 Computer Security CS 426 Lecture 11 Software Vulnerabilities: Input Validation Issues & Buffer Overflows.
CMSC 414 Computer and Network Security Lecture 18 Jonathan Katz.
Control hijacking attacks Attacker’s goal: – Take over target machine (e.g. web server) Execute arbitrary code on target by hijacking application control.
Lecture 16 Buffer Overflow
CAP6135: Malware and Software Vulnerability Analysis Buffer Overflow II: Defense Techniques Cliff Zou Spring 2012.
CAP6135: Malware and Software Vulnerability Analysis Buffer Overflow II: Defense Techniques Cliff Zou Spring 2013.
Security Exploiting Overflows. Introduction r See the following link for more info: operating-systems-and-applications-in-
Control Hijacking Attacks
System Programming Topic 19
Chapter 6 Buffer Overflow. Buffer Overflow occurs when the program overwrites data outside the bounds of allocated memory It was one of the first exploited.
1 System Programming Topic 19 Software Vulnerabilities Topic 19: Software Vulnerabilities.
Attacking Applications: SQL Injection & Buffer Overflows.
Lecture slides prepared for “Computer Security: Principles and Practice”, 3/e, by William Stallings and Lawrie Brown, Chapter 10 “Buffer Overflow”.
CS390S, Week 4: Format String Vulnerabilities & Integer Overflows Pascal Meunier, Ph.D., M.Sc., CISSP January 31, 2007 Developed thanks to the support.
CS5261 Information Security CS 526 Topic Software Vulnerabilities Topic 12-13: Software Vulnerabilities.
Buffer Overflow CS461/ECE422 Spring Reading Material Based on Chapter 11 of the text.
Avishai Wool, lecture Introduction to Information Security Lecture 1.
Network Security Professor Adeel Akram. Security Consideration for Web Services.
Overflow Examples 01/13/2012. ACKNOWLEDGEMENTS These slides where compiled from the Malware and Software Vulnerabilities class taught by Dr Cliff Zou.
Buffer Overflow Group 7Group 8 Nathaniel CrowellDerek Edwards Punna ChalasaniAxel Abellard Steven Studniarz.
Buffer Overflow Attack Proofing of Code Binary Gopal Gupta, Parag Doshi, R. Reghuramalingam, Doug Harris The University of Texas at Dallas.
Control Hijacking Attacks Note: project 1 is out Section this Friday 2pm (Skilling 090)
A Tool for Pro-active Defense Against the Buffer Overrun Attack D. Bruschi, E. Rosti, R. Banfi Presented By: Warshavsky Alex.
Information Security CS 526 Topic 9
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.
Slides by Kent Seamons and Tim van der Horst Last Updated: Nov 11, 2011.
Control Hijacking Attacks Note: project 1 is out Section this Friday 4:15pm (Gates B03)
CS426Fall 2010/Lecture 141 Computer Security CS 426 Lecture 14 Software Vulnerabilities: Format String and Integer Overflow Vulnerabilities.
VM: Chapter 7 Buffer Overflows. csci5233 computer security & integrity (VM: Ch. 7) 2 Outline Impact of buffer overflows What is a buffer overflow? Types.
Buffer Overflows: Attacks and Defenses for the Vulnerability of the Decade Crispin Cowan SANS 2000.
Basic of Buffer Over Flow
Software Security. Bugs Most software has bugs Some bugs cause security vulnerabilities Incorrect processing of security related data Incorrect processing.
1 Introduction to Information Security , Spring 2016 Lecture 2: Control Hijacking (2/2) Avishai Wool.
CS703 - Advanced Operating Systems By Mr. Farhan Zaidi.
Shellcode COSC 480 Presentation Alison Buben.
Buffer Overflow Buffer overflows are possible because C doesn’t check array boundaries Buffer overflows are dangerous because buffers for user input are.
Basic Control Hijacking Attacks
The Hardware/Software Interface CSE351 Winter 2013
Introduction to Information Security , Spring 2016 Lecture 1: Introduction, Control Hijacking (1/2) Avishai Wool.
Basic Memory Corruption Attacks
CAP6135: Malware and Software Vulnerability Analysis Buffer Overflow II: Defense Techniques Cliff Zou Spring 2016.
Basic Memory Corruption Attacks
Basic Control Hijacking Attacks
Software Security.
CS 465 Buffer Overflow Slides by Kent Seamons and Tim van der Horst
Preventing Buffer Overflow Attacks
CAP6135: Malware and Software Vulnerability Analysis Buffer Overflow II: Defense Techniques Cliff Zou Spring 2011.
CS703 - Advanced Operating Systems
CAP6135: Malware and Software Vulnerability Analysis Buffer Overflow II: Defense Techniques Cliff Zou Spring 2009.
CNT4704: Analysis of Computer Communication Network Special Topic: Buffer Overflow II: Defense Techniques Cliff Zou Fall 2011.
Format String Vulnerability
Presentation transcript:

1 Buffer Overflow Attacks and Format String bugs

2 uExtremely common bug. First major exploit: 1988 Internet Worm. fingerd. u10 years later: over 50% of all CERT advisories: 1997: 16 out of 28 CERT advisories. 1998: 9 out of 13 -”- 1999: 6 out of 12 -”- uOften leads to total compromise of host. Fortunately: exploit requires expertise and patience. Two steps: –Locate buffer overflow within an application. –Design an exploit. Buffer overflows (until one exploit available)

3 What are buffer overflows?  Suppose a web server contains a function: void func(char *str) { char buf[128]; strcpy(buf, str); do-something(buf); } uWhen the function is invoked the stack looks like:  What if *str is 136 bytes long? After strcpy : strret-addrsfpbuf top of stack str top of stack *str ret

4 Basic stack exploit uMain problem: no range checking in strcpy(). uSuppose *str is such that after strcpy stack looks like: uWhen func() exits, the user will be given a shell !! uNote: attack code runs in stack. uTo determine ret guess position of stack when func() is called. top of stack *str ret Code for P Program P: exec( “/bin/sh” ) (exact shell code by Aleph One)

5 Some unsafe C lib functions strcpy (char *dest, const char *src) strcat (char *dest, const char *src) gets (char *s) scanf ( const char *format, … ) printf (conts char *format, … )

6 Exploiting buffer overflows  Suppose web server calls func() with given URL. uAttacker can create a 200 byte URL to obtain shell on web server. uSome complications: Program P should not contain the ‘\0’ character. Overflow should not crash program before func() exists. uSample buffer overflows of this type: Overflow in MIME type field in MS Outlook. Overflow in ISAPI in IIS.

7 Causing program to exec attack code uStack smashing attack: Override return address in stack activation record by overflowing a local buffer variable.  Function pointers: (used in attack on Linux superprobe ) Overflowing buf will override function pointer.  Longjmp buffers: longjmp(pos) (used in attack on Perl 5.003) Overflowing buf next to pos overrides value of pos. Heap or stack buf[128] FuncPtr

8 Finding buffer overflows uHackers find buffer overflows as follows: Run web server on local machine. Issue requests with long tags. All long tags end with “$$$$$”. If web server crashes, search core dump for “$$$$$” to find overflow location. uSome automated tools exist. (eEye Retina, ISIC).

9 Preventing buf overflow attacks uMain problem: strcpy(), strcat(), sprintf() have no range checking. “Safe” versions strncpy(), strncat() are misleading –strncpy() may leave buffer unterminated. –strncpy(), strncat() encourage off by 1 bugs. uDefenses: Type safe languages ( Java, ML ). Legacy code? Mark stack as non-execute. Random stack location. Static source code analysis. Run time checking: StackGuard, Libsafe, SafeC, (Purify). Black box testing (e.g. eEye Retina, ISIC ).

10 Marking stack as non-execute uBasic stack exploit can be prevented by marking stack segment as non-executable or randomizing stack location. Code patches exist for Linux and Solaris. u Problems: Does not block more general overflow exploits: –Overflow on heap: overflow buffer next to func pointer. Some apps need executable stack (e.g. LISP interpreters). u Patch not shipped by default for Linux and Solaris.

11 Static source code analysis u Statically check source to detect buffer overflows. Several consulting companies. u Can we automate the review process? u Several tools (l0pht.com): SLINT (designed for UNIX) rstcorp: its4. Scans function calls. Berkeley: Wagner, et al. Test constraint violations. Stanford: Engler, et al. Test trust inconsistency. u Find lots of bugs, but not all.

12 Run time checking: StackGuard uMany many run-time checking techniques … uSolutions 1: StackGuard (WireX) Run time tests for stack integrity. Embed “canaries” in stack frames and verify their integrity prior to function return. strretsfplocal top of stack canarystrretsfp local canary Frame 1Frame 2

13 Canary Types uRandom canary: Choose random string at program startup. Insert canary string into every stack frame. Verify canary before returning from function. To corrupt random canary, attacker must learn current random string. uTerminator canary: Canary = 0, newline, linefeed, EOF String functions will not copy beyond terminator. Hence, attacker cannot use string functions to corrupt stack.

14 StackGuard (Cont.) uStackGuard implemented as a GCC patch. Program must be recompiled. uMinimal performance effects: 8% for Apache. uNewer version: PointGuard. Protects function pointers and setjmp buffers by placing canaries next to them. More noticeable performance effects. uNote: Canaries don’t offer fullproof protection. Some stack smashing attacks can leave canaries untouched.

15 Run time checking: Libsafe uSolutions 2: Libsafe (Avaya Labs) Dynamically loaded library. Intercepts calls to strcpy (dest, src) –Validates sufficient space in current stack frame: |frame-pointer – dest| > strlen(src) –If so, does strcpy. Otherwise, terminates application. destret-addrsfp top of stack srcbufret-addrsfp libsafe main

16 More methods … u Address obfuscation. (Stony Brook ’03) Encrypt return address on stack by XORing with random string. Decrypt just before returning from function. Attacker needs decryption key to set return address to desired value. u Randomize location of functions in libc. Attacker cannot jump directly to exec function.

17 Format string bugs

18 Format string problem int func(char *user) { fprintf( stdout, user); } Problem: what if user = “%s%s%s%s%s%s%s” ?? Most likely program will crash: DoS. If not, program will print memory contents. Privacy? Full exploit using user = “%n” Correct form: int func(char *user) { fprintf( stdout, “%s”, user); }

19 History u Danger discovered in June u Examples: wu-ftpd 2.* :remote root. Linux rpc.statd:remote root IRIX telnetd:remote root BSD chpass:local root

20 Vulnerable functions Any function using a format string. Printing: printf, fprintf, sprintf, … vprintf, vfprintf, vsprintf, … Logging: syslog, err, warn

21 Exploit u Dumping arbitrary memory: Walk up stack until desired pointer is found. printf( “%08x.%08x.%08x.%08x|%s|”) u Writing to arbitrary memory: printf( “hello %n”, &temp) -- writes ‘6’ into temp. printf( “%08x.%08x.%08x.%08x.%n”)

22 Overflow using format string char errmsg[512], outbuf[512]; sprintf (errmsg, “Illegal command: %400s”, user); sprintf( outbuf, errmsg ); u What if user = “%500d ” Bypass “%400s” limitation. Will ovreflow outbuf.

23 Timing attacks

24 Timing attacks uTiming attacks extract secret information based on the time a device takes to respond. uApplicable to: Smartcards. Cell phones. PCI cards.

25 Timing attacks: example uConsider the following pwd checking code: int password-check( char *inp, char *pwd) if (strlen(inp) != strlen(pwd)) return 0; for( i=0; i < strlen(pwd); ++i) if ( *inp[i] != *pwd[i] ) return 0; return 1; uA simple timing attack will expose the password one character at a time.

26 Timing attacks: example uCorrect code: int password-check( char *inp, char *pwd) { oklen = ( strlen(inp) == strlen(pwd) ) ; for( ok=1, i=0; i < strlen(pwd) ; ++i) ok = ok & ( inp[i] == pwd[i] ) ; return ok & oklen; } uTiming attack is ineffective … (?)