1625-5 王子昂 总结《2018年1月2日》 【连续第459天总结】
A. ASLR
B.
简介
ASLR,即Address Space Layout Randomization 地址空间布局随机化
是一种用来针对漏洞利用的技术
当开启了ASLR时,PE文件每次加载到内存的起始地址都会随机变化,并且栈和堆的起始地址也会随机改变。
这样Payload中的内存地址就无法硬编码了,使得漏洞利用包括跳转、访问内存的难度都大大增大
使用
首先,OS的内核版本必须在6以上,即Windows Vista/Windows Server 2008以上
当不开启ASLR时,EXE文件的ImageBase默认为0x4000000,DLL文件的ImageBase默认为0x10000000
(DLL的ImageBase被占用时会自动进行重定位,无关ALSR)
VC++2010中可以在设置-链接器-高级中的/DYNAMICBASE选项来开关ASLR
标识
节区
开启ASLR的程序会多一个节区:.reloc,它被用作重定位的参考,但不是EXE文件的必需部分
(但DLL经常需要重定位,所以不可删除)
文件头
- 未开启ASLR的程序的IMAGE_FILE_HEADER的Characteristics选项的值中会多一个
0001 IMAGE_FILE_RELOCS_STRIPPED
而开启了ASLR的程序则无该属性
- 未开启ASLR的程序的IMAGE_OPTIONAL_HEADER的DLL Characteristics选项的值会少一个
0040 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
而开启了ASLR的程序则会有这个属性
修改时只需要删除第二项的属性即可去除ASLR
但添加时不可,因为开启ASLR功能的程序若无.reloc节区,运行时可能会因不正确的内存引用而报错
C. 明日计划
看书