Xbox 360 虚拟机监控程序破解第 3 部分:改进 Bad Update
BestBlog编程类文章 · 软件开发
📌 One-Sentence Summary 本文详细介绍了对 Xbox 360 虚拟机监控程序漏洞利用程序「Bad Update」的优化:通过密文哈希表、改进缓存刷新和优化线程调度,实现近乎瞬时执行,成功率接近 100%。 📝 Summary 本文介绍了对 Xbox 360 虚拟机监控程序漏洞利用程序「Bad Update」的重大改进,将执行时间从约 20 分钟、成功率 30% 缩短至近乎瞬时,成功率接近 100%。文章介绍了两项主要改进:(1)通过遍历全部 1024 个白化值,预先计算并存储恶意密文,建立密文哈希表;该表以密文的前 20 位作为哈希键,从而能在竞态条件发生时快速查找。(2)改进缓存刷新原语:使用 dcbz 指令处理更大的内存区域,以加大对 CPU 缓存的压力,并优化 XKE 负载线程与密文覆盖线程之间的调度。作者还讨论了实现细节,包括 TLB 刷新的注意事项和哈希表中的冲突处理,并通过代码片段展示 BuildCipherTextLookupTable 和 CacheThrashThreadProc 函数。 💡 Main Points 密文哈希表优化:预先计算全部 1024 个白化值,以便在竞态条件发生时快速查找 哈希表使用密文的前 20 位作为索引,同时存储用于验证的预言机密文和恶意替换密文,减少关键竞态窗口期间的计算需求,并将成功率提升至接近 100%。 使用 dcbz 指令刷新缓存,并将处理的内存区域扩大至原来的 3x,以增加 CPU 缓存压力 通过分配更大的临时缓冲区,并在 3 个不同位置调用 dcbz,漏洞利用程序可以更有效地将旧数据从 CPU 缓存中逐出。由于内核模式无法使用特权缓存刷新指令,这对竞态条件成功至关重要。 优化 XKE 负载线程与密文覆盖线程的调度,提高可靠性 作者优化了执行虚拟机监控程序系统调用的线程与覆盖密文的线程之间的协调,以尽可能提高竞态条件成功的概率,从而大幅缩短执行时间。 发现 TLB 刷新是原始实现中的关键问题 作者解释说,较早版本的虚拟机监控程序会刷新 TLB,导致白化值失效。解决方法是在每次加密后手动刷新相应的 TLB 条目,以确保读取到正确的白化值。 💬 Key Quotes 「以 RBB 作为入口点后,我们不再需要 Tony Hawk American Wasteland 游戏光盘。运行 Bad Update 漏洞利用程序变得非常简单:只需将一些文件复制到 USB 记忆棒,插入主机,然后从控制面板启动 Rock Band Blitz。」 「这些改进结合起来,将执行时间缩短到了几秒,竞态条件的成功率也大幅提高。」 「为了尽可能提高效率(别忘了,我们在这里是在和 CPU 及缓存赛跑),我们不处理冲突。」 「如果缓存块已经位于数据缓存中,它的所有字节都会被清零。如果该块不在缓存中,系统就会直接在缓存中分配该块并将其初始化为零,而不会从主内存读取旧内容。」 📊 Article Meta AI Screening: 82 Source: Hacker News Author: Hacker News Category: 软件编程 Language: 英文 Read Time: 25 min Word Count: 6167 Tags: 编程与工程 , 安全 , 渗透测试与安全工具 , 电子游戏 , 漏洞利用开发 Read Full Article