作者cassine (Savannah)
看板Modchip
标题[PS3 ] C3 研讨会
时间Thu Dec 30 13:16:06 2010
Part 1:
https://www.youtube.com/watch?v=HEFMAP0mTvY
◆引言
426无断转载生儿子没屁眼!
Wii 已经上市三年,期间总共有九次韧体更新。总销售数量有七千三百万台,
总共有三千万台的开机程式(bootloader)有漏洞。使用HBC 玩家的数量大概有
一百万人。
老任的软体非常脆弱,就算不破解,也有可能一不小心就当机或是变砖。这也
是Wii 这麽快就被破解的原因之一。老任在这段期间尝试防堵破解,但都徒劳
无功。
426无断转载生儿子没屁眼!
XBOX360 从发售到今天只有两次让玩家有执行自制程式的机会,一次是《金刚
》游戏的漏洞,另一次是除错埠(JTAG)的破解。
PS3 因为厚机一开始支援安装 Linux,因此$QNY跟破解阵营有了一段关系不错
的蜜月期。但不能执行3D加速的限制最後还是让双方撕破脸,2007年底被发现
OtherOS 的RSX 漏洞,$QNY选择直接阉掉OtherOS 後双方正式宣战。$QNY声称
薄机不再支援Linux 是为了降低主机的成本,但时至今日我们知道$QNY根本就
在放狗屁,因为 Linux明明就可以在薄机上面正常执行。
我们可以证明$QNY的措施是没有意义的,他们根本不能阻止大家在主机上面执
行Linux 。
(秀投影片展示各个主机的破解难易度,颜色越深越难破解,破解的下场全都
是:盗版, PS3被破解後会不会落如同样的下场呢?)
◆PS3 主机架构。
$QNY看上IBM 的Cell处理器後决定采用作为 PS3的主机 CPU,实际上就是一颗
64位元的PowerPC 处理器而已。$QNY跟 IBM设计了一个孤立的 SPU架构,绝大
部分对於 CPU资源的存取都必须透过 SPU,使用者能够直接存取的部分非常有
限。由此可见$QNY在我们看不见的部分藏了不少东西。
主机的架构有三层:
426无断转载生儿子没屁眼!
Lv1/HyperVisor ←→ SPU
Lv2/Game OS ←→ SPU
Problem State/Games 只有第一层跟第二层有办法直接和 SPU沟通。
(PS3开机程序)
◆各家主机的安全架构
1.都有一次写入的BootROM
2.Wii 跟 360使用了一次写入的记忆体储存金钥
3.都使用公私钥加密签证机制
4.除了 Wii以外都用了连锁认证机制,Wii 只在安装韧体时使用,所以很容易
破解
426无断转载生儿子没屁眼!
5.除了XBOX以外,其他主机都每台都有独特的金钥
6.除了Wii 以外,其他主机都有执行档签证机制
7.Wii 跟 PS3有独立的安全辅助晶片
8.只有 Wii使用了储存媒介签证加密,游戏光碟是加密的
9.Wii 跟 PS3有将主机内记忆体利用主机独特金钥加密
10.Wii 还有自身签证的安全架构
Part 2:
https://www.youtube.com/watch?v=qFuTCEtK6l8
11. 360使用了主机记忆体加密的机制
12. 360跟 PS3都有Lv1 的防护机制HyperVisor
13. PS3有使者、核心模式,算是一种砂盒防护机制,Wii 跟 360都是在核心模
式执行程式
14.只有 360有防止降级的电子保险丝机制(eFUSE ),保险丝的状态是加密、
解密的资讯之一,因此就算用晶片烧录器强行写入低版本的韧体也无法正常
解密执行。保险丝的位置在 CPU里面,理论上无法还原。
但很显然的, PS3的主机内记忆体加密机制已经可以绕过了,所以暂时不会对
破解造成太大的妨碍。同时由於硬碟的内容都是用同一把金钥加密,而使用者
可以上传一些测试文件到硬碟,然後将硬碟拆出,分析变动的地方,以此资讯
作为样本进行暴力破解。
426无断转载生儿子没屁眼!
◆OtherOS
(演讲者很靠北地送了个奖盃给$QNY:拔掉OtherOS 就可以引起大家的注意)
我们知道薄机拿掉OtherOS 绝对不是因为$QNY技术有问题,也可以排除行销方
面的问题,因为不会有人因为主机可以执行 Linux而拒绝购买。拿掉这个功能
只会激怒大家,让大家群起而攻之。结果George Hotz (Geohot)开了第一枪,
把错误的记忆限制资讯写入记忆体,然後骗过主机取得更大的记忆体权限。
◆Geohot漏洞
426无断转载生儿子没屁眼!
Lv1/HyperVisor也是存在主机记忆体中,因此执行OtherOS 时, Linux跟HV其
实都是使用同一块主记忆体,只是HV有分配权限,当Linux 核心需要更多记忆
体时,会向HV要求,然後HV给出,并在HTAB上纪录,让Linux 可以存取; Li-
nux要释放记忆体时,也是跟HV通知要释放,然後HV清除在HTAB上的纪录。一
切都如此美好~。
426无断转载生儿子没屁眼!
但Geohot耍了一些小手段,利用外部讯号欺骗HV刚刚宣告的记忆体又释出了,
但实际上核心还是有存取权限。然後Geohot继续用这种方式欺骗HV,尽量将主
机的记忆体占满,运气好的话刚好某些记忆体的分页表就会跑进刚刚欺骗的范
围内,结果Linux 核心就可以读到原本不该读的资料,甚至也可以把HV整个读
进来。
426无断转载生儿子没屁眼!
有HV的资料就可以侵入HV模式。
($QNY得到第二座的奖盃:你们家的HyperVisor摊在阳光下了!)
虽然听起来很厉害,理论上可以这样搞,但没有人知道把HV读出来以後要做什
麽。结果这一枪反而激怒$QNY,发火把所有厚机的OtherOS 功能拔掉了,最後
也衍生出违反《欧盟消费者保护法》的争议。
麻烦的是通常只有骇客们会使用OtherOS 功能,一般只玩游戏的玩家根本不会
理会那个功能的有无,於是$QNY这一搞惹毛了所有乖乖使用OtherOS 的骇客,
他们决定要把$QNY从他们身上平白夺走的功能抢回来。
($QNY得到第三座奖盃:你惹到不该惹的人了!)
$QNY显然太过大意,之後从内部流出了PSJB,一下子也让大家复制出来。PSJB
如大家所知,是一个让人在Lv2/GameOS里面执行没签证程式的手段。
◆PSJB漏洞
426无断转载生儿子没屁眼!
$QNY韧体系统在辨识 USB装置时的程式有漏洞。所有的 USB装置都有一个描述
子(discriptor),里面存有一个字串,描述这个装置的名称,例如随身碟的描
述子是磁碟标签这样。主机读取描述子时,首先会读取一开始的 8个byte,接
着读取描述子的长度。
利用模拟方式,一口气在 USB插槽上连接六个装置,主机读到第四个装置的描
述子时,第四个装置回答主机说描述子长度为 0,於是主机就没有宣告任何记
忆体空间来储存描述子字串。主机程式没考虑到这种状况,於是乎主机会尝试
去处理不存在的字串,结果不小心就处理到读第二个装置描述子时存下来的东
西,而这个字串恰巧能够骗过主机,於是主机能够成功将记忆体初始化。
读第二个装置存下的字串结尾是04 21 B4 2F ,结果让主机误认说这个装置的
描述子长度有0x2FB4,一读暂存器自然就爆掉了。主机继续读取第三个装置的
组态描述子(configuration discriptor),结果让第三个装置的资讯盖掉程式
的指标,指向第一个装置储存酬载的地方,於是主机就执行到我们要让他执行
的程式了。
426无断转载生儿子没屁眼!
($QNY得到第四座奖盃:得到在Lv2 里面执行程式的权限了!)
进一步分析之後我们发现HV根本不知道PSJB到底搞了什麽鬼,HV也不会去阻止
使用者利用PSJB执行未签证的程式。所以这个HV到底在干麽?走到这里,我们
并没有去破解Lv1/HV,也没去破解SPE ,所以得出的结论就是……。
($QNY得到第五座奖盃:盗版参上!!)
天底下哪有这种只攻破Lv2 就可以执行盗版的好康事?有的原因就是因为$QNY
的防御机制根本起不了作用。所以我们可以将游戏备份到硬碟里面,然後将光
碟机的位址换成硬碟的位址,因为Lv1 不会去检查游戏的完整性。SPE 也不理
。所以你要把游戏备份到哪里都无所谓。
到此,已经可以绕过HV了。
426无断转载生儿子没屁眼!
$QNY发觉事情大条之後,开始尝试阻止,於是发布新版韧体3.42、3.50,好吧
!山不转路转,就降级。
◆降级
进入主机的方式其实不难,因为只是个简单的对称性加密HMAC而已,拿到金钥
後就不是问题了。进入F/S Mode之後可以执行存在USB 随身碟上而且签证过的
程式,偏偏$QNY内控有问题,於是又流出能够略过版本查验的韧体更新程式。
所以说……。
426无断转载生儿子没屁眼!
(第六座奖盃:越来越多的盗版)
◆AsbestOS
由於GameOS跟OtherOS 其实差异不大,只差在硬体存取权限而已。AsbestOS把
GameOS赶出了记忆体,换成自己,於是我们就能在薄机上执行Linux 的原因就
来这里。我们可以将 Linux设成远端模式,然後透过电脑下指令来执行程式。
我们并未满足现状,要用 USB破解工具才能执行自制程式很不方便,我们希望
找出一个一劳永逸的方法,让主机一开机就进入 Linux。为此我们就需要分析
执行档的结构。
◆执行档SELF
有蛮复杂的加密方式,因此不是那麽容易就能破解的。
https://www.youtube.com/watch?v=84WI-jSgNMQ
Part 3:
◆预言
$QNY的算盘是:没人看得到我们的程式码
……除非能攻破PPE
能在GameOS里面把程式解密!?这样就不用破解安全辅助处理器了。
那加密金钥咧?
426无断转载生儿子没屁眼!
於是我们可以让主机自动帮我们把程式解码,而完全不用管到底是怎麽办到的
。所以……
(第七座奖盃:障眼法骗不了人的!)
因此 PS3的安全辅助处理器没用了
426无断转载生儿子没屁眼!
◆连锁认证
这个东西是个两面刃,如果不被攻破,那就牢不可破,但万一被攻破,就以透
过相互的认证机制全部拿下。只更新一部分程式是没用的,因为还是可以透过
认证换回旧版的,所以要防就要整个砍掉重练。
◆破解开机程式
426无断转载生儿子没屁眼!
我们能够存取的范围不多,但反正要执行程式,系统都会先把程式复制到执行
程式的区域,所以还是利用缓冲区溢位的老招,写入大量的资料,把程式一口
气盖进去lv2ldr的位置。运起好的话就能把整个开机程式连根拔起。於是……
(第八座奖盃:得到AES 金钥啦!)
简单说,$QNY的机制是「一步错,满盘输」,只要有一小个在孤立载入器的漏
洞被发现,整个连锁认证的机制就毁了,而且这个漏洞会波及所有已经贩售的
主机。我们可以藉此拦截开机程序,换成执行我们的程式,这样开机时就可以
直接进入 Linux了。
426无断转载生儿子没屁眼!
(第九座奖盃:连锁认证机制破灭)
虽然说是「破灭」,但并非「神话」……
◆执行档
签证的问题怎麽办?
要描述椭圆曲线有五个参数 p a b G N
Q = 公钥
e = 资料的杂凑值
426无断转载生儿子没屁眼!
R,S = 签证指纹
当然最直接的就是直接找出用来加密的私钥,但理论上是有困难的。这牵涉到
椭圆曲线的加密方式,相当复杂,而且牢不可破。第一个方程式没人解得出来
,第二条比较简单,但是有个乱数 m在里面,也是有点麻烦。
R = (mG)_x ... (1)
S = (e + kR)/m ... (2)
426无断转载生儿子没屁眼!
照理来说, m应该是个乱数,就像我们丢骰子一样。但是,我也不知道为什麽
$QNY的骰子每次都会丢出相同的点数。因此当某两个签证指纹的 m相同时,就
代表 R也相同,於是可以透过简单的加减乘除推出 m,然後是 k。
R = (mG)_x R = (mG)_x
S1 = (e1 + kR)/m S2 = (e2 + kR)/m
所以把S1减去S2,可以得到
426无断转载生儿子没屁眼!
S1 - S2 = (e1 - e2)/m → m = (e1 - e2)/(S1 - S2)
k = (mS1 - e1)/R = (e1S2 - e2S1) / [R(S1 - S2)]
◆Elliptic Curve Digital Signature Algorithm, ECDSA 椭圆曲线数位签证演
算法
我们用了 ECDSA演算法来保护我们的 HBC不被攻击,程式码大概是长这样。你
看这里,我们也用了乱数产生器。照理来说乱数产生器应该是有点复杂的,但
你知道$QNY的乱数产生器长什麽样吗?
int getRandomNumber()
{
return 4; //随便丢骰子得到的结果
//骰子的结果当然是随机的啦啾咪~
}
426无断转载生儿子没屁眼!
於是可以得到 k, k就是私钥,有了私钥我们就可以高高兴兴的把程式拿来签
证罗~!
(第十座奖盃:私钥也到手啦~)
这个私钥是$QNY在 PS3平台上最最重要的一样资讯,有了这个以後,什麽 Lv2
、 Lv1防御都没用,那是防人翻墙侵入的,我手上有大门的钥匙又何必翻墙?
更正一下,暂时还没拿到Lv1 的金钥 ,这部份还需要一些时间。
好了,所以公私钥的加密机制也崩坏了。只剩下最後一关:BootROM ,但是这
个东西实在谈不上是什麽高科技的玩意儿,我们没花多少时间就让他发生溢位
错误了。
426无断转载生儿子没屁眼!
(第十一座奖盃:溢位错误的白金奖盃)
所以,谢谢啦,$QNY!
http://fail0verflow.com
◆提问时间
426无断转载生儿子没屁眼!
原本我们想在这里直接展示我们的成果的,但是不知道为何暂时没办法正常运
作,两年前也是一样,不知道为何在关键时刻东西都会坏掉,我们会想办法修
好,然後明天,明天我们会另外安排个时间来作展示。(Lightning Talk)
我们准备了两只麦克风,请到两边排队,如果你不好意思在公开提问题的话,
你也可以私下到讲台前来。
Q1:你们知道PSJB的来源吗?
426无断转载生儿子没屁眼!
A1:一无所知,但可以猜。只是有几分证据只能讲几分话。
Q1:所以是从$QNY内部流出的?
A1:呵呵呵……。总之现在有很多晶片都可以模拟PSJB。但我们的破解方式不
一样,而且目前的战场有点脏,所以我们需要一些时间清理战场,大概下
个月左右我们就可以把我们的成果整理成破解工具放出来。
Q2:既然已经有私钥了,为何不能弄出个蓝光软体的酬载程式?
A2:我们目前还没有拿到用来签证游戏的私钥,而且那跟appldr有关,而且
$QNY已经换了好几次私钥……。
426无断转载生儿子没屁眼!
更正一下,我搞错了,是的,我们目前已经可以把游戏签证,但那不是我
们的目的。
还有问题吗?没有的话,离场的出口在右边,离开时请带走所有的垃圾,谢谢
!
426无断转载生儿子没屁眼!
※ 编辑: cassine 来自: 140.112.18.73 (12/30 13:52)
1F:→ p587868:什麽 施工中吗... 12/30 13:21
2F:→ SGBA:waiting 12/30 13:25
3F:推 MAGICXX:C4比较好用 12/30 13:28
4F:推 myriad:C4 (递 12/30 13:39
******
刚刚打到一半断线, 120大学的网路就是这样ˋ(′_‵||)ˊ
所以这篇是断线後载入暂存档的,有些人的推文可能因此消失。另外这篇要转录
的话请先知会本人取得许可。
5F:推 JupIte:感谢翻译! 12/30 15:52
6F:推 p587868:等等..上一次编辑的网址是112耶..... 12/30 16:51
7F:→ p587868:不是中间隔了2小时就到台中了吧.... 12/30 16:51
8F:推 FightYourMom:PS3 全面破解 热烈上映中! 12/30 17:11
9F:推 f1234518456:乱数产生器那个我笑了XDDDDDD 12/30 17:41
10F:推 ipure:意思是每次乱数都回传4吗? 12/30 18:45
11F:推 coolan:推翻译 12/30 18:48
12F:推 ninjaxin:可以借转到个人版吗 12/30 19:09
13F:→ ninjaxin:谢谢 12/30 19:09
14F:推 hitsukix:看不懂 不过翻的很有趣XD 12/30 19:54
15F:推 chiyosuke:有点看不懂,不过未来金手指有望出吗?听说日本已有? 12/30 19:58
16F:推 ma19761112:看不懂 不过觉得很酷 12/30 20:12
17F:推 johnny3:惹到不该惹的人了 只能说自作孽 12/30 20:18
18F:推 doreamon909:为什麽大家都只想要在PS3上用Linux 没想用windows呢? 12/30 22:09
19F:→ psplay:windows太肥了 LINUX可依使用者需求来修改功能 12/30 22:19
20F:推 coolcliff01:用Linux跑QEMU之类的虚拟机 接者应该就可灌Windows了 12/30 22:27
21F:→ coolcliff01:理论上可行 不过应该只能拿来供着 效能一定惨不忍睹 12/30 22:28
22F:推 cheweichang:PS3 要跌价了 12/30 22:33
23F:→ cassine:简单说,就是微软没出给PS3跑的Linux版本 12/30 22:41
24F:推 damyr:那个乱数产生器的意思是不管骰子怎麽丢都会回传4的结果吗??? 12/30 23:18
25F:→ cassine:差不多是那个意思 12/30 23:49
26F:推 toro1144:用力的推!!! 这篇太棒了!! 12/30 23:57
27F:推 toro1144:PS3怎麽会跌价? $ONY会愿意降价格吗? 12/31 00:07
28F:推 damyr:忘了推,感谢翻译 12/31 00:21
29F:→ lamdacore:该小组的原意是让ps3执行linux,并非让它执行不正copy的 12/31 00:21
30F:→ lamdacore:游戏 12/31 00:21
31F:推 damyr:ps3应该会因为畅销涨价才对 12/31 00:22
32F:推 darklucker:426无断转载生儿子没屁眼! 12/31 01:13
33F:推 luhc:谢谢 原PO 翻译文的分享! ^^ 12/31 02:08
34F:推 tonyni:doreamon909: 没看到 PS3 用的是 PPC 处理器吗? 12/31 11:05
35F:推 silomin:这篇太有意思啦 不愧是高手云集的会场 所以真的不要乱惹人 12/31 12:20
※ 编辑: cassine 来自: 140.120.31.133 (12/31 17:04)
36F:推 jimihsu:推 12/31 17:21
37F:推 HolyBugTw:没想到微软不用dallas chip,但是用了没见识过的eFUSE 01/01 03:13
38F:→ HolyBugTw:return 4那边我想并不是RD偷懒,而是就算依赖时间换表 01/01 03:15
39F:→ HolyBugTw:也是一样可以硬是把时间给锁死,这样的random意义不大 01/01 03:15
40F:→ HolyBugTw:USB传回descriptor的bug就有点扯,竟然出包在这种地方 01/01 03:18
41F:推 jayemshow:我也只能给推了 01/02 22:29
42F:推 djboy:推一下!! 01/03 17:49