Wie kann ich ASLR (Address Space Layout Randomization) vorübergehend deaktivieren?

Antworten:

75

Laut einem Artikel Wie effektiv ist ASLR auf Linux-Systemen? können Sie ASLR unter Linux über die /proc/sys/kernel/randomize_va_spaceSchnittstelle konfigurieren.

Folgende Werte werden unterstützt:

  • 0 - Keine Randomisierung. Alles ist statisch.
  • 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:

kernel.randomize_va_space = 0

sollte dies dauerhaft deaktivieren.

gertvdijk
quelle
1
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_RANDOMIZE Persö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 .

youfu
quelle
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

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
Neue Person
quelle
2

Sie können nur verwenden sudo sysctl kernel.randomize_va_space=0, um ASLR vorübergehend zu deaktivieren.

lzutao
quelle