基于苹果自研芯片的 Mac 电脑对安全意味着什么?

下一个十年的安全机遇之一:基于 Apple Silicon (arm64) 的 Mac 电脑对安全来说意味着什么?

作者 | 蒸米,阿里巴巴高级移动安全专家

责编 | 唐小引

本文经作者授权 CSDN 发布

WWDC 2020 的全称为 2020 年的苹果全球开发者大会,也是每年一度的苹果春晚。这次大会上除了发布了常规的 iOS、macOS、iPadOS 和 watchOS 升级以外,最让人感到惊喜的当属基于 Apple Silicon 芯片的 Mac 系列电脑了。

一直以来,苹果的自研芯片已经带来了一代又一代的成功产品,其中包括了历代的 iPhone、iPad 以及 Apple Watch。苹果在 WWDC2020 上表示,最新推出的 iPad Pro 上使用的芯片的图形处理能力已经是第一代 iPad 的 1000 倍。这正是 iPad Pro 比大多数 PC 要快的原因之一。这也就预示着这样的架构转移到 Mac 端可以实现更加超凡的效果。因此,苹果便想要打造一颗可以提升性能同时降低功耗的电脑芯片。

不出意外,发布会结束后,开发者和用户都对新架构的 Mac 电脑表示出了浓厚的兴趣,也都有自己的解读。因此,我们就不浪费时间在一些跟本文主题无关内容的讨论上了,而是重点分析一下这个新架构对安全方面的影响。不过要说明一点的是,因为我们目前还没有拿到新架构的 Mac 电脑,并且苹果在产品正式出厂之前也会有很多改动,我们所调研的资料都是根据这次 WWDC 发布会中的信息,因此文章内容可能会有一些错误或者和正式产品上的差异,请谅解。

硬件特性的安全机制

首先可以确定的是在 iPhone 上使用的硬件特性的安全机制都可以在基于 Apple Silicon 芯片的 Mac 系列电脑上部署了。这些安全机制有:

  • W^X:Write XOR execute,苹果芯片会强制内存页面的属性要么可以写,要么可以执行,但不能同时为可以写可执行。特别是像 JS 那种带有 JIT 功能语言,经常会分配可写可执行的内存页面,苹果因此提供了一个专门的 API(pthread_jit_write_protect_np())用于 JIT 来做 RW 和 RX 内存页面之间的转换。

  • KPP:内核完整性保护。当内核载入内存以后,苹果芯片会保护内核的内存页面,以防止其被篡改。关注 iOS 越狱的同学应该对这个机制比较熟悉。

  • PAC:指针验证。指针验证是利用 arm 架构的特性,在 PC 进行跳转的时候对指针进行验证,从而可以有效地防止像 ROP(返回导向编程)这样的攻击。苹果在 iPhone XS 和 XR 中首次部署了这个机制。目前苹果只是对 macOS 的内核和系统服务做了 PAC 的防护,我们自己在 Mac 上编写的 app 并没有 PAC 的防护。

  • Device isolation:设备内存隔离。在 Intel 架构的 Mac 上,系统上的设备和驱动的内存空间是共享的,但是在 arm64 架构的 Mac 上,不同设备和驱动之间的内存是相互隔离的。

  • Secure boot:安全启动。新架构的 macOS 的启动使用了 iOS 的安全启动模式,苹果芯片会验证每一步加载的固件的签名,以保证其完整性和安全性。同时,在系统安装的时候,用户可以选择是 full security(完整安全)模式还是 reduce security(低安全)模式。苹果默认会采用完整安全模式,在完整安全模式下,可以认为这台 mac 和一台 iPhone 一样,比如无法降级,无法加载第三方的内核扩展。在低安全模式下,用户可以安装任意版本的 macOS 以及加载内核扩展,关闭 SIP(系统完整性保护)等。

安全软件的适配

理论上,对安全软件以及其他第三方应用来说,开发者需要对应用进行重新编译才能在 arm 架构的 macOS 上运行。但是有些比较老的软件或者库可能很难找到可以运行的 arm64 版本。好消息是,苹果提供了 Rosetta 2 仿真软件。

如果我们不重新编译的话, Rosetta 可以重新翻译和模拟 x86_64 的环境,因此 x86_64 的二进制文件也可以直接在 macOS 以仿真的形式运行。但是效率会比较低。

开发者还可以将 App 或者库重新编译为 universal 模式(同时包含 arm64 和 x86_64),这样既能在 arm 架构的 Mac 上运行又能在 intel 架构的 Mac 上运行。但是这样做要对很多代码进行修改以及为 app 重新设置一些环境变量(比如 intel 的内存的 pagesize 是 4k,arm 内存的 pagesize 是 16k)。另外,还有一件非常麻烦的事情,如果我们的应用中用到了一些第三方的库,并且这些库没有提供 arm 的版本,那么我们就没有办法成功编译我们的应用,解决方案是:1. 要么采用仿真的形式;2. 要么等待开发者对库进行更新。

iOS 应用和应用安全扫描

在 iOS 上有很多实用和爆款的应用让 iOS 的生态比 macOS 的生态更加成功。当然,苹果也意识到了这一点。因此,arm 架构的 macOS 的一个杀手锏就是可以直接运行 iOS 的应用。虽然官方说需要开发者签署一个新的协议,就可以让 iOS 的应用在 macOS 上上架。但个人推测,只要对 app 进行重签名,也可以运行任意 iOS 应用。对于安全软件来说,不但要处理之前 x86_64 架构的二进制文件和应用,在 arm 架构的 macOS 上,iOS 应用都可以在 macOS 上正常运行。因此,杀毒和文件扫描工具,也要有分析 arm64 架构的二进制文件以及 iOS 应用的能力,不然用户安装了 arm 架构的恶意软件,安全软件却无法对其进行分析,则无法保证用户系统的安全性。

新的安全框架: Endpoint Security

正如上文所提到的,在完全安全模式下,第三方的内核扩展是无法加载的。个人猜测是因为苹果想提供一个无法被第三方打扰的安全内核环境,从而可以安全的运行 AppStore(保证支付安全),iOS App(内购),以及保护安全芯片的数据等。但是现在很多 EDR 的安全软件都是基于内核扩展做的,如果不能使用内核扩展,则很多功能都不能正常运行。

为了解决这个问题,苹果提供了一个新的安全框架叫 Endpoint Security(简称 ES)。现在已经支持超过 100 种系统事件的处理(随后会增加更多)。ES 的框架如图所示:

ES 采用系统扩展(system extension)的形式,本身运行在用户态,然后监听内核传递过来的信息,因此就算 ES 客户端 crash 了,系统也不会 panic 和重启;苹果提供了 early load(早期加载)模式,因此可以在系统启动的时候加载扩展,从而可以获取所有的事件;另外,因为是 ES 客户端是系统权限,进程会被保护的很好,不会轻易被 root 权限卸载掉。

虽然 macOS 10.15 上就已经开始支持 ES 框架了,但由于是比较新的框架,API 的参数和功能也经常改变,还出现过一些 bug。但随着这两年的开发,ES 框架已经越来越稳定了,并且功能一直在增强,比如最新的版本已经可以支持监控 FCNTL,PIPE,签名验证失败等相关的操作了。

不出意外,2 年内随着内核扩展的淘汰,绝大多数 EDR 产品都会基于 ES 框架进行开发。

总结

可以说基于 Apple Silicon 的 Mac 电脑对于安全行业来说又带来了一个新的机遇。想要比较好的支持新的 arm64 架构的系统和新的 ES 安全框架,需要很多安全从业者的研究和工作才能完成。未来 2 年更是 Intel 架构到 Apple Silicon 架构过渡的时期,如何保证安全软件的兼容性也是安全从业者需要面临的问题。再加上最近爆出的硬件特性的安全漏洞越来越多(比如 Meltdown & Spectre),安全从业者还要同时关注和防御多个架构的硬件级漏洞,这更是一项非常严峻的挑战。

参考资料:

  • WWDC 2020: https://developer.apple.com/wwdc20/

作者简介:蒸米,阿里巴巴高级移动安全专家,香港中文大学博士。OverSky、蓝莲花和 Insight-labs 成员。发现并命名了 XcodeGhost 和 WormHole。曾在腾讯、百度和 FireEye 实习工作。BlackHat USA,RSA,DEFCON,HITB 演讲者。

欢迎微博关注@蒸米spark:https://weibo.com/zhengmin1989

【END】

更多精彩推荐
☞专访 | 「Smartbi 」VP徐晶:未来,BI将成为决策者的诸葛亮
☞密码界“女杀手”,破译世上最安全密码系统,获 771 万奖金!
☞他被称为"中国第一程序员",一人之力单挑微软,如今拜入武当修道
☞高文、张钹、杨强隔空论道:AI精度与隐私的博弈
☞带你从零入门 Serverless | 一文详解 Serverless 架构模式
☞中央银行数字货币的总体框架
欢迎“分享”、“点赞”、“在看”三连走起!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CSDN资讯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值