Quantcast
Channel: Thought – Yandere@萌
Viewing all articles
Browse latest Browse all 2

聊聊最近的硬件级处理器安全漏洞

0
0

最近一年,大大小小涉及底层硬件的漏洞相继被发现。从 Intel ME 连环爆出漏洞,再到几乎影响到所有 CPU 的 Meltdown 和 Spectre 漏洞,着实颠覆了我对漏洞的认识。以前总认为硬件漏洞是小说中才有的情节,没想到却实实在在发生在现实中。各路媒体对这些漏洞的报道一个比一个玄幻,总觉得应该写一篇关于这些漏洞的文章。希望本文可以帮助你了解这些漏洞,以及哪些漏洞确实对你有害。

首先从 Intel ME 说起。Intel ME 全称 Intel Management Engine,这个模块在 2008 年及以后出厂的 Intel CPU 中均有存在。这个模块能做到的事情可太多啦:对系统内存的完全访问、对网络适配器的访问、对各类设备的访问、开关机…。最重要的是,这个模块独立于 CPU 运行,甚至在你的电脑关机的情况下也在运行!

这个模块最初设计的作用是为了企业更好的管理其拥有的计算机资产,比如进行远程管理、KVM 访问等。可是由于这个模块固件并非开源的,而且还是经过未公开的算法压缩并混淆,甚至连完整的文档都没有(很多功能并没有在文档中),令人不得不怀疑这个模块实际上是个后门。

虽然这个模块的固件进行了大量的混淆处理,但是还是那句老话:没有密不透风的墙。终于在 2017 年 5 月份左右,安全研究员们一个接一个的发现这个固件存在的漏洞。

这些位于 Intel ME 的漏洞包含了:

CVE-2017-5689 (AMT)

CVE-2017-5705

CVE-2017-5708

CVE-2017-5711

CVE-2017-5712

注:下面提到的 AMT 是仅存在于支持 vPro 的硬件上,AMT 是基于 Intel ME 的。通常情况下,如果你的主板以及 CPU 支持 vPro,那么就支持 AMT。启用了 Intel ME 的 CPU 并不一定支持 vPro 以及 AMT。

Intel ME 的固件分为两种:一种是 1.5MB 大小的,即阉割版。另一种是 5MB 大小的,即完整版。

其中 CVE-2017-5705、CVE-2017-5711 的利用条件是需要一个本地的高权限用户或程序。

CVE-2017-5708 的利用条件是需要一个本地普通权限的用户或者程序。

而 CVE-2017-5712 和 CVE-2017-5689 就比较可怕了,可以被远程利用。

需要特别注意的是,一般的家用 PC 和笔记本默认是不会受到上述远程漏洞利用的影响,因为消费级产品并没有对 vPro 的支持,但是可以被通过与其他漏洞组合(例如利用本地漏洞强制开启 AMT 功能,即便你的 Intel ME 固件为阉割版)从而被利用。

关于强制开启 AMT 功能,可以参考这篇文档

说了这么多,该说说这个缺陷怎么预防了。

首先:虚拟机内的环境不受这个漏洞的影响,并不会造成虚拟机逃逸。

其次:这个漏洞唯一的修复方法就是刷 BIOS(准确地说:刷 Intel ME 的固件)。对于用户来说刷 BIOS 是有一定风险的,操作不当很容易导致机器变砖。可以参考各大主板厂商的网站进行 BIOS 升级操作。如果你是有经验的用户,可以尝试对 Intel ME 固件进行清除(具体可参考萌狼的 X230 + Coreboot + me_cleaner + …… = ? 一文)。如果你的硬件太旧了,甚至厂商已经放弃支持了,那么就应该考虑换硬件了。

 

然后来说说 Meltdown 和 Spectre 漏洞。

Meltdown 漏洞,目前被证实存在于 1995 年之后生产的所有 Intel CPU 中(除了 2013 年之前生产的 Intel Itanium 和 Intel Atom 系列),但不排除可能在 AMD 或 ARM 平台上被利用的可能性。顾名思义这个单词是“熔断”之含义,不过它熔断了什么呢?

对操作系统有了解的人应该知道,在操作系统中,用户程序与内核之间的内存是隔离的,正常情况下一个用户运行的程序并不允许读取内核所使用的内存地址,以防止未经授权的读取。而这个漏洞则熔断了本应存在的保护。

由于这是一个硬件的漏洞,所以就算使用虚拟机也不能保护不受这个漏洞的影响(因为无论再怎么虚拟,指令还是要交给 CPU 进行处理),所以云服务商可基本就惨啦,各个虚拟机之间可以读别人的内存,甚至母机的内存。而普通用户也会受到这个漏洞的影响,假设你的浏览器开启了 JavaScript,那么特定的脚本就可以利用这个漏洞。这个漏洞只能对内存进行读取,不能修改,不过仍然可以读取在内存的敏感信息,如加密的私钥和密码等。

不过好在,通过内核补丁可以防止对这个漏洞的利用,不过会有一定幅度的减少系统性能,因为在使用内存时内核需要进行额外的运算(处理对应的内存 mapping table)。

防范方法是:打补丁!打补丁!打补丁!Linux 和 Windows 等系统已经出了补丁,还等什么?赶紧打补丁!

 

而第二个 Spectre 漏洞就比较复杂了,而且没有太好的软件解决方案。最好的解决方案就是重新设计硬件,当然这会是一笔很大的开销。这个漏洞影响了几乎所有品牌的处理器,包括 Intel、AMD、ARM,以及几乎所有的桌面、笔记本、服务器甚至手机。

根据论文,现代的 CPU 采用了分支预测branch prediction)以及预测执行speculative execution)以提升效率。这个攻击的实现条件是引诱受害者执行一个正常程序执行时不会出现的操作(例如读取一个指定的内存地址),然后让 CPU 放弃其缓存的用来预测的必要的值,之后通过侧信道攻击(如 flush+reload 或 evict+reload)获取受害者的内存数据。这个漏洞出现的最根本的原因是因为 CPU 在预测执行的过程中忽视了安全并导致大部分的软件层面上的安全机制失效。

由于这个漏洞产生的原因极为底层,所以很不幸,截至本文发出前并没有一个可靠的解决方案。但是有一点你值得庆幸,那就是漏洞利用方法十分复杂,所以目前还不需要担心被大规模利用。或许你唯一可以做的就是等待上游开发者发布补丁,并及时安装 。


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images