[2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

38
x64 아키텍쳐 분석과 x64x86 비교 분석 손충호 (StolenByte) www.CodeEngn.com CodeEngn ReverseEngineering Conference

description

2011 CodeEngn Conference 05 안드로이드 리눅스 상에서 bof 공격을 해본다. 임의로 제작한 취약한 어플리케이션을 대상으로 공격코드를 작성하여 쉘을 획득하는 과정을 보여주며설명한다. x86 환경에서와 ARM 환경에서의 공격코드 작성시 차이점에 대해 설명한다. http://codeengn.com/conference/05

Transcript of [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Page 1: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

x64 아키텍쳐 분석과x64와 x86 비교 분석

손충호 (StolenByte)

www.CodeEngn.comCodeEngn ReverseEngineering Conference

Page 2: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Agenda

• Intro of x64

• The x64 Architecture

• Difference between x86 and x64

• Quiz Time

• Question

Page 3: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Intro of x64

Page 4: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Intro of x64

• AMD– x86-64– AMD64

• Intel– IA-32e– EM64T– Intel 64

• Oracle– x64

• BSD – amd64

• Linux - x86_64• Debian/Ubuntu – amd64• Fedora/SuSE – x86_64• Solaris – amd64

Page 5: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Intro of x64

• 1999년– AMD x86-64 발표

• 2000년– AMD 사양 공개

• 2001년– Linux에 최초 적용

• 2003년– AMD64 Operton 출시

• 2011년– Windows 7 사용자 중 약 40%가 x64사용자

Page 6: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

The x64 Architecture

Page 7: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

The x64 Architecture

• 32bit의 한계– 사용 가능한 가상메모리(Virtual Memory) 64bit

• 그러나, 대게 48bit까지 지원

– 사용 가능한 물리메모리(Physical Memory) 52bit• Intel은 40bit까지 지원

Page 8: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

The x64 Architecture

• 64bit Registers (GPRs)– 32bit Register에서 64bit로 확장

• EAX -> RAX• ESP -> RSP• EIP -> RIP

– 64bit Register 8개 추가• r8, r9, r10, r11, r12, r13, r14, r15

Page 9: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

The x64 Architecture

• Register Operation

Page 10: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

The x64 Architecture

• 64bit Registers (Media Register)– x86에 기존 8개 Register 존재

• xmm0, xmm1, xmm2, … xmm7

– 128bit XMM(SSE) Register 8개 추가• xmm8, xmm9, xmm10, … xmm15• Vector 및 부동소수점 사용

Page 11: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

The x64 Architecture

• 64bit Registers

Page 12: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

The x64 Architecture

• Intel/AMD AVX– AVX

• Adavanced Vector Extension

– 256bit Register 8개 추가• ymm0, ymm1, ymm2, … ymm7

– AVX의 하위 128는 XMM(SSE) Register와 Overlap• xmm0, xmm1, xmm, … xmm7

– AVX가 최초 적용된 CPU는 Intel Sandy Bridge

Page 13: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

Page 14: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• Operating Model

Page 15: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• Address space

Page 16: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• Debugging Tool for x64

Page 17: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• Debugging Tool for x64 – Visual Studio

Page 18: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• Debugging Tool for x64 - WinDbg

Page 19: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• Debugging Tool for x64 - IDA

Page 20: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• Debugging Tool for x64 – Visual DuxDebugger

Page 21: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• 64bit Instructions– CDQE

• Quardword에서 Doubleword로 변환(ex. RAX -> EAX)

– CMPSQ• RSI와 RDI를 비교

– CMPXCHG16B• RDX:RAX와 m128와 비교• m128은 128bit Register를 가리키는 메모리 주소

– LODSQ• RSI주소에 있는 값을 RAX에 로드

– MOVSQ• RSI의 주소를 RDI로 이동

Page 22: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• 64bit Instructions– STOSQ

• RDI의 주소를 RAX에 보관

– SYSCALL• Fast System Call, SYSENTER

– SYSRET• Fast System Call, SYSEXIT

Page 23: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• RIP-Relative Addressing– x86에서 RIP는 사용 불가– x64에서는 RIP를 통해 데이터 Access가 가능

• mov rax, qword ptr [rip+100h]

Page 24: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface - Microsoft– 하나의 Calling Convention만 사용

• cdecl/stdcall 등 사용하지 않음

– Calling convention의 모델은 fastcall• 처음 4개의 Parameter는 Register를 사용하고, 그 이후는

Stack을 사용• RAX와 XMM0으로 Return

– 처음 4개의 Parameter에 사용되는 Register• RCX, RDX, R8, R9 (정수형)• XMM0, XMM1, XMM2, XMM3 (소수형)

– XMM0은 Float, Double, 128bit 타입에 대한 모든Return

Page 25: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface - Microsoft– 함수 호출 방법

– MSDN에는 4번째 이후 Parameter에 대한 정보가없음.

Page 26: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface - Microsoft– 4번째 이후 Parameter는 rsp+20h부터 +08h

Page 27: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface - Microsoft– Calling Convention – x86

Page 28: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface - Microsoft– Calling Convention – x64

Page 29: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Kernel Patch Guard (KPP)– Windows XP x64 부터 도입이 된 기술

• 악성코드 및 Third Part 개발로 인해 BSOD 발생되는 경우에OS를 안정화를 도모하기 위해 적용

– System Image 보호• Ntoskrnl, NDIS, HAL에 대한 이미지 무결성을 체크

– SSDT(System Service Descriptor Table)• Windows의 커널이 아닌 다른 메모리가 맵핑되지 않게

Hooking 방지

– Processor MSRs(syscall), GDT, IDT 보호• Descriptor Table에 대한 보호를 하여 Hooking 방지

Page 30: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface - System– Linux, BSD, MAC 등 사용– Microsoft와 전체적으로 다름

– Calling Convention에 많은 Register 사용• 6개 정수형 Register를 Argument 사용• 8개 Float/Double형 Register를 Argument 사용

Page 31: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface - System– 정수형 Paramter 6개 Register

• RDI, RSI, RDX, RCX, R8, R9

– Float/Double/Vector형 Parameter 8개 Register• XMM0, XMM1, XMM2, … XMM7

– 중복되지 않고 최대 14개의 Parameter를 저장 가능– 구조체 Parameter는 Register 사이에서 분할 가능– RAX는 Vector 번호를 가짐

Page 32: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface - System

Page 33: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Difference between x86 and x64

• x64 Application Binary Interface – System• printf("%i %i %f %i %f %i\n", 1, 2, 3.0, 4, 5.0, 6);

Page 34: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Quiz Time

• Microsoft Application Interface 중 처음 4개의Parameter로 사용되는 소수형 Register?

• SYSENTER은 대체 Intruction?

• Kernel Patch Protection은 Windows 버전 몇부터적용되고, 몇 bit 운영체제에서 적용 되는가?

Page 35: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Quiz Time

• Microsoft Application Interface 중 처음 4개의Parameter로 사용되는 소수형 Register?– XMM0, XMM1, XMM2, XMM3

• SYSENTER은 대체 Intruction?

• Kernel Patch Protection은 Windows 버전 몇부터적용되고, 몇 bit 운영체제에서 적용 되는가?

Page 36: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Quiz Time

• Microsoft Application Interface 중 처음 4개의Parameter로 사용되는 소수형 Register?– XMM0, XMM1, XMM2, XMM3

• SYSENTER은 대체 Intruction?– SYSCALL

• Kernel Patch Protection은 Windows 버전 몇부터적용되고, 몇 bit 운영체제에서 적용 되는가?

Page 37: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Quiz Time

• Microsoft Application Interface 중 처음 4개의Parameter로 사용되는 소수형 Register?– XMM0, XMM1, XMM2, XMM3

• SYSENTER은 대체 Intruction?– SYSCALL

• Kernel Patch Protection은 Windows 버전 몇부터적용되고, 몇 bit 운영체제에서 적용 되는가?– Windows XP SP3, 64bit

Page 38: [2011 CodeEngn Conference 05] StolenByte - x64 아키텍쳐 분석과 x64와 x86 비교 분석

Question

E-Mail : [email protected] : @StolenByte

Facebook : fb.com/stolenbyte

www.CodeEngn.comCodeEngn ReverseEngineering Conference