下一个十年的安全机遇之一:基于 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 架构模式
☞中央银行数字货币的总体框架
欢迎“分享”、“点赞”、“在看”三连走起!

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

  1. M1芯片已适配Final Cut Pro X苹果M1处理器安装新版FCPX教程 适配M1芯片的Mac电脑Final Cut Pro更新版本10.5

    今年苹果公司在2020年11月11日突然发布搭载M1处理器款mac,首次在个人电脑上使用了ARM架构的处理器,全新的ARM架构在Final Cut Pro上的运行速度带来了质的提升,剪辑和导出速度提升 ...

  2. 苹果系统引导修复工具_苹果方面专家:搭载M1芯片的Mac电脑可引导其它系统 如Debian...

    感谢IT之家网友 @雪狐弈明 的热心投递,苹果方面专家表示,搭载 M1 芯片的 Mac 电脑可以引导其它系统,例如 Debian. 在本月苹果推出新款 Mac 前,有大量网友担心换用了 arm 架构的 ...

  3. apple ii 模拟器 mac_苹果自研芯片Mac价格曝光

    11月3日凌晨,苹果又在官网宣布了今年秋季的第三场新品发布会将在北京时间2020年11月11日凌晨2点举行,这次发布会预计会带来搭载苹果自研Apple Silicon芯片的Mac产品. 彭博社的报道显 ...

  4. 苹果自研芯片:步步惊心

    近日,苹果放出了自研芯片的最新动向.据相关科技媒体报道称,苹果准备最早在其本月举行的年度开发者大会上宣布,Mac电脑将改用自主研发的处理器,以取代英特尔的芯片. 这早已不是苹果首次在自己的产品中采用自 ...

  5. 搭载 Apple T2 安全芯片的 Mac 电脑详细的U盘装系统图文教程

    Apple T2 安全芯片是 Apple 为 Mac 定制的第二代硅芯片.T2 芯片为 Mac 带来了多项新功能.那么怎么给搭载 Apple T2 安全芯片的 Mac 电脑重装系统呢?今天小编为大家带 ...

  6. 重磅!库克官宣苹果放弃英特尔,全面采用自研芯片,MAC迎来历史转折点

    物联网智库 整理发布 转载请注明来源和出处 导  读 苹果并没有完全放弃Intel平台的Mac,未来还会继续推出Intel版的Mac,两种平台会并行发展.不过,随着苹果陆续将英特尔处理器换成自研ARM ...

  7. 不同芯片的 Mac 电脑,差距会逐渐拉大吗?

    整理 | Carol 出品 | CSDN(ID:CSDNnews) 近日,苹果正式发布了下一代桌面系统macOS Monterey,同时还新增了一些很有意思的功能.比如: FaceTime视频中的人像 ...

  8. 在m1/m2芯片的mac电脑上运行Stable Diffusion的全步骤

    最近开源社区里最火的项目肯定有Stable Diffussion一个席位.作为一个AI通过文本描述绘画的开源项目,其优秀的生成结果和极快的生成速度也让它在AI绘画项目中一夜封神. 不过遗憾的是,这类A ...

  9. 苹果a7处理器_苹果首款ARM架构Mac电脑来临!预计11月发布

    苹果早在今年6月份的WWDC展会上,就宣布未来Mac电脑将从英特尔平台转向自己定制设计的处理器,这也意味着在核心架构上从X86转向ARM,据外媒最新消息,搭载苹果处理器的Mac将会在11月份发布,预计 ...

最新文章

  1. 2022-2028年中国丁晴橡胶行业市场深度分析及投资规划分析报告
  2. JHipster技术简介
  3. Golang之实现一个负载均衡算法(随机,轮询)
  4. ECCV 2020 亮点摘要(上)
  5. 文献记录(part20)--Discriminative metric learning for multi-view graph partitioning
  6. 普通用户从非80端口启动tomcat,通过端口转发监听80端口
  7. 32单片机——pwm波输出
  8. 领导力教练:世界著名企业教练们的实践心得(原书第3版)
  9. JS获取当天23时59分59秒
  10. 暗6 雷电三接口突然失效解决办法
  11. 弘辽科技:拒做“淘宝客”,可小红书的电商梦何以撑未来?
  12. 复杂sql语句:按部门统计人数
  13. 2017中国云计算技术大会将于5月18-19日在京召开
  14. 《想做视频号必须要懂的知识——音质篇》
  15. 在vscode中配置和使用sass
  16. HGAME 2022 week1 个人部分WP
  17. 2019 年国际大学生类脑计算大赛全程总览
  18. Day002--MySQL中的图形工具的使用并创建数据表及查看表
  19. acme.sh申请Let‘s Encrypt 免费HTTPS证书
  20. 《Linux命令行与shell脚本编程大全》第十三章 学习笔记

热门文章

  1. POJ1062昂贵的聘礼(经典) 枚举区间 +【Dijkstra】
  2. C/C++(C++返回对象与应用区别,类成员的存储)
  3. Windows下如何使用CMD命令进入MySQL数据库
  4. [poj 2796]单调栈
  5. java---同步与并发概念
  6. dedecms sphinx 配置
  7. 校园课程 ·学习笔记 ·导航目录
  8. [RL] 使用 dockerfile 构建 atari 环境
  9. 二叉树——基本知识+python实现
  10. leetcode 合并数组