托尼·霍克的职业 Strcpy

2016 年作者想提升利用开发技能并寻找新漏洞来攻击初代 Xbox。多年来人们可下载已被黑客攻击的游戏存档用于某些游戏并借此攻击主机,这些存档攻击利用了简单的缓冲区溢出漏洞获取主机代码执行权并运行未授权代码。作者决定从较旧的游戏主机开始,2000 年代初的设备是学习计算机硬件、利用开发等的好平台,因其入门门槛低且内部工作原理已被研究和记录。

  • Tony Hawk's Pro Skater 4(THPS4):作者从游戏存档入手,发现“Create-A-Park”功能中的“gap”字符串有 31 字符长度限制,推测可能存在内存 corruption 问题。制作恶意存档并在已破解的 Xbox 上测试,控制台崩溃后发现 strcpy 函数将 gap 名字字符串复制到了栈上,通过 IDA 分析可知存在缓冲区溢出漏洞,且该版本 Xbox 无栈 cookies 防护。后续利用 ROP 链将 shell 代码复制到可执行内存区域实现代码执行,再通过修改 RSA 公钥等步骤实现运行未签名可执行文件。
  • Tony Hawk's Pro Skater 3(THPS3):作者从 THPS4 回溯,发现 THPS3 也有“Create-A-Park”功能但存档加载方式不同,此次漏洞导致控制台在选择“quit game”时崩溃,原因是溢出覆盖了下一个堆分配的头部数据。作者通过 ROP 链控制清理函数指针指向包含 ROP 链的恶意保存数据内存来实现代码执行。
  • Tony Hawk's Underground 1 & 2(THUG):这两款游戏编译时使用了栈 cookies,作者尝试利用 gap 名字字符串缓冲区溢出失败,因为无法获取栈 cookies 值,且游戏中没有可利用的变量,遂放弃。而 Playstation 2 版本、PC 版本(可能还有 Gamecube 版本)未编译栈 cookies,可利用 gap 名字字符串缓冲区溢出。
  • Tony Hawk's American Wasteland(THAW):此游戏未编译栈 cookies,可利用 gap 名字字符串缓冲区溢出,攻击方式与 THPS4 类似。
  • Remote code execution(远程代码执行):作者想寻找无需存储卡的低门槛攻击方式,利用 Create-A-Park 编辑器创建的公园文件在多人 LAN 游戏中传输的特性,制作特殊存档进行网络攻击。遇到一些问题如主机重新保存公园文件导致 exploit 数据被破坏,通过 NOP 函数调用解决。还需解决客户端获取二级有效负载可执行文件的问题,尝试从 burned CD 或本地网络地址加载但都不理想,最终决定通过游戏网络代码发送“out of band”消息来传输。期间作者在网上搜索相关资料时发现了 Tony Hawk's Underground 的源代码,这有助于了解游戏网络代码并编写钩子函数。为使攻击更稳健,作者修改 ROP 链以在传输二级有效负载时恢复执行到游戏,还解决了游戏网络数据分配器导致的内存泄漏问题,最终实现了在客户端运行 nyan-cat 可执行文件的远程代码执行。
  • The first Xbox 360 software-only exploit(首个 Xbox 360 软件漏洞利用):作者多年来试图在 Xbox 360 上找到可利用的漏洞,发现 Tony Hawk's American Wasteland for Xbox 360 易受 gap 名字缓冲区溢出攻击,虽想在新内核版本上利用但希望渺茫,于是决定开发首个软件仅利用漏洞(仅在 4548 版本内核上可用)。介绍了 Xbox 360 的安全架构,如 hypervisor 模式、系统调用处理程序漏洞等,通过控制系统调用处理程序中的指令和寄存器来实现对加密 hypervisor 内存的读写和代码执行,利用 Tony Hawk 的 strcpy 漏洞构建 ROP 链实现全 hypervisor 代码执行并启动二级可执行文件。
  • Port to other consoles(移植到其他主机):2024 年作者将这些 Tony Hawk 漏洞移植到其他主机,如将 THPS4 网络 RCE 漏洞移植到 Playstation 2,将 THPS4 存档漏洞移植到 GameCube,但 GameCube 复制文件到存储卡较困难且无网络支持。还为 THUG PRO 创建了游戏存档漏洞但未发布,同时提醒 PC 上的 Tony Hawk 游戏玩家注意 strcpy 漏洞及安全问题。

总之,一个 strcpy 漏洞可用于攻击多种平台并实现远程代码执行,作者对 Tony Hawk 游戏有深厚感情,相关源代码和补丁文件可在其 GitHub 上获取。

阅读 11
0 条评论