• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
 

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

on

  • 1,161 views

2012 CodeEngn Conference 07 ...

2012 CodeEngn Conference 07

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

http://codeengn.com/conference/07

Statistics

Views

Total Views
1,161
Views on SlideShare
1,161
Embed Views
0

Actions

Likes
1
Downloads
42
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • ExploitWritingTechniqueExploitWritingTechnique2012. 12.01서만기연구원www.CodeEngn.com7th CodeEngn ReverseEngineering Conference
    • ContentsContents01BufferOverflow02MemoryProtection에따른 ExploitingTechnique03ExploitWriting재연
    • 01BufferOverflow01BufferOverflow
    • Bufferoverflow개요Bufferoverflow개요v Buffer overflow란?u 임시저장 공간보다 더 큰 사이즈의 데이터를 저장 하게 되면서 할당된 buffer의공간을 넘어서 다른 주요 데이터를 덮어 쓰게 되는 것u 주요 Buffer overflow의 종류§ Integer overflow§ Stack-based overflow§ Heap-based overflow
    • Stack-basedoverflow개요Stack-basedoverflow개요v Stack-based overflowu 할당된 buffer보다 더 많은 데이터가 주입되면서 stack에 저장된 주요 데이터(SPF, RET, 각종 변수)를 덮어 쓰게 되면서, 공격자의 의도 대로 프로그램의흐름을 제어 할 수 있게 되는 취약점u 주로 문자열 데이터를 처리하는 과정 중에 발생v Stack-based overflow 구조할당된 bufferSPFRET매개변수…할당된 bufferSPFRET매개변수…주입된 데이터AAAAAAAAAAAA…
    • ExploitWriting과정ExploitWriting과정InjectionVector에DummyCode 삽입overflowCheckbedcharacterCheckShellCode작성
    • MemoryProtection에따른ExploitingTechniqueMemoryProtection에따른ExploitingTechnique
    • Stack-basedoverflow대응책(cont)Stack-basedoverflow대응책(cont)v Windows Memory Protection
    • ExploitWriting과정ExploitWriting과정
    • DirectRETDirectRETv DirectRETu overflow를 통해서 RET(리턴주소)를 조작하여 shellcode를 동작시킴할당된 bufferSPFRET매개변수…Dummy CodeShellcode 주소Dummy CodeShellcode
    • ExploitWriting과정ExploitWriting과정
    • Trampoline개요Trampoline개요v shellcode 실행의 문제점u Shellcode의 주소값을 예측하기 힘듬u 주소값을 확인 하더라도 stack주소가 변경될 경우 일회성 공격으로 끝남v Trampoline 기법u RET의 값을 shellcode가 저장되는 값으로 하드코딩 하지 않고 주입된 데이터의 특정 위치를 레지스터를 활용하여 shellcode를 동작시키는 기법u 가상메모리 주소값이 바뀌더라도 레지스터가 가리키는 지점의 offset값은 변화가 없다는 점을 활용
    • Trampoline진행과정(cont)Trampoline진행과정(cont)할당된 bufferSPFRET매개변수…exploit code할당된 bufferSPFRET매개변수…dummy codedummy code+Shellcode특정 레지스터로JMP/CallRET조작
    • Trampoline진행과정(cont)Trampoline진행과정(cont)(dummy code)RETDummy codeShellcodeRET조작JMP/Call reg
    • ExploitWriting과정ExploitWriting과정
    • StackCookies개요StackCookies개요v Stack Cookies?u Stack based overflow로 인한 공격을 방지하기 위한 4바이트 데이터u 프롤로그 과정에서 값이 계산되어 stack에 저장되었다가 에필로그 과정에서변조 되었는지 검증u 문자열을 저장하기 위한 buffer가 할당되었을 때 활용된다.BufferStack CookieSPFRET…overflow통해공격 할 경우변조stack Cookie변조 여부 확인
    • ExploitWriting과정ExploitWriting과정
    • SEHoverwriting진행과정SEHoverwriting진행과정할당된 bufferSPFRET매개변수…NextHandler…exploit codedummy codeshell codeHandler 호출pop pop retExceptionchain할당된 bufferSPFRET매개변수…NextHandler…데이터조작
    • SEHoverwriting진행과정(cont)SEHoverwriting진행과정(cont)Dummy codeNextHandlerShellcodepop regpop regret데이터조작
    • Dummy codeNext(xebx06x90x90)Handler(pop pop ret)ShellcodeSEHoverwriting진행과정(cont)SEHoverwriting진행과정(cont)
    • ExploitWriting과정ExploitWriting과정
    • safeSEH개요safeSEH개요v safeSEH?u SEH기반 exploit 공격을 방어하기 위한 메커니즘u 컴파일 옵션(/safeSEH)을 통해서 설정 가능u exception handler frame이 조작되었을 경우 handler호출 불가능v safeSEH 동작 패턴KiDispatchExceptionKiUserExceptionDispatchhandler 검증handlerexception발생
    • safeSEH개요(cont)safeSEH개요(cont)v safeSEH 동작 패턴u 검증1§ Stack으로 돌아와서 코드 수행되는 것을 방지하기 위해 TEB값 참조하여stack 주소 범위 확인§ exception pointer가 이 범위 안에 포함되게 되면 handler호출하지 않음u 검증2§ handler pointer가 로드 되어 있는 모듈의 주소범위에 포함 되는지 확인§ 포함되어 있을 경우 등록된 handler인지 아닌지 확인하여 호출여부 결정
    • ExploitWriting과정ExploitWriting과정
    • SEHOP개요SEHOP개요v SEHOP?u Structured Exception Handling Overwrite Protectionu SEH 마지막 chain이 ntdll!_except_handler인지 아닌지 점검v SEH overwriting 한계점u handler에 “pop pop ret” 명령어 코드의 주소를 넣고 nSEH값을 (JMP ornop)로 조작 할 경우 SEH chain이 깨어짐
    • SEHOP개요(cont)SEHOP개요(cont)Next SEHSEH handlerNext SEHSEH handlerNext SEHSEH handler0x909006EB(pop pop ret)Next SEHModule!_except_handler0xFFFFFFFFNtdll!_except_hadlerseh overwritingbroken chain
    • SEHOP개요(cont)SEHOP개요(cont)v SEHOP 적용 버전u Microsoft Windows 2008 SP0u Microsoft Windows Vista SP1u Microsoft Windows 7
    • ExploitWriting과정ExploitWriting과정
    • exploitcode진행과정exploitcode진행과정NOPEB 08nSEH(0x0012xxxx)SEH handlerNOPEB 08nSEH(0xFFFFFFFF)SEH Handler(ntdll!_except_handler)Shell codeJMP 코드로 활용가능해야 함SEH chain
    • exploitcode진행과정(cont)exploitcode진행과정(cont)NOPEB 08nSEH(0x0012xxxx)SEH handlerNOPEB 08nSEH(0xFFFFFFFF)SEH Handler(ntdll!_except_handler)Shell codepop regpop regretJMP코드를 통하여NOP 코드수행
    • exploitcode진행과정(cont)exploitcode진행과정(cont)NOPEB 08nSEH(0x0012xxxx)SEH handlerNOPEB 08nSEH(0xFFFFFFFF)SEH Handler(ntdll!_except_handler)Shell codepop regpop regretshellcode 실행
    • ExploitWriting과정ExploitWriting과정
    • 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로 동작
    • DEP개요(cont)DEP개요(cont)v DEP 설정 값u OptIn§ 일부 시스템 바이너리와 프로그램에 대해 DEP 적용u OptOut§ DEP가 적용되지 않는 특정 프로그램 목록에 있는 것 외에 모든 프로그램 DEP적용u AlwaysOn§ DEP제외 목록을 사용할 수 없으며 DEP 시스템 호환성 수정 프로그램이 적용되지 않는다.u AlwaysOff§ Hardware DEP지원 관계 없이 DEP가 시스템 전체를 보호하지 않음
    • DEP개요(cont)DEP개요(cont)v Windows 버전 별 DEP 설정OS 버전 설정 값Windows XP SP2, SP3, Vista OptInWindows Vista SP1 OptIn + Permanent DEPWindows 7 OptIn + Permanent DEPWindows Server 2003 SP1 OptOutWindows Server 2008 OptOut + Permanent DEP
    • ExploitWriting과정ExploitWriting과정
    • DEP우회DEP우회v 기본 개념u 함수(필요한 코드가 있는) 호출 chain을 형성하여 DEP 우회Dummy code함수 주소함수 주소함수 주소함수 주소Dummy codeShell codeRET…RET…RET…RET…RETRET를 통해서 Stack에저장된 주소로 차례대로리턴하면서 Shellcode를수행할 수 있게 함
    • ROP개요ROP개요v ROP?u Return-Oriented Programmingu 기본적인 개념은 ret-2-libc와 동일함u 필요한 코드의 주소값 활용하여 Call/jmp를 반복하는 ROP chain을 생성하여메모리 보호 기법 우회v ROP 요구 조건u shellcode를 실행 가능한 지역에 복사하고, 호출 가능해야 함u shellcode가 실행되기 전 DEP 설정을 변경 해야 한다.v gadgetu 목적을 달성하기 위해 필요한 코드들을 Call/ret를 반복 적으로 수행하는ROP chain을 의미 함
    • ROP개요(cont)ROP개요(cont)stackpivotreturnorientedpayloadshellcodepermanentDEPBypassExploit
    • ROP기법활용하기위한함수ROP기법활용하기위한함수v ROP 기법에 필요한 주요 함수u VirtualAlloc(MEM_COMMIT + PAGE_READWRITE_EXECUTE) + copymemory.u HeapCreate(HEAP_CREATE_ENABLE_EXECUTE) + HeapAlloc() + copymemory.u SetProcessDEPPolicy(). (Vista SP1, XP SP3, Server 2008, DEP 정책 설정이 OptIn, OptOut 일 때만 정책 수정 가능)u NtSetInformationProcess(). 현재 프로세스의 DEP 정책을 바꾸는 함수u VirtualProtect(PAGE_READ_WRITE_EXECUTE). 특정 메모리 페이지의 접근권한을 설정하는 함수u WriteProcessMemory().
    • exploitcode진행과정exploitcode진행과정ESP 저장및매개변수 제작 하는 지점으로 점프ROP에 활용할 함수(하드코딩)매개변수 1 (shellcode 주소) placeholder(garbage value)매개변수 2 placeholder(garbage value)매개변수 n placeholder(garbage value)매개변수 1에 저장될 값 생성하여매개변수 1 placeholder에 덮어 쓰기매개변수 n에 저장될 값 생성하여매개변수 n placeholder에 덮어 쓰기ESP 값 변경 및 ROP 활용할 함수로 점프Padding & NOPshellcode…stack pivot
    • ExploitWriting과정ExploitWriting과정
    • Are you ready?Are you ready?
    • thank you.thank you.www.CodeEngn.com7th CodeEngn ReverseEngineering Conference