Preventing Buffer Overflow Attacks

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.
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
CMSC 414 Computer and Network Security Lecture 22 Jonathan Katz.
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.
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.
1 Buffer Overflow Attacks and Format String bugs.
CS426Fall 2010/Lecture 111 Computer Security CS 426 Lecture 11 Software Vulnerabilities: Input Validation Issues & Buffer Overflows.
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.
Buffer Overflow Attacks. Memory plays a key part in many computer system functions. It’s a critical component to many internal operations. From mother.
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.
CS390S, Week 4: Format String Vulnerabilities & Integer Overflows Pascal Meunier, Ph.D., M.Sc., CISSP January 31, 2007 Developed thanks to the support.
Buffer Overflow CS461/ECE422 Spring Reading Material Based on Chapter 11 of the text.
Avishai Wool, lecture Introduction to Information Security Lecture 1.
Buffer Overflow Attack-proofing by Transforming Code Binary Gopal Gupta Parag Doshi, R. Reghuramalingam The University of Texas at Dallas 11/15/2004.
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 - 2. A Stack Frame. Pushed to stack on function CALL The return address is copied to the CPU Instruction Pointer when the function.
Foundations of Network and Computer Security J J ohn Black CSCI 6268/TLEN 5550, Spring 2013.
Security Attacks Tanenbaum & Bo, Modern Operating Systems:4th ed., (c) 2013 Prentice-Hall, Inc. All rights reserved.
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.
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 By Collin Donaldson.
Mitigation against Buffer Overflow Attacks
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
Introduction to Information Security
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.
Secure Software Development: Theory and Practice
Basic Memory Corruption Attacks
Information Security CS 526 Topic 8
CMSC 414 Computer and Network Security Lecture 21
Basic Control Hijacking Attacks
Software Security.
CS 465 Buffer Overflow Slides by Kent Seamons and Tim van der Horst
Software Security Lesson Introduction
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.
Understanding and Preventing Buffer Overflow Attacks in Unix
CNT4704: Analysis of Computer Communication Network Special Topic: Buffer Overflow II: Defense Techniques Cliff Zou Fall 2011.
Format String Vulnerability
Presentation transcript:

Preventing Buffer Overflow Attacks

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, … ) char *strcat(char *s1, const char *s2);  DESCRIPTION The strcat() function appends a copy of the string pointed to by s2 (including the terminating null byte) to the end of the string pointed to by s1 gets() function shall read bytes from the standard input stream, stdin, into the array pointed to by s, until a <newline> is read or an end-of-file

Preventing buf overflow attacks Main problem: strcpy(), strcat(), sprintf() have no range checking. Use “safe” versions strncpy(), strncat() very carefully Defenses: Type safe languages (Java, ML). Legacy code? Mark stack as non-execute. Static source code analysis. Run time checking: StackGuard, Libsafe, SafeC, (Purify). Black box testing (e.g. eEye Retina, ISIC ).

Marking stack as non-execute Basic stack exploit can be prevented by marking stack segment as non-executable Code patches exist for Linux and Solaris. Problems: Some apps need executable stack (e.g. LISP interpreters). Does not block more general overflow exploits: Overflow on heap: overflow buffer next to func pointer. Cannot make all the data segment non-executable More recent UNIX and MS windows emit dynamic code into program data for performance optimizations

Static source code analysis Statically check source to detect buffer overflows. Several consulting companies. Several tools exist to automate the review process: Stanford: Engler, et al. Test trust inconsistency. @stake.com (l0pht.com): SLINT (designed for UNIX) Berkeley: Wagner, et al. Test constraint violations. Find lots of bugs, but not all.

Run time checking: StackGuard Many many run-time checking techniques … Solution: StackGuard (WireX) Run time tests for stack integrity. Enhance the code generator for emitting code to set up and tear down functions Embeds “canaries” in stack frames and verify their integrity prior to function return. Frame 2 Frame 1 top of stack local canary sfp ret str local canary sfp ret str

Canary Types Random canary: (used in Visual Studio 2003) 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. Terminator canary: Canary = 0 (null), newline, linefeed, EOF String functions will not copy beyond terminator. Hence, attacker cannot use string functions to corrupt stack.

StackGuard (Cont.) StackGuard implemented as a GCC patch. Program must be recompiled. Minimal performance effects Worst case: 8% for Apache.

Timing attacks

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

Timing attacks: example Consider 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; A simple timing attack will expose the password one character at a time.

Backup Slides

Preventing buf overflow attacks Main 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. Defenses: 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 ).

Buffer overflows Extremely common bug. First major exploit: 1988 Internet Worm. fingerd. 10 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 -”- Often leads to total compromise of host. Fortunately: exploit requires expertise and patience Two steps: Locate buffer overflow within an application. Design an exploit.

Exploiting buffer overflows Suppose web server calls func() with given URL. Attacker can create a 200 byte URL to obtain shell on web server. Some complications: Program P should not contain the ‘\0’ character. Overflow should not crash program before func() exists. Sample remote buffer overflows of this type: Overflow in MIME type field in MS Outlook. Overflow in Symantec Virus Detection (Free ActiveX) Set test = CreateObject("Symantec.SymVAFileQuery.1") test.GetPrivateProfileString "file", [long string]

Causing program to exec attack code Stack 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

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

Run time checking: Libsafe Solutions 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. top of stack sfp ret-addr dest src buf sfp ret-addr libsafe main

More methods … 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. PaX ASLR: Randomize location of libc. Attacker cannot jump directly to exec function.

Format string bugs

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: fprintf( stdout, “%s”, user);

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

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

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

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