凌晨三点十七分,三亚湾的浪声隔着双层玻璃钻进来,带着咸腥的潮气,糊在我满是油光的脸上。我盯着MacBook Pro的屏幕,指尖悬在回车键上,面前的折叠支架上排着七台测试机,从2015年发布的iPhone 6s到上周刚拆封的iPhone 16 Pro Max,还有一台插着电的Vision Pro,屏幕全黑,像七只闭紧的眼睛。安全圈的Telegram群已经炸了两个小时,消息刷得像瀑布,核心只有一件事:苹果被曝存在一个史诗级零日漏洞,通杀2015年至今发布的所有iOS、macOS、visionOS、watchOS设备,代号“空壳”,能绕过苹果所有的沙箱防护、系统完整性保护,甚至能直接读写Secure Enclave硬件加密区里的核心数据,最离谱的是,这个漏洞从iOS 9时代就埋在系统内核里,整整十一年,没有任何人发现。
我叫陈默,今年32岁,干了八年白帽黑客,靠挖苹果的漏洞拿赏金过日子。在此之前,我挖到过三个带CVE编号的高危漏洞,最高一笔从苹果手里拿过120万美金的赏金,对苹果的安全体系熟得像自己掌心里的纹路。所以看到群里消息的第一秒,我只觉得是哗众取宠的噱头——苹果的XNU内核每年都在大改,内存防护、权限隔离、代码签名机制迭代了不下十次,能跨十一年版本通杀的漏洞,根本不符合逻辑,就像你在2015年挖的一条地道,能直通2026年刚建好的银行金库,中间城市翻修了八次,地道居然一点没被填上,连入口都没被人发现。
群里已经有人贴出了漏洞的POC验证代码,是一段只有几十行的C语言代码,看起来平平无奇,甚至有点粗糙,连多余的注释都没有。我抱着看热闹的心态把文件下载下来,扫了一眼代码逻辑,眉头瞬间皱了起来。它没有利用任何已知的内存溢出、释放后使用、竞争条件这类常规漏洞利用手法,只是向内核的一个未公开端口,发送了一串固定的十六进制数据,仅此而已。这就像你对着银行金库的钢门,没撬锁,没炸墙,只是念了一串莫名其妙的咒语,门就自己开了,离谱得像天方夜谭。
我把代码交叉编译成ARM架构的可执行文件,通过爱思助手推到了最老的那台iPhone 6s测试机上——这台机器停留在iOS 15.7.1系统,是苹果早已停止维护的老版本。我在终端里输入运行命令,按下回车的瞬间,原本应该弹出普通用户权限提示符的终端里,赫然跳出了一个鲜红的#号——那是iOS系统最高root权限的标识。
我的呼吸顿了半拍。
我不死心,又把文件推到iPhone X上,iOS 16系统,运行,回车,同样的#号稳稳跳出。接着是iPhone 12,iOS 17,成功;iPhone 15 Pro,iOS 18.4,成功;最后是那台刚拆封的iPhone 16 Pro Max,搭载着苹果上周刚推送的iOS 19.2正式版,最新的系统,最严的防护,我按下回车的那一刻,终端里依然跳出了那个刺眼的#号,连一秒的延迟都没有。
七台测试机,横跨十一个iOS大版本,全量通杀。
一股混杂着震惊、兴奋和莫名不安的情绪顺着脊椎爬上来。干我们这行的,一辈子能遇到一个这种级别的漏洞,相当于中了头奖——苹果的漏洞赏金计划里,能通杀全设备的远程代码执行漏洞,最高赏金开到了200万美金,而这个能直接穿透Secure Enclave的“空壳”漏洞,价值根本无法估量,暗网上的黑客组织、各国的情报机构,会为它开出上亿美金的价码。
但兴奋只持续了不到十分钟,就被越来越浓的疑惑取代。这个POC太简单了,简单到不合理。一个能瞒过苹果全球顶尖安全团队十一年的漏洞,利用方式居然只是发送一串固定数据?这就像顶级黑客用“”的密码攻破了五角大楼的防火墙,根本说不通。我立刻打开IDA反汇编工具,把iOS 19.2的内核缓存文件导进去,定位到了那个未公开端口对应的内核处理函数,当我看到那段代码的第一眼,浑身的汗毛瞬间竖了起来。
这根本不是苹果写的代码。
苹果的内核代码,规范到近乎刻板,变量命名、函数跳转逻辑、内存管理方式,都有一套全球安全研究员烂熟于心的标准,哪怕是一个刚入行的新手,也能一眼认出苹果代码的风格。但眼前这段代码,完全是另一个物种。它没有任何注释,变量名是随机生成的十六进制字符串,逻辑结构完全违背了现代操作系统的编程规范,甚至,它的核心指令集,根本不是为ARM架构设计的。
我做了一个疯狂的测试:把这段代码分别转译成x86、RISC-V、MIPS三种完全不同的CPU架构指令,结果让我头皮发麻——它在所有架构下都能完美运行,没有任何报错,没有任何兼容性问题。这在计算机科学里是根本不可能发生的事,不同的CPU架构有着完全不同的指令集,就像你写了一封信,中国人能看懂,美国人能看懂,日本人、阿拉伯人,甚至完全不同语言体系的外星人都能一字不差地理解,这根本不符合语言学的基本逻辑。
小主,
我花了整整一个小时,把这段代码拆解得支离破碎,终于发现了一个更可怕的真相:所谓的提权、绕过防护,根本不是这段代码的核心功能,只是它运行时附带的副作用。就像你推开一扇沉重的大门,带起了一阵风,风从来都不是你的目的,门后面的东西才是。这段代码的核心,是一个无限循环,它以系统内核的最高优先级运行,哪怕设备锁屏休眠,哪怕所有应用都被关闭,它依然在静默运行,它在做一件事——扫描。
不是扫描WiFi信号,不是扫描蓝牙设备,不是扫描蜂窝网络频段,它扫描的东西,我根本无法用现有的计算机理论解释。它调用的是ARM架构里从未公开过的保留寄存器,读取的数据来自CPU里一个完全未被文档记录的物理区域,甚至,它的运算逻辑根本不是在传统的二进制层面完成的。我找来了示波器,把探针接在了测试机的主板CPU引脚上,当这段代码运行时,示波器上出现了规律性的量子隧穿效应波动,那种波形不是随机的电子噪声,而是有明确规律的信号,就像这台小小的手机,正在对着某个我们看不见的维度,持续发送着呼叫信号,或者说,正在接收来自某个维度的回应。
我的心脏跳得像擂鼓,一个疯狂的念头在脑子里冒了出来:这段代码,根本不是给人类的CPU看的,它是写给某个更高维度的东西看的。
我做了一个更大胆的尝试:在代码里加了一个钩子函数,把它接收到的所有数据,完整地dump到了我的移动硬盘里。一开始,导出的全是无意义的十六进制乱码,我试了ASCII、Unicode、UTF-8、Base64,甚至用了二战时的恩尼格玛密码机算法解码,出来的全是垃圾数据。就在我盯着满屏的乱码,快要放弃的时候,我突然注意到一个细节:这些数据的信息熵值,比正常的随机数据低了整整三个数量级。这意味着,它根本不是乱码,它是有明确规律的有效信息,只是我用错了解码的钥匙。
我猛地想起,半年前我帮一个脑机接口实验室做过安全测试,他们用来把脑电波信号转换成数字场景的,是一套分形解码算法,专门用来解析非结构化的意识流数据。我几乎是抖着手,把这套算法的代码拷了过来,对着dump出来的12G乱码数据,按下了解码按钮。
进度条一点点往前走,我的呼吸也跟着一点点屏住。当进度条走到100%的那一刻,我的眼前突然炸开了一片光,不是屏幕发出的光,而是一种沉浸式的、直接灌进我意识里的画面。我像突然钻进了别人的身体里,站在一间落地窗外是纽约曼哈顿天际线的办公室里,墙上的日历显示着2018年9月13日——苹果秋季新品发布会的当天。桌子上放着一台和我同款的MacBook,屏幕上赫然是我此刻正在拆解的那段内核代码,桌子后面坐着一个金发蓝眼的男人,我一眼就认出了他:约翰·威尔克斯,苹果前首席安全架构师,2018年发布会当天,在家中因“突发心脏病”去世,官方通报里连详细的尸检报告都没有公布。
他正疯狂地敲着键盘,脸上全是冷汗,额头上的青筋爆起,眼神里满是我从未见过的恐惧,嘴里反复念叨着同一句话:“它不是漏洞,它是门,它们一直在看着。”突然,他停下了手里的动作,猛地转过头,直直地看向我所在的方向,就像他能隔着八年的时间,隔着两个平行的意识空间,清清楚楚地看到我。他猛地扑到镜头前,对着我声嘶力竭地喊:“别碰它!关掉它!你打开门就再也关不上了!它们会顺着过来的——”
画面瞬间碎成了雪花,我的MacBook发出一声刺耳的电流啸叫,屏幕黑了整整一秒,再亮起来的时候,刚才解码出来的所有数据,连同硬盘里的原始dump文件,全都消失得无影无踪,只剩下一个空空的文件夹,像一个被挖空的黑洞。
我整个人僵在椅子上,后背的冷汗瞬间浸透了T恤,三亚凌晨三十度的室温,我却觉得浑身的血液都冻住了。刚才的画面不是幻觉,不是我熬夜产生的臆想,是真实存在的。约翰·威尔克斯在2018年就发现了这个漏洞,他知道这个漏洞的真相,然后,他就死了。
我开始疯了一样地翻找资料,翻遍了全球安全圈过去十一年的所有新闻、论坛帖子、研究员的社交账号动态,一个让我遍体生寒的事实慢慢浮出水面:过去的十一年里,一共有十七位全球顶尖的iOS安全研究员,都在深入研究内核漏洞的过程中,意外身亡、离奇失踪,或者突然毫无征兆地宣布永久退出安全圈,从此销声匿迹。他们的研究笔记、代码仓库、社交账号,全都在出事之后被彻底清空,就像他们从来没有在这个世界上存在过一样。而他们所有人,在出事之前的最后一次公开研究里,都或多或少地接触过iOS内核里,那个未被公开的神秘端口。
小主,
原来我不是第一个发现这扇门的人,我只是第一个,在看到门之后,还没有被“清理”掉的人。