Come posso disabilitare temporaneamente ASLR (randomizzazione del layout dello spazio indirizzo)?


Risposte:


75

Secondo un articolo Quanto è efficace ASLR su sistemi Linux? , puoi configurare ASLR in Linux usando l' /proc/sys/kernel/randomize_va_spaceinterfaccia.

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.confcontenente:

kernel.randomize_va_space = 0

dovrebbe disabilitarlo definitivamente.


1
Che cos'è esattamente la "randomizzazione completa"? Ciò include l'eseguibile stesso? E cos'è brk()?
Shuzheng,

26

L' /proc/sys/kernel/randomize_va_spaceinterfaccia 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 setarche la sua -Ropzione ( 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 exitil guscio una volta finito.


A proposito, su i386, ulimit -s unlimitedpuoi "disabilitare" ASLR.


EDIT (aprile 2016): il problema èulimit -s unlimited stato risolto e assegnato CVE-2016-3672 .


Minori dettagli nello spirito di util-linux: al posto di uname -muno si potrebbe usare anche archun binario che essenzialmente fa lo stesso.
Drumfire

1
@drumfire archnon è disponibile come applet busybox
youfu

+1 per il ritorno due anni dopo e l'aggiunta delle informazioni relative al CVE.
Multisync,

3

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

2

Puoi semplicemente usare sudo sysctl kernel.randomize_va_space=0per disabilitare temparaly ASLR.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.