禁用和重新启用的地址空间布局随机化只为自己活着

问题描述:

,我想我的系统上禁用地址空间布局随机化(ASLR)(Ubuntu的GNU/Linux的2.6.32-41服务器),但是,如果我用禁用和重新启用的地址空间布局随机化只为自己活着

sysctl -w kernel.randomize_va_space=0 

这个改变会影响系统上的所有用户,我猜想。 (这是真的吗?)我如何限制仅将ASLR禁用到自己的效果,或者仅限于在其中调用命令禁用的shell会话?

BTW,我看到我的系统的电流(默认)设置是

sysctl -w kernel.randomize_va_space=0 

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

+2

http://gcc.gnu.org/wiki/Randomization说''setarch $(uname -m)-RL bash'必须工作 –

+0

http://unix.stackexchange.com/questions/15881/disable-address -space-layout-randomization-aslr-for-my-processes || http://askubuntu.com/questions/318315/how-can-i-temporarily-disable-aslr-address-space-layout-randomization –

的说明文件randomize_va_space的sysctl设置是Documentation/sysctl/kernel.txt在内核源代码树。基本上,

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

1 - 让MMAP基地的地址,栈和VDSO页随机。

2 - 另外启用堆随机化。

+0

谢谢!这确实解决了我上面的第二个(“BTW”)问题,但我仍然没有看到一种方法来限制sysctl对单个帐户或shell会话的影响。我想这一定是不可能的。 : -/ –

+1

是的,设置是全局的。一个快速的grep表明,在“个性”代码(处理多个ABI)中有一些(可能是退化的)代码可以做相反的事情。在task_struct的特性字段上设置ADDR_NO_RANDOMIZE标志将禁用行为,即使它在全局启用时也是如此。但是,这可能比你想要处理的更多内核巫毒。 –

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

-R--addr-no-randomize

禁止虚拟地址空间的随机化(接通ADDR_NO_RANDOMIZE)。

这里是如何进行的:

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

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

注意,uname -m在这里没有硬编码平台的体系结构,使这个命令便携。