我想在我的系统上禁用地址空间布局随机化(ASLR)(Ubuntu Gnu / Linux 2.6.32-41-server),但是,如果我使用
sysctl -w kernel.randomize_va_space=0
我认为,这种变化会影响系统上的所有用户。 (这是真的吗?)我如何限制仅作为用户禁用ASLR的效果,或仅限于我调用命令禁用的shell会话?
顺便说一句,我看到我系统的当前(默认)设置是
sysctl -w kernel.randomize_va_space=0
为什么2而不是1或3?在哪里可以找到有关/ proc / sys设置的数值,范围及其含义的文档?谢谢!
答案 0 :(得分:22)
在基于Linux的系统上本地禁用ASLR的最佳方法是使用进程个性标记。操纵人格标志的命令是setarch
和
-R
,--addr-no-randomize
禁用虚拟地址空间的随机化(打开ADDR_NO_RANDOMIZE)。
以下是如何继续:
$> setarch $(uname -m) -R /bin/bash
此命令运行已禁用ASLR的shell。此过程的所有后代将继承父亲的个性标志,因此具有禁用的ASLR。打破标志继承的唯一方法是调用setuid程序(支持此类功能将成为安全漏洞)。
请注意,uname -m
不会对您平台的体系结构进行硬编码,并使此命令可移植。
答案 1 :(得分:12)
randomize_va_space
sysctl 设置的文档位于内核源代码树的Documentation/sysctl/kernel.txt
中。基本上,
0 - 关闭进程地址空间随机化。
1 - 使mmap base,stack和VDSO页面的地址随机化。
2 - 另外启用堆随机化。