Jak mogę tymczasowo wyłączyć ASLR (randomizacja układu przestrzeni adresowej)?
57
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?
Czym dokładnie jest „pełna randomizacja”? Czy obejmuje to sam plik wykonywalny? A co to jest brk()?
Shuzheng
26
/proc/sys/kernel/randomize_va_spaceInterfejs sterowania całego systemu ASLR.
Jeśli nie chcesz zmiany obejmującej cały system, użyj funkcji ADDR_NO_RANDOMIZEosobowości, aby tymczasowo wyłączyć ASLR. Kontrolowanie tej flagi osobowości można wykonać za pomocą setarchi jej -Ropcji ( 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 exitskorupa, kiedy skończysz.
Nawiasem mówiąc, na i386 ulimit -s unlimitedmoże „wyłączyć” ASLR.
EDYCJA (kwi 2016): ulimit -s unlimitedNaprawiono i przypisano CVE-2016-3672 .
Drobne szczegóły w duchu util-linux: zamiast uname -mjednego można również użyć archpliku binarnego, który zasadniczo robi to samo.
drumfire
1
@drumfire archnie jest dostępny jako aplet
busyboksa
+1 za powrót dwa lata później i dodanie informacji dotyczących CVE.
Multisync
3
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
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.Aby go wyłączyć, uruchom
i aby włączyć to ponownie, uruchom
To nie przetrwa ponownego uruchomienia, więc musisz to skonfigurować
sysctl
. Dodaj plik/etc/sysctl.d/01-disable-aslr.conf
zawierający:powinien trwale to wyłączyć.
źródło
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:
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 .źródło
uname -m
jednego można również użyćarch
pliku binarnego, który zasadniczo robi to samo.arch
nie jest dostępny jako apletBardziej 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źródło
Możesz po prostu użyć
sudo sysctl kernel.randomize_va_space=0
do tymczasowego wyłączenia ASLR.źródło