NOP雪橇如何工作?

时间:2013-02-07 20:41:05

标签: c assembly stack buffer-overflow nop

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

说明这种方法的简单例子是什么?

像128字节的nop雪橇这样的术语是什么意思?

2 个答案:

答案 0 :(得分:69)

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

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

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

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

注意#1:NOP(No-OPeration)是大多数(所有?)体系结构中可用的指令,除了占用内存和某些运行时之外什么都不做。

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

答案 1 :(得分:1)

添加到罗德里戈的解释 - 即使使用NOP雪橇,也必须提前预测缓冲区在内存中的大致位置。用于近似存储器位置的一种技术是使用附近的堆栈位置作为参考帧。通过从该位置减去偏移量,可以获得任何变量的相对地址。

SIDE注意:在x86架构上,NOP指令相当于十六进制字节0x90,因此完整的漏洞利用缓冲区看起来像这样:

  

| NOP雪橇| Shellcode |重复返回地址|

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