软件安全实验——pre7(JIT spray、heap spray、SEH绕过DEP漏洞预习)

一级目录

1、详细解释一下JIT spray以及heap spray是什么?

答:
(1)
JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT可以加快脚本代码的执行。在浏览器中通常会使用JIT。JIT编译器对于攻击者来说是一个很大的攻击面,存在各种各样的攻击,例如: 1. JIT-Spray 2. JIT-based code-reuse att漏洞攻击技术控制程序流,使得程序执行到堆上,最终将导致shellcode的执行。
传统slide code(滑板指令)一般是NOP指令,但是随着一些新的攻击技术的出现,逐渐开始使用更多的类NOP指令,譬如0x0C(0x0C0C代表的x86指令是OR AL 0x0C),0x0D等等,不管是NOP还是0C,他们的共同特点就是不会影响shellcode的执行。使用slide code的原因下面还会详细讲到。
Heap Spray只是一种辅助技术,需要结合其他的栈溢出或堆溢出等等各种溢出技术才能发挥作用。
Heap Spray第一次被用于漏洞利用至少是在2001年,但是广泛被使用则应该是2005年,因为这一年在IE上面发现了很多的漏洞,造成了这种利用技术的爆发,而且在浏览器利用中是比较有效的。另一个原因是这种利用技术学习成本低,通用性高并且方便使用,初学者可以快速掌握。
因此,Heap Spray是一种通过(比较巧妙的方式)控制堆上数据,继而把程序控制流导向ShellCode的古老艺术。

2、解释一下老的windows操作系统下面利用SEH绕过DEP的原理和过程。

SEH(“Structured Exception Handling”),即结构化异常处理是windows操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。
DEP是数据执行保护的英文缩写,全称为Data Execution Prevention。数据执行保护(DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。
第一步:Fuzz,触发漏洞
第二步:利用no-safeSeh模块地址覆盖seh,绕过safesef,并返回到准备的数据缓冲区。
第三步:利用no-safeseh模块内的add esp num; retn(num > 0x909)绕过no-safeseh。
第四步:关闭dep,指向shellcode。

如果在启用DEP后,就不能使用pop pop ret地址了,而应采用pop reg/pop reg/pop esp/ret 指令的地址,指令pop esp 可以改变堆栈指针,ret将执行流转移到nseh 中的地址上(用关闭NX 例程的地址覆盖nseh,用指向pop/pop/pop esp/ret 指令的指针覆盖异常处理器)。