web-dev-qa-db-ja.com

自分だけのアドレス空間配置のランダム化を無効にしてから再度有効にします

システム(Ubuntu Gnu/Linux 2.6.32-41-server)でアドレス空間配置のランダム化(ASLR)を無効にしたいのですが、

sysctl -w kernel.randomize_va_space=0

この変更は、システム上のすべてのユーザーに影響を与えると思います。 (これは本当ですか?)ASLRを無効にする効果を、ユーザーとしての自分だけ、または無効にするコマンドを呼び出すシェルセッションのみに制限するにはどうすればよいですか?

ところで、私のシステムの現在の(デフォルト)設定は

kernel.randomize_va_space = 2

なぜ1または3ではなく2なのですか?/proc/sys設定の数値、それらの範囲、およびそれらの意味に関するドキュメントはどこにありますか?ありがとう!

21
Amittai Aviram

randomize_va_spacesysctl設定のドキュメントは、カーネルソースツリーの Documentation/sysctl/kernel.txt にあります。基本的に、

0-プロセスアドレス空間のランダム化をオフにします。

1-mmapベース、スタック、およびVDSOページのアドレスをランダム化します。

2-さらに、ヒープのランダム化を有効にします。

14
Andy Ross

LinuxベースのシステムでASLRをローカルで無効にする最良の方法は、プロセスのパーソナリティフラグを使用することです。パーソナリティフラグを操作するコマンドは setarch with

-R--addr-no-randomize

仮想アドレス空間のランダム化を無効にします(ADDR_NO_RANDOMIZEをオンにします)。

続行する方法は次のとおりです。

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

このコマンドは、ASLRが無効になっているシェルを実行します。このプロセスのすべての子孫は、父親のパーソナリティフラグを継承するため、ASLRが無効になります。フラグの継承を解除する唯一の方法は、setuidプログラムを呼び出すことです(このような機能をサポートすることはセキュリティ違反になります)。

uname -mは、プラットフォームのアーキテクチャをハードコーディングせず、このコマンドを移植可能にするためのものです。

29
perror