[2012 codeengn conference 07] mangoo - exploit writing technique의 발전과 최신 트랜드

44
Exploit Writing Technique Exploit Writing Technique 2012. 12.01 서만기연구원 www.CodeEngn.com 7 th CodeEngn ReverseEngineering Conference

Upload: gangseok-lee

Post on 12-Jun-2015

1.069 views

Category:

Technology


7 download

DESCRIPTION

2012 CodeEngn Conference 07 Secuinside는 코스콤에서 주최, 연합해킹그룹 HARU, 고려대 정보보호대학원에서 주관하는 국제 해킹대회 및 보안컨퍼런스로써 얼마전 개최된 해킹대회 예선전 문제들을 풀기위해 사용한 분석기술과 ASLR과 NX를 우회하는 새로운 익스플로잇 기술에 대해서 소개한다. http://codeengn.com/conference/07

TRANSCRIPT

Page 1: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing TechniqueExploit Writing Technique2012. 12.01

서만기연구원

www.CodeEngn.com7th CodeEngn ReverseEngineering Conference

Page 2: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

ContentsContents01 Buffer Overflow

02 Memory Protection에따른 Exploiting Technique

03 Exploit Writing 재연

Page 3: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

01 Buffer Overflow01 Buffer Overflow

Page 4: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Buffer overflow 개요Buffer overflow 개요

v Buffer overflow란?u 임시저장 공간보다 더 큰 사이즈의 데이터를 저장 하게 되면서 할당된 buffer의공간을 넘어서 다른 주요 데이터를 덮어 쓰게 되는 것

u 주요 Buffer overflow의 종류

§ Integer overflow

§ Stack-based overflow

§ Heap-based overflow

Page 5: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Stack-based overflow개요Stack-based overflow개요

v Stack-based overflowu 할당된 buffer보다 더 많은 데이터가 주입되면서 stack에 저장된 주요 데이터

(SPF, RET, 각종 변수)를 덮어 쓰게 되면서, 공격자의 의도 대로 프로그램의흐름을 제어 할 수 있게 되는 취약점

u 주로 문자열 데이터를 처리하는 과정 중에 발생

v Stack-based overflow 구조

할당된 buffer

SPFRET매개변수

할당된 buffer

SPFRET매개변수

주입된 데이터AAAAAAAAAAAA…

Page 6: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Injection Vector에

Dummy Code 삽입

overflow Check

bed character

Check

ShellCode작성

Page 7: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Memory Protection에따른Exploiting TechniqueMemory Protection에따른Exploiting Technique

Page 8: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Stack-based overflow 대응책(cont)Stack-based overflow 대응책(cont)

v Windows Memory Protection

Page 9: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 10: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

DirectRETDirectRET

v DirectRETu overflow를 통해서 RET(리턴주소)를 조작하여 shellcode를 동작시킴

할당된 buffer

SPF

RET

매개변수

Dummy Code

Shellcode주소

Dummy Code

Shellcode

Page 11: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 12: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Trampoline 개요Trampoline 개요

v shellcode 실행의문제점u Shellcode의 주소값을 예측하기 힘듬

u 주소값을 확인 하더라도 stack주소가 변경될 경우 일회성 공격으로 끝남

v Trampoline 기법u RET의 값을 shellcode가 저장되는 값으로 하드코딩 하지 않고 주입된 데이터의 특정 위치를 레지스터를 활용하여 shellcode를 동작시키는 기법

u 가상메모리 주소값이 바뀌더라도 레지스터가 가리키는 지점의 offset값은 변화가 없다는 점을 활용

Page 13: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Trampoline 진행과정(cont)Trampoline 진행과정(cont)

할당된 buffer

SPF

RET

매개변수

exploit code

할당된 buffer

SPF

RET

매개변수

dummy code

dummy code +

Shellcode

특정 레지스터로JMP/Call

RET 조작

Page 14: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Trampoline 진행과정(cont)Trampoline 진행과정(cont)

(dummy code)

RET

Dummy code

Shellcode

RET 조작

JMP/Call reg

Page 15: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 16: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Stack Cookies 개요Stack Cookies 개요

v Stack Cookies?u Stack based overflow로 인한 공격을 방지하기 위한 4바이트 데이터

u 프롤로그 과정에서 값이 계산되어 stack에 저장되었다가 에필로그 과정에서변조 되었는지 검증

u 문자열을 저장하기 위한 buffer가 할당되었을 때 활용된다.

Buffer

Stack Cookie

SPF

RET

overflow통해공격 할 경우변조

stack Cookie 변조 여부 확인

Page 17: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 18: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

SEH overwriting 진행과정SEH overwriting 진행과정

할당된 buffer

SPF

RET

매개변수

Next

Handler

exploit code

dummy code

shell code

Handler 호출pop pop ret

Exception chain

할당된 buffer

SPF

RET

매개변수

Next

Handler

데이터조작

Page 19: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

SEH overwriting 진행과정(cont)SEH overwriting 진행과정(cont)

Dummy code

Next

Handler

Shellcode

pop regpop reg

ret

데이터조작

Page 20: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Dummy code

Next(\xeb\x06\x90\x9

0)

Handler(pop pop ret)

Shellcode

SEH overwriting 진행과정(cont)SEH overwriting 진행과정(cont)

Page 21: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 22: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

safeSEH개요safeSEH개요

v safeSEH?u SEH기반 exploit 공격을 방어하기 위한 메커니즘

u 컴파일 옵션(/safeSEH)을 통해서 설정 가능

u exception handler frame이 조작되었을 경우 handler호출 불가능

v safeSEH 동작 패턴

KiDispatchException

KiUserExceptionDispatch

handler 검증

handler

exception발생

Page 23: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

safeSEH개요(cont)safeSEH개요(cont)

v safeSEH 동작 패턴u 검증1

§ Stack으로 돌아와서 코드 수행되는 것을 방지하기 위해 TEB값 참조하여stack 주소 범위 확인

§ exception pointer가 이 범위 안에 포함되게 되면 handler호출하지 않음

u 검증2

§ handler pointer가 로드 되어 있는 모듈의 주소범위에 포함 되는지 확인

§ 포함되어 있을 경우 등록된 handler인지 아닌지 확인하여 호출여부 결정

Page 24: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 25: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

SEHOP 개요SEHOP 개요

v SEHOP?u Structured Exception Handling Overwrite Protection

u SEH 마지막 chain이 ntdll!_except_handler인지 아닌지 점검

v SEH overwriting 한계점u handler에 “pop pop ret” 명령어 코드의 주소를 넣고 nSEH값을 (JMP or

nop)로 조작 할 경우 SEH chain이 깨어짐

Page 26: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

SEHOP 개요(cont)SEHOP 개요(cont)

Next SEH

SEH handler

Next SEH

SEH handler

Next SEH

SEH handler

0x909006EB

(pop pop ret)

Next SEH

Module!_except_handler

0xFFFFFFFF

Ntdll!_except_hadler

seh overwriting

broken chain

Page 27: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

SEHOP 개요(cont)SEHOP 개요(cont)

v SEHOP 적용 버전u Microsoft Windows 2008 SP0

u Microsoft Windows Vista SP1

u Microsoft Windows 7

Page 28: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 29: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

exploit code 진행과정exploit code 진행과정

NOP

EB 08nSEH

(0x0012xxxx)SEH handler

NOP

EB 08nSEH

(0xFFFFFFFF)SEH Handler

(ntdll!_except_handler)

Shell code

JMP 코드로 활용가능해야 함

SEH chain

Page 30: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

exploit code 진행과정(cont)exploit code 진행과정(cont)

NOP

EB 08nSEH

(0x0012xxxx)SEH handler

NOP

EB 08nSEH

(0xFFFFFFFF)SEH Handler

(ntdll!_except_handler)

Shell code

pop regpop reg

ret

JMP코드를 통하여NOP 코드수행

Page 31: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

exploit code 진행과정(cont)exploit code 진행과정(cont)

NOP

EB 08nSEH

(0x0012xxxx)SEH handler

NOP

EB 08nSEH

(0xFFFFFFFF)SEH Handler

(ntdll!_except_handler)

Shell code

pop regpop reg

ret

shellcode 실행

Page 32: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 33: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

DEP 개요DEP 개요

v DEP?u 데이터 실행 방지(Data Execution prevention)

u stack/stack의 일부분을 non-executable page로 설정하여 stack에서shellcode가 실행되지 못하게끔 함

v DEP 모드u Hardware DEP

§ NX bit((No Execute page protection – AMD)

§ XD bit(execute Disable – INTEL)

§ 하지만 지원하지 않는 CPU일 경우 활용할 수 없다.

u software DEP

§ CPU가 지원하지 못할 경우 Windows DEP는 Software SEP로 동작

Page 34: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

DEP 개요(cont)DEP 개요(cont)

v DEP 설정 값u OptIn

§ 일부 시스템 바이너리와 프로그램에 대해 DEP 적용

u OptOut

§ DEP가 적용되지 않는 특정 프로그램 목록에 있는 것 외에 모든 프로그램 DEP적용

u AlwaysOn

§ DEP제외 목록을 사용할 수 없으며 DEP 시스템 호환성 수정 프로그램이 적용되지 않는다.

u AlwaysOff

§ Hardware DEP지원 관계 없이 DEP가 시스템 전체를 보호하지 않음

Page 35: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

DEP 개요(cont)DEP 개요(cont)

v Windows 버전 별 DEP 설정

OS 버전 설정값

Windows XP SP2, SP3, Vista OptIn

Windows Vista SP1 OptIn + Permanent DEP

Windows 7 OptIn + Permanent DEP

Windows Server 2003 SP1 OptOut

Windows Server 2008 OptOut + Permanent DEP

Page 36: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 37: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

DEP 우회DEP 우회

v 기본 개념u 함수(필요한 코드가 있는) 호출 chain을 형성하여 DEP 우회

Dummy code

함수주소

함수주소

함수주소

함수주소

Dummy code

Shell code

RET

…RET

…RET

…RET

…RET

RET를 통해서 Stack에저장된 주소로 차례대로리턴하면서 Shellcode를수행할 수 있게 함

Page 38: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

ROP 개요ROP 개요

v ROP?u Return-Oriented Programming

u 기본적인 개념은 ret-2-libc와 동일함

u 필요한 코드의 주소값 활용하여 Call/jmp를 반복하는 ROP chain을 생성하여메모리 보호 기법 우회

v ROP 요구 조건u shellcode를 실행 가능한 지역에 복사하고, 호출 가능해야 함

u shellcode가 실행되기 전 DEP 설정을 변경 해야 한다.

v gadgetu 목적을 달성하기 위해 필요한 코드들을 Call/ret를 반복 적으로 수행하는

ROP chain을 의미 함

Page 39: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

ROP 개요(cont)ROP 개요(cont)

stack pivot

return orientedpayload

shell code

permanentDEP

Bypass Exploit

Page 40: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

ROP 기법활용하기위한함수ROP 기법활용하기위한함수

v ROP 기법에필요한주요 함수u VirtualAlloc(MEM_COMMIT + PAGE_READWRITE_EXECUTE) + copy

memory.

u HeapCreate(HEAP_CREATE_ENABLE_EXECUTE) + HeapAlloc() + copy memory.

u SetProcessDEPPolicy(). (Vista SP1, XP SP3, Server 2008, DEP 정책 설정이 OptIn, OptOut 일 때만 정책 수정 가능)

u NtSetInformationProcess(). 현재 프로세스의 DEP 정책을 바꾸는 함수

u VirtualProtect(PAGE_READ_WRITE_EXECUTE). 특정 메모리 페이지의 접근권한을 설정하는 함수

u WriteProcessMemory().

Page 41: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

exploit code 진행과정exploit code 진행과정

ESP 저장및

매개변수 제작 하는 지점으로 점프

ROP에 활용할 함수(하드코딩)매개변수 1 (shellcode 주소) placeholder(garbage value)

매개변수 2 placeholder(garbage value)매개변수 n placeholder(garbage value)

매개변수 1에 저장될 값 생성하여매개변수 1 placeholder에 덮어 쓰기

매개변수 n에 저장될 값 생성하여매개변수 n placeholder에 덮어 쓰기

ESP 값 변경 및 ROP 활용할 함수로 점프

Padding & NOP

shellcode

stack pivot

Page 42: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Exploit Writing 과정Exploit Writing 과정

Page 43: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

Are you ready?Are you ready?

Page 44: [2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드

thank you.thank you.

www.CodeEngn.com7th CodeEngn ReverseEngineering Conference