
前些日子微软自己憋不住了,揭晓正确答案,就是他们安全做得好。
Xbox初代因为赶时间上市,采用了几乎是现成的硬件,而且安全启动流程错误百出,没多久就被黑客干得渣都不剩。
360吸取教训,采用定制CPU,内置启动ROM,内置fuseset,靠烧fuse来强制执行CPU密钥、开发机/零售机策略、内核版本计数。在内存控制器上添加加密功能,连运行内存都加密了。软件上通过一个定制的hypervisor,把内核模式运行的程序框在虚拟机内,防止游戏的内存漏洞扩散到系统。光驱验证光盘时,通过光驱内置的密钥与主机建立加密通道传参。
然而还是被破解了三次,光驱的主控是第三方的标准芯片,安全一塌糊涂,被搞嵌入式开发的的大佬逆向出密钥存储的位置和刷写的办法,这样只要光驱被破解,传回特别导出的伪造答案,还是能骗过光盘验证,执行翻盘游戏。某个版本的hypervisor存在漏洞,可以绕过地址校验机制,进而劫持跳转,以内核甚至HV模式运行任意代码,可以运行自制系统。
然后微软才认识到人们为了白嫖游戏,会做出多么可怕的事。
为了阻止光驱被刷改,微软把光驱固件闪存芯片和主控封装在一起,而且把WE脚接地,这样谁也改写不了闪存芯片,看你怎么玩。
于是有人就发明了神风破解法,拿牙科钻钻芯片,当钻掉WE脚的金线后,就可以写入了。这种脑壳开洞的操作,只要稍有闪失就是一发入魂,主机报废,但白嫖是第一生产力,大家仍然钻得欢。
CPU从内至ROM启动后,加载验证主板闪存芯片里的系统文件的过程,用到了一个memcmp函数,有人发现,如果给CPU复位脚施加电气干扰,有一定概率会导致CPU不完全复位,导致破损的函数继续运行且分支到true,这就是RGH破解。为了实现RGH,需要用主板上的控制总线把CPU倍频拉低,然后尝试干扰CPU,破解已经进行到了玄学阶段。
于是总结获得的教训:不要相信CPU以外的任何东西,包括PCI总线、HT总线、内存、任何辅助控制总线,任何执行和安全有关的代码的芯片,都必须是定制IC,甚至包括光驱主控。不要相信游戏开发商写代码不会有安全问题,任何不是硬件最底层的、非原生状态运行不可的代码,一律套在虚拟机里面跑。
不要信任用户。这是和Windows安全区别较大的一点,所有Windows用户的出发点是好的,只是因为水平问题不懂安全,所以可能乱装软件导致安全问题。企事业Windows用户安全意识更高,Windows在信任用户可靠的情况下,能够有效防范外部侵犯
然而主机用户,虽说大多数都是乖宝宝,但是在白嫖的力量下,总是会背叛厂商的,甚至做出难以置信的危险操作来。所以不能相信用户。
先写这些,回头再加
我回来了,首先列举一下电脑上常见的“安全”设计有多么不靠谱:
因为常见的PC安全,一般不包括对物理侵犯的防御,仅仅是对网络或者软件运行换机有安全保护而已。所以一般来说,RAM并不加密,外部总线虽说速度很快,但仍然可以被专业设备侦听到,Intel的大多数“安全启动”是在南桥执行的,TPM也是通过外部总线访问,数据可以被监听、篡改。
Xbox One针对这个前提,在SoC内置了专属的安全处理器,而不是在操作系统下共享安全环境。虽说现在手机上SoC内置安全处理器烂大街,但是在XO研发的那个时候,这个概念还算是比较新颖的,后面AMD把这部分概念移到了自家的PSP上。
蓝色框内的就是安全处理器,有自己专属的CPU、加密引擎、随机数生成器、安全ROM、RAM,fuseset、旁路监测等。这个东西类似于TPM,但功能更完善,而且因为是集成在SoC内部的,无法从外部侦听干扰。
SoC上和安全相关的还有负责光驱、硬盘、闪存通信的IOMMU,用来阻止滥用这些设备DMA访问进行攻击,一个流处理器加密引擎,用来实时解密硬盘/光驱传输来的数据。这个加密对SoC高层基本是透明的,这样一是硬件加速,不影响性能,二是将解密操作与所有软件环境隔离开,就算系统被攻破,也无法干涉到磁盘解密。还有就是内存控制器也集成了加密功能,像Xbox 360一样,对内存所有可执行数据进行加密,外部尝试对内存总线或者数据进行干扰是不可能的,加密了还干扰个屁。
游戏以及大多数系统镜像都是XVD封包格式
可以看作是VHD的升级版,启用了全盘加密、并用签名的哈希树进行完整性保护,阻止任何非授权更改,无论是为了盗版还是作弊。游戏密钥文件是另一个加密封包,必须等你付了钱,安装游戏的时候,微软才给你签发下载这个封包。封包的数据CPU无权过问,也不经过任何公用总线,而是有硬件专线传到安全处理器内解密,通过SoC内部硬件线路直接传到流处理器加密引擎。由于硬件线路并不通过任何软件,所以即使有软件漏洞,也无法获得游戏密钥。
等于说游戏加密对于CPU来说是透明的,但整个机器里,只有读到CPU缓存里面的游戏内容是解密状态,从磁盘到内存,都有加密,而且CPU都无权过问,更别提通过软件漏洞取得控制权的恶意软件了。
安全处理器的设计目标:
除了已经提到的安全启动、生成系统密钥、解密游戏密钥包、执行密钥包里面的DRM策略(授权给哪块CPU,是否允许离线运行等)、烧fuse来硬件阻止降级之外,安全处理器还实现了类似TPM加密查验的功能,它会测量系统和游戏关键部位确保没有被篡改,并且Xbox Live在登陆时还会经常和安全处理器握手核对查验结果,发现篡改、开挂的随时可以封掉。以及为了阻止类似RGH这类电气干扰类破解,安全处理器还会检查主频、电压、温度等,遇到不对直接停机阻止被破解。
除了硬件底层的安全启动、加密之外,Xbox One系统也有多重防线,最大程度增加破解的工作量和难度。像我之前说的,Xbox 360 和 Xbox One都采用了虚拟机的概念,有一个底层的hypervisor将游戏运行环境隔离,防止因为游戏本身的安全问题导致机器被破解。One上为了实现多功能多媒体娱乐中心的功能,将这个虚拟机的概念大幅扩展。
系统启动之后底层加载的是Hypervisor,上面跑Host OS。这俩货应该采用了类似Hyper-V的技术,但是针对高性能图形计算优化过。应用层的System OS,跑UI以及UWP app,Game OS其实是封装在游戏XVD里面的,随着游戏加载。
可执行文件的签名验证并不在上述任何一个OS里面,而是直接交给HV做,这样降低了高度复杂的系统代码出漏洞被利用的可能。同时通过HV来强制实行内存地址可执行/不可执行的策略,只有HV确认签名通过的内存页面,才会被标记为可执行,可执行的页面一定是被HV标记为不可写的,降低各种内存攻击的可能性。
后来这个概念被微软其他组拿去做成了HVCI
这样就有效阻止数字版游戏的盗版。光盘版游戏的解决思路还是和360一样,通过验证光盘某些无法仿造的物理特征,光驱主控现在改成了定制IC,无法像以前那样破解了,至少到现在都没破过。
有空再加下一节
