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

Ami*_*ram 21 linux bash virtual-address-space aslr sysctl

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

sysctl -w kernel.randomize_va_space=0
Run Code Online (Sandbox Code Playgroud)

我认为,这种变化会影响系统上的所有用户.(这是真的吗?)我如何限制仅作为用户禁用ASLR对我自己的影响,或者仅限于我调用命令禁用的shell会话?

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

kernel.randomize_va_space = 2
Run Code Online (Sandbox Code Playgroud)

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

per*_*ror 27

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

-R, --addr-no-randomize

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

以下是如何进行:

$> setarch $(uname -m) -R /bin/bash
Run Code Online (Sandbox Code Playgroud)

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

请注意,uname -m此处不会对您的平台的体系结构进行硬编码,并使此命令可移植.


And*_*oss 13

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

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

1 - 使mmap base,stack和VDSO页面的地址随机化.

2 - 另外启用堆随机化.