Heap Spraying
什么是Heap Spraying在计算机安全领域中,Heap Spraying(堆喷射)是一种较易获得任意代码执行Exploit的技术手段。这个短语同样用于描述一套Exploit源码中采用此技术的代码部分。在一般情况下,堆喷射代码试图将自身大面积地分配在进程堆栈中,并且以正确的方式将命令写满这些区域,以此实现在目标进程的内存中预定的位置写入一串命令。它们通常利用了堆喷射代码执行时这些堆栈区域总是在同一位置的这一特性。
Heap Spraying的历史Heap Spraying在编写Exploit中的应用至少始于2001年[1],但是这项技术在一系列针对于IE[2][3][4][5][6]的大面积漏洞而编写Expolit时被采用后,开始普遍用于Web浏览器的Exploit编写。Heap Spraying技术在这些Exploit的开发应用上十分相似,这体现了它的广谱性和可移植性(各Exploit间无需做大的改动)。它被证实是易懂易用的,能被新手hackers加以利用,快捷地为各种浏览器和浏览器插件漏洞编写可用的Exploit。许多采用Heap Spraying开发的浏览器Exploit,只要在前一个版本的Exploit基础上更改一小处代码,便能触发漏洞。
执行方式JavaScript方式针对浏览器的堆喷射一般通过JavaScript执行,即向heap提交超长的由同一字母组成的Unicode字符串,这种字符串不断复制自身并追加在原字符串末尾。这样,字符串的长度会呈指数增大至脚本引擎允许的最大长度。当达到预期的长度时,一条指令将会加到字符串的末尾。Heap Spraying代码复制下这一带有指令的字符串并存储为一数组,使得Exploit的目标内存区域被指令所覆盖。VBScript有时(尽管很少)也用来生成字符串,因为其string函数更加简单。图像方式尽管Heap Spraying证实可被用于其他方式执行,比如被进程加载图片文件时触发,但并不多见。