首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >金丝雀能防止返回到libc和面向返回的编程攻击吗?

金丝雀能防止返回到libc和面向返回的编程攻击吗?
EN

Stack Overflow用户
提问于 2011-04-06 23:00:40
回答 2查看 5.7K关注 0票数 13

我正在尝试理解,如果使用金丝雀,是否/如何可能利用返回到libc和面向返回的编程漏洞。

一个金丝雀将被放在堆栈上,位于返回值和要溢出的缓冲区之间,并且需要被覆盖,以便将返回值更改为库函数或计算的位置。金丝雀出现于1997年(StackGuard),ROP是2007年首次引入的一种技术(Shacham)。

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

EN

回答 2

Stack Overflow用户

发布于 2012-04-26 22:03:35

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

不,它不是。它使执行return- to -libc或ROP变得更加困难,但它绝对不是抵御此类攻击的灵丹妙药。

首先,堆栈金丝雀只能通过缓冲区溢出来防止返回地址崩溃。但还有其他方法可以损坏内存:indirect pointer overwriteformat string vulnerabilities

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

第三,尽管这些攻击被称为return- to -libc和Return - Oriented Programming,但是谁说我们需要返回指令来执行这些攻击呢?这些攻击可以通过破坏处理器将从其加载和寻址到的任何存储器位置来发起。最常见的例子是函数指针。但我们也可以覆盖GOTlongjmp缓冲区。(顺便说一句,已经表明ROP可以在without using return instructions!)

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

票数 19
EN

Stack Overflow用户

发布于 2011-04-13 16:52:15

这是一个网站,解释了与gcc创作的金丝雀。http://xorl.wordpress.com/2010/10/14/linux-glibc-stack-canary-values/。由于金丝雀是在ret指令执行之前检查的,因此如果覆盖金丝雀(在大多数情况下,您必须这样做才能覆盖堆栈上的返回地址),您的利用将会失败。由于ROP和Return to Lib c也会覆盖返回地址,因此这两种方法都不起作用。

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

https://stackoverflow.com/questions/5568538

复制
相关文章

相似问题

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