Używam teraz 32-bitowego systemu Ubuntu 12.04 dla niektórych eksperymentów. Muszę wyłączyć ASLR. Jak mogę to zrobić? a potem co powinienem zrobić, aby ponownie włączyć ASLR?
Używam teraz 32-bitowego systemu Ubuntu 12.04 dla niektórych eksperymentów. Muszę wyłączyć ASLR. Jak mogę to zrobić? a potem co powinienem zrobić, aby ponownie włączyć ASLR?
Odpowiedzi:
Według artykułu Jak skuteczna jest ASLR w systemach Linux? , możesz skonfigurować ASLR w systemie Linux za pomocą /proc/sys/kernel/randomize_va_space
interfejsu.
Obsługiwane są następujące wartości:
- 0 - Brak randomizacji. Wszystko jest statyczne.
- 1 - Konserwatywna randomizacja. Udostępniane biblioteki, stos
mmap()
, VDSO i sterty są losowe.- 2 - Pełna randomizacja. Oprócz elementów wymienionych w poprzednim punkcie, zarządzana pamięć
brk()
jest również losowa.
Aby go wyłączyć, uruchom
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
i aby włączyć to ponownie, uruchom
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
To nie przetrwa ponownego uruchomienia, więc musisz to skonfigurować sysctl
. Dodaj plik /etc/sysctl.d/01-disable-aslr.conf
zawierający:
kernel.randomize_va_space = 0
powinien trwale to wyłączyć.
brk()
?
/proc/sys/kernel/randomize_va_space
Interfejs sterowania całego systemu ASLR.
Jeśli nie chcesz zmiany obejmującej cały system, użyj funkcji ADDR_NO_RANDOMIZE
osobowości, aby tymczasowo wyłączyć ASLR. Kontrolowanie tej flagi osobowości można wykonać za pomocą setarch
i jej -R
opcji ( manpage ), poprzedzając polecenie.
Uważam, że bardzo wygodnie jest otworzyć całkowicie nową powłokę, używając:
setarch `uname -m` -R /bin/bash
Spowoduje to otwarcie dla ciebie nowej powłoki Bash z wyłączonym ASLR, w tym wszystkich procesów potomnych (programy uruchamiane z tej powłoki).
Po prostu exit
skorupa, kiedy skończysz.
Nawiasem mówiąc, na i386 ulimit -s unlimited
może „wyłączyć” ASLR.
EDYCJA (kwi 2016): ulimit -s unlimited
Naprawiono i przypisano CVE-2016-3672 .
uname -m
jednego można również użyć arch
pliku binarnego, który zasadniczo robi to samo.
arch
nie jest dostępny jako aplet
Bardziej trwałe sposoby wyłączenia ASLR powinny być przechowywane w maszynie wirtualnej z oczywistych powodów.
aby przetestować możliwość zastępowania adresów powrotu ramki stosu itp., musisz skompilować bez kanarek stosu -fno-stack-protector
, a jednocześnie umożliwić wykonanie kodu na stosie, z którym musisz skompilować -z execstack
, dzięki czemu
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c