指令■幽灵漏洞:Visual Studio团队释出更全面的修复方案
北京联盟_原题是:幽灵漏洞:Visual Studio团队释出更全面的修复方案
蝎子
在之前的一篇文章中 , 我们官宣了可以通过[/Qspectre]编译开关来缓解幽灵(Spectre)漏洞 。这些缓解措施不会显著地影响应用程序的性能 , 但是我们发现 , 它并不能抵御所有利用幽灵漏洞的攻击 。为了解决这个问题 , 我们最近添加了两个新的编译开关[/Qspectre-load]和[/Qspectre-load-cf]来提供更加完整的幽灵漏洞防护 。这两个开关仅在x86和x64上可用 。
这两个开关在底层会做什么?
[/Qspectre-load]编译开关指示编译器对每一条load指令生成序列化的指令 。对于大多数load指令来说 , 这个开关会在每一条load指令后面添加一条[LFENCE]指令 。然而 , 对于控制流类的指令 , 这种方法将不能预期的起作用 。在大多数情况下 , 一条指令可以被分割为load指令和控制流指令 , 因此一条[LFENCE]指令可以插入到load指令之后 。对于一些不适用的情况 , 例如jmp [rax]这类的指令 , 编译器将会尝试采取另外一种修复策略 , 具体就是:在插入[LFENCE]指令之前就以非析构式(non-destructively)的方式来加载目标 。如下图所示:
文章图片
文章图片
[/Qspectre-load-cf]开关则提供了以上行为的一个子集 , 即仅提供控制流指令的保护 , 例如JMP, RET和CALL指令 。
对于一些性能攸关的代码片段 , 可能它们不需要添加上述的保护 , 对于这种情况 , 你可以通过语句[__declspec(spectre(nomitigation))]来禁用编译器添加的额外指令 。因为这两个编译开关能阻断所有对于load指令的幽灵漏洞攻击 , 它带来了显著的性能降级 , 所以 , 这个修复措施并不是在所有情况下都适合 。
什么版本的MSVC支持这两个开关?
自Visual Studio v16.5 Preview 3版本开始支持这两个编译开关 。在将来的所有Visual Studio发布版本中 , 这两个开关将会在MSVC工具集中可用 。
应该如何启用这两个开关?
可以在Visual Studio的工程属性中设置此开关 。具体路径为 , 工程属性页面的[Code Generation]页面的[Spectre Mitigation]设置项 。如下图所示:
文章图片
文章图片
总结
熔断和幽灵这两个漏洞告诉我们:
没有十全十美的事物 , 包括CPU也是 。
【指令■幽灵漏洞:Visual Studio团队释出更全面的修复方案】但是 , 我们可以日臻完善 , 就如同Visual Studio团队所做的一样 。
还是 , 加油吧 , 骚年!
文章图片
文章图片
推荐阅读
- []识别安全漏洞准确率达97% 微软AI系统了解下
- 「太平洋电脑网」识别安全漏洞准确率达97% 微软AI系统了解下
- 『』英特尔幽灵峡谷NUC评测解禁,性能大幅领先冥王峡谷
- 安胜ANSCEN:【E周道】SCUF Gaming泄露110万用户信息 Linux内核漏洞曝光
- #腾讯QQ#16岁天才黑客盗走马化腾QQ,还提醒腾讯系统漏洞,腾讯却报警抓他
- 『』Intel官方证实:14nm新增关键指令集 10nm又丢了
- 百度■百度闪付或出现技术漏洞,看II类户创新的设计差异
- 【】百度闪付或出现技术漏洞,看II类户创新的设计差异
- ##当时尚遇见十代酷睿 惠普幽灵Spectre X360 13英特尔移动超能版到站
- 「S5」VIVO S5新机激活漏洞:绕道激活程序,免刷机破解激活操作