Gedächtnisschutz

Gedächtnisschutz ist eine Möglichkeit, Speicherzugriffsrechte auf einem Computer zu kontrollieren, und ist Teil der meisten modernen Anweisungsset Architekturen und Betriebssysteme. Der Hauptzweck des Gedächtnisschutzes besteht darin, a zu verhindern Prozess Aus dem Zugriff auf Speicher, die ihm nicht zugeteilt wurde. Dies verhindert einen Fehler oder Malware innerhalb eines Prozesses, der andere Prozesse oder das Betriebssystem selbst beeinflusst. Der Schutz kann alle Zugriffe auf einen bestimmten Speicherbereich, Schreibzugriffe oder Versuche umfassen, den Inhalt des Bereichs auszuführen. Ein Versuch, nicht autorisiert zuzugreifen[a] Speicher führt zu einer Hardware Fehler, z. B. a Segmentierungsfehler, Speicherverletzung Ausnahme, im Allgemeinen verursacht abnormale Beendigung des beleidigenden Prozesses. Speicherschutz für Computersicherheit beinhaltet zusätzliche Techniken wie z. Adressraumlayout Randomisierung und Ausführbarer Raumschutz.

Methoden

Segmentierung

Segmentierung Bezieht sich auf die Aufteilung des Speicheres eines Computers in Segmente. Ein Verweis auf einen Speicherort enthält einen Wert, der ein Segment und einen Offset innerhalb dieses Segments identifiziert. Ein Segment -Deskriptor kann die Zugriffsrechte, z. B. nur dann, nur aus bestimmter Begrenzung einschränken Ringe.

Das x86 Die Architektur verfügt über mehrere Segmentierungsfunktionen, die für die Verwendung geschützter Speicher in dieser Architektur hilfreich sind.[1] Auf der x86 Architektur die Globale Deskriptortabelle und Lokale Deskriptortabellen Kann verwendet werden, um Segmente im Speicher des Computers zu referenzieren. Zeiger auf Speichersegmente auf X86 -Prozessoren können auch in den Segmentregistern des Prozessors gespeichert werden. Zunächst hatten X86 -Prozessoren 4 Segmentregister, CS (Codesegment), SS (Stack -Segment), DS (Datensegment) und ES (zusätzliches Segment); Später wurden zwei weitere Segmentregister hinzugefügt - FS und GS.[1]

Virtuelles Gedächtnis

Bei der Paging ist der Speicheradressenraum oder -segment in gleich große Blöcke unterteilt[b] genannt Seiten. Verwendung virtueller Speicher Hardware, jede Seite kann an einem beliebigen Ort an einer geeigneten Grenze des physischen Speichers des Computers liegen oder als geschützt gekennzeichnet werden. Der virtuelle Speicher ermöglicht es, einen linearen Linear zu haben Virtual Memory Adressraum und um es zu verwenden, um auf Blöcke zuzugreifen, die fragmentiert sind physikalischer Speicher Adressraum.

Die meisten Computerarchitekturen Die Unterstützung von Paging verwendet auch Seiten als Grundlage für den Speicherschutz.

A Seitentabelle Karten Sie das virtuelle Gedächtnis zum physischen Gedächtnis. Es kann eine einzelne Seitentabelle, eine Seitentabelle für jeden Prozess, eine Seitentabelle für jedes Segment oder eine Hierarchie von Seitentabellen geben, abhängig von der Architektur und dem Betriebssystem. Die Seitentabellen sind normalerweise für den Prozess unsichtbar. Seitentabellen erleichtern die Zuordnung zusätzlicher Speicher, da jede neue Seite von überall im physischen Speicher zugewiesen werden kann. Auf einigen Systemen kann ein Seiteneintragstabelleneintrag auch eine Seite als schreibgeschützt benennen.

Einige Betriebssysteme richten für jeden Prozess einen anderen Adressraum ein, der Grenzen des harten Speicherschutzes liefert.[2] Es ist für eine unzurkende[c] Anwendung zum Zugriff auf eine Seite, die nicht explizit zugewiesen wurde unterbrechen genannt Seitenfehler. Nicht zugewiesene Seiten und Seiten, die einer anderen Anwendung zugeteilt werden, haben keine Adressen aus der Sicht der Anwendung.

Ein Seitenfehler kann nicht unbedingt einen Fehler angeben. Seitenfehler werden nicht nur zum Speicherschutz verwendet. Das Betriebssystem kann die Seitentabelle so verwalten, dass eine Referenz auf eine Seite zuvor war ausgesagt zur sekundären Lagerung[d] verursacht einen Seitenfehler. Das Betriebssystem fängt den Seitenfehler ab, lädt die erforderliche Speicherseite und die Anwendung wird so fortgesetzt, als hätte kein Fehler aufgetreten. Dieses Schema, eine Art von Art von virtueller Speicher, ermöglicht es, dass In-Memory-Daten, die derzeit nicht verwendet werden, nicht in eine Sekundärspeicherung und zurück in eine Weise verschoben werden, die für Anwendungen transparent ist, um die Gesamtspeicherkapazität zu erhöhen.

Bei einigen Systemen kann eine Anfrage nach virtuellem Speicher einen Block von virtuellen Adressen bereitstellen, für die keine Seitenrahmen zugewiesen wurden, und das System wird nur Seitenrahmen zugewiesen und initialisieren, wenn Seitenfehler auftreten. Auf einigen Systemen a Wachseite kann verwendet werden, entweder zur Fehlererkennung oder zum automatischen Wachstum von Datenstrukturen.

Auf einigen Systemen wird der Seitenfehlermechanismus auch für verwendet Ausführbarer Raumschutz wie zum Beispiel W^x.

Schutzschlüssel

Ein Speicherschutzschlüssel (MPK)[3] Der Mechanismus unterteilt das physische Gedächtnis in Blöcke einer bestimmten Größe (z. B. 4 KIB), von denen jeweils einen zugeordneten numerischen Wert bezeichnet wird, der als Schutzschlüssel bezeichnet wird. Jeder Prozess hat auch einen damit verbundenen Schutzschlüsselwert. Bei einem Speicherzugriff überprüft die Hardware, dass der Schutzschlüssel des aktuellen Prozesses mit dem mit dem zugegriffenen Speicherblock zugeordneten Wert übereinstimmt. Wenn nicht, tritt eine Ausnahme auf. Dieser Mechanismus wurde in der eingeführt System/360 die Architektur. Es ist auf dem heutigen Zeitpunkt erhältlich System z Mainframes und stark verwendet von System z Betriebssysteme und ihre Subsysteme.

Die oben beschriebenen System-/360 -Schutzschlüssel sind mit physischen Adressen verbunden. Dies unterscheidet sich von dem von Architekturen wie dem verwendeten Schutzschlüsselmechanismus Hewlett Packard/Intel IA-64 und Hewlett-Packard Pa-risc, die mit virtuellen Adressen verbunden sind und mehrere Schlüssel pro Prozess ermöglichen.

In den Itanium- und PA-RISC-Architekturen, Übersetzungen (Tlb Einträge) haben Schlüssel (Itanium) oder Zugangs -IDs (PA-RISC) mit ihnen verbunden. Ein laufender Prozess hat mehrere Schutzschlüsselregister (16 für Itanium,[4] 4 für PA-RISC[5]). Eine von der virtuelle Adresse ausgewählte Übersetzung hat ihren Schlüssel im Vergleich zu jedem der Schutzschlüsselregister. Wenn einer von ihnen übereinstimmt (plus andere mögliche Schecks), ist der Zugang zulässig. Wenn keiner übereinstimmt, wird ein Fehler oder eine Ausnahme generiert. Der Software -Fehlerhandler kann bei Bedarf den fehlenden Schlüssel mit einer größeren Liste der von der Software verwalteten Schlüssel überprüfen. Daher können die Schutzschlüsselregister innerhalb des Prozessors als ein Software verwalteter Cache einer größeren Liste von Tasten behandelt werden, die mit einem Prozess verbunden sind.

PA-RISC hat 15–18 Schlüsselbits; Itanium Mandate mindestens 18. Schlüssel sind normalerweise miteinander verbunden Schutzdomänen, wie Bibliotheken, Module usw.

Im x86 die Schutzschlüssel[6] Durch die Architektur können virtuelle Adressen für Benutzerseiten mit 16 Schutzschlüssel versehen. Alle mit demselben Schutzschlüssel getaggten Seiten bilden eine Schutzdomäne. Ein neues Register enthält die Berechtigungen, die mit jedem der Schutzdomäne verbunden sind. Last- und Speichervorgänge werden sowohl mit den Berechtigungen der Seitentabelle als auch mit den mit der Schutzdomäne der virtuellen Adresse verbundenen Schutzberechtigungen überprüft und nur dann zulässig, wenn beide Berechtigungen den Zugriff zulassen. Die Schutzschlüsselberechtigungen können aus dem Benutzerraum festgelegt werden, sodass Anwendungen den Zugang zu den Anwendungsdaten ohne Betriebssystemintervention direkt einschränken können. Da die Schutzschlüssel einer virtuellen Adresse zugeordnet sind, sind die Schutzdomänen pro Adressraum, sodass Prozesse, die in verschiedenen Adressräumen ausgeführt werden, jeweils alle 16 Domänen verwenden.

Schutzringe

Im Mehrheit und Systeme, die daraus abgeleitet sind, hat jedes Segment a Schutzring zum Lesen, Schreiben und Ausführen; Ein Versuch eines Vorgangs mit einer höheren Ringzahl als die Ringnummer für das Segment verursacht einen Fehler. Es gibt einen Mechanismus für sichere Aufrufen von Verfahren, die in einem unteren Ring ausgeführt werden und zum höheren Ring zurückkehren. Es gibt Mechanismen für eine Routine, die mit einer niedrigen Ringnummer ausgeführt wird, um auf einen Parameter mit dem größeren Ring und dem Ring des Anrufers zuzugreifen.

Simulierte Segmentierung

Simulation ist die Verwendung von a Überwachung Programm So interpretieren Sie die Anweisungen für Maschinencode einiger Computerarchitekturen. So ein Anweisungssatz Simulator Kann Speicherschutz bieten, indem ein segmentationsähnliches Schema verwendet und die Zieladresse und Länge jeder Anweisung in Echtzeit validiert wird, bevor sie tatsächlich ausgeführt werden. Der Simulator muss die Zieladresse und Länge berechnen und diese mit einer Liste gültiger Adressbereiche vergleichen, die er in Bezug Threads Umgebung wie jede Dynamik Erinnerung Blöcke, die seit dem Gründungsgeschäft des Threads erworben wurden, sowie alle gültigen gemeinsam genutzten statischen Speicherschlitze. Die Bedeutung von "gültig" kann sich je nach Kontext im Leben des Threads ändern. Es kann manchmal erlaubt sein, einen statischen Speicherblock zu ändern, und manchmal nicht, abhängig von der aktuellen Ausführungsweise, die möglicherweise von einem Speicherschlüssel oder einem Vorgesetztenstatus abhängt.

Es ist im Allgemeinen nicht ratsam, diese Methode des Speicherschutzes zu verwenden, bei der auf einer CPU angemessene Einrichtungen vorhanden sind, da dies wertvolle Verarbeitungsleistung vom Computer erfordert. Es wird jedoch im Allgemeinen zum Debuggen- und Testzweck Speicherverstöße und kann genau darauf hinweisen, welche Anweisung versucht, den jeweiligen Speicherabschnitt zu überschreiben, der denselben Speicherschlüssel wie ungeschützter Speicher aufweist.

Fähigkeitsbasierte Adressierung

Fähigkeitsbasierte Adressierung ist eine Methode des Speicherschutzes, die in modernen kommerziellen Computern nicht verwendet wird. In dieser Methode, Zeiger werden durch geschützte Objekte ersetzt (genannt Fähigkeiten) das kann nur mit Verwendung erstellt werden privilegiert Anweisungen, die nur vom Kernel ausgeführt werden dürfen, oder ein anderer Prozess, der dazu berechtigt ist. Dadurch kann der Kernel effektiv steuern, auf welche Prozesse auf welche Objekte im Speicher zugreifen können, ohne separate Adressräume zu verwenden oder Kontextschalter. Nur wenige kommerzielle Produkte verwendete Fähigkeitssicherheit: Plessey System 250, IBM System/38, Intel IAPX 432 die Architektur und Kekos. Fähigkeitsansätze werden häufig in Forschungssystemen verwendet, wie z. EROS und Combex DARPA -Browser. Sie werden konzeptionell als Grundlage für einige verwendet virtuelle Maschinen, vor allem Smalltalk und Java. Derzeit arbeitet das DARPA-finanzierte Cheri-Projekt der University of Cambridge daran, eine moderne Fähigkeitsmaschine zu erstellen, die auch Legacy-Software unterstützt.

Dynamische Machung

Dynamic Tainting ist eine Technik zum Schutz von Programmen vor illegalen Speicherzugriffen. Wenn das Speicher zur Laufzeit zugewiesen wird, verwandelt diese Technik sowohl den Speicher als auch den entsprechenden Zeiger mit derselben Marke. Merkmale werden dann angemessen ausgegeben, während das Programm ausgeführt wird und jedes Mal überprüft wird, wenn eine Speicheradresse m wird über einen Zeiger abgerufen p; Wenn die gemütlichen Markierungen mit m und p Unterschied wird die Ausführung gestoppt und der illegale Zugang wird gemeldet.[7][8]

Sparc M7 Prozessoren (und höher) implementieren dynamische Verachtung in Hardware. Oracle vermarktet diese Funktion als Siliziumgesicherter Speicher (SSM) (zuvor als Anwendungsdatenintegrität (ADI)).[9]

Das Lowrisc Das CPU -Design enthält eine dynamische Verklemmung unter dem Namen mit dem Tag markiert.[10]

Mittel

Das Schutzniveau einer bestimmten Implementierung kann daran gemessen werden, wie genau sie sich an die hält Prinzip des Mindest Privilegs.[11]

Speicherschutz in verschiedenen Betriebssystemen

Unterschiedliche Betriebssysteme verwenden unterschiedliche Formen des Speicherschutzes oder der Trennung. Obwohl der Gedächtnisschutz am meisten häufig war Mainframes und viele Minicomputer Systeme aus den 1960er Jahren, echte Gedächtnistrennung wurde nicht verwendet in Heimcomputer Betriebssysteme bis OS/2 (und in RISC OS) wurde 1987 veröffentlicht. Bei früheren Systemen wurde ein solcher mangelnder Schutz sogar als Form von verwendet Interprozesskommunikationdurch Senden eines Zeiger zwischen Prozessen. Es ist für Prozesse möglich, auf den Systemspeicher in der zuzugreifen Windows 9x Familie der Betriebssysteme.[12]

Einige Betriebssysteme, die den Speicherschutz implementieren, umfassen:

An Unix-artig Systeme, die Mprotekt Systemanruf wird verwendet, um den Speicherschutz zu steuern.[14]

Siehe auch

Verweise

  1. ^ a b Intel (Juli 2008). Intel 64 und IA-32 Architektur-Softwareentwicklerhandbücher: Band 3A: Systemprogrammierhandbuch, Teil 1 (PDF). Intel. Abgerufen 2008-08-21.
  2. ^ Jeffrey S. Chase; Henry M. Levy; Michael J. Feeley; und Edward D. Lazowska."Teilen und Schutz in einem einzigen Adressraum Betriebssystem".doi:10.1145/195792.195795 1993. p. 2.
  3. ^ Speicherschutzschlüssel, Jonathan Corbet, 13. Mai 2015, Lwn.net
  4. ^ "Schlüssel in Itanium" (PDF). Archiviert von das Original (PDF) Am 2007-11-28.
  5. ^ "Speicherschutz bei HP PA-RISC" (PDF). Februar 1994. archiviert von das Original (PDF) Am 2015-09-05. Abgerufen 2018-10-29.
  6. ^ "Intel Software Developer Manual" (PDF). März 2012. archiviert von das Original (PDF) Am 2012-06-01. Abgerufen 2018-10-29.
  7. ^ Klausel, James; Doudalis, Ioannis; Orso, Alessandro; Prvulovic, Milos (2007). Effektiver Speicherschutz unter Verwendung dynamischer Verkleinerung (PDF). Verfahren der zweiundzwanzigsten IEEE/ACM Internationalen Konferenz zur automatisierten Softwareentwicklung. p. 284. doi:10.1145/1321631.1321673. ISBN 9781595938824. S2CID 6334541.
  8. ^ Doudalis, Ioannis; Klausel, James; Venkataramani, Guru; Prvulovic, Milos; Orso, Alessandro (2012). "Effektiver und effizienter Speicherschutz unter Verwendung dynamischer Verschmutzung" (PDF). IEEE -Transaktionen auf Computern. 61 (1): 87–100. doi:10.1109/tc.2010.215. ISSN 0018-9340. S2CID 15913190.
  9. ^ Jenkins, Michelle. "Oracle kündigt das Breakthrough -Prozessor und das Systemdesign mit SPARC M7 an.". www.oracle.com. Abgerufen 2016-11-18.
  10. ^ "Tagged Memory Support". www.lowrisc.org. Abgerufen 2018-05-24.
  11. ^ Cook, D.J. Messen des Gedächtnisses, akzeptiert für die 3. Internationale Konferenz über Software Engineering, Atlanta, Georgia, Mai 1978.
  12. ^ "Windows 9x hat keinen echten Speicherschutz". Alles2. 2000-06-24. Abgerufen 2009-04-29.
  13. ^ "Pharos".
  14. ^ "Mprotect". Die offenen Gruppenbasisspezifikationen Ausgabe 6. Die offene Gruppe.

Anmerkungen

  1. ^ Abhängig von der Architektur, die z. B. nicht zugewiesene Seiten und Segmente, Seiten in einer anderen Schutzdomäne umfassen kann, die ein höheres Privileg -Niveau erfordern.
  2. ^ Einige Systeme, z. B.,, Z/OSUnterstützen Sie mehr als eine Seitengröße.
  3. ^ Auf einigen Systemen gibt es privilegierte Anweisungen zum Speicherzugriff durch echte Adresse.
  4. ^ In den frühen Tagen von Zeitteilung Paging war normalerweise zu a magnetische Trommel; In zeitgenössischen Systemen ist Paging normalerweise zu a Festplatte oder Festkörpervorrichtung.

Externe Links