[原创] 动手写一个简单的Mac内核反反调试扩展
前言
在Windows上面用户直接操作的东西都是在应用层在权限方面有很多限制,所以大部分的安全厂商和外挂、木马的对抗都是在内核层,看谁在内核层接管的时机最早,隐蔽性最高。使用到的技术有SSDT、Shadow SSDT Hook、DKOM、Inline Hook等等来达到隐藏进程、隐藏端口、隐藏恶意文件、篡改用户行为、键盘网络监控等等、之前的博客也有写过一些相关的技术文章Windows内核,感兴趣的可以看看。而在Mac平台虽然这种对抗现在很少,但是我们也可以开发自己的内核扩展模块来达到隐藏进程、隐藏文件、监控网络等操作。
环境准备
安装虚拟机和系统: 在编写Windows内核驱动的时候要需要准备环境,当时是通过Windows安装VM虚拟机加上Windbg来调试内核以及内核驱动的。所以Mac内核的调试也可以按照这个套路,笔者的环境是VMware Fusion加macos 10.12。首先安装VMware Fusion这个没什么好说的,然后下载macos 10.12的系统镜像文件下载地址,下完安装并设置网络为桥接模式。
安装KDK: 为了调试dev的内核首先要在mac电脑和虚拟机里面的系统安装苹果提供的Kernel Debug Kit,首先要找到调试系统的版本号,点击左上角的苹果->关于本机->系统报告->软件->系统版本,笔者的是macOS 10.12(16A323)。直接在这里找到对应的版本下载然后分别在自己的系统和调试系统安装KDK。
关闭SIP: 由于后面需要运行未签名的内核扩展所以需要先关闭SIP,在虚拟机开机的时候按Command+R进入恢复模式(要多试几次),然后在终端输入
csrutil disable。顺便把KDK里面的开发内核拷贝命令如下:
cp /Library/Developer/KDKs/KDKs/KDK_10.12_16A323.kdk/System/Library/Kernels/kernel.development /Systems/Library/Kernels
- 设置boot-args: 为了将虚拟机设置成调试模式,需要使用
nvram设置boot-args,命令如下:
sudo nvram boot-args="debug=0x141 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
debug=0x141: 含义可以在Kernel Programming Guide找到,这里使用的是(DB_HALT | DB_ARP | DB_LOG_PI_SCRN)
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
