堆栈和堆溢出漏洞利用不再有效吗?

信息安全 堆溢出
2021-08-29 13:48:31

是否所有新的操作系统都实施了no execute bit以克服可用于执行恶意代码的漏洞?例如,它是否在Win7这是否意味着传统的堆栈和堆溢出漏洞利用方式不再有效?

3个回答

“传统方式”可能意味着任何东西。我假设您指的是缓冲区溢出,其中返回地址被内存上的攻击者控制的地址替换以执行 artbitrary 代码。是的,NX 位可以缓解这种情况。但不是。这并不能阻止攻击者使用其他机制,例如使用 ROP 小工具链接指令以有效执行他们选择的代码的面向返回的编程。

我之前也有同样的疑问,但我意识到堆栈和堆溢出不会在不久的将来消失。Windows、Linux、Solaris 和其他流行的操作系统都启用了保护机制,从而大大减少了这些攻击。另一方面,想想移动平台。固件,通常是很久以前用 C 语言编写的基带代码,仍然容易受到这些攻击,并且这些系统可能没有上述保护机制。

This answer是了解更多保护机制的绝佳读物。您关于 NX 的具体问题也包含在此处

克服无执行位的一种方法是完全使用不同的溢出目标。人们过于关注 shell 代码风格的溢出漏洞,而忽略了大部分存在的漏洞。例如,您可以溢出到其他数组甚至字符串。你不需要破坏堆栈或堆状态来利用缓冲区溢出,你只需要让程序做一些它不应该做的事情。你可以溢出到:

  • 外壳字符串
  • SQL 字符串
  • 任何包含解释语言的字符串
  • 仅在内存中以明文形式存在的加密密钥或数据

这些都不需要在被利用的进程中执行任何 shell 代码。许多相同的技术(例如喷涂、哨兵雪橇)都适用。

Windows 自 XP SP 2 起就有数据执行保护,但默认情况下并不总是启用它,并且可以为特定应用程序禁用它。

因此,许多堆栈破解漏洞将被阻止,但可能不是全部。

至于“所有新闻操作系统”,YMMV。最好问具体的。