23

システム (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 設定の数値、その範囲、およびその意味に関するドキュメントはどこにありますか? ありがとう!

4

2 に答える 2

32

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

-R--addr-no-randomize

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

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

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

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

uname -mプラットフォームのアーキテクチャをハードコーディングせず、このコマンドを移植可能にするためにここにあることに注意してください。

于 2014-02-12T19:00:13.757 に答える
15

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

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

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

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

于 2012-06-28T05:23:24.060 に答える