50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

祝贺滴滴开源第八个项目——Kemon 正式发布

王宇

  • 2019-09-15
  • 本文字数:2407 字

    阅读完需:约 8 分钟

祝贺滴滴开源第八个项目——Kemon正式发布

今年我给 Black Hat USA Arsenal 和 DEF CON 26 信息安全会议投了两个议题,分别是: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],我发现了更多的问题。如果第三方内核开发者真的想冒着风险在驱动中使用私有接口,除了有潜在的法律问题外,他们还会遇到兼容性问题。


ERROR 说 Innodb 访问了一个 undo log 表空间之外的数据页。

兼容性问题 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 的 Kemon 驱动防火墙:



另一个现场展示的功能是强制访问控制策略监视器。值得一提的是,在现有系统里没有任何方法可以窥探前述的 Mandatory Access Control 私有接口的使用情况,但是通过 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 内核最新的零日漏洞(Zero-Day Vulnerability),目前苹果官方尚无针对此漏洞的补丁。在会议之前我已将上述问题报告给了苹果的安全中心,希望他们可以快速地修复漏洞、保障广大苹果用户的设备安全。


在 DEF CON 26 会议开始之前,苹果安全团队的三位小伙子请我吃了一顿算不上美味的墨西哥土豆卷饼,在 Las Vegas 待上一周我想大家都会想念中餐。但是我们愉快的探讨了我上报的零日漏洞细节、macOS 内核安全、内核监控与漏洞防护、iOS 系统安全等话题。一个小时过得很快,双方约定八月在 Apple Infinite Loop 总部再进行探讨。


本文转载自公众号滴滴技术(ID:didi_tech)。


原文链接:


https://mp.weixin.qq.com/s/idqfYTgS1qQKYatNcZUzeg


2019-09-15 23:181109

评论

发布
暂无评论
发现更多内容

全面 Serverless 化,阿里云微服务引擎 MSE 重磅升级

阿里巴巴云原生

阿里云 Serverless 微服务 云原生

@返校的同学、家长,华为手机用Petal出行打车更高效优惠!

最新动态

一个可读性高的代码对程序员有多重要

飞算JavaAI开发助手

MySQL的Json类型个人用法详解

北桥苏

如何利用FuncGPT告别繁琐的开源代码调试

飞算JavaAI开发助手

AI 软件开发 程序员‘’ 自然语言 Java'

ACK 酷体验丨以 AI 为笔,描绘 9 月该有的样子

阿里巴巴云原生

阿里云 容器 云原生

智慧云助力移动办公,提升效率,降低成本

知者如C

活动回顾丨云原生开源开发者沙龙深圳站(含 PPT)

阿里巴巴云原生

阿里云 开源 云原生 消息列队

ABAQUS是什么软件?哪里可以学习有限元分析技术?

思茂信息

仿真软件 abaqus 有限元分析 有限元技术 结构仿真

研发管理的挑战

iSoftBook

周报 研发团队 云研发 研发效能管理 研发管理软件

全球十大最佳 NFT:数字资产重新定义所有权

区块链软件开发推广运营

数字藏品开发 dapp开发 区块链开发 链游开发 NFT开发

CCKS2023:基于企业数仓和大语言模型构建面向场景的智能应用

酷克数据HashData

AREX Agent 如何实现 Apollo 配置中心 Mock

AREX 中文社区

开源 Java Agent 自动化测试 Apollo 流量录制

软件测试/测试开发丨Web自动化 PageObject设计模式

测试人

Python 软件测试 自动化测试 测试开发

低代码开发的优势与劣势,看这一篇就够了

互联网工科生

软件开发 低代码

INFINI Labs 产品更新 | Console 告警中心 UI 全新改版,新增 Dashboard 全屏模式等功能

极限实验室

console INFINI Labs INFINI Console 极限科技

我们把“高血压”小游戏真正做到了不用下载,点击即玩!!!

阿里巴巴云原生

阿里云 云原生

十秒钟搞定全自动jvm参数分析

摸鱼编程

AI 自动化 JVM GC

软件开发原子化 技术转型加速器

力软低代码开发平台

音视频数字化进行时,MediaBox重新定义「高易用」

阿里云CloudImagine

云计算 视频云

祝贺滴滴开源第八个项目——Kemon正式发布_文化 & 方法_InfoQ精选文章