Bagaimana saya bisa menonaktifkan ASLR (pengacakan tata letak ruang alamat) untuk sementara waktu?

Jawaban:

75

Menurut sebuah artikel Seberapa Efektif ASLR pada Sistem Linux? , Anda dapat mengkonfigurasi ASLR di Linux menggunakan /proc/sys/kernel/randomize_va_spaceantarmuka.

Nilai-nilai berikut ini didukung:

  • 0 - Tidak ada pengacakan. Semuanya statis.
  • 1 - Pengacakan konservatif. Pustaka, tumpukan mmap(),, VDSO, dan tumpukan bersama dibagi secara acak.
  • 2 - Pengacakan penuh. Selain elemen yang tercantum dalam poin sebelumnya, memori yang dikelola brk()juga diacak.

Jadi, untuk menonaktifkannya, jalankan

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

dan untuk mengaktifkannya lagi, jalankan

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

Ini tidak akan selamat dari reboot, jadi Anda harus mengonfigurasi ini di sysctl. Tambahkan file yang /etc/sysctl.d/01-disable-aslr.confmengandung:

kernel.randomize_va_space = 0

harus menonaktifkan ini secara permanen.

gertvdijk
sumber
1
Apa sebenarnya "Pengacakan Penuh"? Apakah itu termasuk executable itu sendiri? Dan apa itu brk()?
Shuzheng
26

The /proc/sys/kernel/randomize_va_spaceantarmuka kontrol ASLR sistem.

Jika Anda tidak ingin perubahan di seluruh sistem, gunakan ADDR_NO_RANDOMIZE kepribadian untuk menonaktifkan ASLR sementara. Mengontrol bendera kepribadian ini dapat dilakukan dengan setarchdan -Ropsinya ( manpage ), menambahkan sebuah perintah.

Saya merasa sangat nyaman untuk membuka shell yang benar-benar baru menggunakan:

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

Ini akan membuka Bash shell baru untuk Anda dengan ASLR dinonaktifkan, termasuk semua proses anak (program dijalankan dari shell ini).

Hanya exitshell setelah Anda selesai.


By the way, pada i386, ulimit -s unlimiteddapat "menonaktifkan" ASLR.


EDIT (Apr 2016): Itu ulimit -s unlimiteddiperbaiki dan ditugaskan CVE-2016-3672 .

Youfu
sumber
Detail kecil dalam semangat util-linux: alih-alih uname -mkita juga bisa menggunakan arch, biner yang pada dasarnya melakukan hal yang sama.
drum,
1
@drumfire archtidak tersedia sebagai applet busybox
youfu
+1 untuk kembali dua tahun kemudian dan menambahkan informasi tentang CVE.
Multisync
3

Cara yang lebih permanen untuk menonaktifkan ASLR harus disimpan dalam VM karena alasan yang jelas.

untuk menguji kemampuan untuk menimpa alamat pengembalian bingkai stack dan sebagainya, Anda harus mengkompilasi tanpa tumpukan kenari -fno-stack-protector, sementara untuk memungkinkan Anda mengeksekusi kode pada tumpukan yang Anda perlu kompilasi -z execstack, membuat

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
Orang baru
sumber
2

Anda bisa menggunakan sudo sysctl kernel.randomize_va_space=0temparaly disable ASLR.

lzutao
sumber