【问题标题】:Disable and re-enable address space layout randomization only for myself仅为我自己禁用和重新启用地址空间布局随机化
【发布时间】:2012-06-29 14:35:39
【问题描述】:

我想在我的系统(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 bash aslr virtual-address-space sysctl


【解决方案1】:

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

-R, --addr-no-randomize

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

这里是如何进行的:

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

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

请注意,uname -m 在这里不是为了硬编码您的平台架构并使此命令可移植。

【讨论】:

    【解决方案2】:

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

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

    1 - 使 mmap 基址、堆栈和 VDSO 页面的地址随机化。

    2 - 另外启用堆随机化。

    【讨论】:

    • 谢谢!这确实解决了我上面的第二个(“BTW”)问题,但我仍然看不到将 sysctl 的效果限制为单个帐户或 shell 会话的方法。我想这一定是不可能的。 :-/
    • 是的,设置是全局的。快速 grep 显示“个性”代码(处理多个 ABI)中有一些(可能是残留的)代码可以进行相反的操作。在 task_struct 的个性字段上设置 ADDR_NO_RANDOMIZE 标志将禁用该行为,即使它是全局启用的。但这可能比您想要处理的内核巫术更多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2020-04-18
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多