SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Windows Kernel Exploit
Part1
세종대학교 양경석
Who Am I
• 세종대학교 15학번 양경석 • BoB 6기 취약점 트랙
• 커널 취약점 프로젝트 진행중
• 커널 뉴비뉴비
목차
1부 – Internal
1. Kernel Internal
2. Kernel Hooking
2부 – Exploit Skills
1. Hacksys Driver
2. Stack Overflow
3. Stack Overflow GS
4. Arbitrary Write
5. Null Pointer Dereference
6. Recent Windows Mitigation
1부 – Internal
Kernel Internal
Kernel Internal
• Kernel Syscall 호출 방법
• int 0x2e
• xp 이전에 쓰이던 syscall
• 상대적으로 느린 interrupt 사용으로 속도가 느림
• SYSENTER
• xp 이후부터 사용된 syscall
• int 0x2e보다 빠른 syscall을 제공한다
Kernel Internal
Ntdll.dllKernel32.dll
USER level KERNEL level
nt!KiFastCallEntry
SYSEXIT
Native API
nt!KiSystemCallExi
t
SYSENTER
(MSR 0x176)
ntdll!KiFastSystemCallRet
SSDT
nt!...
nt!...
nt!...
MSR register?
• 특수한 기능을 제공할 수 있게 정의한 control Register
• SYSENTER 명령어를 실행하면 다음 기능이 실행된다.
Code Segment <- MSR 0x174 (IA32_SYSENTER_CS)
Stack Segment <- IA32_SYSENTER_CS + 8
EIP Register <- MSR 0x176 (IA32_SYSENTER_EIP) - KiFastCallEntry
ESP Register <- MSR 0x175 (IA32_SYSENTER_ESP)
Kernel Hooking
• 스마트한 Kernal Fuzzer를 제작하기 위해 call flow case를 조사
할 필요가 있음
• Target 함수가 많아서 일일히 찾기 넘빡심 ㅜㅜ
“Kernel syscall 후킹 후 argument, return value를 뽑아 온 후
연관 관계를 조사하는건 어떨
까?!”
Kernel Hooking
• Kernel Hooking을 통해 커널 API 데이터를 수집하거나,
API 기능을 바꿔버릴 수 있음! 다양한 분야에 활용 가능
• 단점 : 드라이버 개발 넘 빡세다 ㅜㅜ
• 대상 운영체제에서 개발 추천...
• 윈10 에서 개발한거 윈7에서 실행하니까 계속 블루스크린 ㅠㅠ
• 블루스크린...
• Windbg 디버깅 필수
Windows Driver develop
Kernel Hooking – MSR Hooking
Ntdll.dllKernel32.dll
USER level KERNEL level
nt!KiFastCallEntry
SYSEXIT
nt!KiSystemCallExit
DBGPrint
argument
Hook MSR
ntdll!KiFastSystemCallRet
SSDT
nt!...
nt!...
nt!... Native API
Kernel Hooking – MSR Hooking
1. rdmsr 명령어를 통해 KiFastCallEntry 주소 저장
2. wrmsr 명령어를 통해 HookFunction 주소를 MSR Register에 덮
어 씌움
3. HookFunction에서는 Argument 개수에 맞춰 출력한 후 저장해
놓은 KiFastCallEntry로 jmp
Kernel Hooking – MSR Hooking
1. save MSR 176
Kernel Hooking – MSR Hooking
2. write MSR 176
Kernel Hooking – MSR Hooking
3. HookFunction
Kernel Hooking – MSR Hooking
Success!
Kernel Hooking
• But how to print return value?
• ntdll!KiFastSystemCallRet를 후킹해서 return value를 로깅하자!
User land에서 Dll 후킹을 걸면 Copy on Write 방식에 의해 모든 프로세스
에 후킹을 걸어 줘야 하므로 복잡해짐
• 그럼 nt!KiSystemCallExit에 인라인 후킹!
Kernel Hooking – Inline Hooking
Kernel Hooking – Inline Hooking
Ntdll.dllKernel32.dll
USER level KERNEL level
nt!KiFastCallEntry
SYSEXIT
nt!KiSystemCallExit
DBGPrint
argument
Hook MSR
ntdll!KiFastSystemCallRet
DBGPrint
return
SSDT
nt!...
nt!...
nt!... Native API
Inline Hooking
Kernel Hooking – Inline Hooking
1. 커널 주소를 읽어와 Inline Hoking 할 nt!KiSystemCallExit 주소
구함
Kernel Hooking – Inline Hooking
2. nt!KiSystemCallExit에 HookedFunction로 jmp 하는 Inline
Hooking을 검
Kernel Hooking – Inline Hooking
3. Inline Hooking을 통해 실행된 HookedFunction
Kernel Hooking – Inline Hooking
Success!
but...............................
Kernel Hooking
• 수십 초간 수행 후 터져버림...
• 오류 원인
• 커널 스레드에 의한 상호 배제 문제
• User land에서 처리하도록 고안중
귀여운 보노보노 보면서
쉬는 시간~
2부 – Exploit Skills
Windows Integrity
• Windows는 해당 프로세스의 액세스 토큰에 따라 액세스 제어 적
용
• UNTRUSTED - Anonymous
• LOW – Everyone, can not access to local resources
• MEDIUM – Authenticated Users
• HIGH – Administrators
• SYSTEM – LocalSystem, LocalService...
HackSysExtremeVulnerableDriver
• Hacksysteam에서 윈도우 커널에서 주로 발생하는 취약점들을
연습해 볼 수 있게 만든 Driver
Double Fetch
Pool Overflow
Use After Free
Uninitialized Heap Variable
Uninitialized Stack Variable
Insecure Kernel Resource Access
Stack Overflow
Stack Overflow GS
Arbitrary Overwrite
Null Pointer Dereference
Type Confusion
Integer Overflow
easy hard
HackSysDriver Setting
• 준비물
• Virtual KD – VMWare의 가상머신과 Windbg를 연동하여 Windows 운영
체제 디버깅을 수행하기 쉽게 해 줌
• Windbg
• HEVD.sys – hacksys 파일을 빌드하여 만든 sys 파일
• OSRLOADER – Driver load, unload를 수행하기 쉽게 해 줌
HackSysDriver Setting
• 대상 Windows 운영체제를 Windbg를 붙인 채 부팅
• HEVD.sys 파일을 대상 운영체제에서 OSRLOADER를 이용하여
드라이버 서비스 등록
HackSysDriver Trigger IN Driver
HackSysDriver Trigger IN User
Input Buffer IRP
I/O
Manager
User Kernel (Driver)
IO_STACK_LOCATION
HackSysDriver Trigger User -> Driver
Stack Overflow
Stack Overflow
1. 현재 프로세스의 EPROCESS 구조체 찾음
Stack Overflow
2. SYSTEM 프로세스의 EPROCESS 구조체 찾음 (PID = 4)
...
Stack Overflow
3. SYSTEM EPROCESS 구조체에서 Token 값 복사 후 내
EPROCESS 구조체에 붙여넣기
Stack Overflow
Windows 7 has no SMEP.
let’s call user shellcode function.
Stack Overflow
Stack Overflow와 코드는 같음
Stack Overflow GS
Stack Overflow GS
• Stack Cookie 우회 방법
• 1. Stack Cookie leak
• 2. Stack Cookie Failure check 로직 수행 전에 EIP register control
Stack Overflow GS
Case Userland
End Of Stack Segment
...
SE handler
nSEH
...
retn
sfp
Cookie
buffer
aaaa
...
pop pop ret
shellcode
...
aaaa
aaaa
aaaa
aaaa
Stack Overflow GS
Case Kernelland
memory fault exceptions that occur in kernel memory areas
are not handled by exception handlers, but only crash the OS.
So generate a memory fault exception due to the access of an
unmapped page in userland.
Stack Overflow GS
Arbitrary Write
• Write What Where
Arbitrary Write
• exploit 방법 여러 가지 있음!
• SSDT Overwrite
• Hal Dispatch Table Overwrite
• TokenObject-> Privileges.Enabled Field Overwrite
• Hal Dispatch Table Overwrite을 이용해서 풀어보자!
Arbitrary Write
Arbitrary Write
HalDispatchTable
HalDispatchTable + 4Token Shellcode
NtQueryIntervalProfile
KeQueryIntervalProfile
Userland Kernalland
call NtQueryIntervalProfile
Arbitrary Write
• Hal Dispatch Table 주소는?!
• Windows 7에서는 기본적으로 NtQuerySystemInformation API를 통해
커널 베이스 주소를 구할 수 있음
Null Pointer Dereference
•
Null Pointer Dereference
Null Pointer Dereference
• 할당되지 않은 0x00000000 주소를 참조하여 크래쉬 남
• 0x00000000 을 쉘코드 넣어서 할당해 주자!
• ‘VirtualAlloc’, ‘VirtualAllocEx’는 0x00001000부터 할당 가능
• undocumented function NTAPI ‘NtAllocateVirtualMemory’사용
Windows 7 exploitation issue
• Executable NonPagedPool was the default
• Kernel 영역에 쉘코드 올려서 실행 할 수 있음
• Kernel information leaks were available with
NtQuerySystemInformation
• no SMEP, SMAP
Windows 8.1, 10 exploitation issue
• NonPagedPoolNx is the new default
• 커널에 쉘코드 올리는거 불가능!
• SMEP
• Windows 0xFFFFFFFFFD00448 (HAL Heap) contained a pointer to ntoskrnl.exe
• SIDT instruction leaks address of ntoskrnl.exe pointer (IDTR Register)
• Kernel address leak with GdiSharedHandleTable
• ROP base address 구할 수 있네!
• Page Table Entry overwrite can bypass SMEP
• modify U/S flag
Mitigations Windows 10 1607
• Remove Kernel address leak with GdiSharedHandleTable
• SIDT instruction leaks address of ntoskrnl.exe pointer
mitigated
• 아직은 HAL Heap 이용하여 릭 가능
• Page Table Entry Randomize
Mitigations Windows 10 1703
• HAL Heap randomized
• now must leak ntoskrnl.exe pointer
• 이제 base address 구할 때 무조건 leak 필요함
reference
• Hacksys Driver 깃 주소
https://github.com/hacksysteam/HackSysExtremeVulnerableDriver
• Hacksys Driver 세팅법
https://hshrzd.wordpress.com/2017/06/05/starting-with-windows-kernel-
exploitation-part-2/
• Windows Kernel Architecture Internals - Dave Probert Windows Kernel
Architect, Microsoft
• DEFCON-25-Morten-Schenk-Taking-Windows-10-Kernel-Exploitation-to-
the-next-level-UPDATED
감사합니다!
ks8171235@naver.com

Weitere ähnliche Inhalte

Was ist angesagt?

In the DOM, no one will hear you scream
In the DOM, no one will hear you screamIn the DOM, no one will hear you scream
In the DOM, no one will hear you screamMario Heiderich
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux SystemJian-Hong Pan
 
from Binary to Binary: How Qemu Works
from Binary to Binary: How Qemu Worksfrom Binary to Binary: How Qemu Works
from Binary to Binary: How Qemu WorksZhen Wei
 
ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介sounakano
 
[131]해커의 관점에서 바라보기
[131]해커의 관점에서 바라보기[131]해커의 관점에서 바라보기
[131]해커의 관점에서 바라보기NAVER D2
 
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...Christopher Frohoff
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1YEONG-CHEON YOU
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理KageShiron
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
LLVM Backend の紹介
LLVM Backend の紹介LLVM Backend の紹介
LLVM Backend の紹介Akira Maruoka
 
Boostのあるプログラミング生活
Boostのあるプログラミング生活Boostのあるプログラミング生活
Boostのあるプログラミング生活Akira Takahashi
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方Funato Takashi
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2YEONG-CHEON YOU
 
Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)Angel Boy
 

Was ist angesagt? (20)

In the DOM, no one will hear you scream
In the DOM, no one will hear you screamIn the DOM, no one will hear you scream
In the DOM, no one will hear you scream
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux System
 
from Binary to Binary: How Qemu Works
from Binary to Binary: How Qemu Worksfrom Binary to Binary: How Qemu Works
from Binary to Binary: How Qemu Works
 
ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介
 
WSL Reloaded
WSL ReloadedWSL Reloaded
WSL Reloaded
 
[131]해커의 관점에서 바라보기
[131]해커의 관점에서 바라보기[131]해커의 관점에서 바라보기
[131]해커의 관점에서 바라보기
 
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
Quick bcc
Quick bccQuick bcc
Quick bcc
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
Qemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System EmulationQemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System Emulation
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
LLVM Backend の紹介
LLVM Backend の紹介LLVM Backend の紹介
LLVM Backend の紹介
 
Boostのあるプログラミング生活
Boostのあるプログラミング生活Boostのあるプログラミング生活
Boostのあるプログラミング生活
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2
 
Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)
 
Interpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratchInterpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratch
 

Ähnlich wie Windows kernel basic exploit

Linux Kernel 101 for Beginner
Linux Kernel 101 for BeginnerLinux Kernel 101 for Beginner
Linux Kernel 101 for BeginnerInfraEngineer
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
(OCI 탐험일지) cloud shell
(OCI 탐험일지) cloud shell(OCI 탐험일지) cloud shell
(OCI 탐험일지) cloud shellJay Park
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경NAVER Engineering
 
Pivot3 overview
Pivot3 overviewPivot3 overview
Pivot3 overviewCDIT-HCI
 
kubernetes from beginner to advanced
kubernetes  from beginner to advancedkubernetes  from beginner to advanced
kubernetes from beginner to advancedOracle Korea
 
kubernetes : From beginner to Advanced
kubernetes : From beginner to Advancedkubernetes : From beginner to Advanced
kubernetes : From beginner to AdvancedInho Kang
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migrationymtech
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구ByungJoon Lee
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 
셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영Nalee Jang
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - WebinarNAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민NAVER D2
 
[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel CaliforniaTheori
 
An overview of kubernetes & (very) simple live demo
An overview of kubernetes & (very) simple live demoAn overview of kubernetes & (very) simple live demo
An overview of kubernetes & (very) simple live demoGwan-Taek Lee
 

Ähnlich wie Windows kernel basic exploit (20)

Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
Linux Kernel 101 for Beginner
Linux Kernel 101 for BeginnerLinux Kernel 101 for Beginner
Linux Kernel 101 for Beginner
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
(OCI 탐험일지) cloud shell
(OCI 탐험일지) cloud shell(OCI 탐험일지) cloud shell
(OCI 탐험일지) cloud shell
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
 
Pivot3 overview
Pivot3 overviewPivot3 overview
Pivot3 overview
 
kubernetes from beginner to advanced
kubernetes  from beginner to advancedkubernetes  from beginner to advanced
kubernetes from beginner to advanced
 
kubernetes : From beginner to Advanced
kubernetes : From beginner to Advancedkubernetes : From beginner to Advanced
kubernetes : From beginner to Advanced
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민
 
[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California
 
An overview of kubernetes & (very) simple live demo
An overview of kubernetes & (very) simple live demoAn overview of kubernetes & (very) simple live demo
An overview of kubernetes & (very) simple live demo
 
[온라인교육시리즈] NKS에서 Cluster & Pods Autoscaling 적용
[온라인교육시리즈] NKS에서 Cluster & Pods Autoscaling 적용[온라인교육시리즈] NKS에서 Cluster & Pods Autoscaling 적용
[온라인교육시리즈] NKS에서 Cluster & Pods Autoscaling 적용
 

Windows kernel basic exploit

  • 2. Who Am I • 세종대학교 15학번 양경석 • BoB 6기 취약점 트랙 • 커널 취약점 프로젝트 진행중 • 커널 뉴비뉴비
  • 3. 목차 1부 – Internal 1. Kernel Internal 2. Kernel Hooking 2부 – Exploit Skills 1. Hacksys Driver 2. Stack Overflow 3. Stack Overflow GS 4. Arbitrary Write 5. Null Pointer Dereference 6. Recent Windows Mitigation
  • 6. Kernel Internal • Kernel Syscall 호출 방법 • int 0x2e • xp 이전에 쓰이던 syscall • 상대적으로 느린 interrupt 사용으로 속도가 느림 • SYSENTER • xp 이후부터 사용된 syscall • int 0x2e보다 빠른 syscall을 제공한다
  • 7. Kernel Internal Ntdll.dllKernel32.dll USER level KERNEL level nt!KiFastCallEntry SYSEXIT Native API nt!KiSystemCallExi t SYSENTER (MSR 0x176) ntdll!KiFastSystemCallRet SSDT nt!... nt!... nt!...
  • 8. MSR register? • 특수한 기능을 제공할 수 있게 정의한 control Register • SYSENTER 명령어를 실행하면 다음 기능이 실행된다. Code Segment <- MSR 0x174 (IA32_SYSENTER_CS) Stack Segment <- IA32_SYSENTER_CS + 8 EIP Register <- MSR 0x176 (IA32_SYSENTER_EIP) - KiFastCallEntry ESP Register <- MSR 0x175 (IA32_SYSENTER_ESP)
  • 9. Kernel Hooking • 스마트한 Kernal Fuzzer를 제작하기 위해 call flow case를 조사 할 필요가 있음 • Target 함수가 많아서 일일히 찾기 넘빡심 ㅜㅜ “Kernel syscall 후킹 후 argument, return value를 뽑아 온 후 연관 관계를 조사하는건 어떨 까?!”
  • 10. Kernel Hooking • Kernel Hooking을 통해 커널 API 데이터를 수집하거나, API 기능을 바꿔버릴 수 있음! 다양한 분야에 활용 가능 • 단점 : 드라이버 개발 넘 빡세다 ㅜㅜ
  • 11. • 대상 운영체제에서 개발 추천... • 윈10 에서 개발한거 윈7에서 실행하니까 계속 블루스크린 ㅠㅠ • 블루스크린... • Windbg 디버깅 필수 Windows Driver develop
  • 12. Kernel Hooking – MSR Hooking Ntdll.dllKernel32.dll USER level KERNEL level nt!KiFastCallEntry SYSEXIT nt!KiSystemCallExit DBGPrint argument Hook MSR ntdll!KiFastSystemCallRet SSDT nt!... nt!... nt!... Native API
  • 13. Kernel Hooking – MSR Hooking 1. rdmsr 명령어를 통해 KiFastCallEntry 주소 저장 2. wrmsr 명령어를 통해 HookFunction 주소를 MSR Register에 덮 어 씌움 3. HookFunction에서는 Argument 개수에 맞춰 출력한 후 저장해 놓은 KiFastCallEntry로 jmp
  • 14. Kernel Hooking – MSR Hooking 1. save MSR 176
  • 15. Kernel Hooking – MSR Hooking 2. write MSR 176
  • 16. Kernel Hooking – MSR Hooking 3. HookFunction
  • 17. Kernel Hooking – MSR Hooking Success!
  • 18. Kernel Hooking • But how to print return value? • ntdll!KiFastSystemCallRet를 후킹해서 return value를 로깅하자! User land에서 Dll 후킹을 걸면 Copy on Write 방식에 의해 모든 프로세스 에 후킹을 걸어 줘야 하므로 복잡해짐 • 그럼 nt!KiSystemCallExit에 인라인 후킹!
  • 19. Kernel Hooking – Inline Hooking
  • 20. Kernel Hooking – Inline Hooking Ntdll.dllKernel32.dll USER level KERNEL level nt!KiFastCallEntry SYSEXIT nt!KiSystemCallExit DBGPrint argument Hook MSR ntdll!KiFastSystemCallRet DBGPrint return SSDT nt!... nt!... nt!... Native API Inline Hooking
  • 21. Kernel Hooking – Inline Hooking 1. 커널 주소를 읽어와 Inline Hoking 할 nt!KiSystemCallExit 주소 구함
  • 22. Kernel Hooking – Inline Hooking 2. nt!KiSystemCallExit에 HookedFunction로 jmp 하는 Inline Hooking을 검
  • 23. Kernel Hooking – Inline Hooking 3. Inline Hooking을 통해 실행된 HookedFunction
  • 24. Kernel Hooking – Inline Hooking Success! but...............................
  • 25. Kernel Hooking • 수십 초간 수행 후 터져버림... • 오류 원인 • 커널 스레드에 의한 상호 배제 문제 • User land에서 처리하도록 고안중
  • 28. Windows Integrity • Windows는 해당 프로세스의 액세스 토큰에 따라 액세스 제어 적 용 • UNTRUSTED - Anonymous • LOW – Everyone, can not access to local resources • MEDIUM – Authenticated Users • HIGH – Administrators • SYSTEM – LocalSystem, LocalService...
  • 29. HackSysExtremeVulnerableDriver • Hacksysteam에서 윈도우 커널에서 주로 발생하는 취약점들을 연습해 볼 수 있게 만든 Driver Double Fetch Pool Overflow Use After Free Uninitialized Heap Variable Uninitialized Stack Variable Insecure Kernel Resource Access Stack Overflow Stack Overflow GS Arbitrary Overwrite Null Pointer Dereference Type Confusion Integer Overflow easy hard
  • 30. HackSysDriver Setting • 준비물 • Virtual KD – VMWare의 가상머신과 Windbg를 연동하여 Windows 운영 체제 디버깅을 수행하기 쉽게 해 줌 • Windbg • HEVD.sys – hacksys 파일을 빌드하여 만든 sys 파일 • OSRLOADER – Driver load, unload를 수행하기 쉽게 해 줌
  • 31. HackSysDriver Setting • 대상 Windows 운영체제를 Windbg를 붙인 채 부팅 • HEVD.sys 파일을 대상 운영체제에서 OSRLOADER를 이용하여 드라이버 서비스 등록
  • 34. Input Buffer IRP I/O Manager User Kernel (Driver) IO_STACK_LOCATION HackSysDriver Trigger User -> Driver
  • 37. 1. 현재 프로세스의 EPROCESS 구조체 찾음 Stack Overflow
  • 38. 2. SYSTEM 프로세스의 EPROCESS 구조체 찾음 (PID = 4) ... Stack Overflow
  • 39. 3. SYSTEM EPROCESS 구조체에서 Token 값 복사 후 내 EPROCESS 구조체에 붙여넣기 Stack Overflow
  • 40. Windows 7 has no SMEP. let’s call user shellcode function. Stack Overflow
  • 41. Stack Overflow와 코드는 같음 Stack Overflow GS
  • 43. • Stack Cookie 우회 방법 • 1. Stack Cookie leak • 2. Stack Cookie Failure check 로직 수행 전에 EIP register control Stack Overflow GS
  • 44. Case Userland End Of Stack Segment ... SE handler nSEH ... retn sfp Cookie buffer aaaa ... pop pop ret shellcode ... aaaa aaaa aaaa aaaa Stack Overflow GS
  • 45. Case Kernelland memory fault exceptions that occur in kernel memory areas are not handled by exception handlers, but only crash the OS. So generate a memory fault exception due to the access of an unmapped page in userland. Stack Overflow GS
  • 47. Arbitrary Write • exploit 방법 여러 가지 있음! • SSDT Overwrite • Hal Dispatch Table Overwrite • TokenObject-> Privileges.Enabled Field Overwrite • Hal Dispatch Table Overwrite을 이용해서 풀어보자!
  • 49. Arbitrary Write HalDispatchTable HalDispatchTable + 4Token Shellcode NtQueryIntervalProfile KeQueryIntervalProfile Userland Kernalland call NtQueryIntervalProfile
  • 50. Arbitrary Write • Hal Dispatch Table 주소는?! • Windows 7에서는 기본적으로 NtQuerySystemInformation API를 통해 커널 베이스 주소를 구할 수 있음
  • 53. Null Pointer Dereference • 할당되지 않은 0x00000000 주소를 참조하여 크래쉬 남 • 0x00000000 을 쉘코드 넣어서 할당해 주자! • ‘VirtualAlloc’, ‘VirtualAllocEx’는 0x00001000부터 할당 가능 • undocumented function NTAPI ‘NtAllocateVirtualMemory’사용
  • 54. Windows 7 exploitation issue • Executable NonPagedPool was the default • Kernel 영역에 쉘코드 올려서 실행 할 수 있음 • Kernel information leaks were available with NtQuerySystemInformation • no SMEP, SMAP
  • 55. Windows 8.1, 10 exploitation issue • NonPagedPoolNx is the new default • 커널에 쉘코드 올리는거 불가능! • SMEP • Windows 0xFFFFFFFFFD00448 (HAL Heap) contained a pointer to ntoskrnl.exe • SIDT instruction leaks address of ntoskrnl.exe pointer (IDTR Register) • Kernel address leak with GdiSharedHandleTable • ROP base address 구할 수 있네! • Page Table Entry overwrite can bypass SMEP • modify U/S flag
  • 56. Mitigations Windows 10 1607 • Remove Kernel address leak with GdiSharedHandleTable • SIDT instruction leaks address of ntoskrnl.exe pointer mitigated • 아직은 HAL Heap 이용하여 릭 가능 • Page Table Entry Randomize
  • 57. Mitigations Windows 10 1703 • HAL Heap randomized • now must leak ntoskrnl.exe pointer • 이제 base address 구할 때 무조건 leak 필요함
  • 58. reference • Hacksys Driver 깃 주소 https://github.com/hacksysteam/HackSysExtremeVulnerableDriver • Hacksys Driver 세팅법 https://hshrzd.wordpress.com/2017/06/05/starting-with-windows-kernel- exploitation-part-2/ • Windows Kernel Architecture Internals - Dave Probert Windows Kernel Architect, Microsoft • DEFCON-25-Morten-Schenk-Taking-Windows-10-Kernel-Exploitation-to- the-next-level-UPDATED

Hinweis der Redaktion

  1. 커널은 프로세스 자원 관리, 추상화, IPC – 프로세스 간 통신을 위한 메커니즘, 종류로는 시그널, 파이프, 큐, 공유 메모리 등이 있음 HAL - 어플리케이션이 PC의 메모리, CPU, 하드웨어 장치에 접근 하는 것을 막아 줌, 하드웨어 추상화 제공 Driver - 운영 체제와 장치의 통신을 허용하는 소프트웨어 구성 요소 PNP 드라이버 – 실제 하드웨어가 존재할 때 사용 Legacy 드라이버 – 하드웨어 없이 커널 레벨에서 동작하는 프로그램이 필요할 때 사용
  2. 커널을 처음 접하는 사람들을 위한 발표인데 왠지 고수들이...
  3. 이 슬라이드 설명 후 Hacksys 깃 들어가서 클론 방법, 코드 내용(SECURE모드 등)
  4. 직접 윈도우 키면서 보여줌 https://hshrzd.wordpress.com/2017/06/05/starting-with-windows-kernel-exploitation-part-2/
  5. CTL_CODE – DeviceType(장치에 대한 번호), Function(장치의 기능), Method, Access(권한)
  6. IRP(I/O Request Packet) – I/O 데이터를 전달하는 구조체 DeviceControl 함수를 실행하면 I/O 관리자가 드라이버에 전달하는 IRP를 만들어 캡슐화 한 후 드라이버 스택에 전달한다.