麻省理工学院的研究人员发现了一种名为TONTOU(中和时间到使用时间)的攻击技术,该技术为利用Spectre v2类微架构漏洞提供了一种新方法。该漏洞允许在用户空间执行攻击时确定内核内存内容。目前,内核中已集成了阻止该漏洞利用的代码。 Linux 8 月 5 日发布,并包含在 7.1.7、6.18.43、6.12.102、6.6.149、6.1.181、5.15.214 和 5.10.263 版本中。
研究人员演示了利用本地非特权用户攻击获取存储在 /etc/shadow 文件中的 root 用户密码哈希值的可行性,该文件在系统身份验证期间会被加载到内存中。研究人员成功地从内核内存中泄露数据,吞吐量为每秒 5.47 字节,准确率达到 91.97%。在 10 次测试运行中(平均每次运行持续 18 分钟),他们有一半的时间成功检测到内存中存在 /etc/shadow 文件并提取了其内容。
该漏洞已在搭载 AMD 处理器的系统上得到验证,并可用于 Zen 1-4 系列的 AMD CPU。该攻击在 Intel 系统上也可行,但利用起来更为复杂。为了防止返回栈溢出并阻止 SRSO(推测性返回栈溢出)漏洞,AMD 处理器采用了 Safe-RET 保护机制。该机制会在每次使用后清除分支预测缓冲区,并将攻击窗口缩小到几十纳秒内执行的两条指令。
为了绕过这种保护机制并扩大攻击窗口,攻击者实现了一种CPU减速技术,允许在合适的时机进行中断替换,从而重定向内核内部的执行流程,并利用中断处理程序破坏分支预测缓冲区中的条目。为了利用SRSO漏洞,攻击者可以创建条件,使分支预测单元推测性地执行大量错误预测的CALL调用,足以溢出返回地址栈,并覆盖位于栈首的正确预测返回点。这样一来,栈的初始元素就可以被攻击者选择的值覆盖,随后在另一个进程的上下文中推测性地执行RET指令时,就会使用这些被替换的值。
处理器会判定分支预测错误并回滚操作,但推测执行期间处理的数据仍会保留在缓存和微架构缓冲区中。如果错误执行的代码块访问了内存,其推测执行也会导致从内存读取的数据保留在共享缓存中。要从缓存中检索信息,可以使用一种基于缓存和非缓存数据访问时间变化分析来确定缓存内容的方法。
来源: opennet.ru
