NOP 雪橇如何工作?

问题描述 投票:0回答:3

我找不到回答这个问题的好来源。我知道 nop sled 是一种用于在缓冲区溢出攻击中规避堆栈随机化的技术,但我无法理解它是如何工作的。

有什么简单的例子来说明这个方法?

128 字节 nop sled 等术语是什么意思?

c assembly stack buffer-overflow no-op
3个回答
108
投票

一些攻击包括使程序跳转到特定地址并从那里继续运行。注入的代码必须事先以某种方式加载到该确切位置。

堆栈随机化和其他运行时差异可能会使程序将跳转的地址无法预测,因此攻击者将NOP雪橇放置在大范围的内存中。如果程序跳转到雪橇中的任何位置,它将运行所有剩余的 NOP,不执行任何操作,然后将运行有效负载代码,就在雪橇旁边。

攻击者使用 NOP sled 的原因是为了使目标地址更大:代码可以跳转到 sled 中的任何位置,而不是正好跳转到注入代码的开头。

一个 128 字节的 NOP sled 只是一组 128 字节宽的 NOP 指令。

注#1:NOP(无操作)是大多数(所有?)架构中可用的指令,除了占用内存和一些运行时之外,不执行任何操作。

注意#2:在具有可变长度指令的体系结构中,NOP 指令通常只有一个字节长度,因此可以用作方便的指令填充。不幸的是,这也使得 NOP 雪橇变得很容易。


6
投票

补充 Rodrigo 的解释 - 即使使用 NOP 雪橇,也必须提前预测缓冲区在内存中的大致位置。一种近似内存位置的技术是使用附近的堆栈位置作为参考框架。通过从此位置减去偏移量,可以获得任何变量的相对地址。

旁注:在 x86 架构上,NOP 指令相当于十六进制字节 0x90,因此完整的漏洞利用缓冲区可能如下所示:

| NOP 雪橇 |外壳代码 |重复返回地址|

看起来好像 EIP 寄存器指向 NOP sled 中找到的任何地址,它会在执行每个 NOP 指令时递增,一次一个,直到它最终到达 shellcode


0
投票

这是一个有趣的(也许更容易理解)示例: https://ir0nstone.gitbook.io/notes/types/stack/nops

© www.soinside.com 2019 - 2024. All rights reserved.