虽然浏览器已采取行动、加强安全,但解释用户提供的代码的其他任何应用程序都需要意识到这一点。 谷歌的安全研究人员分析了数据泄露的Spectre漏洞造成的影响――这个漏洞困扰着今天的处理器核心,得出了光靠软件无法防止漏洞被利用的结论。 谷歌的几名研究人员:Ross Mcilroy、Jaroslav Sevcik、Tobias Tebbi、Ben L. Titzer和Toon Verwaest表示,他们可以构建一个所谓的通用小工具,利用各种CPU系列中存在的Spectre系列的推测执行漏洞,让攻击者提供的代码可以在线程中运行,从而读取同一个地址空间中的所有内存。 比如说,这意味着在Web浏览器线程中执行的恶意网页的JavaScript代码有可能窥视在另一个线程中运行的另一个网页的JavaScript,并从这另一个网页窃取秘密数据。浏览器中已落实了缓解措施,比如Chrome的网站隔离机制可以让网页处于单独的进程中,因而限制任何恶意JavaScript所能窥视的内容。至少Firefox、Internet Explorer和Edge阻止使用JavaScript对象SharedArrayBuffer,攻击者可以利用它执行Spectre窥视。 然而,对于任何解释攻击者提供的代码的应用程序来说,潜在的威胁依然存在。进程内部基于语言的防御和类似的防范措施无法阻止Spectre;你必须使用不同的进程(它们有着各自的不同虚拟地址空间和硬件执行的页表),采用基于硬件的隔离机制。 威胁还是炒作? 由于攻击者提供的代码与用户提供的其他代码在同一个地址空间中解释的其他场景并不多,谷歌研究人员的研究主要是学术层面的,用不着立即为之恐慌。然而,如果你正在开发解释外部代码的软件,了解这一点非常有必要。 研究人员在通过预印本服务ArXiv发表的一篇论文中表示:“我们现在认为,今天硬件上的推测执行漏洞破坏所有语言执行的机密性,目前没有已知的综合软件缓解机制,因为我们发现不受信任的代码可以构建一个通用的读取小工具,通过侧通道读取同一个地址空间中的所有内存。”这篇论文的标题是《Spectre已站稳脚根:分析侧通道和推测执行》(https://arxiv.org/abs/1902.05178)。 就在2018年1月IT外媒The Register首次报道Spectre和Meltdown漏洞后不久,密歇根大学的计算机科学助理教授Daniel Genkin告诉The Register:“我们目前还没有意识到除了重新设计硬件外可消除Spectre根源的有效的应对措施。”他与人共同撰写了最初的那篇Spectre研究论文,当时他还是博士后学生。 顾名思义,Spectre利用了推测执行的漏洞。推测执行是现代处理器的一项功能,它在处理器忙于处理其他任务时,猜测程序的未来路径,并做出预期的计算。 如果猜中了正确的路径,这些计算就保留下来,因而节省了时间,并加快了代码执行。但正如Spectre漏洞所表明的那样,窥视未来的功能可能被滥用。 Spectre有几个变种,但基本问题是,芯片设计人员拿安全换取速度。研究人员声称:“我们的模型、我们的心理模型是错误的;我们一直拿安全换取性能和复杂性,之前不知道这一点。” 谷歌的研究人员发现,变种4:Speculative Aliasing Confusion没有相应的软件解决方案。 研究人员们表示:“变种4击败了我们能想到的一切方案。” 最初,软硬件制造商推出了微码更新之类的修复程序和Retpoline之类的技巧。Retpoline是一种二进制修改技巧,可以防范“分支目标注入”攻击。浏览器开发商谷歌和Mozilla使得计时数据不易于访问,因而加大了推测执行攻击的难度。 但这似乎是徒劳的。研究人员表示:“我们认为,通过对计时器进行调整以减少计时通道是不可能的,荒谬的,无论如何最终会弄巧成拙的。” 谷歌的研究人员为该公司开发的Chrome浏览器中的V8 JavaScript虚拟机增加了防御Specter的机制,结果令人郁闷的是发现性能下降,因为它们没有真正解决问题,反而减慢了运行速度。他们说:“这些缓解措施没有一个提供针对Spectre的全面保护,因此缓解领域是在性能与保护作取舍,这让人沮丧。” 这就是为什么谷歌将其浏览器安全的重心转移到了前面提到的网站隔离。但是这种帮助还必须来自硬件,即采用更好的进程隔离这种形式。 英特尔于2018年3月公布了部分Spectre漏洞的硬件修复程序,但它声称Spectre变种1“将继续通过软件缓解措施来予以解决”,现在看起来这种说法相当可疑。 |