

一、前言
二、Kemon 驱动监控框架
三、内核授权子系统存在的问题
四、强制访问控制策略子系统








五、实现自己的监控框架
为了给 macOS 内核监控带来一些变化,我打算实现自己的监控框架,个人内部代号 Kemon。
由于 macOS 64 位内核里没有类似于微软 PatchGuard [7] 的内核自保护功能,使用 Inline Hook 修改内核变成了可能。我基于 Distorm3 [8] 反汇编器用汇编代码实现了一个 Inline Hook 引擎,并借鉴了 Windows 内核 Pre 和 Post 回调的设计想法,为 macOS 内核引入了新的回调方案,即 Kemon 框架可为任意系统内核函数扩展前、后过滤功能。
简言之,在前回调接口中,第三方可为内核扩展输入参数过滤功能;在后回调接口中,第三方可为内核扩展返回数据过滤功能。基于此工程框架 Kemon 为 macOS 内核实现了驱动防火墙、强制访问控制策略监视器、内核模糊测试器等新功能。
六、大会现场展示的内容


DEFCON 26展示的功能是强制访问控制策略监视器。值得一提的是,在现有系统里没有任何方法可以窥探前述的 Mandatory Access Control Policy 私有接口的使用情况,但是通过 Kemon 框架我们可以清楚地看到,苹果公司的 AMFI(Apple Mobile File Integrity)[9]、沙箱(Apple Seatbelt Sandbox)[10] 等模块都大量使用了上述接口:
如果想深入研究 macOS、iOS 系统沙箱的设计与实现,也许这是一个好的起点。另外一个值得展开的细节是,在转储、遍历系统数据结构之前,我们需要先持有数据结构对应的保护锁,而 Mandatory Access Control 不会为第三方导出私有的互斥锁,那么如何正确持锁便成了一个难题。我通过阅读 XNU 的源代码找出了解决方案,具体实现请参阅我的 Kemon 代码。 在 8 月 12 日的 DEF CON 26 黑客大会上,我着重向观众们介绍了 Kemon 的另一个应用:内核模糊测试器。通过使用自己开发的模糊测试器,去年我发现了 macOS 显卡驱动的大量漏洞,例如:CVE-2017-7155、CVE-2017-7163、CVE-2017-13883,该工作获得了苹果公司的致谢 [9]。
在会议的最后,我还向现场的观众展示了 macOS 内核最新的零日漏洞,目前尚无针对此漏洞的补丁。在会议之前我已将上述问题报告给了苹果的安全中心,希望他们可以快速地修复漏洞,保护广大苹果用户的设备安全。
七、和小伙子们一起探讨
在 DEF CON 26 会议开始之前,苹果安全团队的三位小伙子请我吃了一顿算不上美味的墨西哥味土豆卷饼,在 Las Vegas 待上一周我想大家都会想念中餐。但是我们愉快的探讨了我上报的零日漏洞细节、macOS 内核安全、内核监控与漏洞防护、iOS 系统安全等话题。一个小时过得很快,双方约定八月在 Apple Infinite Loop 总部再进行探讨。
宇神对自己P图技术很满意,不想把小猫P掉,还说:“小猫多棒啊~”
八、一些参考
关于 Kemon 的更多细节,请您参阅王宇的源代码:https://github.com/didi/kemon。很高兴,这是滴滴公司的第八个开源项目,谢谢!
最后
议题PPT分享链接如下

评论