日前,英特尔处理器被曝存在重大底层设计缺陷,因为缺陷出自英特尔x86-64硬件,且似乎微代码更新无法解决该问题,迫使 Linux 和 Windows 内核需要展开复杂的重新设计,以消除芯片层面的安全漏洞。
在漏洞被爆出后程序猿们也匆忙披上战甲,开始检查开源Linux内核虚拟内存系统。而微软有望在下一个更新日(下周二)为Windows操作系统做出必要的修改:针对11月和12月推出的 Windows Insider Fast-ring 测试版。Linux和Windows的这次更新都将对英特尔产品的性能产生影响。影响有多大尚有待衡量,但是相关人士粗略估计影响会在5%-30%之间——依具体任务和处理器模型而定。更新一些有PCID之类功能的英特尔芯片可以减小性能损失。所以大家的情况也不一样.这个漏洞的解决办法有两种方法:第一种:在操作系统级软件修复该问题(但是可能会对性能产生最高达30%的影响),第二种方法就是新买一块不带该设计缺陷的处理器,恩,就是这样的,自己选吧!!
虽然此漏洞的具体细节还没有被披露,但是微软下个更新日可能会推出吧。相比windows,Linux内核的补丁已经推出,但仅仅是在源代码中抹去了注释以防漏洞细节太过明显o(╥﹏╥)o。但是我们还是可以从以下几方面来探得几分究竟的。
影响
据了解,该漏洞出现在过去10年中生产的现代英特尔处理器中,可令普通用户程序——从数据库应用到浏览器JavaScript脚本,在一定程度上获悉受保护内核内存区域的布局或内容。用内核页表隔离(KPTI)技术将用户进程与内核内存完全隔开可以解决该问题。事实上,Linux内核团队曾一度考虑用中断间接跳转强制完全解除内核映射(FUCKWIT),这么极端的办法都认真考虑过,可想而知这个漏洞给开发人员造成了多大的麻烦。正在运行的程序无论什么时候想干点儿什么有用的事,比如写个文件或者打开个网络连接啥的,都得暂时将处理器控制权交给内核去执行这些工作。为使用户态和内核态之间的切换快速高效,即便程序本身看不到内核,内核还是会出现在所有进程的虚拟内存地址空间里。需要内核的时候,程序就执行一个系统调用,处理器切换到内核模式。而在用户态下,内核的代码和数据对用户不可见,但存在于进程的页表里。可以把内核比作天上的神仙,端坐云头俯瞰大地。凡人看不到神仙,但是可以向神仙许愿。KPTI补丁将内核放到一个完全隔离的地址空间,让它不仅仅对进程不可见,甚至根本不在进程里了。其实本没必要做到这一步,但很明显,英特尔的芯片里确实出现了可令内核访问防护机制被绕过的漏洞。
这一隔离方式的缺点就在于时间开销太高昂了。每次系统调用都要在两个隔离的地址空间来回倒腾,还有超级费时的硬件中断,想想都让人生无可恋。这些切换不会即时发生,还会导致处理器废弃缓存的数据而去内存中重新加载信息。所有这些都会增加内核的开销,拖慢计算机的速度。
黑客会怎么滥用这个安全漏洞呢?
安全漏洞的存在,会被恶意软件和黑客大肆利用,严重的还会被恶意程序和登录用户滥用来读取内核内存的内容。想象一下,在浏览器中运行的一段 JavaScript,或者在共享的公共云服务器上运行的恶意软件,能够接触到敏感内核保护的数据,包括密码、登录密钥、从磁盘缓存的文件等等。
具体而言,对于 bug 操作系统使用的防御机制是将内核组件放置在随机位置的虚拟内存中,能够阻止在内核中滥用其他错误的尝试。如果将内核的代码随机放置在内存中,攻击者就无法找到他们所需的内部小工具来完全破坏系统。不过处理器漏洞需要用来定位内核中数据和代码的位置,会导致软件被修补得乱七八糟的。
但是,英特尔芯片漏洞的影响可能比这些还糟糕。AMD 发给 Linux 的电子邮件中表示:AMD 处理器不受内核页表隔离功能的攻击限制,但是 AMD 微架构不允许包括推测引用在内的内存引用方式,因为这在访问时会导致页面错误、以较低特权模式访问较高特权数据。
这里就有“投机”的存在。从 AMD 软件工程师 Tom Lendacky 在上面邮件中提到的内容可以看出,英特尔的 CPU 在没有执行安全检查的情况下会推测性地执行代码,通过被阻塞的指令(例如从用户模式读取内核存储器)开始执行软件,并且在特权级别检查发生之前完成该指令——这就意味着将允许 ring-3 级用户代码读取 ring-0 级内核数据,隐患更大。
虽然这个漏洞的具体细节还有待证实,但是其威胁性毋庸置疑。
受影响的大牌云计算厂商
据了解,这个 bug 将会影响包括亚马逊 EC2、微软 Azure 和谷歌 Compute Engine 在内的众多知名云计算环境。
微软的 Azure 云(运行大量 Linux 和 Windows)将在 1 月 10 日进行维护和重启。亚马逊网络服务公司将通过电子邮件警告客户,预计本周五将有重大安全更新登陆,但没有披露具体细节。
还没有评论,来说两句吧...