2012-06-28 43 views
16

自分のシステム(Ubuntu Gnu/Linux 2.6.32-41-server)でアドレス空間レイアウトのランダム化(ASLR)を無効にしたいが、アドレス空間レイアウトのランダム化を無効にして再度有効にする

sysctl -w kernel.randomize_va_space=0 

変更がシステム上のすべてのユーザーに影響すると私は推測します。 (これは本当ですか?)どのようにして、ASLRを無効にした場合の影響を、ユーザーとしてのみ、または無効にするコマンドを呼び出すシェルセッションに限定することができますか?

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

sysctl -w kernel.randomize_va_space=0 

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

+2

http://gcc.gnu.org/wiki/Randomizationによれば、 'setarch $(uname -m)-RL bash'は動作する必要があります。 –

+0

http://unix.stackexchange.com/questions/15881/disable-address -space-layout-randomization-aslr-for-my-processes || http://askubuntu.com/questions/318315/how-can-i-temporarily-disable-aslr-address-space-layout-randomization –

答えて

11

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

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

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

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

+0

ありがとう!上記の私の第2の問題については言及していますが、sysctlの影響を単一のアカウントまたはシェルセッションに制限する方法はまだありません。私は不可能でなければならないと思う。 : -/ –

+1

はい、設定はグローバルです。クイックgrepは、その逆を行うことができる "性格"コード(複数のABIを扱う)にいくつかの(多分残っている)コードがあることを示しています。 task_structのパーソナリティフィールドにADDR_NO_RANDOMIZEフラグを設定すると、グローバルに有効になっていても動作が無効になります。しかし、それはおそらくあなたが対処したいよりもカーネルブードゥーです。 –

20

LinuxベースのシステムでローカルにASLRを無効にする最も良い方法は、プロセスのパーソナリティフラグを使用することです。個性フラグを操作するためのコマンドは、(ADDR_NO_RANDOMIZEをオン)--addr-no-randomize

は、仮想アドレス空間のランダム化を無効にし、

-Rsetarchです。ここで

は続行する方法です:

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

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

ここでは、uname -mはプラットフォームのアーキテクチャをハードコードしないでこのコマンドを移植可能にすることに注意してください。

関連する問題