[2011 codeengn conference 05] stolenbyte - x64 아키텍쳐 분석과 x64와 x86 비교 분석
DESCRIPTION
2011 CodeEngn Conference 05 안드로이드 리눅스 상에서 bof 공격을 해본다. 임의로 제작한 취약한 어플리케이션을 대상으로 공격코드를 작성하여 쉘을 획득하는 과정을 보여주며설명한다. x86 환경에서와 ARM 환경에서의 공격코드 작성시 차이점에 대해 설명한다. http://codeengn.com/conference/05TRANSCRIPT
x64 아키텍쳐 분석과x64와 x86 비교 분석
손충호 (StolenByte)
www.CodeEngn.comCodeEngn ReverseEngineering Conference
Agenda
• Intro of x64
• The x64 Architecture
• Difference between x86 and x64
• Quiz Time
• Question
Intro of x64
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
Intro of x64
• 1999년– AMD x86-64 발표
• 2000년– AMD 사양 공개
• 2001년– Linux에 최초 적용
• 2003년– AMD64 Operton 출시
• 2011년– Windows 7 사용자 중 약 40%가 x64사용자
The x64 Architecture
The x64 Architecture
• 32bit의 한계– 사용 가능한 가상메모리(Virtual Memory) 64bit
• 그러나, 대게 48bit까지 지원
– 사용 가능한 물리메모리(Physical Memory) 52bit• Intel은 40bit까지 지원
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
The x64 Architecture
• Register Operation
The x64 Architecture
• 64bit Registers (Media Register)– x86에 기존 8개 Register 존재
• xmm0, xmm1, xmm2, … xmm7
– 128bit XMM(SSE) Register 8개 추가• xmm8, xmm9, xmm10, … xmm15• Vector 및 부동소수점 사용
The x64 Architecture
• 64bit Registers
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
Difference between x86 and x64
Difference between x86 and x64
• Operating Model
Difference between x86 and x64
• Address space
Difference between x86 and x64
• Debugging Tool for x64
Difference between x86 and x64
• Debugging Tool for x64 – Visual Studio
Difference between x86 and x64
• Debugging Tool for x64 - WinDbg
Difference between x86 and x64
• Debugging Tool for x64 - IDA
Difference between x86 and x64
• Debugging Tool for x64 – Visual DuxDebugger
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로 이동
Difference between x86 and x64
• 64bit Instructions– STOSQ
• RDI의 주소를 RAX에 보관
– SYSCALL• Fast System Call, SYSENTER
– SYSRET• Fast System Call, SYSEXIT
Difference between x86 and x64
• RIP-Relative Addressing– x86에서 RIP는 사용 불가– x64에서는 RIP를 통해 데이터 Access가 가능
• mov rax, qword ptr [rip+100h]
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
Difference between x86 and x64
• x64 Application Binary Interface - Microsoft– 함수 호출 방법
– MSDN에는 4번째 이후 Parameter에 대한 정보가없음.
Difference between x86 and x64
• x64 Application Binary Interface - Microsoft– 4번째 이후 Parameter는 rsp+20h부터 +08h
Difference between x86 and x64
• x64 Application Binary Interface - Microsoft– Calling Convention – x86
Difference between x86 and x64
• x64 Application Binary Interface - Microsoft– Calling Convention – x64
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 방지
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 사용
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 번호를 가짐
Difference between x86 and x64
• x64 Application Binary Interface - System
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);
Quiz Time
• Microsoft Application Interface 중 처음 4개의Parameter로 사용되는 소수형 Register?
• SYSENTER은 대체 Intruction?
• Kernel Patch Protection은 Windows 버전 몇부터적용되고, 몇 bit 운영체제에서 적용 되는가?
Quiz Time
• Microsoft Application Interface 중 처음 4개의Parameter로 사용되는 소수형 Register?– XMM0, XMM1, XMM2, XMM3
• SYSENTER은 대체 Intruction?
• Kernel Patch Protection은 Windows 버전 몇부터적용되고, 몇 bit 운영체제에서 적용 되는가?
Quiz Time
• Microsoft Application Interface 중 처음 4개의Parameter로 사용되는 소수형 Register?– XMM0, XMM1, XMM2, XMM3
• SYSENTER은 대체 Intruction?– SYSCALL
• Kernel Patch Protection은 Windows 버전 몇부터적용되고, 몇 bit 운영체제에서 적용 되는가?
Quiz Time
• Microsoft Application Interface 중 처음 4개의Parameter로 사용되는 소수형 Register?– XMM0, XMM1, XMM2, XMM3
• SYSENTER은 대체 Intruction?– SYSCALL
• Kernel Patch Protection은 Windows 버전 몇부터적용되고, 몇 bit 운영체제에서 적용 되는가?– Windows XP SP3, 64bit
Question
E-Mail : [email protected] : @StolenByte
Facebook : fb.com/stolenbyte
www.CodeEngn.comCodeEngn ReverseEngineering Conference