Heartbleed 会导致服务器崩溃吗?

Heartbleed 会导致服务器崩溃吗?

我知道 Heartbleed 漏洞的基本原理以及它的后果和原因。但是,我最近读到 Heartbleed 可能会导致服务器崩溃。我想知道这种说法是否属实,如果属实,为什么会这样。

据我所知,Heartbleed 只是发回客户端请求的长度,而没有检查该长度是否真实。所以我真的不明白读取数据怎么可能让服务器崩溃?

答案1

这个问题的答案涉及一些关于分页工作原理的背景知识。在现代操作系统中,应用程序不会访问物理内存地址,而是访问虚拟内存地址。虚拟内存和物理内存之间的映射发生在称为页面的块中。页面大小取决于硬件,最常见的是 4KB。

当进程启动时,大部分虚拟内存地址空间都是空的。访问它将导致操作系统内核陷入陷阱,这可能会终止进程并记录事件。

当进程需要内存时,它会一次向操作系统请求一页或多页内存。

Heartbleed 漏洞最多可泄露 64KB 的数据。这意味着它可以跨越多达 16 个页面边界(换句话说,它可能跨越 17 个页面)。这些页面中的第一个是存储合法数据的地方,因此保证该页面存在。但接下来的 16 个虚拟地址空间页面可能尚未分配。如果发生这种情况,将不会返回 64KB 的数据,操作系统内核将不得不处理这种情况。如果没有定义恢复机制,则该进程将被终止。

根据服务器软件的设计,它可能通过简单地生成一个新进程自动恢复。我认为 Apache 会生成一个新进程。其他软件可能不会自动重生。在这种情况下,心脏出血可能会导致服务器软件崩溃并停止运行。

由于心脏出血,操作系统不可能完全崩溃。只有另一个错误才能使操作系统崩溃。

相关内容