利用硬件漏洞,黑客可从非特权进程访问受限内存区域以盗取私钥。OpenSSH 项目新收到的补丁正是为防止黑客通过这种方法偷盗密钥而来。其他软件应用程序亦可用相同的方法保护 RAM 中的秘密,直到下一代 SDRAM 芯片和 CPU 解决硬件漏洞问题。
该补丁发布之前,一组研究人员演示了名为 RAMBleed 的攻击,可利用现代内存模块的设计从分配给特权进程及内核的内存区域中提取信息。
RAMBleed 采用早前披露的 Rowhammer 软件技术触发物理存储单元内的位翻转,然后通过边信道恢复出敏感信息。为证明攻击有效,研究人员以用户级权限运行的代码从 OpenSSH 服务器恢复出了 RSA 2048 位签名密钥。
现代操作系统中,分配给内核的虚拟内存与分配给用户空间应用程序的虚拟内存是隔离开来的。因为内核内存包含敏感数据,比如加密密钥和密码,非特权应用程序应不能直接访问这些数据。
违反此基本原则即是严重的安全漏洞,因为攻击者可以通过多种方式获取计算机系统上的代码执行权限,如恶意软件感染或利用用户空间应用程序中的漏洞。系统中所有非特权应用程序的攻击界面远远大于内核本身的攻击界面。
OpenSSH补丁加密私钥
该新 OpenSSH 补丁由 OpenBSD 开发人员 Damien Miller 提交,旨在 “保护存储在 RAM 中的私钥,防止幽灵、熔断、Rowhammer 和 Rambleed 这样的预测执行攻击和内存边信道攻击。”
幽灵、熔断及最近的微架构数据采样 (MDS) 均为利用现代 CPU 中预测执行功能的边信道攻击,而预测执行功能本是为提升计算机性能而设计的。其中一些攻击可用于读取受保护的内核内存。
在驻留内存且未与从 16KB 随机数据导出的另一个对称密钥一起使用时,私钥会被该新 OpenSSH 补丁加密。Miller 在补丁注释中说道:
攻击者必须先精准恢复出整个由大随机数构成的预密钥,才能尝试解密被保护的私钥,但当前攻击方式应用到整个预密钥上时,累积的误码率会高到无法精准恢复预密钥,也就无法解密私钥了。只要实现得当,密钥就能在加载时处于加密保护状态,而在用于签名或被存储/序列化时又自动、透明地解除加密保护。
新补丁应用广泛,或可引介至其他软件
OpenSSH 是最为流行的 SSH (Secure Shell) 协议实现,用于远程访问和管理计算机系统及服务器,但也用于自动化机器间通信。OpenSSH 最初是为 OpenBSD 设计的,但今天的大多数 Linux 发行版中都默认使用,Windows 10 中也受支持。
OpenSSH 新补丁使用的方法可以被其他软件项目复制,以保护自己的密钥和内存中的秘密。然而,正如补丁说明所言,该技术可降低边信道攻击的成功率,却不能保证杜绝边信道攻击成功可能性。
攻击总是在不断进化发展,因此未来的 RAMBleed 或 熔断/幽灵变种可能会攻破该补丁的防护机制。底层设计缺陷将在未来新推出的硬件中得到修复,但目前使用中的 CPU 和 SDRAM 芯片需要很多年才会被逐渐替换掉。
可以想见,此类硬件攻击将对企业 IT 产生长期影响,因此,开发人员能够部分缓解漏洞并让攻击更难以开展的任何软件补丁,都极其有用。Miller 在该补丁说明的最后补充道:希望我们在几年后,在计算机架构变得更为安全的时候,能够卸载该补丁。
OpenSSH 新补丁:
https://marc.info/?l=openbsd-cvs&m=156109087822676&w=2