ASLR(アドレス空間レイアウトのランダム化)を一時的に無効にするにはどうすればよいですか?


57

私はASLRを無効にする必要があるいくつかの実験のために現在Ubuntu 12.04 32ビットを使用しています、どうすればこれを行うことができますか?その後、ASLRを再度有効にするにはどうすればよいですか?


回答:


75

記事によると、LinuxシステムでのASLRの有効性は?/proc/sys/kernel/randomize_va_spaceインターフェースを使用してLinuxでASLRを設定できます。

次の値がサポートされています。

  • 0-ランダム化なし。すべてが静的です。
  • 1 –保守的なランダム化。共有ライブラリ、スタック、mmap()VDSO、およびヒープはランダム化されます。
  • 2 –完全なランダム化。前のポイントでリストされた要素に加えて、管理されるメモリbrk()もランダム化されます。

それを無効にするには、実行します

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

再度有効にするには、実行します

echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

これは再起動後も存続しないため、で設定する必要がありますsysctl。次を/etc/sysctl.d/01-disable-aslr.conf含むファイルを追加します。

kernel.randomize_va_space = 0

これを永久に無効にする必要があります。


1
「完全ランダム化」とは正確には何ですか?実行可能ファイル自体が含まれていますか?そして何brk()ですか?
シュジュン

26

/proc/sys/kernel/randomize_va_spaceインタフェースは、ASLRシステム全体を制御します。

システム全体の変更が必要ない場合は、ADDR_NO_RANDOMIZE パーソナリティを使用して一時的にASLRを無効にしてください。このパーソナリティフラグの制御は、コマンドsetarchとその-Rオプション(マンページ)を使用して実行できます。

以下を使用して、まったく新しいシェルを開くと本当に便利です。

setarch `uname -m` -R /bin/bash

これにより、すべての子プロセス(このシェルから実行されるプログラム)を含むASLRを無効にして、新しいBashシェルが開きます。

ただ、exitあなたが完了したらシェル。


ところで、i386では、ulimit -s unlimitedASLRを「無効にする」ことができます。


編集(2016年4月):ulimit -s unlimitedは修正され、CVE-2016-3672が割り当てられました


util-linuxの精神の細部:代わりに、本質的に同じことを行うバイナリをuname -m使用することもできarchます。
ドラムファイア

1
@drumfire archはbusyboxアプレットとして利用できません
youfu

2年後に戻ってきて、CVEに関する情報を追加して+1。
マルチ

3

ASLRを無効にするより永続的な方法は、明白な理由でVMに保持する必要があります。

スタックフレームのリターンアドレスなどを上書きする機能をテストするには、スタックカナリアなしでコンパイル-fno-stack-protectorする必要がありますが、コンパイルに必要なスタックでコードを実行できるようにするには-z execstack

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c

2

sudo sysctl kernel.randomize_va_space=0一時的にASLRを無効にするために使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.