Address Space Layout Randomization (ASLR) ist ein Exploit-Schutz, der Code, Bibliotheken, Stack und Heap eines Programms an zufälligen Speicheradressen platziert, sodass Angreifer Sprungziele nicht vorhersagen können.
Wie ASLR funktioniert
Speicherkorruptions-Exploits setzten traditionell auf feste Adressen: Wer per Pufferüberlauf eine Rücksprungadresse überschrieb, musste wissen, wo nützlicher Code – etwa eine Funktion einer Systembibliothek – lag. Mit ASLR wählt das Betriebssystem bei jedem Programmstart (bei Windows-System-DLLs bei jedem Boot) eine andere Basisadresse für Programmdatei, gemeinsam genutzte Bibliotheken, Stack und Heap. Die fest codierten Adressen des Angreifers zeigen dann ins Leere, und der Prozess stürzt ab, statt übernommen zu werden.
Das PaX-Projekt führte ASLR 2001 für Linux ein; 2005 gelangte es in den offiziellen Linux-Kernel, 2007 in Windows Vista und später in iOS und Android. KASLR überträgt die Idee auf den Betriebssystemkern.
Warum ASLR wichtig ist – und seine Grenzen
Zusammen mit nicht ausführbarem Speicher (DEP/NX) und Stack Canaries hat ASLR zuverlässige Exploits deutlich schwieriger und teurer gemacht. Ein vollständiger Schutz ist es jedoch nicht:
- Informationslecks – ein zweiter Bug, der einen einzigen Zeiger preisgibt, erlaubt die Berechnung des echten Layouts; moderne Exploit-Ketten kombinieren daher ein Leck etwa mit einem Use-after-free;
- geringe Entropie – auf 32-Bit-Systemen ist die Zahl möglicher Positionen klein genug für Brute Force;
- nicht randomisierte Module – eine einzige ohne ASLR-Unterstützung kompilierte Bibliothek liefert Angreifern feste Adressen;
- Hardware-Seitenkanäle – Forschungsarbeiten haben wiederholt gezeigt, dass CPU-Caches und Sprungvorhersage KASLR-Offsets verraten können.
Best Practices
- Software als positionsunabhängige Programme (PIE) kompilieren und ASLR systemweit aktiviert lassen.
- 64-Bit-Builds für höhere Randomisierungsentropie nutzen.
- ASLR mit weiteren Schutzmaßnahmen wie Control Flow Guard und schnellem Patchen von Speicherfehlern kombinieren.





