首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ROP攻击发生在缓冲区溢出检测之外?

为什么ROP攻击发生在缓冲区溢出检测之外?
EN

Stack Overflow用户
提问于 2014-12-12 16:51:47
回答 1查看 693关注 0票数 1

我在维基百科上读到这些关于ROP的句子:“面向返回的编程是堆栈崩溃攻击的高级版本。通常,当对手利用程序中的一个bug (通常是缓冲区溢出)操纵调用堆栈时,就会出现这些类型的攻击。”

这意味着如果缓冲区溢出没有发生,ROP就不会发生。但是有些编译器(在我的例子中是LLVM)支持检测缓冲区溢出,但是在它们中对ROP的防御是开放的。

我很困惑。有什么我没想过的吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-12 19:18:15

根据这篇维基百科文章

Clang支持三个缓冲区溢出检测器,即AddressSanitizer (-fsanitize=address)、-fsanitize=bounds和SafeCode。这些系统在性能损失、内存开销、和检测到的bug类方面有不同的权衡。

因此,它只能检测某些类型的bug(并不是所有的),这意味着它有错误的负数。

问题主要在于对程序的任何静态分析都不能像一般的那样既健全又完整。也就是说,任何试图检测缓冲区溢出的静态分析都会有假阳性和/或假阴性。这是赖斯定理的必然结果,它直观地指出,程序的任何非平凡性质通常都是不可判定的。这里的单词“(一般是)”对于所有程序来说都很重要。

假阳性是指静态分析将程序语句标记为缓冲区溢出(而不是缓冲区溢出)。假负是指静态分析将程序语句标记为安全缓冲区访问(而不是安全缓冲区访问)。

在许多领域中最广泛采用的方法不仅仅是缓冲区溢出检测(例如基于签名的入侵检测),就是容忍假阴性,而不是假阳性,因为否则错误阳性会太多,会淹没程序员并掩盖真正的问题。如果检测问题是可判定的,但太复杂(例如,NP-难),则该方法也被应用于解决问题。说到底,近似贯穿于计算机科学

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27448333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档