G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzz

admin 2023年5月10日01:01:00评论54 views字数 3808阅读12分41秒阅读模式

今天要为大家介绍的是来自清华大学系统安全课题组(VUL337)与蚂蚁基础安全合作完成的USENIX Security 2023论文 KextFuzz: Fuzzing macOS Kernel EXTensions on Apple Silicon via Exploiting Mitigations 以及这篇论文的一作殷婷婷同学。这篇论文本身关注的是如何在 macOS 系统封闭的生态、独特的硬件环境和有限的安全分析工具链支撑等各种限制条件下开展安全研究。G.O.S.S.I.P在多年前就认识了殷婷婷同学,她从一开始就选择了 macOS 二进制代码的安全分析作为自己的研究方向,最终做出了杰出的成果,而相比之下,很多浓眉大眼的汉子在选择研究路线的时候都没有这种 if not me then who 的勇气和毅力~ 我们也要向她表示祝贺!下面是作者本人的投稿:


G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzz

本文设计了一个支持 Apple Silicon macOS 内核扩展(驱动,英文缩写 kext)的模糊测试器 KextFuzz,从代码覆盖率收集、接口识别、特权代码测试三个角度,改善闭源目标测试能力,共发现了 48 处 kext 代码缺陷,目前已有五处漏洞获得 CVE 编号。有趣的是,文章的各个设计,均利用了 macOS 自身提供的防御机制来辅助分析或测试,这也是文章题目中 “exploiting mitigations” 的由来。

背景与挑战

macOS 内核主要由 XNU 与 Kernel Extension (内核扩展,缩写为 KEXT) 两部分组成,其中 kext 可以当做 Linux 中的驱动来理解,是 macOS 内核中非常重要的组件,在内核中占据约一半的代码量。除了显卡、声卡驱动等常规驱动外,sandbox、网络协议栈等相对独立的内核功能也由 kext 实现。相比于开源的 XNU,闭源的 kext 分析难度更高,漏洞挖掘、测试更不充分,安全风险还没有得到充分的分析。较大的代码规模、较高运行权限和有限的安全测试,使得 kext 成为了 macOS 重要的攻击面之一。

对 kext 进行模糊测试,主要需要解决三方面的问题:

  1. 如何采集代码覆盖率:Coverage 反馈是提升 fuzz 效率的基本手段。其采集方法通常有代码插桩(kcov)、硬件监听(Intel-PT)与虚拟层监听(AFL-qemu)几种方式。然而,这三种方法均不适用于本文场景。首先,源码插桩无法应用于闭源的 kext;其次,Apple silicon 设备不提供与 Intel-PT 相似的硬件监听功能;此外,Apple Silicon macOS 系统虚拟化技术仍不成熟,虚拟化环境能够支持的 kext 十分有限。基于 binary rewriting 实现的闭源程序插桩技术有一定的可行性,但现有方案容易破坏程序结构,在运行过程中引发崩溃,不适用于稳定性需求高的内核场景。

  2. 如何识别接口格式:准确识别交互接口格式,能够帮助发现更为深层的漏洞。但与开源程序相比,闭源程序携带的信息更少,接口格式更难以提取。macOS 驱动接口又较为复杂,除了能够接收常量、字符串、指针等常规类型输入,还可能使用序列化对象、结构体等复杂的复合类型输入。

  3. 如何绕过权限检查:macOS 驱动广泛使用 Entitlement 检查限制能够调用驱动的用户态程序,而大部分 Entitlement 仅分配给苹果公司或部分特殊开发者(如大型公司),包括 Fuzzer 在内的普通第三方程序难以获取,这限制了 Fuzzer 能够触发的代码范围。然而,在实战中,攻击者仍然可以通过构造攻击链,利用受保护代码中的漏洞,使得受 Entitlement 保护的特权代码成为了一个缺少测试的独特攻击面。

KextFuzz

虽然在 Apple Silicon 设备上做内核 fuzz 有很多限制,但所谓车到山前必有路,KextFuzz 发现,macOS 系统各类严格的防御机制,一方面给动态测试带来了挑战,另一方面也提供了一些额外的分析资源,帮助实现模糊测试。接下来本文将针对上述三个挑战,分别讲讲 KextFuzz 的解决思路:

1. Coverage Collector

KextFuzz 通过 binary rewriting 实现代码覆盖率插桩。插桩,需要在程序中增加额外的代码,但如果直接向 binary 中添加 coverage 采集指令,会导致程序原有指令移位,破坏程序中使用相对偏移/绝对地址表示的引用关系。尽管静态分析可以修复或者避免一部分插桩导致的引用错误,但也难以做到全面、准确,在内核 fuzz 的场景下,容易频繁引发系统崩溃,影响测试效率。

而 KextFuzz 通过替换 PA (Pointer Authentication) 指令,在不破坏程序内部结构的前提下实现了插桩。Kext 广泛使用 ARM PA 指令保护控制流完整性,这些指令能够增加漏洞利用的难度,但在 Fuzz 的场景中不起实际作用。如下图所示,通过移除这些指令,可以释放充足的空间,用于添加 coverage 采集指令。类似地,在其它闭源程序中,可以通过替换 canary, CET 等防护指令达到类似的效果。

G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzz

2. Interface Analyzer

macOS 系统使用开发框架、后台服务等组件封装内核功能,以减少用户态程序对内核的直接访问。这些代码以规范的方式调用 kext 接口,通过分析其构造调用参数的方式,可以提取 kext 接口信息。KextFuzz 通过污点分析从中提取上述信息。首先,为减少无关代码对分析结果带来的干扰,KextFuzz 从程序中提取与 kext 调用相关的代码片段,并将其作为分析目标;随后,KextFuzz 对参数初始化操作添加污点标签;最后,污点逐步扩散至 kext 调用参数,通过解析参数携带的污点,可以得知参数的来源并推断其类型(例如 malloc() 的返回值为指针)。KextFuzz 使用的污点分析技术在模拟执行的基础上实现,该方案将污点信息编码为特殊取值,赋值给寄存器和内存,使污点记号在程序模拟执行过程中自然扩散,而无需额外维护传播规则。具体实现方式可以参考论文原文。

G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzz

3. Entitlement Filter

通过移除 Kext 中的 Entitlement 权限检查,KextFuzz 能够更有效地测试 kext 中的特权代码。Kext 通过特定接口检查用户态进程是否拥有合法的 Entitlement,因此,KextFuzz 可以通过 binary rewriting hook 相关接口,使其返回检查通过。

实验总结

KextFuzz 的实验结果可以总结为以下几点:

  1. Coverage Collector: 通过替换两类 PA 指令,可以插桩约 35% 的基本块,运行时开销为 2.03x。尽管插桩比例相比源码插桩较低,但仍能够反应测试用例触发代码的深度与广度,在实践中,使用 coverage 反馈做指导,在 24 小时内,KextFuzz 能够在 Table 1 所列驱动中发现六倍于黑盒测试所发现的漏洞。

G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzz

  1. Interface Analyzer & Entitlement Filter: 有效提升代码覆盖率,帮助发现更多漏洞。其中,Interface Analyzer 帮助 KextFuzz 额外发现漏洞两处,加速发现复杂漏洞两处;Entitlement Filter 帮助额外发现漏洞 18 处。

  2. 漏洞发现:KextFuzz 共发现 48 处 kext 代码缺陷,其中五处漏洞已分配 CVE 编号,三处漏洞获得苹果公司赏金奖励。文章也对比了在 Intel 设备和 Apple Silicon 设备中驱动的差异。尽管目前 macOS 同时支持两种架构的硬件环境,但两个环境中使用的驱动有较大差异,如在 macOS 11 系统中,有 282 个仅支持 arm 架构的 kext binary,KextFuzz 所发现的漏洞有 13 个位于这些驱动中。与此同时,Apple Silicon macOS 与 iOS、iPadOS 共享了大量代码,在 Silicon 设备中发现的漏洞,也容易同时影响其他苹果系统。

G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzz

题外话

文章工作在命名为 KextFuzz 之前,还曾有过一个代号:Expelliarmus,也即哈利波特中的缴械咒 “除你武器”,是战斗中最为有效的白魔法咒语之一。这条咒语通过移除对手武装,达到攻击效果,这也正是本文工作想要达到的效果,通过移除/利用 macOS 中的 mitigation,进行漏洞挖掘。只可惜咨询版权方后没有获得授权,只能作为一个小插曲分享给大家了,希望对理解本文内容有所帮助。

另外附带一段 KextFuzz 触发的 touchbar 变色表演,以供娱乐 G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzz

论文还有许多不足之处,欢迎大家交流讨论:

https://www.usenix.org/system/files/sec23fall-prepub-425-yin-tingting.pdf


作者介绍: 殷婷婷,清华大学网络科学与网络空间研究院博士生,导师是张超老师。她的主要研究方向为模糊测试、macOS 安全、软件与系统安全。联系方式:[email protected]

课题组介绍: 清华大学软件与系统安全课题组(VUL337)由张超老师带领,团队主要研究兴趣为:针对软件与系统安全领域漏洞与恶意代码等问题,面向主机、移动设备、区块链、物联网、车联网、人工智能系统等目标,研究自动化、智能化攻防技术,构建智能分析系统;针对数据安全与隐私计算问题,研究芯片、系统、算法协同的实用化解决方案。团队长期招聘对安全感兴趣的博士后、工程师、客座研究生、实习生等。


原文始发于微信公众号(NISL实验室):G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzz

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月10日01:01:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2023-04-26 KextFuzzhttps://cn-sec.com/archives/1721713.html

发表评论

匿名网友 填写信息