我已经阅读了 Heartbleed OpenSSL 漏洞并理解了这个概念。但是我不明白的是我们传递 64k 作为长度并且服务器返回 64kb 的随机数据的部分,因为它不检查我们是否真的传递了 64kb 的回显消息或 1 个字节。
但是服务器上的进程怎么可能从 RAM 中返回 64kb 的随机数据呢?
难道操作系统不应该阻止对真实 RAM 的访问,并且只允许访问一个进程无法访问其他进程的内存内容的虚拟内存吗?
OpenSSL 是否在内核模式下运行,因此可以访问所有 RAM?
如果一个进程试图访问它没有明确分配的任何内存,我预计会出现分段错误。我可以理解从运行 OpenSSL 程序本身的进程中获取 64kb 的随机数据,但我看不到它如何甚至可以看到服务器的完整 RAM 以便能够将其发送回客户端。
更新: @paj28 的评论,是的,正是虚假信息让我对此产生了怀疑。正如你所说,即使是官方的 heartbleed.com 咨询也以一种误导的方式来表达它(尽管我会说他们这样做是因为它的目的是为更广泛的受众而不仅仅是我们技术人员,他们希望保持简单)
作为参考,以下是 heartbleed.com 的陈述方式(强调我的):
Heartbleed 漏洞允许 Internet 上的任何人读取受 OpenSSL 软件易受攻击版本保护的系统内存。
对于任何暗示虚拟/物理机完整 RAM 的技术人员。