虽然这是一款便携式游戏机,但这并不意味着它的安全性就应该比 PS2 弱。 从各种意义上讲,情况恰恰相反—— PSP 上采用的安全系统非常多样化,有些部分至今仍是个谜。
现在,我们都知道它的实现方式存在隐患,最终导致了自制软件和盗版的出现,但考虑到它是 2004 年发布的便携式游戏机,你可能会发现与竞争对手相比,它捆绑了某些最先进的算法。
物理安全
下面我将介绍运行安全相关操作的三种主要芯片。 对于初学者来说,算法可能相当复杂,但我还是会试着简单介绍一下。 如果您觉得有趣,请不要忘记查看参考文献,这篇文章主要关注的还是 PSP 本身。
在整个介绍过程中,请记住,出于安全原因,索尼没有公开这些信息的文档,此外,索尼还为与安全相关的例程贴上了愚蠢的标签。
此外,我无法逐一介绍每种密码系统,因为这些复杂的话题会使文章偏离主要目标。 不过,我还是请大家从其他渠道了解每种算法背后的逻辑。
KIRK
首先,我们来看 KIRK,它是 Tachyon 的另一个组件。 KIRK 是以下算法的硬件实现(可将其视为加速器) :
- AES(Advanced Encryption Standard)的加密和解密:一种使用给定密钥的对称加密系统。 KIRK 还提供一个由 128 个密钥和一个主密钥组成的密钥库,这两种密钥的长度都是 128 位,用于加密/解密数据。
- ECDSA:一种非对称加密系统。 包含两种功能:
- 公钥-私钥生成:用于加密和解密用户数据,如存档文件。
- 签名验证:通过存储的公钥校验和解密索尼加密的数据。
- SHA-1:为数据生成哈希值的算法。 ECDSA 在签名校验过程中使用 SHA 确认原始数据未被篡改。
- CMAC(Cipher-based Message Authentication Code):另一种算法,使用共享密钥解密并验证加密数据的完整性(无论是否来自索尼)。 它依赖于 AES 进行解密。
- 伪随机数生成: 顾名思义,它(试图)生成不可预测的数字。
简而言之,CPU 向 KIRK 发送指令(如"使用算法 x 和密钥 y 加密此字符串")。 KIRK 也可以作为总线主控,因此它可以立即将结果存储到主 RAM 中。
Lepton
众所周知,UMD 光盘不易复制,其内容也是以加密形式存储的。 不过,用户永远不会注意到这一点,因为解密过程是由硬件执行的。
与 Tachyon 并行的另一个名为 Lepton 的 SoC 可控制 UMD 驱动器,并充当主 CPU 和 UMD 内容之间的中介。
Lepton 中包含大量电路,你甚至可以认为它是 PSP 内的另一台计算机。 该组件包括自己的 CPU、用于解码的 DSP、作为缓冲区的 480 KB 内存以及用于存储固件的 384 KB ROM。
主 CPU 通过 ATAPI 协议与 Lepton 通信,该协议是一般用于传统 CD/DVD 驱动器与 PC 的连接。 但主要区别在于,Lepton 只有在光盘被识别为真实光盘的情况下才能解密 UMD 中的数据。
SPOCK
除了由 Lepton 处理的加密系统外,UMD 的扇区也使用 AES 加密。 SPOCK 是和 KIRK 同级的另一个区块,主要用于解密 UMD 光盘的扇区。
在 NAND 闪存中,IDStorage 存储了一个被称为"主密钥"的加密密钥。 SPOCK 包含用于解密的硬连接密钥。 解密后的主密钥会被 SPOCK 用来解密 UMD 中的另一个密钥。 然后使用后一个密钥读取每个扇区。 Easy-peasy!
顺便一提,尽管 SPOCK 位于 Tachyon 内部,但它由 Lepton 控制。
总之,通过硬件中集成的程序,系统在执行游戏时无需消耗通用资源来加密/解密。
软件安全
操作系统将利用硬件构建一个安全系统。 总之,软件保护遵循以下原则:
- 信任链:Pre-IPL 是启动的第一阶段,由索尼编写并在制造过程中嵌入的一段只读代码。 Pre-IPL 批准的所有内容都被认为是可信的,随后执行的程序也是如此。
- 签名可执行文件:对可执行文件进行加密,并使用索尼的私钥进行签名,确保无法重新签名被篡改的数据。
- 不透明硬件:KIRK、SPOCK 和 Lepton 是没有文档记录并且被混淆过的硅块,不会暴露应用了哪些算法以及如何应用。
- 开发安全:即使在零售游戏中存在可以导致任意代码执行的用户级漏洞,MMU 的权限模式也会限制对敏感内存位置的访问。
击败
尽管有种种安全措施,黑客们似乎从未放弃过对这款主机的研究,也许是因为它的诸多优点对自制软件开发有巨大的吸引力。 请注意,这一领域的内容数量惊人,所以我必须在某个地方划出休止符。 因此,这里只提及一些重大发现。 如果想要知道更多的话,playstationdev.wiki 保存了一份完整的档案。
早期错误
PSP 在日本发布后不久,就有用户级漏洞被挖掘出来。 其中一些使用了早期固件版本中存在的安全漏洞:
- "Wipe Out"内置了一个网络浏览器用于访问可下载内容。 它没有防范DNS 攻击(域名劫持),这允许用户浏览世界范围内的任何 URL。
- 后来,人们发现浏览器没有验证输入的 URL。 因此,用
file:///disc0:/作为 URL 将列出未加密的 UMD 内容。 这使黑客能够检查 PSP 可执行文件并对其进行逆向工程。
- 后来,人们发现浏览器没有验证输入的 URL。 因此,用
- 第一个修订版系统没有检查存储在记忆棒中的可执行文件的签名,从而允许运行自定义非内核用户模块。
- 这可能个偶然,因为使用没有签名检查的调试版系统进行开发是常见做法。 因此,他们可能像Microsoft那样,忘记重新激活检查就匆忙发布。
- 补丁后,黑客又发现了文件系统实现中的一个缺陷,并利用它继续运行未签名代码。 简单的说,用户必须复制包含可执行文件的文件夹,在第二个文件夹的名称末尾添加额外的
%,并用一定的方法重新组织两个文件夹的内容。
这些早期错误帮助建立了 PSP 内部运行方式的知识库,从而能开发出更多的攻击载体和软件程序,以便与硬件进行交互(请记住,只有游戏工作室才能获得官方 SDK 和文档)。
就像其他猫鼠游戏一样,索尼以被新游戏依赖的系统更新作为回应,而更新的漏洞(所谓的 "TIFF"、"GTA"漏洞等)则不断出现。 值得一提的是,由于尚未获得内核访问权限,它们只能被视为"自制程序的起点"。
降级
索尼公司凭借带有安全补丁的强大固件更新和像网络浏览器这样吸引人的功能更新系统之后,旧版本就成了某种应许之地,高级用户可以在这里运行他们的自制软件。 然而,要获取特定系统版本的 PSP 变得越来越困难。 因此,"降级"迅速流行起来。 降级与升级相反,是将当前安装的固件替换为更早更容易利用的版本。
执行降级的常见方法包括利用漏洞欺骗系统安装旧的更新文件。 这并不容易,因为它依赖于越来越少的最新版本上的漏洞。
最终,市场上出现了两种"modchips":"Undiluted Platinum"和"PSP-Devolution"。 这两款产品在出厂时都配备了单独的 NAND 芯片,用作次级 NAND 存储,使用户能够启动可利用的次级固件或替换主固件。 这种方法仅支持 PSP 1000 型号,因为后来的型号合并了 Tachyon 和 NAND + DDR SDRAM 的封装。
神电
猫鼠游戏终结于"Pandora"的到来。
"Pandora 电池法"是一个广受欢迎和尊重的成就集合。 它设法绕过了大部分安全层,并把重点放在了索尼无法快速反应的地方:Pre-IPL。 这是 Pandora 成功的方法 :
- 找到进入"服务模式"的方法:黑客通过篡改 PSP 的可拆卸电池上内置的用于识别的电路,发现将其序列号值改写为
0xFFFFFFFF后,就会在启动时触发服务模式。 因此,Pre-IPL 会在记忆棒中寻找其他系统。 改动后的电池被称为JigKick或"Pandora"电池。- 用户可以用被黑的 PSP 或通过拆焊电池 EEPROM 的接地引脚来制作 Jigkick 电池。 考虑到普通用户需要拆卸锂电池,后者的风险明显更高! 因此,一些公司发布了自己的"Pandora 电池"制作器。
- Jigkick 电池和正常电池一样工作。 然而,在插入记忆棒之后,PSP 将始终从记忆棒启动。
- 欺骗"服务模式"加载伪造/未签名固件:下一步是找到在服务模式下加载伪造 IPL 的方法(它仍然必须经过加密和签名才能工作)。 黑客们在加密块旁边嵌入未加密的有效载荷。 Pre-IPL 会尝试验证它(因为 Pre-IPL 没有检查加密块的长度是否为 1 KB)。 加密部分需要在解密后告诉 Pre-IPL"向后跳转 100 字节"。 这绕过了安全例程并将执行重定向到有效载荷,使任何人都能在服务模式下以最高权限执行代码。 这让我想起了Wii的遭遇。
- 自定义 IPL 需要从记忆棒中的特定扇区执行。 安装了自定义 IPL 的记忆棒称为 Magic Memory Stick。 有特殊程序允许任何用户创建这个 。
剩下的工作就是嵌入一个有效的载荷。 最受欢迎的选项包括"de-bricker",它可以在 PSP 上重新安装一个干净的官方固件(如果 NAND 先前已损坏,则可以修复它)、"降级器"或自定义固件安装程序。
别忘了,所有这些都是艰巨的任务,特别是考虑到 KIRK 没有被逆向,并且使 Pre-IPL "跳转"的加密块必须通过暴力计算得出。
CFW及其他
Pandora 对索尼来说是一个沉重的打击——它是一个有效的引导程序漏洞,就像任天堂 DS一样,只能以新硬件的形式修复。
此外,在潘多拉发布之前,所谓的定制固件(Custom Firmware)或称"CFW"也早已到来。 CFW 是经过修改的官方固件(如加入了自制模块)。 这些定制模块享有内核权限,而且正如你可能猜到的那样,它们可以完全控制主机。 新模块的例子包括 ISO 加载器、签名禁用器、低级 CPU 管理、"插件"加载器(无需重新安装固件即可添加更多自定义功能),以及许许多多其他模块。 黑客们制作了他们自己的版本,如 M33、PRO 和 ME。
利用任何内核级漏洞,CFW 可以在当前固件上安装(这是最早的方法)。 不过,它只能利用 Pandora 曾经使用的漏洞绕过签名检查自动启动。 否则,用户需要要依赖猫鼠游戏漏洞重新启动 CFW。 这就是为什么最新的 PSP 型号无法使用老办法启动 CFW。
最后一根稻草是PlayStation 3的安全系统被黑客攻破,因为PS3 的操作系统包含一个 PSP 模拟器,其中包含用于解密 PSP 可执行文件的私钥。 这使得任何人都可以对嵌入内核漏洞的用户级软件进行签名,以生成 CFW 安装程序和/或 CFW 加载程序等。
最近,有人发现最新固件在启动过程中包含一个内核漏洞,可用于启动所选择的 CFW。 这被打包在名为 Infinity 2 的解决方案中。
总而言之,索尼公司声称 UMD 无法破解是正确的。 毕竟,黑客攻击的实现反而要归功于众多软件缺陷。
鼓励自制
自制软件开发不仅局限在破坏安全机制上,还有一些社区致力于为自制软件开发者提供必要的工具,使他们能够在不受法律影响的情况下构建自己的软件。 例如,pspdev 小组发布了一个名为PSPSDK的开源 SDK,该 SDK 复刻了许多官方接口,并且没有施加索尼的限制。
PSPSDK 还包括一个处理编译和打包过程的工具包,就像官方 SDK 一样,但目标是运行了 CFW 的 PSP。

