• No results found

Introduction to Information Security

N/A
N/A
Protected

Academic year: 2021

Share "Introduction to Information Security"

Copied!
40
0
0

Loading.... (view fulltext now)

Full text

(1)

Introduction to Information Security

0368-3065, Spring 2015

Lecture 1:

Introduction,

Control Hijacking (1/2)

Eran Tromer

Slides credit:

Avishai Wool, Tel Aviv University

(2)

Administration

Lecturer:

Eran Tromer

[email protected] (include “infosec15” in email subject)

Leading teaching assistants:

Itamar Gilad, Nir Krakowski

Teaching assistant / exercise checker:

Michal Shagam

Course web site:

http://course.cs.tau.ac.il/infosec15/

Read the Instructions

Join the mailing list (automatic if you’re already registered) Fill in the questionnaire

(3)

Exercises

• Practical emphasis, challenging hands-on exercises.

• Final grade: 65% exam, 35% exercises

• Attend recitations for necessary context.

Further details in recitation.

(4)

Motivation

Information Security

Computer and Network Security Cyber Security

(5)

A brief history of cyber

1948 1960

such as computers Cybernetic = using computers

1980

on the Internet

1988

Morris worm

Cybersex 1998

Million-node botnets

Finance: untold $billions

National (Estonia, Georgia, RSA+LM)

Physical (Stuxnet) Cybersecurity ~

harming computers and things they control

Information / computer / network / control-system security, cryptography

Cybernetic = regulatory/control systems

(6)

Security goals and threats

GOAL

Data confidentiality

Data integrity

System availability

User authentication

Privilege separation

THREAT

• Data exposure

• Data modification

• Denial of service

• Masquerading

• Privilege elevation

Prerequisite to many attacks: getting malicious code to run on victim’s computer system

(7)

Control Hijacking

Basic Control Hijacking

Attacks

(8)

Control hijacking attacks

• Attacker’s goal:

Take over target machine (e.g. web server)

Execute arbitrary code on target by hijacking application control flow

• Examples.

Buffer overflow attacks Integer overflow attacks

Format string vulnerabilities

(9)

Example 1: buffer overflows

• Extremely common bug in C/C++ programs.

First major exploit: 1988 Internet Worm, fingerd.

0 100 200 300 400 500 600

1995 1997 1999 2001 2003 2005

Source: NVD/CVE

≈20% of all vuln.

2005-2007: ≈ 10%

(10)

What is needed

• Understanding C functions, the stack, and the heap.

• Know how system calls are made

• The exec() system call

• Attacker needs to know which CPU and OS used on the target machine:

Our examples are for x86 running Linux or Windows Details vary slightly between CPUs and OSs:

Little endian vs. big endian (x86 vs. Motorola)

Stack Frame structure (Unix vs. Windows)

(11)

Linux process memory layout

unused 0x08048000 run time heap

shared libraries user stack

0x40000000 0xC0000000

%esp

brk Loaded from exec

0

(12)

exception handlers

Stack Frame

arguments return address stack frame pointer

local variables SP

Stack Growth

high

low

callee saved registers

(13)

What are buffer overflows?

Suppose a web server contains a function:

When func() is called stack looks like:

argument: str return address stack frame pointer

char buf[128]

SP

void func(char *str) { char buf[128];

strcpy(buf, str);

do-something(buf);

}

(14)

What are buffer overflows?

void func(char *str) { char buf[128];

strcpy(buf, str);

do-something(buf);

} What if *str is 136 bytes long?

[this is a software bug]

After strcpy:

argument: str return address stack frame pointer

char buf[128]

SP

*str Problem:

no length checking in strcpy()

(15)

What are buffer overflows?

void func(char *str) { char buf[128];

strcpy(buf, str);

do-something(buf);

} What if *str is 136 bytes long?

After strcpy:

argument: str return address stack frame pointer

char buf[128]

SP

*str

When func returns, usually:

• Some junk in return address

• CPU tries to jump to junk address

• “invalid instruction at 0x….” or

“segmentation fault”

• Result: Web server crash (OS kills the process)

(16)

Now let’s think like an attacker

• Attacker discovers the software bug

• Attacker has control over the content &

length of str

E.g., maybe str is sent in the HTTP request that the attacker can fill

• Result: attacker can place binary values in the end of str to select the address that the CPU will jump to upon return

• This is Control Hijacking

(17)

Where to jump to?

• Attacker goal: jump to an address that runs attacker-written code

But the process memory only has legitimate user & OS code

• Need to inject his own code somehow

• Solution: make the buffer overflow even longer

• Place binary machine instructions at the end of str

(18)

char buf[128]

return address

Basic stack exploit

Suppose *str is such that after strcpy stack looks like:

Program P: exec(“/bin/sh”)

• Attack code P runs in stack.

• When func() exits, the shell runs with its stdin and stdout (hopefully)

redirected to the TCP connection.

• The attacker, on the other side of the TCP connection, gets full shell access.

• Attacker gains full privileges of the user

(exact shell code by Aleph One)

Program P

low high

(19)

The NOP slide

Problem: how does attacker determine the return address?

Solution: NOP slide

Guess approximate stack state when func() is called

Insert many NOPs before program P:

nop ,

xor eax,eax , inc ax

...

char buf[128]

return address NOP Slide Program P

low high

(20)

Details and examples

• Some complications:

Program P should not contain the ‘\0’ character.

Overflow should not crash program before func() exits.

• Sample remote stack smashing overflows:

(2007) Overflow in Windows animated cursors (ANI).

LoadAniIcon()

(2005) Overflow in Symantec Virus Detection

test.GetPrivateProfileString "file", [long string]

(21)

Many unsafe libc functions

strcpy (char *dest, const char *src) strcat (char *dest, const char *src) gets (char *s)

scanf ( const char *format, … ) and many more.

• “Safe” libc versions strncpy(), strncat() are misleading

E.g.,. strncpy() may leave string unterminated.

• Windows C run time (CRT):

strcpy_s (*dest, DestSize, *src) ensures proper termination.

(22)

Buffer overflow opportunities

• Exception handlers: (Windows SEH attacks)

Overwrite the address of an exception handler in stack frame.

• Function pointers: (e.g. PHP 4.0.2, MS MediaPlayer Bitmaps)

Overflowing buf will override function pointer.

• Longjmp buffers: longjmp(pos) (e.g. Perl 5.003) Overflowing buf next to pos overrides value of pos.

Heap or stack buf[128] FuncPtr

(23)

Corrupting method pointers

http://phrack.org/issues/56/8.html

• Compiler generated function pointers (e.g. virtual methods in C++ code)

• After overflow of buf :

ptr data Object T

FP1 FP2 FP3

vtable

method1 code method2 code method3 code

ptr

buf[256]

data

object T vtable

NOP slide

shell code

(24)

Finding buffer overflows

• To find overflow:

– Run web server on local machine

– Issue malformed requests (ending with “$$$$$” )

• Many automated tools exist (called fuzzers)

– If web server crashes, search core dump for “$$$$$”

to find overflow location

• Construct exploit (not easy given latest defenses)

(25)

Control Hijacking

More Control Hijacking

Attacks

(26)

More Hijacking Opportunities

• Integer overflows: (e.g. MS DirectX MIDI Lib)

• Double free: double free space on heap.

Can cause memory manager to write data to specific location

Examples: CVS server

• Format string vulnerabilities

(27)

Integer Overflow

• Integer overflow: an arithmetic operation attempts to create a numeric value that is larger than can be represented within the available storage

space.

• Example:

Test 1:

short x = 30000;

short y = 30000;

printf(“%d\n”, x+y);

Test 2:

short x = 30000;

short y = 30000;

short z = x + y;

printf(“%d\n”, z)

Will two programs output the same?

(28)

C Data Types

• short int 6bits [-32,768; 32,767]

• unsigned short int 16bits [0; 65,535]

• unsigned int 32bits [0; 4,294,967,295]

• Int 32bits [-2,147,483,648; 2,147,483,647]

• long int 32bits [-2,147,483,648; 2,147,483,647]

• char 8bits [-128; 127]

• unsigned char 8bits [0; 255]

• long long int

• unsinged long long int

(29)

When does casting occur in C?

• When assigning to a different data type

• For binary operators +, -, *, /, %, &, |, ^,

if either operand is an unsigned long, both are cast to an unsigned long

in all other cases where both operands are 32-

bits or less, the arguments are both upcast to int, and the result is an int

• For unary operators

~ changes type, e.g., ~((unsigned short)0) is int ++ and -- does not change type

(30)

Where Does Integer Overflow Matter?

• Allocating spaces using calculation.

• Calculating indexes into arrays

• Checking whether an overflow could occur

• Direct causes:

Truncation; Integer casting

(31)

Integer Overflow: Example 1

const long MAX_LEN = 20000;

char buf[MAX_LEN];

short len = strlen(input);

if (len < MAX_LEN)

strcpy(buf, input);

Can a buffer overflow attack occur?

If so, how long does input needs to be?

(32)

Integer Overflows Example 2 (see Phrack 60)

Problem: what happens when int exceeds max value?

int m;(32 bits) short s;(16 bits) char c; (8 bits)

c = 0x80 + 0x80 = 128 + 128 ⇒ c = 0

s = 0xff80 + 0x80 ⇒ s = 0

m = 0xffffff80 + 0x80 ⇒ m = 0 Can this be exploited?

(33)

void func( char *buf1, *buf2, unsigned int len1, len2) { char temp[256];

if (len1 + len2 > 256) {return -1} // length check memcpy(temp, buf1, len1); // concatenate buffers memcpy(temp+len1, buf2, len2);

do-something(temp); // do stuff }

What if len1 = 0x80, len2 = 0xffffff80 ?

⇒ len1+len2 = 0

Second memcpy() will overflow stack (or heap) !!

(34)

0 20 40 60 80 100 120 140

1996 1998 2000 2002 2004 2006

Source: NVD/CVE

Integer overflow exploit stats

(35)

Format string bugs

(36)

Format string problem

• Want to print a message (without arguments) - via fprintf

• Correct form:

fprintf( stdout, “%s”, input);

• Bug:

int func(char *input) {

fprintf( stderr, input);

}

• “input” is treated as a format string – missing arguments

• If “input” includes % formats – access places on stack Problem: what if *input = “%s%s%s%s%s%s%s” ?

Most likely program will crash (Denial of Service, violates Availability) If not, program will print memory contents. Privacy?

(37)

Format string attacks (“%n”)

• “%n” format writes the number of bytes formatted so far into a variable!

• printf(“abc %n”, &x) will change the value of the variable x (to 4)

in other words, the parameter value on the stack is interpreted as a pointer to an integer value,

and the place pointed by the pointer is overwritten

(38)

Exploit

• Dumping 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")

(39)

History

First exploit discovered in June 2000.

Examples:

wu-ftpd 2.* : remote root Linux rpc.statd: remote root IRIX telnetd: remote root BSD chpass: local root

(40)

Vulnerable functions

Any function using a format string.

Printing:

printf, fprintf, sprintf, …

vprintf, vfprintf, vsprintf, …

Logging:

syslog, err, warn

References

Related documents

Any duplication or distribution, either in print or electronic form, without the permission of McGraw-Hill, is prohibited.. August

Rizikos valdymo procesui atliekant operatyvinius veiksmus didelæ átakà turi kitas ope- ratyviniø veiksmø taktikos elementas – operatyvinio taktinio sprendimo numatytiems uþdavi-

Web-based Revenue Receipt &amp; State Land Record Management System (WBRR&amp;SLRMS) mainly comprised of two different web applications placed on Board of Revenue website..

Stack Pointer First interrupt Foreground and Return to interrupted Address initiated 2nd interrupt

SP points to location last item placed in block SP points to location last item placed in block SP SP decreases decreases when you put an item on the stack when you put an item on

Also Available: Free Online Course How to Program Your Mind For Wealth Click here: MindPowerNews.com/Wealth... & A Native American elder once described his own inner struggles

Proof. The general method involves finding suitable test functions to put in the Rayleigh-Ritz formula to obtain an upper bound for the first nonzero eigenvalue. We first look at

Although their physical forms showed considerable deterioration, it is clear from the TR FT-IR spectra that the polymer still displays characteristic vibrations (see