gpt4 book ai didi

c - heartbleed bug 是 C 中经典缓冲区溢出漏洞的表现吗?

转载 作者:太空狗 更新时间:2023-10-29 16:33:08 30 4
gpt4 key购买 nike

在我们关于安全性的第一个 CS 讲座中,我们介绍了 C 的问题,没有检查所谓的缓冲区长度,并提供了一些可以利用此漏洞的不同方式的示例。

在这种情况下,看起来像是恶意读取操作,应用程序只是读取了多少字节的内存

  1. 我断言 Heartbleed 错误是 C 缓冲区长度检查问题的表现是否正确?

  2. 为什么恶意使用在尝试读取另一个应用程序的内存时没有导致段错误?

  3. 在写入内存(然后从中读取)之前简单地将内存清零会导致段错误吗?或者这是否因操作系统而异?还是在其他一些环境因素之间?

  4. 显然无法识别对漏洞的利用。那是因为心跳函数在调用时没有记录吗?否则,对 ~64k 字符串的任何请求都可能是恶意的?

最佳答案

Am I correct in asserting that the Heartbleed bug is a manifestation of the C buffer length checking issue?

是的。

Is the heartbleed bug a manifestation of the classic buffer overflow exploit in C?

没有。 “经典”缓冲区溢出是您更多的数据写入堆栈分配的缓冲区,而不是它可以容纳的数据,其中写入的数据是由敌对代理提供的。恶意数据溢出缓冲区并覆盖当前方法的返回地址。当该方法结束时,它会返回到包含攻击者选择的代码的地址并开始执行它。

相比之下,heartbleed 缺陷不会覆盖缓冲区,也不会执行任意代码,它只是读取代码中的边界很可能在内存附近有敏感数据。

Why didn't the malicious use cause a segmentation fault when it tried to read another application's memory?

它没有尝试读取另一个应用程序的内存。该漏洞利用读取当前进程的内存,而不是另一个进程。

Why didn't the malicious use cause a segmentation fault when it tried to read memory out of bounds of the buffer?

这是这个问题的副本:

Why does this not give a segmentation violation fault?

段错误意味着您访问了操作系统内存管理器 尚未分配给您的页面。这里的错误是您在堆管理器未分配给您的有效页面上触摸了数据。只要页面有效,就不会出现段错误。通常,堆管理器会向操作系统请求一大块内存,然后将其分配给不同的分配。就操作系统而言,所有这些分配都在有效的内存页面上。

取消引用 null 是一个段错误,因为操作系统永远不会使包含零指针的页面成为有效页面。

更一般地说:编译器和运行时不需要确保未定义的行为导致段错误; UB 可以导致任何行为,包括什么都不做。有关此事的更多想法,请参阅:

Can a local variable's memory be accessed outside its scope?

对于我提示 UB 应该 始终等同于安全关键代码中的段错误,以及一些指向对漏洞静态分析的讨论的指针,请参阅今天的博客文章:

http://ericlippert.com/2014/04/15/heartbleed-and-static-analysis/

Would simply zero-ing the memory before writing to it (and then subsequently reading from it) have caused a segmentation fault?

不太可能。如果越界读取不会导致段错误,那么越界写入就不太可能。内存页是只读的可能,但在这种情况下似乎不太可能。

当然,后来将您不应该清零的所有类型的内存清零的后果是整个节目中的段错误。如果您稍后取消引用的那个清零内存中有一个指针,那就是取消引用 null,这将产生段错误。

does this vary between operating systems?

这个问题含糊不清。让我改一下。

Do different operating systems and different C/C++ runtime libraries provide differing strategies for allocating virtual memory, allocating heap memory, and identifying when memory access goes out of bounds?

是的; 不同事物不同

Or between some other environmental factor?

比如?

Apparently exploitations of the bug cannot be identified. Is that because the heartbeat function does not log when called?

正确。

surely any request for a ~64k string is likely to be malicious?

我没有跟上你的思路。使请求可能是恶意的是发送的字节数和请求回显的字节之间不匹配,而不是请求回显的数据大小。

关于c - heartbleed bug 是 C 中经典缓冲区溢出漏洞的表现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089964/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com