从原理到范例:关于Intel芯片“漏洞门”的最全总结
日前,有关英特尔芯片漏洞的讨论遍及整个IT圈。有关英特尔芯片漏洞细节的报告最先发布在由谷歌公司、美国宾夕法尼亚大学、马里兰大学、奥地利格拉茨技术大学、澳大利亚阿德莱德大学等机构研究人员联合设计的网站上。这份报告披露,包括英特尔在内的各主流芯片,其底层技术都采用了一种叫“推测性执行”的方法。
在这份报告影响下截至周四,英特尔股价在两日内下跌5.2%,市值蒸发113亿美元。同时,AMD股价累计上涨10.4%。
多位华尔街分析师预计,AMD将利用英特尔出现的安全问题。瑞穗证券分析师维贾伊·拉克什(Vijay Rakesh)在一份报告中称,鉴于AMD使用了不同的架构,目前尚未发现漏洞,AMD可能会把它作为一项营销优势。
拉克什指出,英特尔目前在数据中心市场占据高达99%的份额,这对AMD来说是一个重大机遇。金融信息提供商FactSet的数据显示,分析师预计,2017年,英特尔数据中心集团将创造185亿美元收入,74亿美元营业利润。
“长期客户可能更希望把AMD,甚至是ARM作为替代选择,以减低架构风险,”美银美林分析师维维克·阿雅(Vivek Arya)周四在报告中称,“AMD似乎有望成为最直接受益者。”
AMD在服务器市场份额的大幅增长并不是没有出现过,该公司在2006年的份额一度达到26%。如果AMD能够在数据中心业务中拿下10%或15%的份额,那么它的营收可能就会增加数十亿美元。
芯片组是负责联系中央处理器和周边设备运作的计算机主板核心组成部分。使用该方法的绝大多数中央处理器为提高性能,会根据被假设为真实的判断,推测性地执行指令。执行期间,中央处理器会验证假设,如假设有效,则执行继续,反之则解除执行。但“推测性执行”可能在执行解除后产生无法消除的副作用,从而导致计算机信息泄露。
针对英特尔芯片的设计缺陷,谷歌“零点项目”团队介绍了3种不同攻击方式,前两种方式被称为“崩溃”,后一种被称作“幽灵”。
该团队认为,这个设计缺陷具有3个特点:首先,没有任何一个补丁可以同时抵御3种攻击方式;其次,与传统病毒不同,攻击不会留下痕迹,计算机无法在被攻击时发现;第三,恶意攻击者可以从一台虚拟设备上发起攻击,侵入主机的物理内存,“借道”获取其他虚拟设备信息。“零点项目”研究员詹·霍恩解释说,“黑客”可以利用该方法读取设备内存,获得密码、密钥等敏感信息。
“零点项目”是2014年7月由谷歌公司启动的互联网安全项目,成员主要由谷歌内部顶尖安全工程师组成,专门负责找出网络系统安全漏洞。该团队原定9日发布英特尔芯片安全漏洞的相关报告,科技网站《纪事》抢先报道这个发现后,该团队紧急公布了研究结果,完整报告仍将于9日发布。
芯片被称为计算机的“大脑”。分析人士认为,英特尔1995年后生产的绝大多数芯片都暴露在风险之中,漏洞波及了大量设备,带来的问题主要体现在几个方面:
第一,波及面广。基于英特尔芯片运行的微软“视窗”、Linux、苹果macOS和安卓等主流操作系统,以及谷歌、亚马逊等公司提供的大型云计算服务都可能受到影响。
第二,修复有难度。尽管谷歌、微软、亚马逊等公司正在陆续推出补丁,但这些补丁主要针对被称为“崩溃”的两种攻击方法,防范“幽灵”攻击则需对硬件进行升级,而更换全球大多数计算设备难度巨大。
第三,或存后遗症。业内人士称,现有防护补丁将增加中央处理器负荷,漏洞即使得到修复,也可能导致全球个人电脑性能明显下降。英特尔基于Linux开源操作系统的开发者戴夫·汉森认为,补丁将使芯片运转效率降低约5%,对联网功能的影响甚至高达30%。但英特尔否认类似说法,认为补丁对芯片影响会随时间减弱。
第四,产业关切深。英特尔的芯片在物联网、无人驾驶、5G、人工智能、深度学习等新兴领域广泛应用,安全漏洞对这些领域造成的威胁可能从网络向现实世界延伸。而云计算等服务对芯片计算能力的需求呈指数级提升,修补漏洞对芯片计算效率造成的影响可能拖慢整个行业发展。
对于这件事,英特尔做出了回应,他们表示,英特尔和其他技术公司对最近媒体报道的一项安全研究已经了解。这一研究中描述的软件分析方法,当被用于恶意目的时,有可能从被操纵的计算设备中不当地收集敏感数据。英特尔认为,这些攻击没有可能损坏、修改或删除数据。
最近的报道还称,这些破坏是由“漏洞”或“缺陷”造成的,并且是英特尔产品所独有的——这是不正确的。根据迄今的分析,许多类型的计算设备(有来自许多不同供应商的处理器和操作系统)都会容易受到类似攻击。
英特尔致力于为产品和客户安全提供保障,并与许多其他技术公司(包括 AMD、ARM 控股和多个操作系统供应商)密切合作,以制定用于全行业的方法,迅速、有建设性地解决这一问题。英特尔已开始提供软件和固件更新来抵御这些破坏。与某些报道中指出的恰恰相反,不同负载受影响程度不同。对于一般的计算机用户来说影响并不显著,而且会随着时间的推移而减轻。
英特尔致力于提供业界最佳实践,负责任地披露潜在的安全问题,这就是英特尔和其他供应商原本计划在下周发布更多软件和固件更新的原因。但由于当前媒体不准确的报道,英特尔今天特此发表声明。
请与您的操作系统供应商或系统制造商联系,并尽快采纳任何可用的更新。日常遵循抵御恶意软件的安全操作,也有助于在应用更新之前防止可能的破坏。
英特尔相信其产品在世界上是最安全的,并且在合作伙伴的支持下,当前对这一问题的解决方案,能为客户提供最佳的安全保障。
与此同时,英特尔也发布了相关的更新:
英特尔方面指出,他们已经为基于英特尔芯片的各种计算机系统(包括个人电脑和服务器)开发了更新,并且正在快速发布这些更新,以保护这些系统免受谷歌Project Zero所报告的两种潜在攻击隐患(被称为Spectre和Meltdown)。英特尔与其产业伙伴在部署软件补丁和固件更新方面已取得重要进展。
英特尔已经针对过去5年中推出的大多数处理器产品发布了更新。到下周末,英特尔发布的更新预计将覆盖过去5年内推出的90%以上的处理器产品。此外,许多操作系统供应商、公共云服务提供商、设备制造商和其他厂商也表示,他们正在或已对其产品和服务提供更新。
英特尔相信,这些更新对不同工作负载的性能影响会有不同。对于一般的计算机用户来说,影响并不显著,而且会随着时间的推移而减轻。虽然对于某些特定的工作负载,软件更新对性能的影响可能一开始相对较高,但随着采取进一步后续的优化工作,包括更新部署后的识别、测试和软件更新改进,应该可以减轻这种影响。
系统更新程序可通过系统制造商、操作系统提供商和其他相关厂商获得。
英特尔将与其产业伙伴和其他厂商一起继续合作以解决这些问题,也感谢他们的支持和协助。英特尔鼓励所有计算机用户启用操作系统以及其他计算机软件的自动更新功能,以确保其系统是最新版本。
他们强调,近日公布的安全更新在实际部署中并不会影响性能。
具体测试结果包括:
苹果:“我们的GeekBench 4基准测试以及Speedometer、JetStream和ARES-6等常见的Web浏览基准测试表明,2017年12月的更新没有显著降低macOS和iOS设备的性能。”
微软:“绝大多数Azure客户不会感受到此次更新对性能的影响。我们已经优化了CPU和磁盘I/O路径,在采纳更新后没有看到对性能产生明显的影响。”
亚马逊:“我们没有观察到这对绝大多数EC2工作负载的性能有产生实际的影响。”
谷歌:“在包括云基础设施在内的大多数工作负载上,我们看到对性能的影响可以忽略不计。”
英特尔相信,这些更新对性能的影响在很大程度上取决于于具体的工作负载。对于一般的计算机用户来说影响并不显著,并会随着时间的推移而减轻。
首先我们先要明白这次的漏洞是啥,我们先从机制说起来。这次曝光的漏洞一组三个,基本原理都是一样的。
而在具体解析之前,我们需要搞清楚几个概念:
一是缓存(Cache):
CPU执行指令,最大的速度瓶颈不在计算,而在于内存访问。为了降低内存访问需要的时间,现代CPU全部都设计了缓存。通俗地说,就是把曾经读过的内存,备一份在速度更快的缓存里。下次再读同一块数据的时候就可以直接从缓存里取,就会更快;
另一个乱序执行(OOO):
因为有访存瓶颈,指令之间的执行时间差距可能非常大。一条普通的计算指令1拍结束。一条访存指令如果缓存命中,需要10到100拍;如果缓存不命中,到内存里取,需要上万拍甚至更多。如果上一条指令被访存卡了十万拍,后面其他的指令只能等着吗?不可能的,所以现代CPU全部都设计了乱序执行的特性。把指令比做人的话,
顺序执行就是排队入场,先来后到,一直保持同一个顺序。前边的人停下了,后边所有人都必须跟着停。乱序执行就好象逛超市,大家排着队进场每人发个编号,之后自由乱逛,到结账的地方如果你前边编号的还有人没出去,你就在出口坐着等会儿,最终实现大家出去的时候仍然按进入的顺序排成一队。坐着等前边人回来的那个地方,你可以想象有几排椅子的等候区,有个保安看着给大家排号,这个机构学名叫做ROB。
还有个概念叫做异常:
计算机只有一块内存,这块内存上既存着某个不知名应用的运行信息,也存着你的支付宝密码。怎么样防止不知名小程序看到你的支付宝密码呢?当程序读内存的时候,CPU会帮忙检查读的地址是否属于这个程序。如果不属于,就是非法访问,CPU会在这条指令上产生一个异常,报操作系统枪毙。
操作系统为了处理异常,有一个要求:如果出现异常,那么异常指令之前的所有指令都已经执行完,异常指令之后的所有指令都尚未执行。
但是我们已经乱序执行了啊,怎么办?所以ROB承担起这个责任。指令乱序执行的时候,要修改什么东西都暂且记着,不真正修改。只有在从ROB里排队出去的时候,才真正提交修改,维持指令之间的顺序关系。
如果一条指令产生了异常,那么它会带着异常来到ROB排队。ROB按顺序把之前的正常指令全部提交了,看到这条指令带有异常之后就封锁出口,异常指令和其后其他指令会被抛弃掉,不予提交。
还需要了解一下投机执行:
分支指令是最讨厌的。例如“如果x<3,则执行a-b-c;否则,就执行d-e-f”。CPU大超市的入口保安,遇到正常指令只管按顺序放进场,控制下超市里的人流量就OK。但遇到分支指令就会傻掉,因为不等这个分支指令执行完,就不知道该放abc进场,还是放def进场。
能傻傻的等分支出来再继续放人吗?不可能的。现代CPU都设计有投机执行的特性。
入口保安会根据历史上这条分支取过哪边,来猜测这一次会取哪边。比如以前一百次分支都取的是abc那边,那这一次我肯定猜它还会取abc那边,我就直接放abc跟着进去。
万一猜错了?让出口那的ROB把abc取消掉不让他们提交就行了,我这边再放def进去。
再来了解一下微结构侧面效应:
被取消掉的指令不会得到提交,所以它们修改不了任何东西,也不会产生异常。所以我大可以随意去投机执行指令,不会有任何危险,因为大不了我取消掉他们就万事大吉了。——体系结构设计者如是想。这次的全部几个BUG就都出在这里。被取消掉的指令,虽然不会造成结构上的影响,但在微结构上会留下可以观测的影响——就是缓存。
这些被取消掉的指令不受异常的控制,可以访问任何东西,比如你的支付宝密码,然后借口自己执行错了被取消掉,就不会被操作系统管。体系结构设计者认为被取消掉的指令看到你的支付宝密码不会产生问题,因为它们留不下任何痕迹,但它们还是留下了:它们曾访问过哪些内存,哪些内存的后续访问就会变快。
我们来做一下攻击示例:
执行这样一句代码:
if (x < array1_size)
y = array2[array1[x] * 4096];
看起来这程序好像非常正经,对array1的访问甚至有边界检查,不让下标x超过array1的大小。
这边界检查很重要,因为要访问任何地址,比如你的支付宝密码的第一位(假设为k),存储在地址v的话,令x=v-array1,array1[x]就是在访问地址v了。
不过这种赤裸裸的越界访问一定会触发异常,然后被操作系统枪决罢了。我们不能那么露骨。
if (x < array1_size)
y = array2[array1[x] * 4096];
开始执行的第一步,CPU首先会遇到一条分支指令,判断x和array1_size谁大。假设array1_size没在缓存里,CPU需要跑去内存里取。
在把array1_size取回来之前没人知道x和array1_size谁大,于是有一万拍的时间内CPU都不知道这个边界检查是成功了还是失败了,这个时间窗口内CPU将继续投机执行。
CPU猜测可能是x更小,投机执行下面的语句。你会发现这种猜测是可以被攻击者误导的,攻击者可以在开始之前先用x=0多次执行这句代码,让CPU误以为x大多数时候都很小。
但实际上,这次的x突然暗藏杀机,因为x=v-array1,而可爱的CPU就这样被骗过去了。
if (x < array1_size)
y = array2[array1[x] * 4096];
投机执行的第一步,就是array1[x],试图访问你的支付宝密码。CPU说不可以,于是给这条指令的脸上贴了一张异常罚单,但仍然允许它带着密码的真实值k到ROB那里去排队。 口嫌体正 。
如果这条指令没有被撤销,操作系统就会枪毙这个犯规的程序;如果撤销了,那么体系结构设计者相信你绝对没办法活着把k带走。
if (x < array1_size)
y = array2[k * 4096];
投机执行的第二步。攻击者尝试让投机指令把k留下,而这些最终将被撤销的指令,唯一能留下的信息就是缓存。
第二条投机指令以k作为地址去访问array2。k被乘以一个较大的数值,例如页大小4096,这是出于一个技术细节原因。
假设array2的所有内容都不在缓存中,那么这条指令执行后,将仅有一个位置被加载到缓存上,这个位置的访问速度将明显快于其他位置,这个位置就标明了k的值。
if (x < array1_size)
y = array2[array1[x] * 4096];
随后,array1_size的值读取到了,CPU后知后觉发现投机执行错了,于是上面投机执行的犯罪指令全部被取消。
然而这时被取消的指令已经留下了一条缓存项,出卖了密码k。
攻击者只需要读取array2的每一个位置,测量读取花费的时间,然后找到读取最快的那个位置对应着k是多少,就这样攻破了你支付宝密码的第一位。
之后攻击者读取一些其他数据,将array1_size和array2再次挤出缓存,使用x=0反复执行这段代码欺骗CPU的分支预测,就可以故伎重施,取出你支付宝密码的下一位,以至于每一位。
- 半导体行业观察
- 摩尔芯闻
最新新闻
热门文章 本日 七天 本月
- 1 复杂SoC芯片设计中有哪些挑战?
- 2 进迭时空完成A+轮数亿元融资 加速RISC-V AI CPU产品迭代
- 3 探索智慧实践,洞见AI未来!星宸科技2024开发者大会暨产品发布会成功举办
- 4 重磅发布:日观芯设IC设计全流程管理软件RigorFlow 2.0