Heap Spray 技术

南宫松
2023-12-01

 Heap Spray 技术


1、堆喷射堆块大小 ≈ 程序堆块分配大小,以减小堆空隙大小。


2、不能使用堆缓存块,否则可能破坏地址的可预测性,可通过申请6块相应大小的堆块来清空缓存。


3、精确定位ROP地址,目标地址如0x0c0c0c0c至堆块数据起始地址的offset = ( 0x0c0c0c0c - UserPtr(堆数据起始地址))/2,IE7:0x5FA,IE8:0x5F4/0x5F6,IE9:0x5FC/0x5FE,Firefox9:0x606,可能不同语言版本会存在偏差。


4、不同系统、不同浏览器版本喷射块大小:

XP SP3 – IE7         block = shellcode.substring(2,0x10000-0×21);

XP SP3 – IE8         block = shellcode.substring(2, 0x40000-0×21);

Vista SP2 – IE7     block = shellcode.substring(0, (0x40000-6)/2);

Vista SP2 – IE8     block = shellcode.substring(0, (0x40000-6)/2);

Win7 – IE8           block = shellcode.substring(0, (0x80000-6)/2);

Vista/Win7 – IE9  block = shellcode.substring(0, (0x40000-6)/2);

XP SP3/VISTA SP2/WIN7 - Firefox9    block = shellcode.substring(0, (0x40000-6)/2);


5、Nozzle保护机制(IE):检测是否存在重复可转换成汇编代码的字段,若存在则阻止其内存申请。


6、BuBBle保护机制(Firefox):检测JavaScript是否尝试重复申请 NOPs + shellcode (padding + rop chain + shellcode + padding)的内存块,若发现包含这些字段则阻止其内存申请。


7、分配 随机数 + rop + shellcode + 随机数 的堆块,以保证各分配块都是不同的,以此绕过上述保护机制,主要针对

IE9。


8、利用随机变量名 + 随机块绕过 Firefox9 的保护。


9、HTML5 Heap Spray:EUSecWest2012上的演讲主题,通杀Chrome、Firefox、IE9和Safari

a、利用<canvas>标签定义图形,通过脚本控制每个像素的数据再进行喷射;

b、利用Web Worker的多线程功能,加速堆喷射过程,但IE不支持Worker。


 类似资料: