Black Hat议题解读 | 滴滴出行王宇Black Hat 2018&DEFCON 26现场议题详解
发布时间 : 2018-08-22 16:44:44
Black Hat作为全球信息安全行业的最高盛会,有着悠久历史,今年已经进入了第21个年头,每次会议的议题筛选都极为严格。众多议题提交后通过率不足20%,所以Black Hat也被称为最具技术性的信息安全会议。DEFCON是全球安全领域的顶级会议,从发起至今已有25年历史,被誉为安全界 “奥斯卡”,由全球最具影响力黑客Jeff Moss于1993年创办。在今年的Black Hat USA Arsenal 和 DEFCON 26中,滴滴出行安全产品与技术部的王宇受邀参加Black Hat USA Arsenal ,发表议题Kemon: An Open-Source Pre and Post Callback-Based Framework for macOS Kernel Monitoring [1] ;受邀参加DEFCON 26,发表议题 Attacking the macOS Kernel Graphics Driver [2]。王宇是滴滴出行安全产品与技术部的高级专家工程师。王宇老师热爱与操作系统内核有关的一切事物,从内核架构实现、驱动程序编写、Rootkit/Anti-Rootkit到漏洞挖掘与利用、Android Root等。他曾在SysCan360 2012/2013、Hitcon 2013、Black Hat USA 2014等会议发表过演讲,并出任GeekPwn活动评委。下面就让王宇老师为我们详细解读他的两个议题吧~(满满的干货哟)Kemon: An Open-Source Pre and Post Callback-Based Framework for macOS Kernel Monitoring [1] 及 Attacking the macOS Kernel Graphics Driver [2]。这两个议题都是以我去年开发的 Kemon macOS 内核监控框架为基础,第一篇议题侧重于监控框架自身的设计与实现,第二篇则侧重于 Kemon 监控框架在 macOS 系统漏洞挖掘上的应用。在公司拥抱开源理念的鼓舞下,我决定今年将上述工作与大家分享。 Kemon 驱动监控框架的最早需求源自于去年的 macOS 内核监控及数据防泄密项目,在此之前我并没有 macOS 内核的开发经验。当在评估完现有 macOS 内核监控接口之后,我发现这些接口对于第三方内核开发者而言并不是非常友好。具体来说,从 Mac OS X 10.4 Tiger 开始,苹果公司依次引入了两种内置的监控子系统:内核授权子系统 [3](Kernel Authorization Subsystem)和强制访问控制策略子系统 [4](Mandatory Access Control Policy Subsystem),但是它们或多或少的存在着缺陷。 内核授权子系统是在 2005 年被引入 Mac OS X 10.4 Tiger 内核的,这套系统目前存在非常明显的问题,我一共总结了五点:1. 自 2005 年至今,苹果公司并没有对该子系统进行过任何的维护或更新。2. 对于 KAUTH_SCOPE_FILEOP 事件类型的监听者而言,内核仅有七种内置事件可用。在实际的项目开发中,这些事件是远远不够的。3. 对于 KAUTH_SCOPE_FILEOP 事件类型的监听者而言,上述七种事件的形式仅为通知,我们无法阻止事件的发生,而这往往是不可接受的。举例而言,假设我们检测到了某款勒索软件的爆发,但如果我们不能阻断勒索软件的执行,这种安防能力就非常鸡肋了。4. 对于某些特定的事件而言,输入参数缺乏关键的上下文信息。具体来说,对于进程创建事件,输入参数缺乏进程命令行信息;对于文件打开事件,输入参数无法区分此次操作是“打开已存在的文件”还是“新文件被创建后打开”。虽然我们常说不要在意这些细节,但是,产品水平的高下往往就在这些不起眼的细节里。5. 对于 KAUTH_SCOPE_VNODE 事件类型的监听者而言,由于系统缓存机制的存在,并不是所有的 VNODE 操作都会触发我们的回调接口,而这也意味着我们的监控点可以被旁路。 无奈之下,我将目光投向了强制访问控制策略子系统。该子系统于 2007 年被苹果公司引入 Mac OS X 10.5 Leopard 操作系统内核,可是,我惊奇的发现这套接口在 2008 年 1 月被苹果公司禁止第三方调用 [5],也就是说这套细粒度的强制访问控制策略集是苹果的私有方法。在阅读了 XNU 关于 Mandatory Access Control Policy 所有的公开代码之后 [6],我发现了更多的问题。如果第三方内核开发者真的想冒着风险在驱动中使用私有接口,除了有潜在的法律问题外,他们还会遇到兼容性问题。兼容性问题 1:接口被直接删除或替换兼容性问题 2:接口参数被随意修改或添加兼容性问题 3:新的接口被插入到派遣函数表的中间位置兼容性问题 4:接口被修改,但是苹果的开发人员忘记提升策略版本号,这会导致二义性问题其中,情况 1、2、3是完全不可接受的修改方法,这种级别的接口变动会导致第三方驱动程序崩溃、内核 Panic。 为了给 macOS 内核监控带来一些变化,我打算实现自己的监控框架,个人内部代号 Kemon。
由于 macOS 64 位内核里没有类似于微软 PatchGuard [7] 的内核自保护功能,使用 Inline Hook 修改内核变成了可能。我基于 Distorm3 [8] 反汇编器用汇编代码实现了一个 Inline Hook 引擎,并借鉴了 Windows 内核 Pre 和 Post 回调的设计想法,为 macOS 内核引入了新的回调方案,即 Kemon 框架可为任意系统内核函数扩展前、后过滤功能。
简言之,在前回调接口中,第三方可为内核扩展输入参数过滤功能;在后回调接口中,第三方可为内核扩展返回数据过滤功能。基于此工程框架 Kemon 为 macOS 内核实现了驱动防火墙、强制访问控制策略监视器、内核模糊测试器等新功能。
我在 Black Hat USA Arsenal 向现场的观众展示了 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分享链接如下
商务合作,文章发布请联系 anquanke@360.cn
分享到: 安全客 分享到:
发表评论
您还未登录,请先登录。
登录