仅为我自己禁用并重新启用地址空间布局随机化



我想在我的系统(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 - 另外启用堆随机化。

最新更新