admin管理员组文章数量:1565769
文章目录
- Windows安全机制
- 地址随机化:ASLR机制
- 原理
- 映像随机化
- 堆栈随机化
- PEB与TEB随机化
- 绕过
- 攻击未启用ASLR的模块
- 利用部分覆盖进行定位内存地址
- 利用Heap spray进行内存地址定位
- 利用Java applet heap spray定位内存地址
- 为控件禁用ASLR
Windows安全机制
微软关于内存保护机制
- GS编译技术
- SEH的安全校验机制
- Heap Cookie,Safe Unlinking等一系列堆安全机制
- DEP数据执行保护
- ASLR加载地址随机
- SEHOP SEH的覆盖保护`
地址随机化:ASLR机制
原理
地址随机化需要程序自身和操作系统的双重支持,会在PE头中设置IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE标识来说明支持ASLR。
编译器可以在这里设置,其中地址随机化包含了映像随机化,堆栈随机化,PEB与TEB随机化
映像随机化
在PE文件映射到内存时,对加载虚拟地址进行随机化处理,系统重启这个地址是变化的。
出于兼容性考虑,这个选项也可以通过注册表关闭
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\MoveImages
当为-1时,强制随机化
当没有时可以新建
堆栈随机化
堆栈的基址是打开程序的时候确定的,同一个程序任意两次运行时的堆栈基址是不同的。
PEB与TEB随机化
微软在xp sp2之后不再使用固定的PEB基址0x7FFDF000和TEB基址0x7FFDE00
mov eax,FS:[0x18]
mov teb,eax
mov eax,dword ptr[eax+0x30]
mov peb,eax
这样也可以快速确定TEB和PEB的地址
绕过
对于映像随机化,虽然模块的加载地址变了,但低2个字节不变。
对于ASLR堆栈随机化,可以使用JMP esp和heap spray等绕过限制
对于PEB和TEB的随机化,也是可以通过FS的偏移来定位的
攻击未启用ASLR的模块
Flash Player ActiveX9.0.262是没有开启ASLR模块的。Flash9k.ocx的加载基址是固定的。
环境要求Windows Vista SP0
利用部分覆盖进行定位内存地址
只覆盖返回地址的低2位,因为高两位会变。注意到eax的值正好是shellcode的起始位置,所以我们可以在返回地址处覆盖一个jmp/call eax
在这个模块中搜索指令jmp/call eax,地址为00401430,其中高两位0040会变,而1430不会变。所以把返回地址的低两位覆盖为1430即可。
但是成功跳转到shellcode位置,shellcode确未成功执行。
利用Heap spray进行内存地址定位
利用Java applet heap spray定位内存地址
为控件禁用ASLR
版权声明:本文标题:Windows安全机制---地址随机化:ASLR机制 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1726108922a1055737.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论