机密计算: Spectre漏洞和原理
幽灵漏洞
2018年,Google安全团队披露了Meltdown(CVE-2017-5754)和Spectre漏洞(CVE-2017-5715/5753)。
这是利用CPU乱序执行和分支预测,通过旁路攻击(侧信道攻击)获取内存中的重要数据,或者注入故障使目标瘫痪。数以亿计的Intel、AMD和ARM的CPU受到影响。
简介
乱序执行和分支预测是为了提高性能,而软件系统厂商发布补丁,加强安全检查,降低了性能。相比乱序执行的Meltdown漏洞,幽灵漏洞影响范围更为广泛。
- 乱序执行:乱序执行通过允许程序指令流中的指令与前面的指令并行执行,有时在前面的指令之前并行执行,增加CPU利用率。
- 分支预测:
- 处理器保持当前的寄存器状态,对程序将遵循的路径做出预测,并提前沿着预测路径执行指令。如果预测被证明是正确的,则提交推测执行的结果(即保存),从而在等待期间产生优于空闲的性能优势。
- 如果预测失败,通过恢复其寄存器状态并沿着正确的路径恢复,放弃其推测执行的工作。
预测失败时的执行路径,缓存中存在预测时提前执行的残留,这是此漏洞的关键之处。
攻击方法
1 |
|
- 将array2从缓存中擦除,确保存放在内存中
- 多次输入有效的x,使得分支预测器为真
- 输入越界的x,对应机密字节k = array1[x]
- 分支预测使得array2[k]对应的一片数据加载到Cache中,这里大小是4KB
- 攻击者通过访问array2的所有4KB的数据,根据缓存命中时间(远快于内存访问)以此推断出k的值。
代码
1 |
|
运行结果:
1 |
|
参考:
幽灵漏洞 - 维基百科,自由的百科全书 (wikipedia.org)
The proof-of-concept code for “Spectre Attacks: Exploiting Speculative Execution”. (github.com)
cryptax/spectre-armv7: This is an attempt to implement Spectre on ARMv7 (github.com)
CVE - CVE-2017-5754 (mitre.org)
bounds check bypass (CVE-2017-5753)
branch target injection (CVE-2017-5715)
rogue data cache load (CVE-2017-5754)
Security Bulletin] Intel Processor Meltdown and Specter Security Vulnerability Bulletin - Alibaba Cloud Developer Forums: Cloud Discussion Forums
hannob/meltdownspectre-patches: Summary of the patch status for Meltdown / Spectre (github.com)
给程序员解释Spectre和Meltdown漏洞 - 知乎 (zhihu.com)
死磕Meltdown和Spectre漏洞,应对方案汇总-腾讯云开发者社区-腾讯云 (tencent.com)
继英特尔、ARM、AMD之后,苹果、高通、IBM均承认其处理器有被攻击风险 - 安全内参 | 决策者的网络安全知识库 (secrss.com)
产品状态:CPU 推理执行攻击方法 - Google帮助
Endpoint Protection - Symantec Enterprise (broadcom.com)
10個Q&A快速認識Meltdown與Spectre兩大CPU漏洞攻擊(內含各廠商修補進度大整理_1/10更新) | iThome
360:处理器Meltdown与Spectre漏洞修复简要指南-安全客 - 安全资讯平台 (anquanke.com)