您刚刚阅读的所有内容都必须受到某种保护,以防止"未经授权"的访问。 如果你想了解索尼是如何做到这一点的,那你就大开眼界了。
安全基础概述
游戏机的许多部分已经提供了无需在软件中手动实现的安全功能:
- SysCon是一个不起眼的专有芯片(在启动过程中略有提及),它控制着Cell、RSX和南桥的电源线。 它的EEPROM包含操作系统模块读取的记录,用于确定哪些功能已启用,哪些功能未启用。
- 虽然我用了"晦涩"这个词,但SysCon只是一个微控制器,要么是一个现成的ARM7TDMI-S(没错,PS3与Game Boy Advance甚至PS2的后期改版共享了一些基因),增强了MagicGate支持,要么是一个定制的NEC 78K0R变体。 SysCon的内部固件是最吸引人的地方。
- SysCon和Cell通过串行接口(SPI)相互通信,该接口可插入Cell的TEST组件。 TEST为Cell提供了许多调试功能,但SysCon只连接到"Pervasive logic"端口,使SysCon能够管理电源或热管理等区域。
- Cell内有一个隐藏的ROM,用于存储未加密的启动例程,无需担心窥探者。
- Cell的特权模式和SPE的隔离模式可防止程序访问未经授权的资源。
- 南桥使用AES对硬盘内容进行无缝加密。
- 蓝光子系统是另一个坚固的堡垒,它使用光盘"ROM标记"区域(传统读取器无法访问)中的密钥对光盘内容进行加密。
除此之外,索尼还在软件中实施了以下保护措施:
- 一个复杂的信任链,从Cell的未加密启动ROM开始,到图形用户界面(XMB)结束,XMB只能在内核和管理程序下加载加密的二进制文件(由索尼提供)。
- 信任链采用多种加密算法,包括RSA和ECDSA等非对称算法以及AES等对称系统,并结合HMAC和SHA-1(用于确认数据的完整性)。
- 有些加密密钥是在制造过程中产生的,这意味着如果黑客发现并泄露这些密钥,它们将无法在其他游戏机上使用。 不过这样做的代价是,一旦游戏机出厂,索尼就无法为使用这些密钥加密的软件打补丁。
- 这些特殊密钥用于
bootldr和metldr(早期启动阶段)。
- 这些特殊密钥用于
- 游戏必须调用内核才能访问硬件,而内核又会询问管理程序。 理论上,这种"抽象洋葱"可以防止游戏漏洞升级权限。
击败
你已经看到了这款游戏机的能力有多强,难道你还指望黑客们会满足于OtherOS的有限功能吗? 我猜索尼也没有,该公司竭力保护某些领域,却让其他领域半封闭,黑客们稍后就会证明这一点。
请记住,PS3黑客社区非常活跃,每年都有许多工具和文档问世。 因此,我将重点介绍为大量内容和自制软件开发铺平道路的几个里程碑,但你可以在PS3History上找到更多信息。
绕过管理程序
2010年,在黑客界沉寂了三年之后,社区出现了转机。 George Hotz是一位因解锁第一代iPhone机型(又称"2G"),使其可以在任何网络下使用(最初只能在Cingular/AT&T网络下使用)而闻名的黑客,他成功地读写了内存中的保护区,而没有被虚拟机管理程序阻止。 随后,他在自己的博客中发布了漏洞利用方法和简短摘要。
该漏洞需要两种材料:一个在OtherOS下运行的Linux(用于执行任意但有限的代码);一个连接到XDR总线(连接主RAM)的外部glitcher。 长话短说,管理程序使用存储在主RAM中的哈希表来编目内存地址及其权限级别,因此用户程序无法访问受保护的内存空间。 这种攻击通过破坏哈希表的完整性来实现写入,然后利用这种权限修改条目,使当前程序可以访问内存中的每一个角落。
总之,Hotz发现,在Linux/OtherOS下,程序可以向管理程序请求许多指向同一物理地址的内存块,但如果程序在XDR总线受到外部干扰(由于glitcher发送电脉冲)的情况下取消分配这些内存块,取消分配过程就会半途而废。 因此,管理程序的哈希表(位于RAM中)仍然包含一个已分配地址的条目,但同时它认为该空间已被释放。 Hotz的漏洞会继续请求更多的区块,这样管理程序就会用更多的条目扩展它的表,这个过程一直持续到哈希表中的一个条目与本应取消分配的区块的内存位置重叠为止。 由于哈希表保留了允许用户访问该地址的旧条目,因此管理程序最终允许用户修改哈希表条目! 因此,该漏洞利用修改条目来扩展对所有内存空间的访问权限。
虽然这个漏洞需要在OtherOS下运行的Linux环境,但它为进一步的逆向工程和研究项目迈出了一大步,因为黑客们现在可以研究系统中原本无法访问的关键区域了。 值得一提的是,在同一时间,索尼发布了删除OtherOS的3.21版软件更新。 你本以为这会阻止黑客继续他们的工作,但这只是给了他们更多加速工作的理由。
PS越狱
2010年晚些时候,一个名为"PS越狱"的组织宣布(随后发布)了一种独特的解决方案,无需篡改游戏机硬件,即可直接从游戏机的原生shell(XMB,在GameOS下)运行自制软件。 这一切都让索尼大失所望,他们很快就会采取法律手段阻止该产品的销售。
"PS 越狱"由一个USB加密狗组成,在游戏机打开之前将其插入前端的USB端口。 然后,用户必须按下电源按钮,不久后再按下弹出按钮。 如果指令执行成功,用户就会看到正常的XMB界面,但增加了一个"安装PKG"选项和几个自制应用程序,用于将蓝光游戏转储到硬盘,然后加载它们。
在幕后,这个加密狗执行着大量工作,可分为两组:
- USB漏洞:一旦游戏机打开,加密狗就会欺骗系统,让它以为自己连接到了一个6端口USB集线器,然后执行一连串复杂的USB命令,直到达到堆溢出并升级到PS3的内核(lv2)访问权限,接着它就会执行有效载荷。
- 有效载荷:这是另一个复杂的软件包,它对原始shell进行了修补,以启用仅在调试单元上可用的隐藏功能(即"安装PKG"条目)、禁用签名验证(加载任意模块/软件包)以及将蓝光命令重定向到硬盘驱动器(用于从硬盘驱动器加载游戏)。 这个程序能从内核层面改变这么多,让人不禁要问,管理程序到底有什么用?
- 作为补充,M4j0r后来告诉我:"有趣的是,它甚至没有利用索尼的代码,lv2的这一部分是由罗技编写的,而该漏洞的开发者可能有机会获得源代码(由于2008年的黑客攻击)"。 。
随后,其他社区对该产品进行了逆向工程,不久之后,开源仿制产品(如 PS Groove)出现,取消了许多限制(例如,用户现在可以在漏洞利用完成后拔下设备)。 有些分支甚至被部署在德州仪器的计算器上。 无论如何,索尼很快就通过软件更新3.42删除了这一金矿,尽管自制软件的大门已经打开。
荣誉奖
在介绍PS3自制软件领域的大奖之前,让我先向大家介绍几种同期开发的方法:
- USB Jig:另一种U盘,这次的程序是诱使游戏机进入"出厂服务模式"(Factory Service Mode),该模式仅用于由授权人员对游戏机进行维修。 Jig中嵌入的程序复制了索尼提供给工程师的程序。 服务模式的主要优点是可以将游戏机降级为与PSJailbreak兼容的版本。 有效载荷还可以以PSP的自制程序的形式提供。 索尼的应对措施是为服务模式打补丁,使其更难恢复到"正常"模式或更改固件,从而阻止用户使用服务模式。
- 光盘模拟器(ODE):不同公司(Cobra、E3等)推出的一系列硬件产品。 这些产品不是篡改游戏机的固件,而是篡改蓝光的SATA/PATA接口。 ODE是位于主板和蓝光驱动器之间的电路板,它充当中间人的角色,欺骗游戏机,让它以为里面装的是一个有效的光盘游戏,其实它装载的是从外部USB驱动器上下载的光盘镜像。 在PS3的黑客历史中,有很长一段"不可破解期",新游戏机没有可用的软件漏洞。 因此,ODE以高昂的价格填补了这一空白。
- 固件降级器:由于索尼不断通过更多的软件更新来缓解漏洞,用户除了降级到可利用的固件外别无选择。 因此,出现了像E3这样的公司,他们提供的专业设备可以"强行"覆盖游戏机系统。 即直接烧录NAND或NOR芯片。 由于显而易见的原因,与基于USB的方法相比,这种方法需要更多的技巧和耐心。
- 隔离泄漏(Isolated leaks):这是用于研究目的的漏洞,而不是用户能看到的"功能"(但对于进一步的开发也是必要的)。 总之,
lv2ldr会解析撤销数据(用于将受损证书列入黑名单),到目前为止还顺利吗? 好吧,我们发现这个过程存在很多漏洞。 首先,由于某些无法解释的原因,撤销数据在用户区是可写的。 其次,解析器没有对获取的数据进行边界检查(又来了)。 因此,黑客设法制作了可产生缓冲区溢出的自定义撤销数据,最终使他们能够在SPU的隔离模式下运行任意代码。 这样,黑客就可以访问机密数据(即密钥),而这些数据应该是受到保护,不受系统其他部分影响的。
加密技术的陨落
就像PSP的传奇一样,最初的漏洞需要耗费大量精力,而且很容易被索尼打上补丁,从而导致了一场不利的猫捉老鼠游戏。 然而,与PSP的情况一样,迟早会有发现打破该系统的基本安全:信任链。
2011年,George Hotz与fail0verflow团队一起公布了另一项突破,即索尼用于签署metldr执行的二进制文件的私有加密密钥。 在启动阶段加载的二进制文件使用ECDSA密钥签名。 作为一种非对称加密系统,这意味着拥有私钥的任何人(索尼,以及现在的_其他人_)都可以加密和签署二进制文件,因此,在metldr看来,这些二进制文件是"真实的"。 由于metldr是加载lv1(管理程序)之前的第三个启动阶段,这意味着黑客可以定制或开发他们自己的管理程序、内核及其下的任何东西。 此外,市场上的每台PlayStation 3都会认为定制的二进制文件是真实的。 总而言之,这是一个完全通过软件完成的潘多拉式漏洞。
这个密钥的发现本应在计算上是不可行的,但由于索尼在实现ECDSA算法时出现了被认为是"失误"的地方,它才得以实现。 长话短说,ECDSA算法的数学公式使用了一个随机值,而索尼在分发的所有更新文件中从未改变过这个随机值,这就把这个数字变成了一个常数,从而使其他变量的求解变得更加容易,这就是最终发生的事情。
下文将介绍这一发现的影响。
定制固件(CFW)时代
破解metldr意味着每个人都能为PS3创建"官方"系统,这导致大量GameOS"版本"涌现,不同社区制作了各种定制版本。 这些系统是对索尼官方固件文件(索尼以更新形式发布)的修改,并使用索尼泄露的密钥重新打包,因此可以在任何地方安装。 其结果被称为定制固件(CFW),并成为黑客入侵游戏机的事实方法,直到索尼采取强硬措施。

打开"VSH菜单 "的我的CFW。 这个变体(名为"Rebug")还能让我把游戏机变成调试站(注意右下角的IP地址,你需要在调试器上输入它才能连接到运行中的进程),并摆弄我自己的自制软件。
在此期间,网络上出现了许多名称各异的CFW(如"Rebug"、"Ferrox"等),其中包含一些自定义功能,如:
- 禁止对任何已安装或将要安装的模块进行签名验证。
- 使用管理程序(lv1)或内核(lv2)对任何内存地址进行读写(经典的_"偷窥"和"戳"(peek and poke)_)。
- 激活隐藏调试功能,安装打包为"pkg"文件的模块。 在CFW环境中运行时,这些文件无需使用索尼的密钥签名。
- 将光盘镜像挂载为虚拟蓝光光盘。
- 恢复OtherOS功能,甚至通过移除Hypervisor施加的限制来增强OtherOS。 其结果被称为OtherOS++。
- 写入Syscon的EEPROM数据库,以便安装所选择的任何系统版本。 这也被称为_QA Toggling_。
- 改变XMB的风格(如删除癫痫警告、允许在游戏中截图等)。
还有我最喜欢的一种:带来testkit的调试功能,让任何零售游戏机都能成为调试站。 这可以通过安装具有调试功能的CFW来实现,也可以通过改变闪存中控制台特定数据,将零售游戏机(称为"CEX")转换为调试模式(称为"DEX")的 CFW 来实现。
索尼的强烈回应
与PSP发明CFW之后发生的事件类似,索尼也通过两次安全更新进行了报复:
在软件方面,索尼发布了两个系统更新,增强了安全系统:
- 在
3.56版中,二进制文件使用了新的加密密钥签名,以抵御之前的ECSDA发现,因此,CFW制作者无法定制新的二进制文件(因为他们没有私有密钥来重新加密它们)。 此外,"系统更新程序 "的新修订版也已发布,这就在系统更新文件(PS3UPDAT.PUP)中执行了新的证书,这意味着即使黑客设法打包了新的CFW,也只有系统版本为3.55或更低的游戏机才能安装。 - 后来,
3.60版系统更新改造了启动过程,取消了metldr,让lv0代替引导加载器(lv1ldr、lv2ldr、appldr和isoldr)。 总而言之,这意味着黑客如果不先破解lv0(找到它的私钥),就无法修改新的系统文件。- 这最终发生在2012年底,一个名为"三个火枪手"的团队公布了lv0密钥,这为使用
3.55以前的系统版本制作新的CFW铺平了道路。 不过,由于上述更新程序的改动,只有系统版本为3.55或更低的用户(包括任何已禁用签名检查的CFW)才能安装。
- 这最终发生在2012年底,一个名为"三个火枪手"的团队公布了lv0密钥,这为使用
在硬件方面,不仅后续的PS3型号(晚期的CECH-25xxx、CECH-3xxx和CECH-4xxx)预装了高于3.55的系统版本,而且它们还包含一个不同的bootldr/lv0ldr变体(称为lv0ldr.1),不仅能解密和加载lv0,还能获取一个名为lv0.2的新系统文件。 后者包含有关lv0的元数据,以确保lv0没有被篡改。 lv0.2使用新密钥签名(也不会被之前的ECDSA发现),从而防止黑客控制启动链。
时至今日,这些机型仍无法运行CFW,因此被昵称为_unhackables_。 不过,它们可以运行"混合固件"(HFW),我们稍后会详细讨论。
随着时间的推移,兼容CFW的游戏机越来越少。 因此,没有更新到3.55以上版本的PS3成了某种_遗物_。 与此同时,替代品的需求激增,如固件降级器(在旧机型上恢复到系统版本3.55)和ODE(在新机型上玩盗版游戏)。
自制软件的复兴
在错过安装CFW窗口的用户经历了漫长的等待期之后,2017年末,一个黑客团队发布了PS3Xploit,这是一个漏洞利用和实用程序集合,让用户无需昂贵的固件降级器(以及操作降级器的技能)就能在旧机型上安装CFW。
PS3Xploit的主要有效载荷完全通过软件复制硬件降级器的工作(修补CoreOS文件),其工作原理如下:
- 起点是基于WebKit的XMB互联网浏览器。 PS3Xploit使用JavaScript在系统用户空间(JavaScript环境之外)内执行任意代码。 要启动这个程序,用户只需打开XMB的本地网络浏览器,输入指向PS3Xploit主机的URL,然后让它开始工作。
- 内核提供的系统调用可以用来覆盖闪存中的操作系统文件。 此外,可视化Shell(XMB)及其插件还在内存中存储了使用这些调用的例程。
- 由于管理程序的"不执行"保护,PS3Xploit无法直接触发这些系统调用,从而无法在用户区加载新代码。 不过,它可以通过"借用"可视化Shell的例程来覆盖闪存。
- 因此,PS3Xploit会修改Webkit的执行堆栈,将执行重定向到可视化Shell的例程。 这种类型的技术(破坏堆栈以偏离内存中其他代码的执行)被称为面向返回编程(Return Oriented Programming,ROP),在信息安全领域非常流行。 缓解这种情况的一种方法是实施地址空间布局随机化(Address space layout randomisation,ASLR),这样就很难猜测例程(称为_小工具_)的位置,但正如你所猜测的那样,索尼的管理程序缺乏ASLR。
- 最后,这些系统调用是通过PS3Xploit的参数触发的,因此它们会用打了补丁的文件替换CoreOS文件(操作系统的第一部分,存储在闪存中)。
- 游戏机现在可以安装非官方软件更新,用户现在可以_利用这个机会_安装定制固件。 不过,它还不能降级系统版本,但一旦安装了最新的CFW,用户就可以安装进一步的实用程序来降级系统,并根据需要安装装备更好的CFW。
如你所见,这份_天赐的礼物_让定制固件再次成为关注的焦点,硬件降级器和ODE也随之过时。 另一方面,对于那些无论如何都无法安装CFW的设备(unhackables),该团队后来提供了PS3Hen,这是一个不同的漏洞利用程序包,重点是启用CFW功能的子集(包括执行自制软件的能力)。 这个软件包会将自己安装为XMB中的一个条目,用户必须在每次打开游戏机时运行它,才能重新启用自制应用程序的执行功能。
索尼的部分回应
幸运的是,索尼只采取了一小步来阻止PS3Xploit(也许是因为这一事件发生在PS3的后继机PlayStation 4上市多年之后)。 他们发布了一些系统更新,但并没有修复这个漏洞链,只是删除了Webkit中用于引导漏洞链的例程。 作为回应,黑客们发布了稍加修改的软件更新,恢复了这种入口(而且不知何故,它们不需要重新签名)。 这些定制更新被称为混合固件(HFW),在本文撰写之时,它们已成为在unhackable机子上启用自制软件的事实选项。
至此,反盗版/自制软件的传奇故事告一段落。 依我之见,我不认为索尼有兴趣在这款游戏机上投入更多精力。 因此,我不指望在这一领域再有更多什么猫捉老鼠的游戏了。