我想在我的系统(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 设置的数值、其范围及其含义的文档? 谢谢!
在基于 Linux 的系统上本地禁用 ASLR 的最佳方法是使用进程个性标志。操作个性标志的命令setarch
与
-R
,--addr-no-randomize
禁用虚拟地址空间的随机化(打开ADDR_NO_RANDOMIZE)。
以下是操作方法:
$> setarch $(uname -m) -R /bin/bash
此命令运行已禁用 ASLR 的外壳。这个过程的所有后代都将继承父亲的人格旗帜,因此有一个残疾的 ASLR。破坏标志继承的唯一方法是调用 setuid 程序(支持此类功能将是一个安全漏洞)。
请注意,此处uname -m
不是为了硬编码平台的体系结构并使此命令可移植。
您可以通过多次点击以下命令来检查它是否有效:
#> cat /proc/self/maps
如果内存映射保持不变,则 ASLR 已被禁用。如果没有,那么你可能做错了什么。
randomize_va_space
sysctl 设置的文档在内核源代码树中Documentation/sysctl/kernel.txt
。基本上
0 - 关闭进程地址空间随机化。
1 - 使 mmap 基、堆栈和 VDSO 页面的地址随机化。
2 - 另外启用堆随机化。