对于安全研究人员来说,他们经常需要研究各种内核,以充分了解研究目标。在Windows平台上这样做并不是什么难事,因为有无数关于内核调试设置的现成文章。但是,对于macOS,情况就略有不同。
有很多文章已经描述了如何在两台设备之间设置内核调试,但是所有这些都建议应该禁用SIP(系统完整性保护)进行内核调试。如果我们要调查macOS安全机制的内部运作,则会产生问题,因为关闭SIP也会关闭操作系统的大多数基本安全功能。
这篇文章将会介绍几个设置,这些设置使你可以在调试时启用SIP。
设置如下:
主机:带有补充更新的macOS Catalina 10.15.4;
来宾:具有补充更新的macOS Catalina 10.15.4;
VMware Fusion 11.5.3;
调试器:LLDB;
第一种方法
我们将从调试内核的原始发行版开始,该发行版默认包含在macOS中。到目前为止,这是我们将看到的最简单的方法。
第一步是从Apple的开发人员下载中下载内核调试工具包(KDK)。但是,在执行此操作之前,我们需要确定感兴趣的构建版本。这可以通过在来宾VM上使用以下命令来完成:
% sw_vers ProductName: Mac OS X ProductVersion: 10.15.4 BuildVersion: 19E287
检索内核构建版本信息
知道BuildVersion编号后,就可以下载相应的KDK并将其安装在主机上。奇热它将安装在/ Library / Developer / KDKs /下。
% ls -l /Library/Developer/KDKs/KDK_10.15.4_19E287.kdk/System/Library/Kernels/ total 212112 -rwxr-xr-x 1 root wheel 16030560 Mar 5 07:38 kernel drwxr-xr-x 3 root wheel 96 Mar 5 07:38 kernel.dSYM -rwxr-xr-x 1 root wheel 23795528 Mar 5 07:27 kernel.debug drwxr-xr-x 3 root wheel 96 Mar 5 07:27 kernel.debug.dSYM -rwxr-xr-x 1 root wheel 19329072 Mar 5 07:39 kernel.development drwxr-xr-x 3 root wheel 96 Mar 5 07:39 kernel.development.dSYM -rwxr-xr-x 1 root wheel 49436536 Mar 5 07:30 kernel.kasan
KDK的位置
下一步是在来宾VM上启用远程调试。幸运的是,VMware Fusion具有一个称为gdb stub的功能,该功能可以设置GDB服务器,并允许调试器使用GDB远程协议调试任何VM(包括Windows)。由于LLDB支持GDB协议,因此我们可以使用这种方法。
要为我们的来宾VM启用GDB存根,就需要在虚拟机vmx配置文件中添加以下行:
debugStub.listen.guest64 = "TRUE"