Windows安全机制——ASLR(地址随机化)及如何关闭ASLR。

最近在分析一个样本的时候,遇到了地址随机化的现象,所以对地址随机化的原理和解决方案进行总结。

ASLR 地址随机化

    • ASLR 地址随机化介绍
    • ASLR 目的是什么?
    • 如何使用ASLR机制
    • 开启ALSR的现象
    • 我是如何关闭ASLR的

ASLR 地址随机化介绍

ASLR(Address Space Layout Randomization,地址空间布局随机化)是一种针对缓冲区溢出的安全保护技术。借助ASLR,PE文件每次加载到内存的起始地址都会随机变化。
ASLR会随机化地址:1、堆地址 2、栈地址 3、PE文件加载基址 4、PEB与TEB地址

ASLR 目的是什么?

首先ASLR属于内存保护机制的一种机制

1.http://www.arkteam.net/?p=2728
在经典的栈溢出模型中,攻击者可以通过覆盖函数的返回地址,以达到控制程序执行流程的目的。通常将返回地址覆盖为0x7FFA4512 ,即JMP ESP指令。如果此时ESP刚好指向栈上布置的Shellcode,则Shellcode被执行。
Windows安全机制——ASLR(地址随机化)及如何关闭ASLR。_第1张图片
在以此类漏洞为目标的漏洞利用代码(Exploit code)中,必须确定一个明确的跳转地址,并以硬编码形式编入。
ASLR的加入,使得加载程序的时候不再使用固定的基址,从而干扰Shellcode定位。

2.因为PE每次加载到内存的起始位置会随机变化,会对逆向分析产生一定的影响。

如何使用ASLR机制

Windows XP 之后的系统(内核版本 NT 6+)都默认打开了 ASLR 功能,可以在注册表中添加开关禁用。

ASLR需要操作系统和程序自身的双重支持,操作系统方面从Windows Vista开始采用该技术,编译器上于Visual Studio 2005 SP1加入/dynamicbase链接选项支持随机基址。
所以我们只需要在编译的时候,修改链接器->高级->随即基址。
Windows安全机制——ASLR(地址随机化)及如何关闭ASLR。_第2张图片
设置完成后,我们可以查看属性是否改变。

PE文件->PE可选头->Dll Characteristic
在这里插入图片描述
Windows安全机制——ASLR(地址随机化)及如何关闭ASLR。_第3张图片
Windows安全机制——ASLR(地址随机化)及如何关闭ASLR。_第4张图片

开启ALSR的现象

在调试程序的时候,因为地址随机化,每次调试地址都不一样,很是影响调试效果。

关闭后文件总是加载到以400000为基址的地址范围内,代码的地址和IDA中也一直,所以大大方便分析

我是如何关闭ASLR的

1.通过修改注册表关闭ASLR

修改注册表,win+r,输入regedit即可打开注册表,新建注册表项
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\Memory Management] “MoveImages”=dword:00000000
开启方法则删除对应的注册表项即可。

2.通过修改PE的Dll Characteristic属性关闭ALSR
将PE中8140数据改为8100
Windows安全机制——ASLR(地址随机化)及如何关闭ASLR。_第5张图片

关闭前:
在这里插入图片描述
关闭后:
在这里插入图片描述

这里推荐一个大佬自己写的小工具:

Windows安全机制——ASLR(地址随机化)及如何关闭ASLR。_第6张图片
下载地址:https://www.52pojie.cn/forum.php?mod=viewthread&tid=538099

参考:
http://www.arkteam.net/?p=2728

https://blog.csdn.net/m0_37809075/article/details/83041090?utm_source=blogxgwz7

https://blog.csdn.net/wenrennaoda/article/details/101235697

https://blog.csdn.net/xiaoi123/article/details/80610467

你可能感兴趣的:(安全攻防技术,Windows操作系统)