Sto usando Ubuntu 12.04 a 32 bit ora per qualche esperimento che devo disabilitare ASLR come posso fare questo? e dopo cosa devo fare per abilitare nuovamente ASLR?
Sto usando Ubuntu 12.04 a 32 bit ora per qualche esperimento che devo disabilitare ASLR come posso fare questo? e dopo cosa devo fare per abilitare nuovamente ASLR?
Risposte:
Secondo un articolo Quanto è efficace ASLR su sistemi Linux? , puoi configurare ASLR in Linux usando l' /proc/sys/kernel/randomize_va_space
interfaccia.
Sono supportati i seguenti valori:
- 0 - Nessuna randomizzazione. Tutto è statico.
- 1 - randomizzazione conservativa. Librerie condivise, stack,
mmap()
VDSO e heap sono randomizzati.- 2 - Completa randomizzazione. Oltre agli elementi elencati nel punto precedente, anche la memoria gestita
brk()
è randomizzata.
Quindi, per disabilitarlo, esegui
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
e per abilitarlo di nuovo, esegui
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
Questo non sopravviverà al riavvio, quindi dovrai configurarlo in sysctl
. Aggiungi un file /etc/sysctl.d/01-disable-aslr.conf
contenente:
kernel.randomize_va_space = 0
dovrebbe disabilitarlo definitivamente.
brk()
?
L' /proc/sys/kernel/randomize_va_space
interfaccia controlla ASLR a livello di sistema.
Se non si desidera un cambiamento a livello di sistema, utilizzare la ADDR_NO_RANDOMIZE
personalità per disabilitare temporaneamente ASLR. Il controllo di questo flag di personalità può essere fatto con setarch
e la sua -R
opzione ( manpage ), anteponendo un comando.
Trovo davvero conveniente aprire una shell completamente nuova usando:
setarch `uname -m` -R /bin/bash
Questo aprirà una nuova shell Bash per te con ASLR disabilitato, inclusi tutti i processi figlio (i programmi vengono eseguiti da questa shell).
Solo exit
il guscio una volta finito.
A proposito, su i386, ulimit -s unlimited
puoi "disabilitare" ASLR.
EDIT (aprile 2016): il problema èulimit -s unlimited
stato risolto e assegnato CVE-2016-3672 .
uname -m
uno si potrebbe usare anche arch
un binario che essenzialmente fa lo stesso.
arch
non è disponibile come applet busybox
I modi più permanenti di disabilitare ASLR dovrebbero essere mantenuti in una VM per ovvi motivi.
per testare la possibilità di sovrascrivere gli indirizzi di ritorno del frame dello stack eccetera, dovrai compilare senza stack canarini -fno-stack-protector
, mentre per permetterti di eseguire il codice sullo stack con cui devi compilare -z execstack
, facendo
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c