网站首页 > 技术教程 正文
下一个十年的安全机遇之一:基于 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
猜你喜欢
- 2025-01-18 Win10预览版已可收到Win11升级提示,可选升级或留在Win10
- 2025-01-18 原来PCIe这么简单,一定要看
- 2025-01-18 一文盘点滤泡性淋巴瘤预后模型
- 2025-01-18 微软 Azure 崩了 54 个小时。。。。
- 2025-01-18 微软发布Win11九月可选更新:账户管理器新增注销选项等
- 2025-01-18 初探微软Win10/Win11新版Terminal,AI提升终端命令体验
- 2025-01-18 微软确认Windows 10存在一个证书错误 想解决问题只能回退旧版
- 2025-01-18 拒绝360、腾讯管家,Win10 系统这样保护,金身千年不毁
- 2025-01-18 微软2024年最后一次Win10/Win11更新:修复71个漏洞
- 2025-01-18 Windows 11出现奇怪Bug,微软暂无解决方法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)