gpt4 book ai didi

security - 金丝雀是否可以防止返回到 libc 和面向返回的编程攻击?

转载 作者:行者123 更新时间:2023-12-01 16:36:21 26 4
gpt4 key购买 nike

我试图了解如果使用金丝雀,返回到 libc 和面向返回的编程漏洞是否/如何可能。
金丝雀将被放置在堆栈上的返回值和要溢出的缓冲区之间,并且需要被覆盖才能将返回值更改为库函数或计算的位置。 Canary 自 1997 年 (StackGuard) 以来就已出现,而 ROP 是 2007 年首次引入的技术 (Shacham)。

金丝雀会使这些类型的攻击变得不可能吗?

最佳答案

Does a canary make these types of attacks impossible?

不,事实并非如此。它使得执行 return-to-libc 或 ROP 变得更加困难,但它绝对不是对抗此类攻击的 Elixir 。

首先,堆栈金丝雀只能防止由于缓冲区溢出而导致返回地址崩溃。但还有其他方法可以破坏内存:indirect pointer overwriteformat string vulnerabilities仅举两个例子。

其次,可以通过用原始值覆盖堆栈金丝雀来绕过它们。我并不是说这在现代实现中很容易,但它肯定不是不可能

第三,虽然这些攻击被称为返回-to-libc和返回面向编程,但谁说我们需要返回指令来执行这些攻击?这些攻击可以通过破坏处理器将从中加载和跳转到的任何内存位置来发起。最常见的例子是函数指针。但我们也可以覆盖 GOTlongjmp 缓冲区。 (顺便说一句,已经证明可以执行 ROP without using any return instructions!)

第四个原因不是堆栈金丝雀本身的弱点,而是大多数实现之一。堆栈金丝雀通常只放置在具有基于堆栈的字符缓冲区且大小至少为 8 的函数中。因此,这些实现不会检测其他缓冲区中的溢出。 This exploit在整数数组中使用了溢出,因此堆栈金丝雀无法检测到它。

关于security - 金丝雀是否可以防止返回到 libc 和面向返回的编程攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5568538/

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