【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

祝贺滴滴开源第八个项目——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:18804

评论

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

关于IPP Swap挖矿系统开发详情

Congge420

网易易盾流量多发反外挂落地实践

网易云信

安全 反外挂

网易易盾流量多发反外挂落地实践

网易智企

安全 反外挂

kafka生产者你不得不知的那些事儿

JAVA旭阳

Java kafka

Abaqus非线性问题预览及求解

思茂信息

仿真软件 abaqus abaqus软件 abaqus有限元仿真 有限元仿真技术

自动化回归测试平台 AREX Agent 源码再阅读

AREX 中文社区

Java Java Agent 测试

肝到头秃!百度强推并发编程笔记我爱了,原来这才叫并发

做梦都在改BUG

Java 并发编程

【等保】等保全称是什么?英文咋说?

行云管家

等保 等级保护 等保2.0

并发编程-常见并发工具BlockingQueue的使用及原理解析

做梦都在改BUG

Java 并发编程 BlockingQueue

二维码在中国:学术视角下的创新与实践

草料二维码

二维码

软件测试/测试开发丨学习笔记之Selenium 常见控件定位方法

测试人

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

SpringBoot 中异步任务实现及自定义线程池执行异步任务

做梦都在改BUG

Java Spring Boot

分析元宇宙NFT/链游系统开发方案

Congge420

【MaxCompute】基于Package跨项目访问资源实践

阿里云大数据AI技术

数据管理 MaxCompute 企业号 5 月 PK 榜

看海联金汇财务共享智慧平台如何实现以数赋能智慧共享

用友BIP

财务共享

数据高效转储,生产轻松支撑

鲸品堂

数据库 语言 & 开发 企业号 5 月 PK 榜

ChatGPT与低代码开发:危机四伏、技术暴走!

加入高科技仿生人

人工智能 低代码 AI技术 ChatGPT

云纳管是什么意思?云纳管平台哪个好?

行云管家

云计算 云服务 云平台 云管平台 云纳管

MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题

阿里巴巴云原生

阿里云 云原生 dubbo MSE

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

鳄鱼视界

分投趣fintoch即将崩盘?系统开发解析!

Congge420

如何构建自己的知识体系?

老张

知识体系

阿里巴巴开源的Spring Cloud Alibaba手册在GitHub上火了!完整版开放下载

采菊东篱下

架构 微服务

《苏丹的复仇》携手华为HMS生态,实现用户、收入双增长

HMS Core

HMS Core

以财务共享中心建设,打造数字化创新引擎

用友BIP

财务共享

BSN官方视频号更新内容汇总(2023年4月15日~5月15日)

BSN研习社

景区共享电单车让观光旅游更轻松

共享电单车厂家

共享电动车厂家 景区共享电单车 共享电单车投放 景区共享电动车

飞鹤乳业携手用友,引领数字化财务共享管理新时代

用友BIP

财务共享

云计算遇上电动车,跑出新模式的数智化转型

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

软件测试/测试开发丨学习笔记之Pytest使用

测试人

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

Topaz Gigapixel AI for Mac激活(图片无损放大软件) v6.3.2

真大的脸盆

Mac Mac 软件 图片无损放大 图片放大工具

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