问题标签 [aslr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encryption - 熵低时地址空间布局随机化 (ASLR) 的行为
根据 < this > 问题,一个进程(如 cat)从随机池中读取熵以进行地址空间随机化(ASLR)。
为了检查 ASLR 行为,我手动耗尽了熵,如下所示
- 1) cat /dev/random 耗尽所有可用的熵。
- 2) cat /proc/sys/kernel/random/entropy_avail 检查可用熵。
第二个 cat 进程没有阻塞,即使熵刚刚完全耗尽。所以看起来 ASLR 似乎工作正常(?)即使熵不够。
我的问题是当熵真的很低时,ASLR 的预期行为是什么?由于它没有从 /dev/random 读取的随机位,它会使用其他算法在内部生成熵吗?
memory - gdb 中的禁用随机化不起作用
gdb
变量disable-randomization
是ON
,但变量的内存地址在不同的运行时仍然会发生变化 。
第一次运行:
第二次运行:
我期待内存位置的值相同,因为禁用随机化已打开。
windows - ASLR 是否意味着不需要重新定位 dll?
我是否认为如果我们使用ASLR在构建过程中重新定位我们的 dll 没有意义,因为无论如何当内核加载它们时,这些 dll 都会再次重新定位?
我担心我们的应用程序经常在终端服务机器上使用。因此,如果在加载时发生 rebase,我们最终可能会为加载它们的每个进程重新设置 dll(每个会话将有一个进程)。这将导致比我们想要支付的更多的内存使用和分页。我需要担心吗?
我发现以下博客文章说变基只发生一次并且它是系统范围的:Matt Evans - 启用 ASLR 以节省内存?. 我还没有看到任何关于此的其他参考资料,所以只是想确定我是否使用 ASLR 并且在我们的构建过程中不进行变基,我不会在终端服务框上造成内存问题?
linux - 如何从 ELF 文件中禁用地址随机化 (ASLR)?
已解决: 解决方案是调用个性(0x40000)。请参阅下面的评论中的详细信息。
ASLR 标志位于 ELF 文件中的什么位置?我需要为特定库 (.so) 禁用 ASLR。我试过使用 objdump,但我不知道怎么做。
我不能使用 /proc 因为它似乎不适用于我的 Android 4.4.4,所以我正在尝试修改二进制文件。
编辑: 我编译了以下内容:
没有 ASLR (PIE):
使用 ASLR (PIE):
noPIE 二进制文件确实没有被随机化,即使:
c - 32 位 ASLR - 范围?
我知道可以在我的机器上使用的程序堆栈的最大大小是 8192 KB(根据ulimit -a | grep "stack size"
)。
我也知道 Linux 使用 ASLR。我使用带有 gcc compilerflag 的 64 位系统-m32
。
因此,局部变量的总量是否最多只能占用 8192 KB?在这个最大值被占用之前它是否有可能接触到堆?还是堆会照顾不增长太多?
根据 ASLR,局部变量的可能地址范围是多少?我可以在地址 0xf740d25a、0x7ffXXXXXX、0xaXXXXXX 或 0x1XXX 创建一个局部变量,其中 X 是任何十六进制数字吗?
android - 如何在电话间隙应用程序中实现地址空间布局随机化 (ASLR)
我们正在构建电话差距应用程序。我们的应用程序目前正在使用 Internet、Gallery、Camera、后台服务。在这一点上,我们在客户端没有任何敏感记录(但可能在将来)。出于这个原因,我们的一些对应用程序提出要求的客户会使用地址空间布局随机化 (ASLR)。我目前不知道这是否已经启用。如何在电话间隙应用程序中实现这一点,或者是否有任何电话间隙插件支持 ASLR?
https://en.wikipedia.org/wiki/Address_space_layout_randomization
hex - gproftools 分析中的十六进制函数名称
在使用 gproftools(谷歌分析器)进行 CPU 分析后,它会将一些函数名称显示为十六进制值。
根据https://groups.google.com/forum/#!topic/google-perftools/7sdO7wrPUpE的最后评论,问题看起来像是由ASLR引起的 但我不明白为什么很少有函数名称是十六进制值而其他都是正常的。
分析的样本输出。
16 0.40% 86.80% 16 0.40% 00007f05e018bc5d
16 0.40% 87.20% 36 0.90% _IO_file_xsgetn
16 0.40% 87.60% 16 0.40% __memcpy_sse2
16 0.40% 88.00% 16 0.40% __tls_get_addr
15 0.40% 88.40% 15 0.40% __GI___libc_free
15 0.40% 88.70% 15 0.40% __GI_strlen
c++ - 为什么每次局部变量的地址都不一样?
我问过谷歌并对 StackOverflow 做了一些研究。我的问题是,当我main()
在 C++ 程序中输入函数并声明第一个变量时,为什么这个变量的地址会因不同的执行而不同?请参阅下面的示例程序:
执行 1 的结果:
执行 2 的结果:
执行 3 的结果:
正如你所看到的,我在不同的执行中得到不同的结果。输出的第一行对应于分配内存的地址,这应该发生在堆中——如果它们每次都分配不同的地址,这对我来说有点道理。然而,即使我打印了局部变量的地址——对应于第二行——结果仍然不同。
乍一看,我认为这是因为程序正在打印物理内存地址,但这篇文章Virtual Memory or Physical Memory反驳了我最初的想法。鉴于程序的执行是“相同的”,没有线程,没有用户输入等,是否有任何理由仍然存在具有不同地址的内存分配?
测试环境:
- Linux 14.04
- Mac OS X 10.10
windows - 在 Windows 上以固定基地址加载 FIPS OpenSSL DLL
FIPS 验证的 OpenSSL 库必须在固定地址加载 libeay32.dll。例如,这表明在:.NET 中已占用固定地址
使用以下描述的技术:IIS7 App Pool can't load library with Fixed Base Address和 How do you disable ASLR (address space layout randomization) on Windows 7 x64? ,以及 如何在不链接 kernel32.dll 和 ntdll.dll 的情况下运行 PE 映像,我已经尽可能早地强制加载 FIPS DLL。
对于 64 位进程,从 ListDLLs 输出中,我看到加载顺序为:
对于 32 位进程,还有一些额外的“哇”的废话,即:
现在,这与我一开始的情况相比有了巨大的改进,现在出现“0xc0000018 无法在 FIXED 地址加载错误”的机会比 LIBEAY_FIPS32.dll 在加载到进程中的第 25 个 DLL 左右时要低得多。
但是,考虑到这些系统 DLL 是可重定位的并且可能会受到 ASLR 的影响,我预计仍然可能出现加载失败。
虽然我不想关闭 Windows ASLR,但我想以某种方式告诉 ASLR“请避免使用以下 FIXED 地址范围,因为我确实需要在该地址加载 FIXED DLL”。有没有办法做到这一点?
或者某种方式来控制一个或多个的加载地址:ntdll.dll、kernel32.dll、kernelbase.dll?
如果做不到这一点,是否有任何方法可以强制 FIPS openssl dll 在以下一项或多项之前加载到进程中:ntdll.dll、kernel32.dll、kernelbase.dll?