保护和黑客Xbox 360(第3部分)



在Xbox 360游戏机发布6年后的2011年,研究人员发现了一个有趣的事实-如果信号“ 0”在很短的时间内发送到中央处理器的RESET输出,则该处理器不会重置其状态(应该如此),而是改变你的行为!基于此“功能”,开发了Reset Glitch Hack(RGH),借助它可以完全破坏Xbox 360的保护,运行未签名的代码,从而为入侵系统本身和击败“牢不可破”的DG-16D5S驱动器开辟了道路

让我们仔细研究一下RGH的工作原理,开发人员如何修补漏洞以及这些漏洞如何解决!

什么是小故障攻击?

无论营销人员怎么说,该处理器都非常笨。程序员编写的所有高级代码都简化为简单命令的执行-数字运算,移动数据,有条件和无条件跳转。假定处理器始终执行这些命令而没有错误,并且结果与文档相符。

确实,编译代码
i = i + 2;
您依赖于这样一个事实,变量i的值将精确地增加2,而没有意识到否则会怎样。

小故障攻击违反了这种信心-他们的目标是确保处理器“笨拙”且行为错误。有几种“干扰”处理器的方法,例如:

  • 消耗CPU电压
  • 为CPU的参考频率提供额外的脉冲
  • “发光”辐射百分比

有一些特殊的设备可以进行此类攻击-例如,ChipWhisperer在频率和功率方面提供了广泛的攻击方式:



在Xbox 360的情况下,由于暴露在RESET线上而导致了“小故障”。处理器开始复位过程,但是由于信号持续时间很短,它没有时间完成它,并且继续工作,好像什么都没发生。但是就在这短暂的瞬间,当RESET信号处于活动状态时,其行为会改变!

小故障处理器

Xbox 360保护取决于引导程序在链中相互检查。最终,每个阶段的验证都归结为调用将散列和与“模式”进行比较的功能。那时他们施加了小故障攻击,迫使处理器忽略不匹配。调用memcmp过程后,立即向RESET行施加脉冲,迫使处理器沿着另一个分支“执行”并继续加载,即使哈希总和不正确也是如此:


在第二阶段的引导加载程序“ CB”中发现了最佳的攻击场所。后面的阶段较难攻击(且易于修复),但是在加载的第一阶段(“ 1BL”,ROM),由于程序代码的结构略有不同,因此攻击失败。

听起来很简单,但实际上,当尝试进行攻击时,发现了许多细微差别。

首先,为了成功进行毛刺攻击,必须非常准确地确定应施加RESET脉冲的时间点。如果您至少在一个微秒内犯了一个错误,发送的脉冲太短或太长,该攻击将不起作用。

幸运的是,在Xbox 360上,每个引导步骤都伴随着POST_OUT调试总线上的值更改。此外,调试输出的安排如此频繁,以至于在比较散列总和之前立即设置了新的POST值:


因此,从攻击站点关闭调试输出的位置是一个非常方便的触发器。POST_OUT是并行总线,并输出到印刷电路板上的8个测试站点,每个站点负责该值的一位。甚至有可能简化连接方案,仅使用一位并计算自系统启动以来状态变化的次数:


事实证明,由于处理器的频率很高,因此就准确性和持续时间而言,几乎不可能到达正确的时刻。曝光时间应该非常短,大​​约是处理器执行一条指令的时间。但是处理器运行得越慢,适合我们的时间间隔就越长。因此,我们采取并减慢了处理器的速度!

在常规PC上,CPU频率定义为外部“参考”频率与乘数的乘积:


因此,在Xbox 360中,参考频率的外部线路适用于处理器,并且在该频率内部乘以PLL在机顶盒的旧的“厚”版本上,可以关闭PLL机制,使处理器的速度降低128倍:


在“ Slim”版本上,无法完成PLL技巧(线路未在板上分开),并且由于我们无法影响“ Slim”因子,因此我们将降低“参考”频率!

它是由HANA芯片生成的,可以通过I2C总线进行配置:


不幸的是,不可能降低很多,“低速”最终处理器的频率开始强烈地“游动”,这降低了成功的机会。最稳定的选择是放缓3.17倍。不是128次,但至少是某种程度。

所有?不,不是全部。攻击将在第一次(特别是在Slim上)起作用的事实远非事实。如果启动失败,则前缀会重新启动并尝试再次启动。仅给出5次尝试开始,之后前缀停止并开始闪烁“死亡红色环”。因此,我们还修补了南桥(SMC)的固件,以免遭受垃圾的困扰,并重新启动前缀,直到其变为蓝色为止:


因此,我们得到了算法:

  1. 贴片SMC
  2. 减慢百分比(通过PLL或I2C)
  3. 等待POST触发
  4. 等待N微秒
  5. 发送脉冲至RESET
  6. 加快返回速度

为了提高计算的准确性,我们采用相同HANA的频率(48 MHz):


我们基于便宜的CPLD Xilinx XC2C64A获得了这样的设计:


不要忘了对RESET上的布线的长度和位置进行萨满化处理(注意照片底部的“线圈”)并向前移动,希望发射能在一分钟内完成。

但这仅在硬件方面。我们如何修补引导加载程序并填充我们的代码?

补丁加载器


正如我所提到的,二级引导加载程序“ CB”正在受到攻击。该引导加载程序使用固定密钥加密,所有控制台都使用相同的密钥,但是只能修改“ CB”,我们只能对其进行攻击。但是下一个已经用CPU密钥加密了,每个机顶盒都唯一。并修改它,你需要知道这个按键...
还是不行?

在Xbox 360的旧“粗”修订版中,CB加载器支持在控制台生产阶段使用的所谓的“零配对”模式。每个引导加载程序的标头位于偏移量0x10处,均包含一个随机配对数据集,该数据集用作解密密钥的一部分。并且,如果此数据集完全由零组成(“零配对”),则处理器密钥将被忽略,而是使用固定的零密钥!


有了这个技巧,就有可能用原始的“ CB”来组装映像,用零密钥加密下一个引导程序“ CD”(具有自己的代码),然后使用RGH运行它!


在控制台中,“ Slim”包装了这个技巧,删除了“ Zero-Pairing”模式,并将“ CB”分为两个部分。在这里,“ CB”被分为非常简单和小的“ CB_A”,并通过处理器密钥“ CB_B”进行加密:


但是,使用RC4算法进行加密(即,使用该算法对CB_B进行加密)具有一个特殊性。在基于密钥的加密过程中,将生成伪随机数据流,该伪随机数据流与源数据进行二进制“加总”(操作“异或”,“异或”)。因此,解密时会发生相同的事情,使用相同的伪随机流进行添加会将数据恢复为原始值:


但是二进制加法运算是可交换的和关联的,这意味着我们可以在不知道密钥的情况下修改加密的数据,仅用于xor '和需要补丁的加密代码!


结果,我们可以加密“ CB_A”,打补丁加密的“ CB_B”(这样它就完全不执行解密),并在其代码中放入纯文本“ CD”!


简而言之,如果将它们放在一起,则启动看起来像这样:
(XeLL是Homebrew,Linux的引导程序,并且还显示了CPU密钥)


微软反击


当然,微软试图修补所有问题。

在新的系统更新中,所有旧控制台都从“ CB_A”和“ CB_B”转移到“单独”引导,从而最终关闭了“零配对”模式。在Slim上,引导加载程序也已更新。新的引导加载程序已进行了认真的修改,以防止RGH,其中最大的重点是保护CB_A:

  • 完全删除POST中的调试输出
  • 哈希验证已重做并重复以确保可靠性
  • 在整个代码中,将sleep()设置为随机时间(取决于CPU键!!)
  • 添加了CBLDV融合检查以撤销CB_A


创新的清单让RGH没有机会。但请注意列表中的最后一项-在此之前,CB_A中没有融合检查!致命缺陷。此外,我们记得,在解码“ CB_A”时不涉及处理器密钥。这意味着容易受到RGH影响的CB_A加载程序可以在任何控制台上启动,并且不能禁止这样做。

但是,为了借助此易受攻击的“ CB_A”开始工作,您需要避开一点。如果我们不知道CPU密钥,剩下的就是修补现有的“ CB_B”。但是,如果不完全修改整个引导加载程序,而不是修改各个部分,该怎么办?因此,“写”旧的引导加载程序(我们已经知道如何打补丁)来替换新的引导加载程序?因此,他们做到了:

  1. 我们以与原始映像相同的方式加密易受攻击的CB_A
  2. 将我们的CB_B与新XOR异或,获得“差异”
  3. 我们把它放在加密的“ CB_B”上!


同样,一切都在不知道密钥的情况下,我们成功地替换了加密的内容,并且还放置了易受攻击的引导程序。主机被黑客入侵,微软对此感到惊讶。

开发人员努力工作,在下一次系统更新中……稍微更改了加密方法“ CB_B”,现在加密密钥也变得依赖于“ CB_A”的版本:


现在,当尝试“ 异或 ”并将数据推送到旧版本的易受攻击的“ CB_A”时,引导加载程序由于密钥差异而解密了垃圾。而且,新的引导加载程序无法被黑客入侵,它受到良好保护,免受恶意攻击。到目前为止,微软取得了胜利!

电晕引发问题

同时,Xbox 360的新版本Corona进入了市场,并带来了改装问题:


板上没有足够的芯片,您能找到吗?没错,HANA芯片被“隐藏”在南桥中。Mod芯片没有其他地方可以采用48 MHz的频率,以前的I2C减速命令不起作用。但是什么是16MB NAND闪存,这些年来一直用作Xbox 360系统存储,却被具有eMMC接口的4 GB芯片所取代!(确实,仅在较便宜的控制台版本中,但仍然):


但是什么也没有,一切都处理完了。我们找到了如何通过读卡器读取/写入闪存的方法:


找到了新的I2C减速命令,一个外部48 MHz晶体振荡器代替了HANA:


完成的构建脚本,增加了对4 GB NAND的支持...


但是微软继续努力。例如,在新板上,一些电阻消失了,没有这个电阻,mod芯片停止工作:


确实,这是通过使用烙铁安装跳线来解决的:


当POST_OUT音轨从板上消失时,事情变得更加严重:


但是在这里微软并不幸运,RGH所需的CPU“球”处于极端行列:


而且,当然,他们能够连接到他们。首先,最松散的,稍微钻出处理器的边缘,并通过布线将其直接焊接到球上:



然后中国人发布了一个框架,该框架带有弹簧针,恰好放在一个球上,这个问题为其他所有人解决了:


最后的边疆


在我们击败“皇冠”之后,出现了一个问题-该系统的新版本没有屈服于黑客攻击。要启动RGH,您需要知道CPU密钥,并且要找出CPU密钥,您至少需要运行RGH一次。鸡肉和鸡蛋的问题一般。

然后产生了一个想法-让我们不仅使用“小故障”身份验证进行检查,而且还将跳过解密!如果能解决问题,那么我们就不需要知道密钥,只需将“ CB_B”清楚地说明即可。这个想法构成了Double Glitch Hack(DGX)的基础:


该芯片两次“缓冲”百分比,第一个脉冲跳过引导加载程序的解密阶段,第二个脉冲跳过身份验证。由于至少需要成功启动一次,所以它的工作不稳定得多-然后我们获得了CPU密钥并像以前一样进行。

DGX无关紧要,在3个月后,中国人发布了“ DGX RIP”,该图像可以在任何机顶盒上运行,可以与标准RGH一起使用,并且当然开始更加稳定:


这些映像包含Xbox 360生产中使用的CB_A引导加载程序的特殊版本,实际上,它是旧的“零配对”模式的完全相似。该“ CB_A_mfg”使用固定的空密钥来解密“ CB_B”,而不是处理器密钥:


微软在这里。在此“ CB_A”的“服务”版本中,也没有融合检查,因此无法禁止它。足以根据Xbox 360的修订版本记录图像,焊接芯片-一切正常。


温彻斯特!


RGH仅在代号为Winchester的控制台的新版本中完全修复。第一次将CPU和GPU处理器结合在一个芯片中,该板就尽可能地简化了:


POST_OUT曲目不仅被删除。即使您焊接到处理器下的平台:



即使将处理器焊接到开发人员专用版本的板XDK上,这些轨道仍然存在:


在POST_OUT上,控制台启动时仅可见一个脉冲。总线锁定:


而且,它仅在生产阶段被阻止。如果您从尚未烧毁保险丝的工厂购买“干净”处理器,则可以使用POST_OUT!


但是RGH不再起作用。无论您尝试如何发出RESET脉冲,处理器都会正确执行一个重置,或者由于持续时间太短而忽略您的信号。显然,一个特殊的逻辑模块被添加到处理器中,过滤RESET线,从而最终解决了硬件错误。

投稿后


事实证明,Xbox 360的最新版本无法破解吗?

是的,没有。目前,只有一种已知的方法可以在Winchester修订版上运行经过修改的系统。

软件开发套件(XDK)包含用于签名已编译代码的各种私钥。事实证明,其中杂乱无章的签名密钥“ shadowboot”是XDK系统的第三级引导程序。借助它,您可以使用经过修改的固件收集合法的签名映像。只要在普通的“商店”控制台上工作,他就不会。我们需要一个带有XDK版本控制台的处理器,或者一个带有未熔断保险丝的“干净” CPU(您可以在Aliexpress上看到它):


只有这样,您才有机会在自定义外壳程序的“系统信息”中考虑这样的题词:


就这样!和往常一样,我准备在评论中回答您的问题:)

Xbox 360保护和黑客,第1部分
Xbox 360保护和黑客,第2部分
Xbox 360保护和黑客,第3部分

All Articles