Address Space Layout Randomization (ASLR;deutsch etwaZufallsgestaltung des Adressraum-Aufbaus, kurzSpeicherverwürfelung oderAdressverwürfelung genannt) ist eine Technik, die die Ausnutzung vonSicherheitslücken inComputersystemen erschwert. Durch ASLR werdenAdressbereiche den Programmen auf zufälliger Basis zugewiesen, wodurch die Zuweisung der Adressbereiche eines Programms praktisch nicht mehr vorhersagbar ist. Dies soll Angriffe durchPufferüberlauf erschweren. Mit Heap-Spraying existiert eine Angriffstechnik, die die Erfolgswahrscheinlichkeit des Angriffs trotz der Nutzung von ASLR erhöhen kann.
ASLR bezieht sich auf denEBP undLibraries sowie dasHeap-, das Text-, das Data- und dasBSS-Segment, wobei letztere nicht bei allen ASLR-Lösungenrandomisiert werden.
Die ASLR-Technik fand erstmals in dem BetriebssystemOpenBSD Verwendung und wurde mit Erscheinen vonWindows Vista auch von Microsoft eingeführt, außerdem wurde sie von Apple inMac OS X Leopard eingeführt. Allerdings unterscheidet sich die Implementierung in Vista und Mac OS X Leopard voneinander. Während in Vista ASLR im gesamten System implementiert ist, wird bei Mac OS X Leopard nur die Bibliothek geschützt.[1] Mit der Einführung vonMac OS X Lion wurde ASLR komplett implementiert.
Der offizielleLinux-Kernel bietet ab der Version 2.6.12 (Juni 2005) eine unvollständige ASLR-Implementierung. MitPaX konnte jedoch schon seit 2001 eine weiterreichende Unterstützung verwendet werden.[2] Seit Kernelversion 3.14 gibt es eine vollständige Implementierung von ASLR.[3] Ab Version 4.8 kollidiert dieKernel Address Space Layout Randomization (KASLR) nicht mehr mit derHibernate-Funktion.[4]
MitiOS 4.3 fand die ASLR-Technik erstmals auch auf einem Betriebssystem für Mobilgeräte Anwendung. Die Implementierung in dem mobilen WebbrowserApple Safari sollte Anwendern Sicherheitsvorteile bringen, führte aber zunächst zu einer Sicherheitslücke. Dem Hacker Charlie Miller gelang es nur drei Tage nach Erscheinen der Firmware, diese über das ASLR-Einfallstor zu hacken.[5]Android führte in der Version 4.0(Ice Cream Sandwich) ebenfalls eine unvollständige ASLR-Implementierung ein.[6] Ab Version 4.1(Jelly Bean) verfügt Android über eine vollständige Implementierung.[7]
ASLR lässt sich durch sogenanntesSpraying für 32-Bit-Prozessor umgehen. Dabei wird der Schadcode über hunderte Megabyte im Speicher dupliziert (großflächiges „Sprayen“). Dadurch steigt die Wahrscheinlichkeit, dass trotzdem (irgendwann) Schadcode im Speichergetroffen und ausgeführt wird.[8]