每当在服务器上使用诸如密码之类的敏感数据时,它就会在内存中驻留很短的时间。考虑到像“心脏出血”这样的安全漏洞,有能力为它们的内容“出血”记忆,在零日之前,这种攻击存在什么样的先发制人防御?
是否有在使用后清除“敏感”内存的方法,以便例如,密码不会停留在可能的缓冲区溢出可以访问的内存区域(甚至已释放)?
发布于 2015-11-05 05:55:26
心脏出血的主要问题不是还在内存中的未使用的秘密数据,而是内存中包含正在使用的秘密数据。这些是来自并行请求的数据,但更重要的是,建立SSL握手所需的是证书的私钥。
防止这种攻击的一种典型技术是特权分离。在SSL握手的情况下,这可能是使用一个HSM,它可以加密/签名,但从不使密钥可访问。它可以是一个进程级的分离,例如OpenSSH使用的。或者,临界计算甚至可以由另一个由另一方控制的计算机系统发出,就像使用Cloudflare无密钥SSL一样。
发布于 2015-11-05 04:36:13
绝对一点儿没错。几十年来,在C/C++中,清除关键数据的内存一直很普遍。.NET甚至提供了一个SecureString类,记录为:
表示应保密的文本,例如在不再需要时从计算机内存中删除该文本。
但是数据通常需要在某个时间点在内存中的明文中,所以没有一个解决方案是完美的。
发布于 2015-11-08 08:50:52
非常安全的ftp使用的方法是通过API处理字符串和缓冲区的使用。这并不是完全删除数据(您的问题建议的选项),但这是解决问题的一种方法。
https://security.stackexchange.com/questions/104667
复制相似问题