开发者生态
morning
请原谅米伊?
2026-05-23
1 阅读
jiveturkey
请原谅米伊? 2026 年 5 月 23 日星期六 Apple 的内存完整性强制措施可不是开玩笑。五年的设计、全新的 M5 芯片、内核堆上的硬件内存标记、内核皇冠上的宝石的硬件锁定只读区域,以及位于内核上方的特权监视器,拒绝任何未经授权的页表更改。它是所有消费类操作系统所提供的最严格的内核内存安全堆栈。而且它仍然被绕过了。一家由人工智能助手组成的三人商店在五天内就逛完了,其中有两个错误和一个聪明的想法。这是我对他们如何实现这一目标的概述,不需要博士学位。如果您愿意,请跳过: 60 秒内的错误 修复,用两条说明 对于防御者 对于漏洞作者 为什么内存安全很重要 您读过的几乎每个“你的 iPhone 被黑”的故事都会回到相同的根本原因:内存错误。一个指向错误事物的指针。一个缓冲区写入了太多的一个字节。一个在应该被释放后被重用的结构。这不是用户点击了一个粗略的链接。这不是被盗的密码。这是内核从一段内存中读取数据并过于信任它。 Pegasus 是 NSO 集团的间谍软件,最终感染了全世界的记者和活动人士?内存错误。 WebKit 零点击在整个 2020 年代都用于目标操作?内存错误。从 5s 到 X 的所有 iPhone 都使用过 checkm8 越狱吗?内存错误。我几年前写过的 T2 漏洞?同一个家庭。谷歌的零项目多年来一直在计算这些数据。所有主要软件产品中大约 70% 的高严重性漏洞都是内存安全错误。微软对他们进行了统计,得到了相同的数字。 Chrome 做到了,Firefox 做到了,Apple 做到了。全行业一致认为:这就是问题所在。那么攻击者实际上会利用内存错误做什么呢?在最坏的情况下,他们想要什么都可以。内核是运行所有其他程序的程序。如果你可以破坏内核的内存,你可以重写表“允许这个进程读取你的照片”,或者“这个用户的uid = 501”。您可以安装在重新启动后仍然存在的东西。您可以阅读设备发送过的每条消息。您可以在没有 LED 的情况下打开相机。你买来保护你的生活隐私的手机现在成了别人的你的生活日记。这就是为什么苹果、微软、谷歌和芯片供应商十年来一直在硬件级内存安全方面投入大量精力。编译器强化、更安全的分配器、沙箱:它们都有帮助,但它们是一个漏桶。错误不断出现。真正有效的方法是让错误即使存在也无法被利用。停止相信软件是正确的;构建硬件以拒绝错误操作。这就是 MIE 的赌注。回顾一下:MIE 应该做什么?如果您去年关注过 Apple 的安全营销,您一定听说过 MIE 被描述为“代际飞跃”。这是三块,叠起来的。内存标记 (EMTE)。内核分配的每一块内存都有一个隐藏的标签,即标签。用于到达该块的指针在其高位中具有相同的标记,并且不会更改地址。每次访问时,CPU 都会检查:指针的标记是否与内存的标记匹配?如果没有,您的进程将当场终止。 Apple 的版本是同步的,这意味着检查会在访问本身上触发,而不是稍后触发。你不能通过探测来猜测标签,因为第一次错误的猜测就会杀死你。只读区域。有些内核结构非常有趣,它们得到了额外的保护。诸如 ucred(进程的用户 ID)、Mach 任务控制块、沙箱表、协同设计状态之类的东西。它们位于一个特殊区域,页表本身将页面标记为不可写。即使是 Ring-0 内核代码也无法触及它们。硬件MMU拒绝。一扇门进来。只允许一个内核函数改变只读区域页面: _zalloc_ro_mut 。它会短暂地将页面标记为可写,执行写入操作,然后再次将其标记为不可写。一个称为“安全页表监视器”的更高权限的东西会监视每个页表更改,并在其他人尝试时拒绝。从内核自己的角度来看,“只有_zalloc_ro_mut在这里写入”是牢不可破的。将这三者叠加在一起,就得到了 MIE。大多数内核内存都受标记保护。皇冠上的宝石受到一位经过审计的作家的页表保护。老实说,相当不错的设计。刚刚发生了什么? Apple 于 2026 年 5 月 11 日发布了 macOS Tahoe 26.5。安全注释中隐藏着一行字:内核。适用于配备 Apple Silicon 的 Mac 电脑。应用程序可能会导致系统意外终止。图片来源:Calif.io 与 Claude 和 Anthropic Research 合作。 CVE-2026-28952。 “系统意外终止”听起来像是一个崩溃错误。它不是。三天后,Calif 发布了他们的披露:在启用了 MIE 的 M5 上首次公开 macOS 内核漏洞。非特权本地用户,仅公共系统调用,root shell。从“手中没有错误”到有效利用的五天时间。他们用了