Heartbleed bug 是 C 语言中经典缓冲区溢出漏洞的表现吗?

2024-04-04

在我们关于安全性的第一堂 CS 讲座中,我们了解了 C 的问题,即不检查所谓的缓冲区长度,以及利用此漏洞的不同方式的一些示例。

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

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

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

  3. 在写入内存之前将内存清零(然后随后从中读取)是否会导致分段错误?或者这在不同操作系统之间有所不同?或者在其他一些环境因素之间?

  4. 显然无法识别该错误的利用情况。是因为心跳函数调用时不记录日志吗?否则,任何对 ~64k 字符串的请求都可能是恶意的吗?


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

Yes.

Heartbleed bug 是 C 语言中经典缓冲区溢出漏洞的表现吗?

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

相比之下,心脏出血缺陷并不覆盖一个缓冲区,并且不execute任意代码,它只是reads内存中很可能存在敏感数据的代码超出范围。

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

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

为什么恶意使用尝试读取缓冲区越界内存时没有导致分段错误?

这是这个问题的重复:

为什么这不会给出分段违规错误? https://stackoverflow.com/questions/22994544/why-does-this-not-give-a-segmentation-violation-fault/22995901#22995901

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

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

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

局部变量的内存可以在其作用域之外访问吗? https://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope/6445794#6445794

对于我来说,UBshould始终相当于安全关键代码中的段错误,以及有关漏洞静态分析讨论的一些指示,请参阅今天的博客文章:

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

在写入内存之前将内存清零(然后随后从中读取)是否会导致分段错误?

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

当然,later将各种不应该存在的内存归零的后果是整个节目中的段错误。如果您稍后取消引用的清零内存中存在一个指针,则取消引用 null 会产生段错误。

这在不同操作系统之间有不同吗?

问题很模糊。让我重新表述一下。

不同的操作系统和不同的 C/C++ 运行时库是否提供了不同的分配虚拟内存、分配堆内存以及识别内存访问越界的策略?

Yes; 不同的事情是不同的.

或者在其他一些环境因素之间?

Such as?

显然无法识别该错误的利用情况。是因为心跳函数调用时不记录日志吗?

Correct.

肯定任何对 ~64k 字符串的请求都可能是恶意的吗?

我不按照你的思路。使请求可能是恶意的原因是发送的字节与请求回显的字节之间不匹配,而不是要求回显的数据大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Heartbleed bug 是 C 语言中经典缓冲区溢出漏洞的表现吗? 的相关文章

  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • (const T v) 在 C 中从来都不是必需的,对吗?

    例如 void func const int i 在这里 const是不必要的 因为所有参数都是按值传递的 包括指针 真的吗 C 中的所有参数确实都是按值传递 这意味着无论您是否包含该参数 实际参数都不会改变const or not 然而
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 选择列表逻辑应位于 ASP.NET MVC、视图、模型或控制器中的什么位置?

    我觉得我的问题与这个问题很接近 但我想对这样的代码应该放在哪里进行更一般的讨论 Asp Net MVC SelectList 重构问题 https stackoverflow com questions 2149855 asp net mv
  • SFINAE 如何使用省略号?

    过去 当使用 SFINAE 选择构造函数重载时 我通常使用以下内容 template
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • 为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?

    我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • .NET 客户端中 Google 表格中的条件格式请求

    我知道如何在 Google Sheets API 中对值和其他格式进行批量电子表格更新请求 但条件格式似乎有所不同 我已正确设置请求 AddConditionalFormatRuleRequest formatRequest new Add
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • C++、三元运算符、std::cout

    如何使用 C 用三元运算符编写以下条件 int condition1 condition2 condition3 int double result int or double std cout lt lt condition1 resul
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题

随机推荐