ASLR技术

简述

ASLR(Address Space Layout Randmoization,地址空间布局随机化)是一种针对于缓冲区溢出的安全保护技术。

windows 内核版本

OS内核版本
windows 20005.0
windows XP5.1
windows Server 20035.2
windows Vista6.0
windows Server 20086.0
windows Server 2008 R26.1
windows 76.1

微软从windows Vista开始升级采用新的Major Kernel Version 6(Major版本号从5升级为6约用了7年)。微软从windows Vista(Kernel Version 6)开始使用ASLR技术,以进一步加强系统安全性

ASLR

借助ASLR技术,PE文件每次加载到内存的起始地址都会随机变化,并且每次运行程序时相应进程的栈以及堆的起始地址也会随机变化。即每次EXE文件运行时加载到进程内存的实际地址都不同,最初加载DLL文件时装载到内存中的实际地址也是不同的

微软改用这种方式加载PE文件的原因何在呢?是为了增加系统安全性。大部分windows OS 安全漏洞(一般为缓冲区溢出)只出现在特定的OS,特定模块,特定版本中。以这些漏洞为目标的漏洞实利用代码(exploit code),特定内存地址以硬编码形式编入(因为在以前的OS中,根据OS版本不同,特定的DLL总会加载到固定的地址)。因此,微软采用了这种ASLR技术,增加了恶意用户编写漏洞利用代码的难度,从而降低了利用OS安全漏洞破坏系统的风险(UNIX/Lunix OS等都已采用了ASLR技术

visual c++

请注意,并不是所有的可执行文件都自动应用了ASLR技术。如上所述,OS的内核版本必须为6以上,并且使用的编程工具得支持/DYNAMICBASE选项,一般使用VS创建可执行程序时,Exe 的Imagebase默认为0x400000,dll文件的Imagebase默认为0x10000000,但如果编译它们的时候,如果默认开启了/DYNAMICBASE选项,那么ASLR技术就会被应用到编译的文件之中

在这里插入图片描述
在这里插入图片描述

若不想应用ASLR技术,只需将“随机基址”选项改为“/AYNAMICBASE:NO”即可,如下图
在这里插入图片描述

ASLR.exe

采用了ASLR技术的EXE:

第一次载入OD:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二次载入OD:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

未采用了ASLR技术的EXE:

第一次载入OD:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二次载入OD:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:

采用了ASLR技术生成的exe,如果使用的操作系统是VISTA以上版本的,那么每次运行时地址都会随机变化。如果为采用ASLR技术生成的exe,EP代码地址与栈地址未变化,就像在XP系统看到的系统

节区信息

在这里插入图片描述
左侧为采用ASLR技术的exe程序,右侧为未采用ASLR技术的exe程序,可以清楚地看到左侧多出1个名为“.reloc”的节区。

一般而言,普通的exe程序中是不存在.reloc节区的,该节区仅在应用了ASLR技术中的程序才会出现,它是在编译时由编译器生成并保留在可执行文件中的。PE文件被加载到程序时,该节区被用作重定位的参考,它不是exe程序的运行的必需部分,可将其从PE文件中删除(但是由于DLL文件中总是需要重定位,所以在DLL文件中不可将其删除)。最重要的部分是IMAGE_FILE_HEADER\CharacteristicsIMAGE_OPTIONAL_HEADER\DLL_Characteristics这2个字段

IMAGE_FILE_HEADER\Characteristics

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

各位看加载的名字都能看出哪一个是采用了ASLR技术,哪一个是未采用ASLR技术。对于拥有.reloc节区的ASLR.exe程序来说,IMAGE_FILE_HEADER\Characteristics属性字段并不存在IMAGE_FILE_RELOCS_STARIPPED(1)标志(由于ASLR.exe程序中多出一个.reloc节区,所以Number of Sections值增1)

IMAGE_OPTIONAL_HEADER\DLL_Characteristics

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ASLR.exe程序的IMAGE_OPTIONAL_HEADER\DLL_Characteristics中设有IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE(40)若VS中开启了/DYNAMICBASE选项,编译程序文件时就会设置上该标志值

删除ASLR功能

我们使用hex Editor工具修改ASLR.exe程序,以此来删除ASLR功能,从上可知,IMAGE_OPTIONAL_HEADER\DLL_Characteristics中设有IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE(40)标志,删除它即可删除ASLR功能。即在hex editor中将DLL属性值由8140改成8100(位于146偏移处的WORD值)
在这里插入图片描述
在这里插入图片描述
修改后:(这里我用CFF修改的)
在这里插入图片描述
在这里插入图片描述
ASLR_edit拖进OD尝试一下,gogogo

第一次载入OD:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

第二次载入OD:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

好家伙,成功了,普天同庆!!!!

补充

当然,也可以通过修改PE文件头向文件中添加ASLR功能,但这样做没有什么意义,所以一般都不会这么做,因为,向没有重定位节区(.reloc)的PE文件添加ASLR功能后,文件运行时可能会因为不正确的内存引用而发生错误。

如果一个要详细分析的文件应用了ASLR功能,分析前可以暂时将ASLR功能删除,然后再调试分析,由于文件总是被加载到相同的内存地址,所以分析起来会比较方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值