zcc1414

博客园 首页 联系 订阅 管理

ASLR (Address Space Layout Randomization)


解决方法 总结:

1 利用 未启用ASLR的模块的跳转 ,直接覆盖返回地址,!ASLRdynamicbase 查看未启用ASLR的模块中的跳转地址

注意输出并不可信,重启比较较好

2 基于SEH的exploit 那么 

!pvefindaddr nosafeseh 搜索没safeseh保护 

!pvefindaddr nosafesehaslr  搜索 safeseh和aslr都没启用的模块

注意输出并不可信,重启比较较好

然后例如  !pvefindaddr p esi xxxx.dll    寻找 pop pop ret     

3 部分覆盖进行定位内存地址 只用于memcpy等不截断字符串覆盖低字节



通过加载程序时候不再使用固定的基址加载,从而干扰shellcode定位的一种保护机制

windows Vista出现后,ASLR 才真正开始发挥作用

VS2005 添加 /dynmicbase 就可以支持 ASLR

VS2008 linker->Randomized Base Address 设置

包含 映像随机化,堆栈随机化,PEB+TEB随机化



查看 ASLR  插件显示

百度下:

ASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。据研究表明ASLR可以有效的降低缓冲区溢出攻击的成功率,如今Linux、FreeBSD、Windows等主流操作系统都已采用了该技术。

PE头文件中会设置 IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE标示来说明其支持 ASLR


1 映像随机化

经典的方法是用注册表项HKLM\SYSTEM\CurrentControlSet\Session Manager\Memory Management.的方法对映像随机化禁用  设置为0 禁用 ,-1强制对可随机化的映像进行处理,其他值正常工作

各模块的低位2位不变

只是对加载基址的前2个字节做了随机处理

2 堆栈随机化

XP 下 不具备, VISTA具备  每次获取堆地址不同

不需要精确跳转的  溢出手段影响有限

3 PEB TEB随机化

XP SP2中已经引入了,使用随机性的基址.

提取代码:

unsigned int teb;
unsigned int peb;
__asm
{
      mov eax,fs:[0x18]
      mov teb,eax
      mov eax,dword ptr [eax+0x30
      mov teb,eax]
}
printf("PEB:%#x\nTEB:%#x",peb,teb);
getchar();

ADOBE FLASH PLAYER ACTIVEX  在10后的版本开始全面支持 微软的安全特性,但10以前的可能并未支持SAFESEH ASLR



根据 http://en.wikipedia.org/wiki/Address_space_layout_randomization所述,在win7下,要用官方指定工具(The Enhanced Mitigation Experience Toolkit)禁用:

http://support.microsoft.com/kb/2458544


查看 ASLR  插件显示
posted on 2013-09-17 13:23  zcc1414  阅读(2074)  评论(0编辑  收藏  举报