gpt4 book ai didi

windows - 通过使用共享页面确定库地址绕过 Windows ASLR

转载 作者:可可西里 更新时间:2023-11-01 13:31:57 26 4
gpt4 key购买 nike

我对 ASLR 相当熟悉,但今天我听到了一个关于 Windows 中 ASLR 实现的有趣的新事实。

如果进程 A 和 B 加载相同的 dll,为了优化性能,Windows 只会将其加载到物理内存一次,并且两个进程将通过共享页面共享同一实例。

这已经是老新闻了..但有趣的是,进程 A 和 B 都会在同一个虚拟地址加载共享库(为什么??)。

在我看来,任何本地攻击(例如权限提升)都可以通过以下方式轻松绕过 ASLR:

1. Create a new dummy process
2. Check the address of dlls of interest (kernel32, user32 ..)
3. Attack the privileged process and bypass ASLR with the information from step 2.

我用 Olly 做了一些简单的测试,发现共享库确实加载在同一个虚拟地址。

如果真是这样,ASLR 对本地开发没有用吗?

最佳答案

您是对的,ASLR 几乎不能防御本地攻击者。它主要用于阻止远程攻击中的硬编码地址。

编辑:我之前回答中的一些细节不正确,但上述观点仍然成立。启用 ASLR 的 DLL 的基地址实际上是以下两者的函数:(1) Windows 在启动时从一组 256 个可能值中选择的随机偏移量; (2) DLL 的加载顺序,对于已知的 DLL, session 管理器在系统启动期间将其随机化。因此,仅知道随机偏移量不足以计算任意 ASLR'd DLL 的基地址。但是,如果您能够像您描述的那样直接观察共享内存中目标 DLL 的地址,那么所有的赌注都将失败。

资料来源: http://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdfWindows 内部原理,第 6 版

关于windows - 通过使用共享页面确定库地址绕过 Windows ASLR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com