23

我想在我的系统(Ubuntu Gnu/Linux 2.6.32-41-server)上禁用地址空间布局随机化(ASLR),但是,如果我使用

sysctl -w kernel.randomize_va_space=0

我想这个改变会影响系统上的所有用户。(这是真的吗?)我怎样才能将禁用 ASLR 的影响限制为仅对我自己作为用户,或者仅对我调用命令禁用的 shell 会话?

顺便说一句,我看到我系统的当前(默认)设置是

kernel.randomize_va_space = 2

为什么是 2 而不是 1 或 3?在哪里可以找到有关 /proc/sys 设置的数值、范围和含义的文档?谢谢!

4

2 回答 2

32

在基于 Linux 的系统上本地禁用 ASLR 的最佳方法是使用进程个性标志。操纵个性标志的命令setarch

-R,--addr-no-randomize

禁用虚拟地址空间的随机化(打开 ADDR_NO_RANDOMIZE)。

以下是如何进行:

$> setarch $(uname -m) -R /bin/bash

此命令运行已禁用 ASLR 的 shell。此过程的所有后代都将继承父亲的个性标志,因此具有禁用的 ASLR。打破标志继承的唯一方法是调用 setuid 程序(支持此类功能将是安全漏洞)。

请注意,uname -m这里不是硬编码您平台的体系结构并使此命令可移植。

于 2014-02-12T19:00:13.757 回答
15

randomize_va_space sysctl设置的文档Documentation/sysctl/kernel.txt位于内核源代码树中。基本上,

0 - 关闭进程地址空间随机化。

1 - 使 mmap 基址、堆栈和 VDSO 页的地址随机化。

2 - 另外启用堆随机化。

于 2012-06-28T05:23:24.060 回答