破解 Xbox 360 管理程序第 2 部分:不良更新利用

这是关于黑客 Xbox 360 管理程序系列博客的第二部分,主要内容如下:

  • 测试环境:目标是利用在Tony Hawk’s American Wasteland中发现的游戏保存漏洞,启动一个漏洞利用链,最终获得管理程序模式的代码执行。测试环境是一台已修改的具有完整调试功能的 Xbox 360 主机,通过在 C 代码中编写漏洞利用测试来进行研究。
  • 分析攻击面

    • 系统调用:启动时管理程序有 65 个系统调用,生命周期结束时增加到 120 个,但未发现可用于攻击管理程序本身的漏洞。
    • XeKeysExecute 有效负载:有一个特殊的系统调用HvxKeysExecute用于在管理程序模式下运行小块临时代码,但在其中未发现简单漏洞,只有一个突出的有效负载需要攻击加密内存。
    • 发现(无):经过几天的代码审查,未发现有价值的结果,但了解了加密和受保护内存的工作方式,为可能的攻击向量提供了一些想法。
  • 攻击加密内存:由于未发现漏洞,转向攻击加密内存,以尝试攻击之前发现的重要 XeKeysExecute 有效负载。介绍了加密内存的分配方式和相关函数HvpSetPageWhiteningBits,并提出了一种假设的攻击场景。
  • 制作密文:通过HvxEncryptedReserveAllocationHvxEncryptedEncryptAllocationHvxEncryptedReleaseAllocation系统调用,利用加密路径生成任意数据的密文。
  • 覆盖只读内存:介绍了几种用于覆盖任意内存的技术,重点介绍了使用管理程序 API 的技术,通过HvxKeysExGetKeyHvxKeysExSetKey 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 黑客的比较等。
  • 结论:该漏洞利用的研究和开发耗时约两个半月,是一次对安全研究员能力的挑战,现在作者将退休于游戏主机黑客领域,未来可能会写第三部分介绍一些失败的尝试和其他有趣的行为。
阅读 9
0 条评论