Data Execution Prevention (DEP) AMD hat in alle Prozessoren der achten Generation ein neues Sicherheits-Feature implementiert: Das so genannte NX- (No-Execution-) Bit verspricht beim Opteron und Athlon 64 einen Schutz vor einem der häufigsten Angriffsvektoren von Schadprogrammen, dem Buffer Overflow mit Code auf dem Stack. Marketing-gerecht bezeichnet AMD dieses Feature offiziell mit "Enhanced Virus Protection". Auch Intel hat diese Hardware-Erweiterung bei seinen neuen Prozessoren integriert, bezeichnet es aber als XD- (Execution-Disable-) Technologie. Windows XP ab SP2 und Windows Server 2003 ab SP1 unterstützen dieses Feature im Rahmen der Data Execution Prevention (DEP). Normalerweise kann der Benutzer DEP über die Systemeigenschaften konfigurieren, es lässt sich allerdings mit dem Parameter /noexecute=DEP_Modus auch über die boot.ini einstellen. DEP_Modus kann einen der folgenden Werte annehmen:
Der Parameter /noexecute betrifft nur 32-Bit-Anwendungen. Bei 64-Bit-Anwendungen ist DEP generell eingeschaltet und lässt sich nicht abschalten. Das DEP von Windows geht über das NX-Flag noch einen Schritt hinaus. Datenausführungsverhinderung (Software-DEP) Microsoft Artikel (875352)
Bei Prozessoren, die das NX-Flag nicht unterstützen, bleibt zumindest noch der Software-seitige Schutz. Unter Software-DEP hat Microsoft mehrere Adresskontrollen an den Schnittstellen zum Betriebssystem zusammengefasst. Betrachtet man die Adresslage verschiedener Speicherbereiche eines Programms, ergibt sich standardmäßig folgende Reihenfolge der Blöcke: Code - Daten - Dynamische Puffer - Heap - Stack. Übergibt ein Programm bei einem Systemaufruf eine Adresse als Parameter, so kann das Betriebssystem prüfen, auf welchen der Blöcke die Adresse verweist. Stellt Windows dabei eine Inkonsistenz fest, bricht es das Programm ab.
Abbruch: Bei aktiviertem DEP stoppt Windows Programme mit suspektem Speicherzugriff. Als wichtigstes Beispiel sei hier der Fall genannt, dass ein Programm einen Betriebssystemaufruf zur Anmeldung eines Interrupt-Vektors oder einer Callback-Routine macht. Software-DEP überprüft dabei, in welchem Block die anzumeldende Funktion abgelegt ist und akzeptiert keine Adressen aus Datenbereichen. Das Ausführen von Programmroutinen und demzufolge die Akzeptanz von Codevektoren wird somit ausdrücklich auf die Bereiche beschränkt, die der Compiler bei der Erstellung des Programms dafür angelegt hat. |