[安全公告]关于Intel处理器Meltdown和Spectre安全漏洞公告
尊敬的用户:
北京时间2018年01月03日,Intel处理器芯片被爆出存在严重安全漏洞,该漏洞事件源于芯片硬件设计层面存在缺陷,可导致操作系统内核信息泄露、应用程序越权访问系统内核数据等问题。
漏洞背景:
现代处理器是通过在流水线各个阶段同时执行不同的任务来提高处理能力的。为了让这个流水线机制更加高效,现代处理器又引入了分支预测和乱序执行机制,从而更高效的进行运算。
其中,分支预测主要用于解决在跳转分支完全确定前,通过预测执行目标地址的代码来提高执行效率。如果预测失败,流水线会把预测错误的代码放弃并回滚状态。
而乱序执行则通过将代码的执行顺序打乱来提高平行执行能力。
这些处理器优化技术对于现代处理器的性能提升有很大的帮助。但是近期安全研究者发现,现代处理器架构的这些功能可能会导致安全风险,可以被攻击者利用在特定情况下进行攻击。产生这些的根本原因是流水线对无效执行状态的恢复不完整,以及乱序执行时对权限检查不完整。这里也充分体现了安全设计和性能设计的冲突。
漏洞编号:
bounds check bypass (CVE-2017-5753)
branch target injection (CVE-2017-5715)
rogue data cache load (CVE-2017-5754)
漏洞描述:
根据披露的攻击细节及详细介绍分析,本次针对英特尔处理器漏洞有两种攻击方法,分别为Meltdown和Spectre。
其中,Meltdown主要涉及CVE-2017-5754,Spectre主要涉及CVE-2017-5753和CVE-2017-5715。
Meltdown漏洞CVE-2017-5754
应该说这三个漏洞中,Meltdown是最容易利用也是影响最大的。
本质上这个漏洞是因为处理器在乱序执行时,没有对跨特权的数据访问进行限制。比如当一个用户态的程序访问内核数据时,最终处理器是会触发页访问异常的,但是问题出在,当流水线上执行时,对于触发的页异常进行了抑制,在处理器真正触发页异常前,相应的代码还是会执行,导致缓存依旧会发生变化。
Spectre漏洞CVE-2017-5753
该漏洞主要是通过低特权级别的代码,调用高特权级别的代码来实现攻击。
由于为了性能加速,现代处理器会提前做分支预测,其后在流水线上误判的预先执行最终并不会实际执行。但,也是由于性能的原因,流水线执行结束后并没有对所有预判执行的现场做完全修复,从而导致在缓存中会留下执行的痕迹,进一步会导致低特权恶意软件可能通过分支预测在缓存中留下的痕迹,在特定代码情况下猜测出高特权的数据。
这个漏洞需要特定的代码模式才能够触发,所以攻击者必须要在高特权级别的代码,比如操作系统内核,虚拟化底层中找到特定模式的代码用于利用,相对CVE-2017-5715而言,利用难度小。
Spectre漏洞CVE-2017-5715
对于漏洞CVE-2017-5753,攻击者需要找到已经存在的特定代码模式来展开攻击。如果没有现成的攻击者用于展开攻击的代码模式,攻击者需要考虑如何制造出这些便于攻击的代码模式。漏洞CVE-2017-5715就是针对这个思路展开的。
这里的攻击目标是分支目标缓存。这是一个处理器内部用于加速分支跳转的内部数据结构,有特定的目标预测算法。通过对这个算法的操纵可以让攻击者预填入恶意的跳转地址,在流水线上,当处理器到正确地址之前,让处理器执行特定的目标代码。当然,随着流水线的最后确认,这些执行也都会被废弃,但是对于缓存的影响依然保留。
Google在攻击细节中给出了反推出KVM的模块地址思路,但是这个攻击对处理器的架构以及内部间接分支预测的算法有很强的依赖。相对而言,这个漏洞是最难利用的,需要一定的先决条件以及很多处理器内部信息。
具体攻击方式介绍如下:
Spectre:bounds check bypass (CVE-2017-5753)
Spectre:branch target injection (CVE-2017-5715)
Meltdown:rogue data cache load (CVE-2017-5754)
影响范围:
该漏洞存在于Intel x86_64的硬件中,从1995年以后生产的Intel处理器芯片将都可能受到影响。同时AMD、ARM处理器也会受到影响。
漏洞风险:
从目前公开的PoC测试程序来看,攻击者需要获取本地普通账号权限后,再进一步进行提权操作,从而获取更高权限越权获取本地敏感信息,漏洞利用有一定的条件限制。
漏洞修复建议(或缓解措施):
1.建议您按照安全最佳实践做好安全加固和防护措施,防止被攻击者利用;
2.目前发现Linux系统执行修补后可能造成一定程度的性能影响。该漏洞只能通过本地提权操作才能获取敏感信息,为了确保业务的稳定性,请用户根据自身业务情况决定是否需要升级修复漏洞。修补前请做好业务验证及必要的数据备份(可以采取备份等功能用来保存数据及虚机状态);
3.本次漏洞建议用户更新补丁以规避meltdown漏洞风险;
以下为更新补丁参考方式:
Linux:
1)CentOS:
yum update kernel –y
reboot
2)Ubuntu:
12.04:
apt-get update && apt-get dist-upgrade
update-grub
reboot
备注:更新补丁时,openssh选择NO
14.04/16.04:
apt-get update
apt-get install linux-image-4.4.0-112-generic linux-image-extra-4.4.0-112-generic
update-grub
reboot
3)Debian:
6.0.10:
apt-get update && apt-get dist-upgrade
update-grub
reboot
7.8:
apt-get install linux-image-3.2.0-5-amd64
update-grub
reboot
备注:重启后,选择Linux 3.2.0-5-amd64内核启动
7.8.10:
apt-get install linux-image-3.2.0-5-amd64
update-grub
reboot
Windows Server:
1)2008 R2:
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4056897
适用于箭头云的漏洞补丁如下:
2)2012 R2:
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4056898
适用于箭头云的漏洞补丁如下:
3)2016 R2:
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4056890
适用于箭头云的漏洞补丁如下:
备注:由于windows发布更新跟云主机中的反病毒软件们兼容性并不是很好,所以在用户的云主机中windows update功能打开的情况下,可能并不能自动获取到针对Meltdown和Spectre的更新包。建议用户自行下载后,再手工安装更新。
以上linux系统更新方式采用新增内核启动方式,如出现意外情况,可以尝试在开机过程中通过云主机vnc界面进入grub,选用老版本内核进入系统。