冯某某的博客

从此不再提起过去,痛苦或幸福,生不带来,死不带去

关于Intel CPU设计漏洞的一些细节描述

《关于Intel CPU设计漏洞的一些细节描述》

概况

英特尔的芯片级设计漏洞导致 Linux 和 Windows 内核的关键部分必须重新设计

此漏洞会导致低权限应用访问到内核内存

此漏洞是硬件设计导致的,无法使用microcode修复,只能进行OS级的修复

OS级的修复会导致严重的性能问题,将会导致5%-30%的性能下降

关于修复进展

开源程序员们已经修改了 Linux 的虚拟内存系统,但是代码注释被缩减,人们猜测是为了隐藏漏洞的详细信息

Windows 预计在本周四正式发布相关补丁,且补丁已经在去年十一月、十二月的 Windows Insider 版本中发布给了测试用户

macOS 也需要进行升级

关于修复方法

芯片微码更新不足以修复漏洞,必须修改系统或者购买新设计的 CPU

目前 Linux 内核的解决方案是重新设计页表(KPTI 技术,前身为 KAISER)。之前普通程序和内核程序共用页表,靠 CPU 来阻止普通程序的越权访问。新方案让内核使用另外一个页表,而普通程序的页表中只保留一些必要的内核信息(例如调用内核的地址)。这个方案会导致每次普通程序和内核程序之间的切换(例如系统内核调用或者硬件中断)都需要切换页表,引起 CPU 的 TLB 缓存刷新。TLB 缓存刷新相对来说是非常耗时的,因此会降低系统的效率。

KAISER 技术对系统性能的影响一般是 5%,最高可达 30%。一些高级的芯片功能(例如 PCID)可以支持其他技术,从而减少性能影响。Linux 已经在 4.14 版本的开发过程中添加了对 PCID 的支持。

目前phoronix已对此进行了测试,IO性能几乎下降了50%,编译性能下降了接近30%,postgresql和redis也有差不多20%的性能下跌,详细地址:

Initial Benchmarks Of The Performance Impact Resulting From Linux’s x86 Security Changes

在 Linux 系统中,KPTI 只有在英特尔芯片上才会启用,因此 AMD 芯片不受影响,且用户可以通过手动修改开关的方式关闭 KPTI

关于漏洞影响

根据 AMD 在 Linux 内核邮件列表里发送的邮件,AMD 芯片没有发现这样的漏洞

人们推测,漏洞会导致普通程序可以获得受保护的内核页表信息,进而导致一些内核保护技术(例如 KASLR,即内核地址空间布局随机化)可能被攻破

微软 Azure 云服务将在 1 月 10 日进行维护并重启,人们推测可能是为了修复这个漏洞

Amazon Web Services 通过邮件警告客户,本周五会有一次重要的安全更新

阿里云为解决此问题,将在1月12日进行底层更新

其他信息

还是根据 AMD 的那封邮件,人们推测出现问题的根源是“预测执行”(Speculative execution)机制。这个技术让 CPU 可以预测即将执行的代码,从而加快运行速度。人们猜测,可能芯片在完成权限检查之前,就会因为这个机制而执行本来不该执行的代码。

也有人推测这个漏洞就是去年年末传言的虚拟机器监视器(hypervisor )的重大 bugKPTI 的前身 KAISER 本来是用来预防 time-based attack 的,但是因为性能损失较高而一直没有并入主流

Linux 版本中Linux 内核中阻止 KPTI 在 AMD 芯片上自动启用的代码是 AMD 自己提交的

 

 

原文大部分来自于知乎
著作权归原作者所有。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注