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

图片您可能已经听说过Xbox 360游戏机,并且它正在“闪烁”。这里的“固件”是指绕过用于启动游戏和专有软件副本的内置保护机制。这里出现了问题!有什么机制,如何解决?开发人员做了什么,他们如何设法解决?实际上,该主题非常广泛且有趣,尤其是对于Xbox 360-在这里您可以找到软件漏洞,硬件缺陷和绝对神奇的魔术。有趣?进去!在第一部分中,我们将介绍管理程序,驱动器和固件...


满足主题


Xbox 360游戏机于2005年发布,此后铁的特性并未发生变化。自发布以来,它们都是相同的:

  • 3.2 GHz PowerPC CPU,/ 3核
  • 500 MHz GPU
  • 512 MB内存
  • SATA DVD-ROM
  • SATA硬盘(可选)

是的,设计随时间而改变,纳米级降低了:


但是,所有游戏在所有“版本”的主机上均能很好地工作-当现代游戏可以在2005年的设备上运行时,情况就是如此。

在发布时,有人大声疾呼说该控制台是尽可能安全地开发的-具有硬件级别保护功能的定制芯片,并且一般来说,黑客还没有看到这一点:
此框中将存在黑客社区从未见过的安全级别。

开发人员想出了什么?

首先,他们做了所有事情,以致无法获得系统程序代码在中央处理器中内置了一个32 KB的ROM,其中包含一个主加载程序(1BL)和一个在其中执行了它的64 KB SRAM。从CPU芯片获取ROM的内容非常非常困难:


其次,将特殊的保险丝塞入同一处理器-烧过的(字面上是高压)跳线,一种曾经是可编程的存储器。保险丝包括:

  • JTAG接口锁定位
  • 确定前缀用途的位(零售/ devkit / testkit)
  • 唯一的128位处理器密钥
  • 锁定值(LDV)计数器可禁用降级


是的,融合的数量是有限的。如果您设法连续更新控制台80次,则CFLDV计数器将结束,并且...我不知道,我没有尝试这样做。可能前缀将不再更新。

第三,开发商实行了信任链。为了验证引导加载程序的真实性,使用了现代(当时)SHA-1和RSA-2048算法的组合,即使您从控制台中获得了所有密钥并能够重建系统,也排除了启动自己的代码或对引导加载程序进行未经授权的修改的可能性。 。


第四,开发人员决定进一步遵循“不信任任何人”的原则,并将一个用于保护RAM的特殊硬件模块安装到同一个不幸的CPU中!在它的帮助下,所有带有程序代码的区域都被加密,并且对最重要的区域(管理程序)打开了完整性监控!


这样,开发人员可以通过可访问RAM的外部设备修改RAM中的系统程序代码,从而抵御DMA攻击。

最后,系统管理程序处理权限到内存区域的区分当然,只有他才能使页面可执行,然后再检查数字签名,因此即使存在某些驱动程序或游戏中的漏洞,也无法下载未签名的代码或从数据区域执行某些操作(轴和游戏均以内核权限启动) 。

结果,Xbox 360操作系统受到了很好的保护,因此,DVD-ROM被选为第一个攻击媒介。

我们开始...备份!


在Xbox 360中,双层DVD被选为游戏的主要媒体。当然,这里也存在防御机制:

  • 与DVD-ROM进行的数据交换已使用唯一密钥加密
  • 在光盘的开头,有特殊的“安全部门”来确认许可
  • 磁盘上的可执行文件已经过数字签名

但是,与主要系统相比,保护DVD驱动器的注意力少得多。游戏机对DVD驱动器显示了太多的信心-正是DVD-ROM决定了光盘的许可。此外,固件已存储在外部存储器中,并且可由程序员读取:


其结果是,2006年5月14日,commodore4eva(c4eva)发布了第一款修改的固件驱动TS-H943型号:

自述文件以发布固件
— Xtreme firmware for TS-H943 Xbox 360
— Here it is, the long awaited World first Xbox 360 backup firmware modification to boot all game backups!

Features
— Boots all Xtreme Xbox 360 backups
Boots all Xtreme Xbox 1 backups
Boots all Xbox 360 originals
Boots all Xbox 1 originals on Xbox 360
Xtreme0800 extraction firmware enables drive to function natively under Windows without any hardware conversion/adaptors
Use on Xbox Live at own risk

Technical details
— Reads Xbox 360 security sector from PSN 04FB1F (Layer 0)
Reads Xbox 1 security sector from PSN 605FF (Layer 0)
Security sector must be extrated using Xtreme0800 360 firmware for Xbox360 games and Xbox 1 games
Will not boot Xbox 1 backups made with Xbox1 605b 0800 firmware (maybe in future release)

固件从DVD光盘上的固定区域读取安全扇区,并欺骗了控制台,使其认为已插入许可的光盘。

同时,发布了0800固件,旨在创建游戏副本和读取安全扇区。在计算机上检测到装有此类固件的Xbox 360驱动器,它可以完全读取游戏光盘的扇区。

使用0800固件的自述文件
Extracting Security Sector
— Ensure DVD drive has been flashed with Xtrm0800.bin firmware. Drive can now work under Windows.
Insert original game disk into drive and wait for windows to detect disk change
Run DVDinfoPro
Enter the following four custom cdb commands:

AD 00 FF 02 FD FF FE 00 08 00 01 C0
AD 00 FF 02 FD FF FE 00 08 00 03 C0
AD 00 FF 02 FD FF FE 00 08 00 05 C0
AD 00 FF 02 FD FF FE 00 08 00 07 C0

Then save hexadecimal display as bin file as SS.bin

Creating a game backup
— Ensure DVD drive has been flashed with Xtrm0800.bin firmware. Drive can now work under Windows.
Extract Isobuilder.rar
Insert original game disk into drive and wait for windows to detect disk change
Run DVDinfoPro
Enter the following custom cdb command to unlock drive: (game data visable)

FF 08 01 01

Run Isobuster
Right click on DVD and select Extract From-To
Click Length and enter number of LBAs as follows:

Xbox 1 Original Number of LBA to read 3431264 decimal
or
Xbox 360 Original Number of LBA to read 3567872 decimal
Select User Data (2048 bytes/block)
Click Start Extraction
Enter filename as game.iso and click Save
Upon read error dialogue box choose fill with blank zeros for sector and select use this selection for all errors
Copy game.iso and ss.bin to the relevent isobuilder directory (Depending on Xbox 360 or Xbox 1 game)
Run build360.bat (Xbox 360 game) or build.bat (xbox 1 game)
Ensure your burner will set the booktype of DVD+R DL to DVDRom
Burn with CloneCd and choose the image.dvd file

可以使用以下技巧部分复制另一个游戏:

  • 放入计算机DVD-ROM普通两层光盘
  • 等到它平静下来并停止旋转
  • 用回形针打开托盘,然后将驱动器从Xbox 360更改为游戏
  • 关闭托盘并制作磁盘映像!

(并非在所有DVD-ROM型号上都适用)

最重要的是,该驱动器完全由软件通过特殊的ATA命令进行闪存。该套件包括一个特殊程序,用于读取原始固件并进行修改。在原始固件中,存储了珍贵的密钥,并将该驱动器与Xbox 360绑定在一起:


密钥的丢失意味着即使授权的磁盘也无法启动,因此有人将密钥写在笔记本中,并尽可能地将其保存,这是最珍贵的知识。

一个单独的话题是关于在线游戏的恐慌。每个人都担心Microsoft会发现驱动器已被修改并远程禁用控制台。一些人甚至制作了一个硬件mod来在工厂固件和修改后的固件之间切换:


他们使用“获得许可”的原始固件进行播放,并通过连接到网络,在经过修改的Internet电缆上可耻地断开了它们的连接。顺便说一句,恐慌不是徒劳的,但是这样的mod完全是徒劳的,所有内容都被记录下来而没有连接到网络。

恰好一个月后(2006年6月15日),该固件被移植到了当时安装在Xbox 360中的另一种驱动器型号-Hitachi GDR3120L。他还具有一个包含固件的外部闪存驱动器:


此驱动器得到了更好的保护:

  • 固件以加密形式存储在ROM中
  • 固件中有完整性控制
  • 要覆盖固件,您必须进入特殊的“模式B”

如果研究人员自己管理前两个问题,那么所有年轻的闪光者都将重复“模式B”的翻译壮举

有人建议在Slax Linux上使用特殊的启动磁盘来执行此操作,或者在启动时通过短路来执行此操作。必须使驱动器电源连接器的触点0和9短路。例如,用别针!


在这两种情况下,在遭受此类滥用后,该驱动器在Windows中均被定义为常规DVD驱动器,然后在其中对其进行拾取,强奸缝合。


在第一个发行版之后,自定义固件已完成,稳定性得到了改善,增加了对新游戏的支持,总体而言,一切正常。

微软答案


关于“牢不可破”控制台被黑的指控的开发人员,回答很简单:
该系统未被黑客入侵,我们只是学习了如何启动游戏副本,我们正在研究它
原始答案
The core security system has not been broken. However, it is reported that the authentication protocol between the optical disc drive and the console may be attacked, which if accurate could allow people to play illegally copied games. Our security team is aware of this and we are investigating potential solutions to this issue. The Xbox 360 platform was designed to be updated, and we are prepared to respond appropriately should any unauthorized activity be identified.

真正做了什么来纠正这种情况:

  • 三星TS-H943开始附带ms28固件,但没有通过众所周知的ATA命令进入固件模式
  • Hitachi GDR3120L带有固件0078和0079,即使在模式B下也不闪烁
  • 出现新的BenQ-LiteOn VAD6038驱动器
  • Xbox Live上出现了第一个尖锐的海盗“禁令”,海盗被禁止永远在线玩

如果一切都是明确的,并且与该禁令是无法弥补的(当时),那么研究人员很快就会找到解决办法:

  • 对于日立,发现通过特殊的音频光盘解锁固件模式

  • 三星ms28和明基VAD6038通过廉价的SATA VIA 6421控制器完美进入固件模式


让我们离开战场获取驱动器固件一段时间,这不是一个非常有趣的时期,研究人员尝试制作“隐形”固件,以免被Xbox Live禁止,适应带有新“波动”的新游戏-系统更新版本并将结果移植到所有内容中。种类繁多的固件和驱动器。尽管如此,一切都缝合了,“备份”成功启动,Xbox 360在人们中越来越受欢迎...

断轴!


正如您从故事的第一部分回忆起,Xbox 360系统具有一个管理程序,可以控制所有内容。所以在这里。在该系统的一个版本中,突然出现了漏洞!我无法确定研究人员如何确切地收到管理程序代码样本。但是事实是-在2006年底,研究人员在Xbox 360上启动了未签名的代码,并在2007年初由开发人员修复了该漏洞:
Timeline:
Oct 31, 2006 — release of 4532 kernel, which is the first version containing the bug
Nov 16, 2006 — proof of concept completed; unsigned code running in hypervisor context
Nov 30, 2006 — release of 4548 kernel, bug still not fixed
Dec 15, 2006 — first attempt to contact vendor to report bug
Dec 30, 2006 — public demonstration
Jan 03, 2007 — vendor contact established, full details disclosed
Jan 09, 2007 — vendor releases patch
Feb 28, 2007 — full public release

系统管理程序具有一项功能-与其余代码不同,它不是在虚拟地址空间中执行的,而是在物理(实模式)中执行的。没有使用广播,直接拨打了电话(地址格式为0x00000000'xxxxxx)。这是为了提高速度,还是为了简化……这是Xbox 360地址空间的一项功能,

对内存的访问方式由其物理地址确定。即,地址的最高有效位具有官方目的。例如,地址0x00000 0 00'0000201C意味着直接访问地址0x201C,而0x00000 1 00'0000201C意味着您在读取相同的物理地址0x201C时需要即时解密和验证完整性。


因此,要在启用加密和保护的情况下执行,您需要引用0x00000 1 00'xxxxxxxx之类的地址。只有这样,硬件模块才包含保护机制。因此,在硬件级别上,所需的位会自动添加(特殊的HRMOR寄存器负责此操作-Hypervisor实模式偏移寄存器)!

再次-虚拟机管理程序访问诸如0x00000 0 00'xxxxxxxx之类的地址后,MMU会自动将此地址更改为0x00000 1 00'xxxxxxxx,包括加密和保护!因此,任何从物理内存“直接”执行代码而没有保护和加密的尝试注定会失败吗?

让我们看一下管理程序版本4532的易受攻击的代码:
// %r0 –
13D8: cmplwi %r0, 0x61 // ID
13DC: bge illegal_syscall // 0x61, ,
...
13F0: rldicr %r1, %r0, 2, 61 // 4
13F4: lwz %r4, syscall_table(%r1) //
13F8: mtlr %r4 // lr
...
1414: blrl //

看到地鼠吗?但是他是! Cmplwi指令适用于32位值,但rldicr-适用于64位!也就是说,我们可以将值0x20000000'0000002A作为系统调用号传递,它将通过测试(因为低32位部分小于0x61),因此,处理程序的地址将从地址0x80000000'000010EC中获取,而不是地址0x10EC!

然后,正如他们所说,请注意您的双手。地址的最高有效位分别不等于零,未添加 HRMOR !而且由于实际地址空间是32位,因此我们设置的63位将被忽略。我们只需提交错误的系统调用号,即可将虚拟机管理程序重定向至未加密和不安全的内存!


但是请耐心等待,以便有跳转的地方,我们需要能够将数据写入物理内存。如何实现呢?

这是第二个因素起作用的地方-Xbox 360上的GPU很聪明,甚至聪明了。他支持特殊的着色器指令MemExport,用于将几何数​​据上传到物理内存。也就是说,您可以编译着色器,在GPU上执行它,从而在任何地方记录任何东西!最重要的是,着色器未签名,如果您以任何方式修改游戏光盘,都可以轻松替换着色器代码。


仍然有一个问题。如何替换游戏光盘上的着色器代码?在这里,破解控制台的DVD驱动器非常有用。我们编写了一个着色器,将其替换为游戏图像,将其记录在光盘上并启动了Linux!

是的,要运行它,我每次都必须启动游戏,等待漏洞利用,然后将启动盘放入Linux,但这至少是一件好事!

如前所述,Microsoft发布了系统更新,其中修复了系统管理程序的漏洞。但是,如果返回脆弱的内核该怎么办?

降级!


通常,Xbox 360的体系结构是为了防止降级而设置的保护机制。在处理器的硬件保险丝中,每次在更新过程中都被烧掉(锁定值,LDV增加),如果该LDV在保险丝和系统中不匹配,则控制台根本无法启动。

考虑Xbox 360引导程序的结构,即“引导程序节”:


可以看出,映像中有几组引导程序,每组对应于一些LDV。在该示例中,这些是1888年为LDV 0,16767为LDV 3和16756为LDV 2

所以,本身被记录在区段6BL / 7BL和简单地将系统的所有更新“施加”贴剂到基“核心” 5BL 1888。但是要根据保险丝和引导加载程序接头中规定的LDV选择要应用的补丁集!仅在5BL处,就可以使用一个大的BUT修改标头-对照记录在其中的HMAC-SHA-1哈希和检查标头。并由普通的memcmp检查

如果您仍然不了解事情的发展趋势,那么您可以在此处进行时间攻击(计时攻击)。标准memcmp函数在第一次出现差异后立即完成比较。因此,通过更改哈希的第一个字节并检测memcmp的运行时,可以选择所需的值(验证时间将随之增加)。进一步,您可以选择哈希和的所有字节!

为了进行测量,使用了POST_OUT调试总线。它就像PC一样,在加载不同时间显示单字节值,您可以通过它判断处理器当前在何处运行以及发生了什么错误。实际上,这些是主板上的8个点,每个点负责特定的价值点:


焊接到这些点后,您可以测量每个下载阶段的执行时间,并查看是否发生了错误。

哈希选择的整个过程大约需要一个小时:


结果,我们得到一个镜像,其中为核心内核安装了当前的LDV,因此未应用任何补丁,并且启动了最旧版本的1888系统!从已经可以升级到易受攻击的版本4532的位置:



当然,Microsoft通过更新第一个更新的引导加载程序(2BL,“ CB”)并刻录CBLDV保险丝来修复此漏洞,这使得再次降级成为不可能。现在,它使用了安全版本而不是memcmp,并且无论输入值如何都具有相同的运行时。

JTAG哈克!


但是在这里,研究人员并没有放弃,而是发现了漏洞。是的,这样开发人员甚至无法想象。

在控制台的正常操作模式下,所有引导加载程序都以链状连接在一起。结果,每个引导加载程序的解密取决于前一个引导加载程序标头中的数据区域(配对数据)。此外,代码的加密取决于唯一的处理器密钥,因此,在不知道CPU_Key的情况下,无法获取和组装工作映像。还是可能吗?

在控制台生产阶段(当处理器密钥尚未在保险丝中烧掉时),当配对数据为零(零对)时,将使用特殊的Xbox 360启动模式。这样的映像(带有易受攻击的内核!)甚至可以在任何控制台上运行而无需知道处理器密钥!
不幸的是,将不会进行全面的启动,该错误将显示为:


也就是说,无法启动King Kong游戏,无法激活通过着色器的利用……但是易受攻击的内核已经开始!也许还有另一种方式来记录RAM?原来有。

首先,我们将控制台南控制台的三个免费GPIO焊接到GPU JTAG引脚:


然后,我们修改南桥的固件(已加密但未签名),并使用易受攻击的内核收集映像。然后魔术发生了:

  • 启动时,JTAG GPU上的南桥爬到PCI Express上并配置NAND控制器
  • 现在,在读取时,NAND控制器会将数据写入我们需要的存储区域
  • 系统的核心启动并通知南桥系统已启动
  • 南桥拉动NAND控制器,在正确的位置覆盖RAM,并利用虚拟机管理程序的漏洞!
  • 控制权转移到我们的代码,做我们想要的

简而言之,他们所做的一切都与King Kong Shader Exploit中的相同,但是更酷-无需启动游戏和更换光盘。

基于JTAG Hack,创建了系统的修改版本-XBReboot,Freeboot,具有禁用的签名验证功能,海盗已经四处走动。不仅可以从USB驱动器和磁盘启动游戏,还可以直接从计算机通过SMB协议启动游戏。


重要的是,成熟的系统黑客为那些丢失了DVD密钥但无法播放的人提供了一个机会-拥有处理器密钥,提取DVD密钥并不困难。

当然,Microsoft在此迅速关闭了该漏洞,再次更新了2BL,并提高了CBLDV的价值。至此,易受攻击的虚拟机管理程序的史诗结束了,人们奔波购买商店中“兼容JTAG”控制台的残余物-每个人都希望可以毫无问题地使用USB闪存驱动器。在论坛上讨论了哪些发行日期的捆绑软件适合用于黑客攻击

。Xbox 360系统的修改主题停滞了将近两年,但固件的主题仍在继续发展。就在LiteOn驱动器的固件中,研究人员与Microsoft之间爆发了最广泛的斗争。但是,在下一篇文章中会详细介绍:)

链接:

GoogleTechTalks报告
金刚哈克
定时攻击
JTAG / SMC哈克

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

PS任何对细节感兴趣的人,我都将在评论中回答有关该主题的任何问题!

All Articles