针对 Xbox 360 hypervisor 的“Bad Update”漏洞利用经历了重大的技术改进,旨在将其从缓慢且不可靠的概念验证转变为高效的攻击手段。最初,该漏洞利用需要物理游戏光盘作为入口点,且成功率较低。在两个主要的社区贡献后,情况发生了变化:一是发现了 Rock Band Blitz (RBB) 演示版本中的新游戏存档入口点,二是优化了 hypervisor 的竞态条件。通过利用 RBB 的 DLC 解析代码中的内存损坏,攻击者现在可以通过 USB 闪存盘启动漏洞链,从而无需物理光盘。

原始概念验证中的主要技术障碍是简单的密文查找表失效。Xbox 360 使用带有 12 位白化值(whitening value)的内存加密方案,这使得任何给定的明文都可能产生 1024 种可能的密文组合。作者最初尝试使用查找表失败,是因为较新的 hypervisor 版本移除了一个在 hypervisor 函数中特定的转换后备缓冲区(TLB)刷新操作。由于作者直接调用 hypervisor 系统调用——跳过了执行刷新的内核包装器——导致白化位变得陈旧,从而导致读取到无效的密文。这种旧版和新版 hypervisor 行为之间的区别是导致最初漏洞利用不稳定的关键因素。

展示 hypervisor TLB 刷新机制的技术图表或图形。
hypervisor 转换后备缓冲区(TLB)刷新行为的可视化表示。icode4.coffee

这张图片展示了导致原始漏洞利用不稳定的特定 hypervisor TLB 刷新行为。

显示“检测到无效写入”错误消息的截图或图形。
初始概念验证期间遇到的“检测到无效写入”错误的示例。icode4.coffee

此图展示了在实施密文哈希表之前原始漏洞利用的失败状态。

为了解决这个问题,该漏洞利用现在利用哈希表来预计算并存储恶意密文值。系统迭代 1024 次以耗尽所有可能的白化位,并为每个加密分配手动刷新 TLB 条目,以确保捕获到正确的白化值。预期密文的前 N 位作为表的索引。虽然更大的哈希表占用更多内存,但密钥大小的选择旨在最小化冲突,同时避免过度的 CPU 缓存抖动。结合 XKE 有效负载与密文覆盖线程之间改进的线程调度,这些优化将执行时间缩短至几秒钟,且成功率接近 100%。然而,这些优化的有效性仍取决于特定硬件的缓存行为,因为该漏洞利用依赖于内存开销与 CPU 缓存压力之间的微妙平衡。