深度技术员浅谈CPU漏洞之后 Ring 0究竟什么鬼?
作者:深度技术员 文章来源:未知 发布时间:2018-01-24 13:59

最近一段时间CPU漏洞的新闻可谓让人惊诧不已,一个最不可能、最不能被允许的关键设备竟然有硬件漏洞!这几天PC厂商最忙的事情就是推出补丁,用软件方式弥补硬件漏洞的错误。而且,这些措施还会导致CPU性能下降。但是这个漏洞究竟影响什么?你真需要为此而担忧吗?

001

漏洞是真但不必害怕

漏洞存在这是千真万确的事情,但是你也不需要为此而担心——这个被证实影响了十几年来几乎大部分CPU的硬件缺陷确实存在,只是这个漏洞的技术细节没有(也不可能)公之于众。

事情要从去年说起,谷歌旗下的Project Zero团队发现了一些由CPU“预测执行”(Speculative Execution)引发的芯片级漏洞,“Spectre”(变体1和变体2:CVE-2017-5753和CVE-2017-5715)和“Meltdown”(变体3:CVE-2017-5754),这三个漏洞都是先天性质的架构设计缺陷导致的,可以让非特权用户访问到系统内存从而读取敏感信息。简单说这些漏洞能让恶意程序获取核心内存里存储的敏感内容,比如能导致黑客访问到个人电脑的内存数据,包括用户账号密码,应用程序文件,文件缓存等。

经过进一步证实(详见《新闻茶泡Fan》)包括Intel、AMD,以及ARM的CPU都在“黑名单”上,这意味着无论是Windows,Linux,Mac系统抑或移动端的Android,都有潜在的安全威胁。但是目前也仅仅是“潜在的威胁”。

002

CPU权限究竟什么鬼?

大部分现代CPU架构都有某种形式的保护环,每一个环(Ring)具备不同级别的保护权限,可以调用不同的CPU资源级别。拿这次最先曝光问题的Intel X86 CPU来说,他一共有Ring0、Ring1、Ring 2、Ring3四个级别,还有一个Ring -3级别权限。

003

常见的操作系统比如Windows、Linux、Android、iOS等等操作系统没有完全使用所有的各个级别权限,只是用了一部分。以Windows来说它用了3个Rings级别:Ring 0用于内核代码和驱动程序, Ring 2用于某些需要特权的代码(例如需要I/O权限的用户程序),Ring 3用于非特权代码(几乎所有的应用程序都在这一级别)。

在CPU的所有指令中,有一些指令是非常危险的,如果用错了会导致系统崩溃。比如:清除内存数据、设置时钟等。如果应用程序能随意调用属于不同权限的这些指令,那么系统会出现各种各样的无解问题。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。比如普通应用程序企图执行Ring 0指令,则Windows会显示“非法指令”错误信息。而这次波及甚广的CPU漏洞,就是可以通过非法指令直接调用到Ring 0权限!所以从安全角度看确实危险,唯一的好消息是目前尚未有人实现过这种攻击。

Intel最近被暴露出的问题绝不止这些,大家还记得前些日子Intel的另一个漏洞吗?ME管理引擎引发的恐慌其实比这次漏洞还要可怕(这次范围广、上一次是危害大):近三年Intel CPU中的ME管理引擎是基于Ring -3权限的——这个权限就是至高无上的,它不依赖于任何系统之上,说白了就是CPU内部的一个完整系统!可以说,如果这个漏洞被人掌握了技术攻击方式,你的电脑从技术上将不属于你,因为ME管理引擎使用的权限太高了,就是CPU内的一个原生操作系统!当然了,现在也有相应补丁,而且只影响4代酷睿以后的产品,范围比这此的情况小不少。

004

显然,CPU的权限管理是非常重要的,不过小编觉得普通用户大可不必担心,甚至小编认为现阶段普通用户自己的电脑都没有打补丁的必要(商业公司、政企单位非常有必要!安全为重),这些漏洞的技术细节不会公布,意味着短时间内我们不会面临巨大的安全威胁,尤其家用电脑还要考虑性能损失的部分,不如静观其变。

005