Wie kann ich ASLR (Address Space Layout Randomization) vorübergehend deaktivieren?
57
Ich verwende Ubuntu 12.04 32-Bit jetzt für einige Experimente. Ich muss ASLR deaktivieren. Wie kann ich das tun? und danach, was soll ich tun, um ASLR wieder zu aktivieren?
1 - Konservative Randomisierung. Shared Libraries, Stack, mmap()VDSO und Heap werden zufällig ausgewählt.
2 - Vollständige Randomisierung. Zusätzlich zu den im vorherigen Punkt aufgelisteten Elementen wird der durchgeführte Speicher brk()ebenfalls zufällig ausgewählt.
Um es zu deaktivieren, führen Sie es aus
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
und um es wieder zu aktivieren, führen Sie aus
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
Dies wird einen Neustart nicht überleben, daher müssen Sie dies in konfigurieren sysctl. Fügen Sie eine Datei hinzu, /etc/sysctl.d/01-disable-aslr.confdie Folgendes enthält:
Was genau ist "vollständige Randomisierung"? Beinhaltet das die ausführbare Datei selbst? Und was ist brk()?
Shuzheng
26
Die /proc/sys/kernel/randomize_va_spaceSchnittstelle steuert ASLR systemweit.
Wenn Sie keine systemweite Änderung wünschen, deaktivieren Sie ASLR mithilfe der Funktion " ADDR_NO_RANDOMIZEPersönlichkeit" vorübergehend. Sie können dieses Persönlichkeits-Flag mit setarchund seiner -ROption ( Manpage ) vor einem Befehl steuern.
Ich finde es sehr praktisch, eine komplett neue Shell zu öffnen:
setarch `uname -m` -R /bin/bash
Dadurch wird eine neue Bash-Shell mit deaktiviertem ASLR geöffnet, einschließlich aller untergeordneten Prozesse (Programme, die von dieser Shell ausgeführt werden).
Nur exitdie Muschel, wenn Sie fertig sind.
Übrigens kann auf i386 ulimit -s unlimitedASLR "deaktivieren".
BEARBEITEN (Apr 2016): Die ulimit -s unlimitedwurde behoben und CVE-2016-3672 zugewiesen .
Kleinere Details im Geiste von util-linux: Anstelle von uname -mkönnte man auch archeine Binärdatei verwenden, die im Wesentlichen dasselbe tut.
Trommelfeuer
1
@drumfire archist nicht als Busybox-Applet verfügbar
youfu
+1 für zwei Jahre später und das Hinzufügen der Informationen zu CVE.
Multisync
3
Die dauerhafteren Möglichkeiten zum Deaktivieren von ASLR sollten aus offensichtlichen Gründen in einer VM beibehalten werden.
Um die Fähigkeit zum Überschreiben von Stack-Frame-Rücksprungadressen usw. zu testen, müssen Sie ohne Stack-Canaries kompilieren -fno-stack-protector, während Sie Code auf dem Stack ausführen können, mit dem Sie kompilieren -z execstackmöchten
Antworten:
Laut einem Artikel Wie effektiv ist ASLR auf Linux-Systemen? können Sie ASLR unter Linux über die
/proc/sys/kernel/randomize_va_space
Schnittstelle konfigurieren.Um es zu deaktivieren, führen Sie es aus
und um es wieder zu aktivieren, führen Sie aus
Dies wird einen Neustart nicht überleben, daher müssen Sie dies in konfigurieren
sysctl
. Fügen Sie eine Datei hinzu,/etc/sysctl.d/01-disable-aslr.conf
die Folgendes enthält:sollte dies dauerhaft deaktivieren.
quelle
brk()
?Die
/proc/sys/kernel/randomize_va_space
Schnittstelle steuert ASLR systemweit.Wenn Sie keine systemweite Änderung wünschen, deaktivieren Sie ASLR mithilfe der Funktion "
ADDR_NO_RANDOMIZE
Persönlichkeit" vorübergehend. Sie können dieses Persönlichkeits-Flag mitsetarch
und seiner-R
Option ( Manpage ) vor einem Befehl steuern.Ich finde es sehr praktisch, eine komplett neue Shell zu öffnen:
Dadurch wird eine neue Bash-Shell mit deaktiviertem ASLR geöffnet, einschließlich aller untergeordneten Prozesse (Programme, die von dieser Shell ausgeführt werden).
Nur
exit
die Muschel, wenn Sie fertig sind.Übrigens kann auf i386
ulimit -s unlimited
ASLR "deaktivieren".BEARBEITEN (Apr 2016): Die
ulimit -s unlimited
wurde behoben und CVE-2016-3672 zugewiesen .quelle
uname -m
könnte man aucharch
eine Binärdatei verwenden, die im Wesentlichen dasselbe tut.arch
ist nicht als Busybox-Applet verfügbarDie dauerhafteren Möglichkeiten zum Deaktivieren von ASLR sollten aus offensichtlichen Gründen in einer VM beibehalten werden.
Um die Fähigkeit zum Überschreiben von Stack-Frame-Rücksprungadressen usw. zu testen, müssen Sie ohne Stack-Canaries kompilieren
-fno-stack-protector
, während Sie Code auf dem Stack ausführen können, mit dem Sie kompilieren-z execstack
möchtenquelle
Sie können nur verwenden
sudo sysctl kernel.randomize_va_space=0
, um ASLR vorübergehend zu deaktivieren.quelle