Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow...

97
Buffer Overflow GANG WANG

Transcript of Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow...

Page 1: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer Overflow

GANG WANG

Page 2: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer OverflowSlides credit to Breno de Medeiros

2

Page 3: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer Overflow Attacks

3

• What is a buffer?• A memory space in which data/code can be held

• Buffer has finite capacity, often predefined size

• Buffer Overflows• User input data is too long

• The program does not check the buffer boundary

• Data overflows the boundary, overwrite adjacent data/code

• Buffer Overflow Attack• By carefully replacing the data/code in the buffer, attackers can take control of a process

Page 4: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

4

char sample[10];for(i=0;i<=9;i++)

sample[i]=‘A’;

sample[10]=‘B’;Buffer Overflow

Page 5: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer Overflow

5

§ Modern attacks on heap and JavaScript§ Morris Worm exploited fingerd on VAX § CERT® Advisory CA-2003-25 Buffer Overflow in Sendmail (in C)

§ gets, sprintf, strcat, strcpy, vsprintf – common unsafe C routines

Non-malicious code causes failures (see P225 in P&P)in ‘69 Arpanet had a hardcoded limit of 347 nodes

in ‘89 a 348-th node was added and overflow the table

Page 6: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Need to Refresh your “Memory”…6

Page 7: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

CPU

Page 8: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

CPU state held in registers

§ General Purpose§ EAX, EBX, ECX, EDX, EDI, ESI

§ Special Purpose:§ EIP: Instruction Pointer§ ESP: Stack Pointer§ EBP: Frame/Base Pointer

Page 9: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

CPU modifies state using instructions

§ Executes assembly instructions§ ADD, SUB, MULT, XOR, CMP, JMP, …

§ Syntax§ tool dependent§ AT&T

§ OP src dest§ This lecture

§ Intel§ OP dest src§ What most people/tools use

Page 10: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Software state is registers + memory

Page 11: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

ReCap: Process’s Memory Region

11

for procedure call – jump and return

Store “control data”

§ local variables

§ parameters to functions

§ Return values/addresses

Text region: code, read-only data

For static variables

Stack: Last in, first out (LIFO)PUSH: add an element at topPOP: remove element at top

Heap: dynamically allocated memory, e.g., using malloc.

Stack

Heap

unitialized variables

initialized variables

code instructions

Direction of stack growth

Direction of heap growth

Low address: 0x00000000

High address: 0xFFFFFFFF

Page 12: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Data in a Stack

//example.c:

void foo(int a, int b) {

char buf1[10];

return;

}

void main() {

foo(3,6);

} <previous stack frame>

function arguments

return address

previous frame pointer

local variables

local buffer variables

Direction of stack growth

High address

Low address

Page 13: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack Frame, Stack Pointers, Stack Overflow

13

§ Stack frame§ Consecutive stack space for each calling function § Each for a function that has not yet finished execution

§ Stack pointer: memory location of the top of the stack§ Stored in a register

§ Stack overflow § Occurs when information is written into a variable on a stack§ But the size of this information exceeds what was allocated

Page 14: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

C Stack Frames

Grows toward lower addressStarts at end of address spaceTwo related registers

%ESP - Stack Pointer (SP)%EBP - Frame Pointer (FP)

Low address 0x00000000

High address 0xffffffff

Page 15: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack Operation

push 0x0a

0aSP

Page 16: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack Operation

push 0x0a

push 0x6c

0a6c

SP

Page 17: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack Operation

push 0x0a

push 0x6c

push 0xff

0a6cff

SP

Page 18: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

ff

Stack Operation

push 0x0a

push 0x6c

push 0xff

pop r1 #0xff

0a6c

SP

Page 19: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

6cff

Stack Operation

push 0x0a

push 0x6c

push 0xff

pop r1 #0xff

pop r2 #0x6c

0aSP

Page 20: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

6cff

Stack Operation

push 0x0a

push 0x6c

push 0xff

pop r1 #0xff

pop r2 #0x6c

push 0x88

0a88

SP

Page 21: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

C stack frames

Local variables(dynamic) SP

FP (static)

The frame pointer (FP) allows for frame-relative addressing of local variables

Page 22: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

C stack frames

} callerLocal variables

function argsSP

FP

Page 23: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

C stack frames

} callerLocal variables

function args

return addressSP

FP

Page 24: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

C stack frames

} callerLocal variables

function args

return address

} calleeSP

caller’s FP

FP

Page 25: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

C stack frames

} callerLocal variables

function args

return address

} calleeSP

caller’s FPFP

Page 26: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

C stack frames

} callerLocal variables

function args

return address

} calleeSP

caller’s FP

Local variablesFP

Page 27: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.c

void foo(int a, int b) {char buf1[10];return;

}

void main() {foo(3,6);

}

Page 28: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret prev FP

Page 29: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret prev FP

Page 30: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret prev FP

move SP first

Page 31: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret prev FP

6

Page 32: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret prev FP

63

Page 33: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret prev FP

63

return

Page 34: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

foo:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

leave

ret

prev FP63

returnmain FP

Page 35: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

foo:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

leave

ret

prev FP63

returnmain FP

Page 36: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

foo:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

leave

ret

prev FP63

returnmain FP

Page 37: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

foo:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

leave

ret

prev FP63

returnmain FP

mov %ebp, %esppop %ebp

Page 38: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

foo:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

leave

ret

prev FP63

returnmain FP

mov %ebp, %esppop %ebp

Page 39: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

foo:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

leave

ret

prev FP63

return

mov %ebp, %esppop %ebp

Page 40: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

foo:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

leave

ret

prev FP63

return

mov %ebp, %esppop %ebp

Page 41: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret prev FP

63

mov %ebp, %esppop %ebp

Page 42: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret prev FP

mov %ebp, %esppop %ebp

Page 43: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

example.s (x86)

main:pushl %ebpmovl %esp, %ebpsubl $8, %espmovl $6, 4(%esp)movl $3, (%esp)call fooleaveret

mov %ebp, %esppop %ebp

Page 44: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

An example of stack and stack frame

44

// ex.cint bar( int j ) {int jj = j + j;return jj;

}

int foo( int i ) {int ii = i + i;int iii = bar( ii );int iiii = iii;return iiii;

}

int main() {int x = foo( 10 );printf( "the value of x

= %d\n", x );return 0;

}

stack_ptr--> jjreturn-address to caller j

iii ii return-address to caller i

x argcargv

What stack looks like at “int iiii = iii;” in foo()

stack frame for bar

stack frame for foo

stack frame for main

Page 45: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack OVerFlowHow does it work?

45

Page 46: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

46

void foo(char *str) {char buffer[16];strcpy(buffer, str);

}

void main() {char buf[256];memset(buf, ‘A’, 255);buf[255] = ‘\x00’;foo(buf);

}

str* is a large string, size 256Buffer size is only 16Stack overwritten by ‘A’ (0x414141…)

Return address is overwritten and becomes 0x41414141

You get segmentation faultWorse, attacker can change flow of program

<------[ ] [ ] [ ] [ ]

Top of stack Bottom of memory

Bottom of stack Top of memory

AA

AA

AA

AA

AA

AA

AA

..

A Stack Overflow Example

buffer

sfp

return

str*

Page 47: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Let’s take a closer look

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

Page 48: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

Page 49: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAA…\0

prev FP

Page 50: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAA…\0

prev FP

foo_arg1

Page 51: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAA…\0

prev FP

foo_arg1return

Page 52: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAA…\0

prev FP

foo_arg1returnmain FP

Page 53: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAA…\0

prev FP

foo_arg1returnmain FP

Page 54: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAA…\0

prev FP

0x414141410x414141410x41414141

AAAAAAAAAAAAAAAA

Buffer OverflowRegion

Page 55: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAA…\0

prev FP

0x414141410x414141410x41414141

AAAAAAAAAAAAAAAA

Buffer OverflowRegion

0x41414141 == "AAAA"

Page 56: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAA…\0

prev FP

0x414141410x414141410x41414141

AAAAAAAAAAAAAAAA

mov %ebp, %esppop %ebpret

Page 57: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAAAAAAAAAAAA

Buffer overflow example

AAAAAA…\0

prev FP

0x414141410x414141410x41414141mov %ebp, %esp

pop %ebpret

Page 58: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAAAAAAAAAAAA

Buffer overflow example

0x41414141

AAAAAA…\0

prev FP

0x414141410x41414141

mov %ebp, %esppop %ebpret

0x41414141

Page 59: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

void foo(char *str) {

char buffer[16];

strcpy(buffer, str);

}

void main() {

char buf[256];

memset(buf, ‘A’, 255);

buf[255] = ‘\x00’;

foo(buf);

}

AAAAAAAAAAAAAAAA

Buffer overflow example

0x414141410x41414141

AAAAAA…\0

prev FP

0x41414141

mov %ebp, %esppop %ebpret

0x41414141

Page 60: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

AAAAAAAAAAAAAAAA

Buffer overflow example

%eip = 0x41414141

0x414141410x41414141

AAAAAA…\0

prev FP

0x41414141

0x41414141

What gets executed?

Page 61: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow FTW

§ Success! Program crashed!

§ So what? What else can an attacker do?

Page 62: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack overflow attacks

62

§ Goals of attackers§ Take control of the flow of the target program§ Execute malicious code, control the system (e.g., open shell as root)

§ Typical attack method§ Overwrite the “return address” of the current function call§ Once the current function finishes, execution of attacker’s code with the

privilege of the original process

Page 63: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack Smashing

§ Attacker gives a long string with malicious code

§ The string length being much larger than the space allocated

§ Overflow into the stack and overwrites the return address

§ The return address now points to the beginning of the malicious code

<previous stack frame>

function arguments

Return address (overwritten with

entry address of malicious code)

Previous frame pointer (overwritten w/ malicious code)

local variables (overwritten w/ malicious code)

local buffer variables (overwritten w/ malicious code)

Direction of stack growth

Page 64: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

What is the challenge?

64

§ Guess the location of the return address in the stack?§ Return address need to point to the entry point of the malicious code§ The entry point address is hard to guess? § NOP sledding: increase the size of the target

nopnopnopnop…

Malicious CodeReturn

0xFFFFD00A

The exact address of malicious code (0xFFFFD00A) may be hard to guess

But as long as you guessed the address of any of the NOPs, you eventually reach the malicious code

Page 65: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Simple buffer overflow attack

void main() {char buffer[100];printf("Enter name: ");gets(buffer); printf("Hello, %s!\n", buffer);

}

python -c "print \'\x90'*102 + '\xeb\xfe' + '\x04\xd0\xff\xff'" \| ./a.out

NOP: instruction that says “move to the next one”“Malicious” CodeJUMP

Return to stack

Page 66: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Simple attack payload

nopnopnopnop…

jmp -20xFFFFD004

buffer0xFFFFD000

return addr

Valid return targetsthanks to NOP sled

Page 67: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

Page 68: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

returnprev FP

Page 69: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

returnprev FP

buffer (100 bytes)

Page 70: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

returnprev FP

buffer (100 bytes)

Page 71: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

nop

nopnopnop

…jmp -2

0xFFFFD004 0xFFFFD004

NOP NOP JMP

NOP Sled

Page 72: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

printf_args

Page 73: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

printf_argsreturn

Page 74: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

printf_argsreturn

main's FP

Page 75: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

printf_argsreturn

main's FP

Page 76: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

printf_argsreturn

main's FP

Page 77: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

printf_argsreturn

main's FPmov %ebp, %esppop %ebpret

Page 78: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

printf_args

main's FPreturn

mov %ebp, %esppop %ebpret

Page 79: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

main's FPreturn

printf_args

mov %ebp, %esppop %ebpret

Page 80: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004NOP NOP JMPNOP Sled

main's FPreturn

printf_args

Page 81: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

0xFFFFD004

NOP Sled

main's FPreturn

printf_args

NOP NOP JMP

mov %ebp, %esppop %ebpret

Page 82: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

NOP Sled

main's FPreturn

printf_args

NOP NOP JMP0xFEEB9090

0xFFFFD004

mov %ebp, %esppop %ebpret

Page 83: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

NOP Sled

main's FPreturn

printf_args

NOP NOP JMP0xFEEB9090

0xFFFFD004

mov %ebp, %esppop %ebpret

Page 84: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflow example

void main() {

char buffer[100];

printf("Enter name: ");

gets(buffer);

printf("Hello, %s!\n", buffer);

}

NOP Sled

main's FPreturn

printf_args

NOP NOP JMP0xFEEB9090

0xFFFFD004

Page 85: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Buffer overflows

§ Not just for the return address§ Function pointers§ Arbitrary data§ C++: exceptions§ C++: objects§ Heap/free list

§ Any code pointer!

Page 86: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

A Variation Of Buffer Overflow

87

§ Web applications: overflow when passing parameters to a routine

§ http://www.somesite.com/userinout.asp?param1=(808)555-1212&param2=1987Jan17

§ Web developer may just allocate 20 bytes for param1.

§ How does the program handle long phone number, e.g., 1000 digits?

§ Additional data overflows to the next region in the memory…

Page 87: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

88

void do_authentication(char *user, ...) {int auth = 0;...while (!auth) {/* Get a packet from the client */

type = packet_read();switch (type) {...case SSH_CMSG_AUTH_PASSWORD:if (auth_password(user, password))

auth =1;case ...}if (auth) break;

}/* Perform session preparation. */do_authenticated(…);}

auth = 0

auth = 0

Password incorrect, but auth = 1

auth = 1

Logged in without correct password

auth = 1

An Attack against SSH Communications (via an integer overflow bug)

Page 88: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

89

Original SSHDdo_authentication(){ int auth = 0;

while (!auth) {type = packet_read(); switch (type) {case CMSG_AUTH_PASSWORD:if (auth_password(passwd))

auth = 1;case ...

}if (auth) break;

}do_authenticated(pw);

}

Modified SSHDdo_authentication(){ int auth = 0;

while (!auth) {type = packet_read();auth = 0;switch (type) {case CMSG_AUTH_PASSWORD:

if (auth_password(passwd))auth = 1;

case ...}if (auth) break;

}do_authenticated(pw);

}

A Countermeasure: Reducing Data Lifetime for Security

Page 89: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Heap OverflowVery similar to stack overflow

90

Page 90: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Heap Overflow

91

§ Heap§ Dynamically allocated memory space in run time

§ (Stack is statically allocated during compile time)

§ Heap buffer overflow

§ User input data is much bigger than allocated space

§ Corrupt/overwrite internal data structures (e.g. linked list pointers)

§ There is not return address to overwrite

§ (Stack overflow often changes “control data” such as return address)

§ Examples

§ iOS jailbreaking uses heap overflows to gain arbitrary code execution

§ Drive-by download: download malware without user knowledge

Page 91: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

DefenseBuffer overflow, stack overflow

92

Page 92: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Defense against stack buffer overflow

93

§ Canaries: a know value on the stack just before the return address § Check the canary when function is to return

§ Stack guard by Crispin Cowan (a gcc extension)

§ Non-executable stacks§ Malicious code in the stack cannot be executed

§ Address randomization§ Harder to guess the location of code/return address

§ Compiler boundary checking§ In Java

Page 93: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack canaries

returnmain FPcanary

buffers# on function call:

canary = secret

Page 94: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack canaries

0x414141410x414141410x41414141

AAAAAAA…# vulnerability:

strcpy(buffer, str)

Page 95: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Stack canaries

0x414141410x414141410x41414141

AAAAAAA…# on return:

if canary != secret:exception

ret

Page 96: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

No eXecute (aka W^X aka DEP aka…)

§ Attacker cannot execute code on the stack

§ Mark pages as EITHER (never both)§ Read/write (stack/heap)

§ Executable (.text/code segments)

§ Challenges§ Self-modifying code

§ JIT compilation

§ Requires hardware support (MMU/MPU)

Page 97: Buffer Overflowpeople.cs.vt.edu/~gangwang/class/cs4264/4-buffer-overflow.pdf · Buffer Overflow Attacks 3 •What is a buffer? •A memory space in which data/code can be held •Buffer

Address Space Layout Randomization