这是关于黑客 Xbox 360 管理程序系列博客的第二部分,主要内容如下:
- 测试环境:目标是利用在Tony Hawk’s American Wasteland中发现的游戏保存漏洞,启动一个漏洞利用链,最终获得管理程序模式的代码执行。测试环境是一台已修改的具有完整调试功能的 Xbox 360 主机,通过在 C 代码中编写漏洞利用测试来进行研究。
分析攻击面:
- 系统调用:启动时管理程序有 65 个系统调用,生命周期结束时增加到 120 个,但未发现可用于攻击管理程序本身的漏洞。
- XeKeysExecute 有效负载:有一个特殊的系统调用
HvxKeysExecute
用于在管理程序模式下运行小块临时代码,但在其中未发现简单漏洞,只有一个突出的有效负载需要攻击加密内存。 - 发现(无):经过几天的代码审查,未发现有价值的结果,但了解了加密和受保护内存的工作方式,为可能的攻击向量提供了一些想法。
- 攻击加密内存:由于未发现漏洞,转向攻击加密内存,以尝试攻击之前发现的重要 XeKeysExecute 有效负载。介绍了加密内存的分配方式和相关函数
HvpSetPageWhiteningBits
,并提出了一种假设的攻击场景。 - 制作密文:通过
HvxEncryptedReserveAllocation
、HvxEncryptedEncryptAllocation
和HvxEncryptedReleaseAllocation
系统调用,利用加密路径生成任意数据的密文。 - 覆盖只读内存:介绍了几种用于覆盖任意内存的技术,重点介绍了使用管理程序 API 的技术,通过
HvxKeysExGetKey
和HvxKeysExSetKey
API 实现任意内存复制。 - 获取内核模式代码执行:结合前面的步骤,获取任意内核模式代码执行的方法,包括获取引导动画的物理地址、生成密文、寻找白化值冲突等步骤。
- 引导加载程序更新有效负载:介绍了用于系统更新的引导加载程序更新有效负载,它在解压过程中会将一些数据存储在加密内存中,可被攻击。分析了有效负载的工作原理和攻击尝试,包括攻击 LZX 解码器上下文结构的指针等,但遇到了缓存等问题。
- 失败不是选项:尝试将 0x8000 字节的写原语用于其他有用的目的,如内存腐败,但发现目标数据被管理程序的自旋锁保护,无法实现。后来通过侧信道找到在最后一个解压块中可利用的指令序列,为获取管理程序代码执行提供了可能。
- 引入线程风水:通过记录线程的时间戳,发现线程在 CPU 上的调度位置会影响攻击的成功率,最终确定将攻击线程放在 hw 线程 0,有效负载线程放在 hw 线程 1 时效果最佳。
- 滥用 CPU 以获取乐趣和利润缓存:使用
XLockL2
内核 API 锁定 L2 缓存的部分区域,减少 CPU 可用的 L2 缓存,增加缓存未命中的概率,从而提高攻击的成功率。 - 偏移比赛时间:改变 oracle 数据为
LDICreateDecompression
初始化后的 LZX 解码器结构的前 16 字节,将攻击窗口向后移动到解压过程的后半部分。 - 脏缓存:发现由于数据在 L2 缓存中未及时提交到 RAM,导致控制台在写入错误数据时崩溃,找到
HvxRevokeUpdate
系统调用作为缓存刷新原语,解决了该问题。 - 引入 Xbox 360 坏更新漏洞利用:将前面的攻击步骤整合为一个端到端的漏洞利用,以 Tony Hawk’s Pro Strcpy 漏洞为入口点,结合攻击引导加载程序更新 XeKeysExecute 有效负载的技术,实现管理程序代码执行,并提供了完整的源代码和文件。
- 漏洞利用常见问题解答:回答了关于漏洞利用的一些常见问题,如适用的软件版本、是否为软 mod、与 RGH 黑客的比较等。
- 结论:该漏洞利用的研究和开发耗时约两个半月,是一次对安全研究员能力的挑战,现在作者将退休于游戏主机黑客领域,未来可能会写第三部分介绍一些失败的尝试和其他有趣的行为。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。