您的位置  > 互联网

Intel处理器漏洞:安全圈老鸟为小白开放的一块老鸟

这次“英特尔处理器漏洞”的影响可以说是前所未有的。 当然,称其为“英特尔处理器漏洞”对于英特尔来说确实不公平。 毕竟其他处理器也受到了不同程度的影响,但英特尔却是受影响最严重的厂商。 然而,事件发生后,英特尔股价单日下跌8%已经证明了一切。

其实我一直想找机会给关注知乎“黑客漫谈”专栏的同学们讲授一些底层系统的知识。 这次Intel的漏洞就是一个很好的机会。 由于“黑客漫谈”是“安全圈老手为新手开设的私人空间”,所以我希望用最简洁的语言向基础知识相对零的朋友描述计算机底层世界中的一些冷知识。

目录

简介——来自虚拟世界底层的灾难

微码——中央处理器的另一种视角

氮-解密CPU加速技术

——摧毁虚拟世界的许可长城

Zion - Helm's Deep,多次遭到黑客攻击

结局——关于底层黑客技术的神话

简介——来自虚拟世界底层的灾难

元旦刚过,John 和 Chris 于 2018 年 1 月 2 日在英国老牌科技媒体 The 上发布了第一份详细介绍英特尔漏洞的报告。 大约12小时后,该公司零安全团队于2018-01-03发布了一份报告,该事件最终以标题为“1995年后几乎所有CPU都将受到“”和“”漏洞影响的公告告终。

从漏洞分析的线索来看,该漏洞至少早在2017-12-09就已经在业内一些圈子有序研究。 那么这到底是一个什么样的漏洞呢? 和CPU有什么关系? 具体后果是什么? 学习它有什么好处? 下面我将一一回答这些问题。

首先,简单来说,这是一个由于CPU指令加速功能的设计缺陷,导致微结构内部通过侧通道向外部泄露数据的bug(不用害怕,这对专业人士来说很正常)解释得难以理解)。 我们这篇文章的主要目的之一就是让没有基础知识的读者用简单易懂的语言理解这意味着什么。 既然提到了CPU指令加速,那显然是和CPU有关的。 目前修复该漏洞的方法自然对CPU指令加速机制造成了一定的限制。 应用补丁后,将直接导致CPU速度降低30%。 %~35%(嗯,你没看错,你的i7会瞬间变成i5,不过没关系,别人的i5也会变成i3),虽然Intel表示,根据用户不同的应用场景,大多数情况下的影响是没那么夸张。 但我们都明白真相。 虽然原本最快能跑200km/h的性能车被打补丁,变成了最快只能跑130km/h的面包车,但在到处堵车的背景下,我们也很少跑到130km /h,但问题是,我多花的钱谁会得到呢?

其次,该漏洞造成的后果目前还比较有限,因为它对关键内存区域只有读权限而没有写权限,所以它能造成的最大问题是关键数据(比如大家都能理解的用户名、密码)被泄露了。 如果合理映射到实际的攻击场景,效果就是受害者浏览了可以触发该漏洞的网页,然后浏览器中自动保存的用户名和密码瞬间被窃取。 当然,如果深挖下去,如果黑客利用这项技术来填补自己在攻击过程中所缺少的关键信息,那么后果将是不可估量的。 目前直接造成的最大问题是,各种云、各种IDC都会面临关键的数据泄露灾难,而漏洞修补后,整体性能会下降30%,这也是另一种灾难。

最后就是研究一下这个漏洞的好处。 事实上,该漏洞衍生出的很多知识点都是信息安全领域的核心内容,深入研究软件逆向工程需要一些知识。 如果你对信息安全感兴趣,那么这篇科普文章你一定要从头到尾读完。 读完之后,你眼中的电脑看起来会完全不一样。

微码——中央处理器的另一种视角

有基础的同学可能知道,程序的底层是由“机器代码”组成的。 这些“机器代码”是由程序员使用C、CPP等计算机语言编写的源代码由编译器编译生成的。 这些二进制“机器代码”被CPU按照一定的方式读取并执行,形成了应用程序的各种行为(例如QQ可以聊天、工作、陌陌可以泡妞等)。

但现实并没有那么简单……

首先,所谓的“机器代码”本身并不专业(虽然各大技术论坛很多文章都这么写)。 它的正确名称应该是操作码()或者勉强算一个正确的二进制码,因为操作码是计算机指令集系统的一部分(请参考本段后面的《解读:什么是指令集》),所以这个不能理解为最原子(不可分割)的操作。 事实上,当一个操作码(例如加1操作的操作码是十六进制0x40,或者二进制,翻译成汇编就是INC EAX)被CPU读取并执行时,并不是直接执行的,而是这个操作码在CPU中可能会分解为几十到上百条微指令/微码(),然后进行运算,最后交给CPU物理层的逻辑电路来执行。

其次,我们平时接触到的一般称为计算机体系结构(),而CPU中使用的是微体系结构()。 这就导致了大多数IT工作者(包括普通程序员,甚至汇编语言程序员甚至大多数软件安全研究人员)接触到的最底层其实就是计算机架构层(比如冯·诺依曼结构,也称为存储程序结构),在这种结构中,CPU被视为一个无法进一步划分的单元,被视为一个黑匣子,因为在大多数IT工作者的实际工作过程中最多只能涉及到操作码(二进制代码)级别,所以即使在信息安全等相对专业的领域,也很少有人了解微架构中的微指令的概念。

最后,关于微架构本身,这实际上是CPU的核心部分。 对于大多数IT工作者来说,CPU的微观结构是他们所接触不到的。 即使是最低级别的软件安全研究人员也只能通过代码来访问CPU,所以在当前级别,我们可以使用CPU的最小操作粒度就是指令。 但上面我们简单提到,操作码被CPU读取后,可能会被解析成几个更小的执行单元,而这些单元最终驱动CPU的单个硬件逻辑电路完成具体的计算操作。 这些较小的执行单元称为微操作(/μOP)或微指令/微代码()。 在实际应用场景中,微指令可以完成一些非常复杂的操作,并且通过修改CPU的微指令,很多时候甚至可以帮助厂商协助用户修补已经发布的CPU中的bug(可惜这个漏洞太复杂了)并且不能通过修改微指令来修复此漏洞)。

定义:什么是指令集?

指令集是指CPU向外界提供的功能接口。 例如,空调的指令集包括“打开和关闭”、“调高温度”和“调低温度”等,空调向我们提供的指令集界面,就是空调遥控。

CPU的指令集是由汇编语法等组成的。汇编语言是一种文字映射,可以将看似无意义、晦涩难懂的二进制代码一一映射成由英文单词组成的汇编语言。 方便人们使用。

这类似于空调遥控器如何将人类完全看不见的红外信号映射到遥控器上的按钮。 这样,人们只需操作按钮,遥控器就可以将红外信号转换成红外信号来指挥空调的运行。

因此,我们可以将 () 类比为空调用于通信的红外信号。

氮-解密CPU加速技术

氮气作为超级跑车在赛道上扭转乾坤的利器,可以彻底榨干发动机的最后一点潜力,实现爆炸性的加速。 作为对速度要求较高的计算机核心部件,对速度的追求自然是用户和工程师的终极梦想。 因此,各个实验室的工程师们也会为此绞尽脑汁……

本段我们将以Intel CPU的发展为例,向同学们简单讲解一下CPU中的“氮”加速技术是如何一点一滴发展起来的。

原始水平,野蛮状态-1987