问题标签 [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.

0 投票
0 回答
147 浏览

encryption - 熵低时地址空间布局随机化 (ASLR) 的行为

根据 < this > 问题,一个进程(如 cat)从随机池中读取熵以进行地址空间随机化(ASLR)。

为了检查 ASLR 行为,我手动耗尽了熵,如下所示

  • 1) cat /dev/random 耗尽所有可用的熵。
  • 2) cat /proc/sys/kernel/random/entropy_avail 检查可用熵。

第二个 cat 进程没有阻塞,即使熵刚刚完全耗尽。所以看起来 ASLR 似乎工作正常(?)即使熵不够。

我的问题是当熵真的很低时,ASLR 的预期行为是什么?由于它没有从 /dev/random 读取的随机位,它会使用其他算法在内部生成熵吗?

0 投票
0 回答
892 浏览

memory - gdb 中的禁用随机化不起作用

gdb变量disable-randomizationON,但变量的内存地址在不同的运行时仍然会发生变化 。

第一次运行:

第二次运行:

我期待内存位置的值相同,因为禁用随机化已打开。

0 投票
2 回答
1520 浏览

windows - ASLR 是否意味着不需要重新定位 dll?

我是否认为如果我们使用ASLR在构建过程中重新定位我们的 dll 没有意义,因为无论如何当内核加载它们时,这些 dll 都会再次重新定位?

我担心我们的应用程序经常在终端服务机器上使用。因此,如果在加载时发生 rebase,我们最终可能会为加载它们的每个进程重新设置 dll(每个会话将有一个进程)。这将导致比我们想要支付的更多的内存使用和分页。我需要担心吗?

我发现以下博客文章说变基只发生一次并且它是系统范围的:Matt Evans - 启用 ASLR 以节省内存?. 我还没有看到任何关于此的其他参考资料,所以只是想确定我是否使用 ASLR 并且在我们的构建过程中不进行变基,我不会在终端服务框上造成内存问题?

0 投票
2 回答
4627 浏览

linux - 如何从 ELF 文件中禁用地址随机化 (ASLR)?

已解决: 解决方案是调用个性(0x40000)。请参阅下面的评论中的详细信息。

ASLR 标志位于 ELF 文件中的什么位置?我需要为特定库 (.so) 禁用 ASLR。我试过使用 objdump,但我不知道怎么做。

我不能使用 /proc 因为它似乎不适用于我的 Android 4.4.4,所以我正在尝试修改二进制文件。

编辑: 我编译了以下内容:

没有 ASLR (PIE):

使用 ASLR (PIE):

noPIE 二进制文件确实没有被随机化,即使:

0 投票
0 回答
359 浏览

c - 32 位 ASLR - 范围?

我知道可以在我的机器上使用的程序堆栈的最大大小是 8192 KB(根据ulimit -a | grep "stack size")。

我也知道 Linux 使用 ASLR。我使用带有 gcc compilerflag 的 64 位系统-m32

  1. 因此,局部变量的总量是否最多只能占用 8192 KB?在这个最大值被占用之前它是否有可能接触到堆?还是堆会照顾不增长太多?

  2. 根据 ASLR,局部变量的可能地址范围是多少?我可以在地址 0xf740d25a、0x7ffXXXXXX、0xaXXXXXX 或 0x1XXX 创建一个局部变量,其中 X 是任何十六进制数字吗?

0 投票
0 回答
676 浏览

android - 如何在电话间隙应用程序中实现地址空间布局随机化 (ASLR)

我们正在构建电话差距应用程序。我们的应用程序目前正在使用 Internet、Gallery、Camera、后台服务。在这一点上,我们在客户端没有任何敏感记录(但可能在将来)。出于这个原因,我们的一些对应用程序提出要求的客户会使用地址空间布局随机化 (ASLR)。我目前不知道这是否已经启用。如何在电话间隙应用程序中实现这一点,或者是否有任何电话间隙插件支持 ASLR?

https://en.wikipedia.org/wiki/Address_space_layout_randomization

0 投票
1 回答
384 浏览

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

0 投票
1 回答
1262 浏览

c++ - 为什么每次局部变量的地址都不一样?

我问过谷歌并对 StackOverflow 做了一些研究。我的问题是,当我main()在 C++ 程序中输入函数并声明第一个变量时,为什么这个变量的地址会因不同的执行而不同?请参阅下面的示例程序:

执行 1 的结果:

执行 2 的结果:

执行 3 的结果:

正如你所看到的,我在不同的执行中得到不同的结果。输出的第一行对应于分配内存的地址,这应该发生在堆中——如果它们每次都分配不同的地址,这对我来说有点道理。然而,即使我打印了局部变量的地址——对应于第二行——结果仍然不同。

乍一看,我认为这是因为程序正在打印物理内存地址,但这篇文章Virtual Memory or Physical Memory反驳了我最初的想法。鉴于程序的执行是“相同的”,没有线程,没有用户输入等,是否有任何理由仍然存在具有不同地址的内存分配?

测试环境:

  • Linux 14.04
  • Mac OS X 10.10
0 投票
0 回答
734 浏览

windows - 在 Windows 上以固定基地址加载 FIPS OpenSSL DLL

FIPS 验证的 OpenSSL 库必须在固定地址加载 libeay32.dll。例如,这表明在:.NET 中已占用固定地址

使用以下描述的技术:IIS7 App Pool can't load library with Fixed Base AddressHow 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?

0 投票
1 回答
2128 浏览

linux - Linux 上堆栈的 ASLR 熵位

我正在看 MIT 的一个演示文稿,他们解释了不同类型的 ASLR 实现。

例如,他们指出对于静态 ASLR,堆栈具有 19 位的熵。在我的理解中,这意味着堆栈基地址只能随机取 2^19 个不同的值。

我想问如何计算堆栈有 19 位的熵?

编辑:

上网查了一下,找到了一些Linux上stack ASLR的解释。从另一个问题中学习,我认为可能相关的代码是:

我想问一下这是否是解释我的问题的正确地方?