- NX-Bit
-
Das NX-Bit (No eXecute) ist die Bezeichnung einer Technik zur „Verbesserung der Sicherheit eines Computers“. Sie soll verhindern, dass Programme beliebige Daten als Programm ausführen und auf diese Weise Schadcode (Viren, Backdoors u. ä.) starten. Bei Windows-Betriebssystemen (ab Windows-XP SP2) wird die Technik auch als DEP, Data Execution Prevention (deutsch: Datenausführungsverhinderung) bezeichnet.[1]
Inhaltsverzeichnis
Prozessorfamilien
Die Technik wurde vom Chiphersteller AMD mit dem Prozessor Athlon 64 unter dem Namen NX-Bit für den x86-Markt eingeführt. Die Technik wird von AMD als Enhanced Virus Protection (EVP) vermarktet. Auch Intel verwendet in den Itanium-Prozessoren und in den neuesten Pentium-4- und Pentium-M- sowie den Core-Modellen diese Technik, allerdings unter dem Namen XD-Bit (Execute Disable). Auch Transmeta und VIA/Centaur bieten CPUs mit NX-Bit an. Ähnliche Techniken gibt es auf anderen Prozessorarchitekturen schon länger, etwa beim PowerPC von IBM, beim Sun SPARC und bei den Alpha-Prozessoren.
Geschichte
Seit dem 80286er besteht im sogenannten Protected Mode die Möglichkeit, einzelne Speichersegmente als ausführbar (Code-Segmente) oder nicht ausführbar (Daten-Segmente) zu kennzeichnen. Wird versucht, eine Adresse in einem als nicht ausführbar markierten Speichersegment auszuführen, löst die CPU einen Hardware-Interrupt aus, welcher vom Betriebssystem abgefangen wird und das betreffende Programm daraufhin abgebrochen wird.
Heutige Betriebssysteme nutzen zwar ebenfalls den Protected Mode, jedoch verwenden sie ein sogenanntes „flaches Speichermodell“, in dem sämtliche Segmente den gleichen linearen Speicherbereich überdecken. Der segmentbasierte Speicherschutz ist damit ausgehebelt, eine Trennung zwischen Code- und Datenbereichen ist nicht mehr möglich.
Funktionsweise
-
64-Bit-Eintrag im Seitenverzeichnis (Page directory entry) Bits: 63 62 ... 52 51 ... 32 Inhalt: NX reserved Bit 51..33 der Basisadresse Bits: 31 ... 12 11 ... 9 8 7 6 5 4 3 2 1 0 Inhalt: Bit 31...12 der Basisadresse AVL ig 0 ig A PCD PWT U/S R/W P
Heutige Betriebssysteme verlassen sich beim Speicherschutz ausschließlich auf seitenbasiertes Speichermanagement. Dieses gestattet bei der IA32-Architektur zwar die Unterscheidung zwischen Seiten, die „nur lesbar“ und welchen, die „les- und schreibbar“ sind (siehe Bit 1 ("R/W") im Seitentabelleneintrag), jedoch ist dort keine Unterscheidung zwischen (Daten) „Lesen“ und (Code) „Ausführen“ vorgesehen. AMD hat für das NX-Bit das Bit 63 in den 64-Bit-Seitentabellen und -verzeichnissen verwendet. 64-Bit-Seitentabellen und -verzeichnisse werden nur im 64-Bit-Modus und im 32-Bit-Modus mit aktivierter Physical Address Extension verwendet.
Das NX-Bit wird vom Betriebssystem, sofern es dieses unterstützt, für den Stack und andere Datenbereiche im Arbeitsspeicher gesetzt, so dass diese nicht mehr ausführbar sind. Versucht ein Programm nun, aufgrund eines Bugs oder einer Infektion mit Schadcode diese so markierten Speicherseiten auszuführen, fängt die CPU dies ab und meldet dies über einen Hardware-Interrupt an das Betriebssystem, welches daraufhin das betroffene Programm beendet.
Durch dieses Vorgehen wird das Von-Neumann-Prinzip, Daten und Programm in einem gemeinsamen Speicher abzulegen, teilweise gebrochen. Allerdings wird nur der Ausführung von Code in Datensegmenten (z. B. in einem Stack oder Heap) vorgebeugt. Der Pufferüberlauf an sich wird nicht unterbunden. Wenn dabei ein Sprung in eine Codepage ausgelöst wird, ist die No-Execute-Technik wirkungslos. Allerdings lässt sich trotz dieser Technik beliebiger Code beispielsweise durch ein „return into libc“ ausführen.
Betriebssysteme
Microsoft Windows
Microsoft Windows unterstützt DEP seit Version XP SP 2 , sofern der jeweilige Prozessor die Möglichkeit bietet. Unter Windows Vista und Windows 7 sind die Einstellungen dem Benutzer sichtbar.
Linux
Der Linux-Kernel unterstützt das NX-Bit ab der Version 2.6.8, wobei entweder ein Kernel für eine x86_64-CPU oder ein Kernel für eine x86-CPU mit aktiviertem PAE verwendet werden muss.
Mac OS X
Mac OS X unterstützt das NX-Bit ab Version 10.6 (Snow Leopard).
CPUs mit NX-Bit
CPUs mit dem NX-Bit-Feature lassen sich per Software an einem gesetzen 11. Bit im Extended Feature Enable Register erkennen. Dieses Model-specific Register lässt sich nur von privilegierter Software (Systemsoftware), also beispielsweise vom Betriebssystemkern, auslesen.
- AMD Athlon 64
- AMD Athlon 64 X2
- AMD Athlon 64 FX
- AMD Opteron
- AMD Sempron (ab Paris)
- AMD Turion 64
- AMD Turion 64 X2
- AMD Phenom
- Intel Atom
- Intel Celeron (ab Conroe-L-Kern)
- Intel Celeron D
- Intel Celeron M (ab Dothan-Kern)
- Intel Core Duo
- Intel Core Solo
- Intel Core 2 Duo
- Intel Core 2 Extreme
- Intel Core 2 Quad
- Intel Core i3
- Intel Core i5
- Intel Core i7
- Intel Pentium 4 (ab Prescott-F/J-Typ)
- Intel Pentium D
- Intel Pentium Extreme Edition
- Intel Pentium M (ab Dothan, neuere Modelle)
- Intel Xeon (ab Pentium D Kern)
- Transmeta Efficeon
- VIA C7
- VIA Nano
Weblinks
- Linux-Magazin: Implementation von ASLR und NX/XD-Bit im Linux 2.6-Kernel
- heise.de: Verwundbar trotz No Execute
Einzelnachweise
- ↑ siehe den Artikel Data Execution Prevention in der englischsprachigen Wikipediaausgabe und die dort genannten Quellen
-
Wikimedia Foundation.