DE112004000626T5 - Verfahren und Gerät zur Schaffung einer Programmlauf- bzw. Ausführungsabschirmung - Google Patents

Verfahren und Gerät zur Schaffung einer Programmlauf- bzw. Ausführungsabschirmung Download PDF

Info

Publication number
DE112004000626T5
DE112004000626T5 DE112004000626T DE112004000626T DE112004000626T5 DE 112004000626 T5 DE112004000626 T5 DE 112004000626T5 DE 112004000626 T DE112004000626 T DE 112004000626T DE 112004000626 T DE112004000626 T DE 112004000626T DE 112004000626 T5 DE112004000626 T5 DE 112004000626T5
Authority
DE
Germany
Prior art keywords
execution
tasks
virtual memory
computer program
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE112004000626T
Other languages
English (en)
Inventor
Ingo Molnar
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Red Hat Inc
Original Assignee
Red Hat Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Red Hat Inc filed Critical Red Hat Inc
Publication of DE112004000626T5 publication Critical patent/DE112004000626T5/de
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow

Abstract

Verfahren zum Sichern des Betriebs eines Befehlsausführungssystems, wobei das Verfahren aufweist:
Abbilden einer Vielzahl von virtuellen Speicherbereichen, wobei die Vielzahl der virtuellen Speicherbereiche mit einer Vielzahl von Aufgaben verbunden ist, in eine Vielzahl von Adressräumen, welche substanziell die niedrigstmöglichen Adressen besitzen;
Verfolgen einer Ausführungsgrenze für jede aus der Vielzahl von Aufgaben, wobei die Ausführungsgrenze mit einer höchsten ausführbaren virtuellen Speicheradresse für wenigstens eine aus der Vielzahl von Aufgaben korrespondiert;
Setzen eines dynamischen Codesegment-Grenzwertes, so dass er substanziell gleich der Ausführungsgrenze für eine aktuelle Aufgabe aus der Vielzahl von Aufgaben ist; und
Ablehnen einer Übertragung der Ausführungssteuerung auf einen Code, welcher bei einer virtuellen Speicheradresse positioniert ist, welche höher als diejenige ist, welche durch den Codesegment-Grenzwert definiert ist.

Description

  • Hintergrund des Standes der Technik
  • Die weite Verbreitung von vernetzten Rechnersystemen und das Gebrauchen dieser Ressourcen, um kritische Informationen innerhalb der Industrie und Regierung zu managen, haben die Rechnersicherheit zu einem Schlüsselfeld technologischer Forschung und Entwicklung in den letzten Jahren werden lassen. Häufig werden Sicherheitsverletzbarkeiten in neuen Versionen von verschiedenen Betriebssystemen entdeckt, welche die Software-Verkäufer veranlassen sich darum zu bemühen, einen Code frei zu geben, um diese Sicherheitsprobleme auszubessern. Eine gut bekannte Sicherheitsverletzbarkeit bzw. -lücke in einigen Bearbeitungsplattformen wurde als das so genannte "Pufferüberlauf"-, "Datenanzeigerüberlauf"- oder "Stapelspeicherüberschreitungs"-Sicherheitsproblem beschrieben.
  • Das Problem der Stapelspeicherüberschreitung stammt von gewissen Gesichtspunkten, in welcher Weise der Direktzugriffsspeicher (RAM) bei bestimmten Verarbeitungsplattformen gemanagt wird. Das physikalische RAM wird in den meisten Systemen in größere virtuelle Speicherräume abgebildet, welche wiederum in Seiten organisiert sind, welche wiederum durch Seitentabellen definiert werden. Der Speicherraum speichert sowohl den ausführbaren Programmcode als auch die Daten. Der Prozessor, unter der Steuerung des Betriebssystems, verfolgt die Orte des ausführbaren Codes und der Daten, welche durch den ausführbaren Code zu nutzen und zu manipulieren sind. In einigen Plattformen wird dieses Verfolgen teilweise durch Bezug auf ein Ausführungsbit in den Seitentabellen erreicht. Jedoch werden bei mehr programmfähigen Systemen der ausführbare Code und die Daten für vielfältige Aufgaben oder Programme in den gleichen virtuellen Speicherraum gespeichert. Da die Daten, und in einem geringeren Ausmaß der Code, welche gespeichert und wiederhergestellt werden, sich konstant verändern, kann ein Bereich des Speichers manchmal mit einem unbezogenen Code überschrieben werden, ohne dass dies eine sofortige Auswirkung für die Aufgabe beinhaltet. Dieses Problem wird bei Plattformen verschärft, bei welchen die Prozessor-Hardware sich nicht der Ausführbits in den Seitentabellen bedient. Es ist deshalb für einen Angreifer möglich, einen tückischen bzw. böswilligen Code in den virtuellen Speicherraum einzufügen und den Prozessor zu veranlassen, den Code auszuführen. Häufig gestattet dieser tückische Code dem Angreifer, auf das System zuzugreifen.
  • Bei einem Versuch, die Ausnützung der Überläufe bzw. Überschreitungen zu minimieren, speichert der Prozessor, wenigstens in einigen modernen Verarbeitungssystemen, eine Codesegmentgrenze, welche versucht, eine obere Adresswertgrenze zu platzieren, auf der ein ausführbarer Code verweilen kann. Jedoch erzeugt die dynamische Natur eines mehrprogrammfähigen Systems das Problem, trotz der Existenz von Code-Abschnittsgrenzen weiterhin zu verbleiben bzw. vorhanden zu sein. Ein neuerlicher, sehr gut bekannter Versuch, das Auftreten von Sicherheitsproblemen zu minimieren, welche durch Pufferüberläufe verursacht werden, ist als die "nicht ausführbare Stapelausbesserung" bekannt. Die nicht ausführbare Stapelspeicherausbesserung arbeitet wenigstens zum Teil dadurch, dass sie eine Stapelspeicherung einer Anwendung nicht ausführbar macht. Während die nicht ausführbare Stapelausbesserung das Risiko einer Überlaufbedingung reduziert, welche durch einen Angreifer benutzt wird, ist deren Wirkung begrenzt, da der Codesegment-Grenzwert in dem Prozessor während der Zeit der gleiche bleibt und nicht dynamisch gesetzt wird, um das Verändern der Ausführgrenzen der verschiedenen Aufgaben zu berücksichtigen, welche ausgeführt werden.
  • Offenlegung der Erfindung
  • Die vorliegende Erfindung minimiert das Ausgesetztsein gegenüber Stapelspeicher-, Puffer- und Datenanzeigerüberläufen bzw. -überschreitungen, indem eine "Programmlaufabschirmung" innerhalb des virtuellen Speicherraumes eines Instruktionsprogrammlaufsystems geschaffen wird, wie z.B. einem Personal Computer oder einer Workstation bzw. Arbeitsstation. Die Programmlaufabschirmung wird durch einen sich dynamisch ändernden Codesegment-Grenzwert definiert, welcher fortlaufend zurückgesetzt wird, um die sich verändernden Programmlaufgrenzen der Aufgaben zu berücksichtigen, welche in dem System ausgeführt werden. Um zusätzlich die Effektivität zu erhöhen und den Effekt der Programmlaufabschirmung zu erhöhen, werden ausführbare Codebereiche an den Untergrenzadressen des virtuellen Speicherraumes komprimiert. Dadurch wird die Adressgrenze, welche die Programmlaufabschirmung definiert, zum größten Teil nur ausführbare Bereiche beinhalten, und nicht unbezogene Datenbereiche. Dadurch werden die meisten Probleme, welche von der Ausnützung der Überlauf- bzw. Überschreitungsbedingungen resultieren, eliminiert oder wenigstens wesentlich reduziert.
  • Entsprechend zu einigen Ausführungsformen der Erfindung sichert ein Betriebssystem den Arbeitsablauf einer Verarbeitungsplattform durch Zuweisen einer Vielzahl von virtuellen Speicherbereichen, welche mit einer Vielzahl von Aufgaben verbunden sind, zu einer Vielzahl von Adressräumen, welche im Wesentlichen die niedrigstmöglichen Adressen beinhalten. Außerdem wird eine Ausführungsgrenze für jede aus der Vielzahl von Aufgaben verfolgt, wobei die Ausführgrenze mit einer höchst ausführbaren, virtuellen Speicheradresse für eine Aufgabe korrespondiert. Der Codesegment-Grenzwert im Prozessor wird so gesetzt, dass er im Wesentlichen gleich der Ausführgrenze für die laufende Aufgabe ist. Schließlich wird das Übertragen der Ausführungssteuerung auf einen Code, welcher bei einer virtuellen Speicheradresse positioniert ist, welche höher als die durch den Codesegment-Grenzwert vorgegebene Grenze ist, abgelehnt. Bei einigen Ausführungsformen wird ein Administrator oder ein Operator bzw. Bediener des Systems mit einer geeigneten Nachricht in Kenntnis gesetzt und/oder das Ereignis wird geloggt bzw. protokolliert. Bei einer Kontextumschaltung auf eine neue Aufgabe wird der Codesegment-Grenzwert, falls notwendig, aktualisiert, um den neuen Ausführgrenzwert zu berücksichtigen.
  • In einigen Ausführungsformen werden die Codesegment-Grenzwerte als ein Schlüsselbegriff im Cache gespeichert. Der Effektivität wegen kann der Schlüsselbegriff in ein Sechs-Byte-Format umformatiert werden. In bestimmten Ausführungsformen wird der virtuelle Speicherraum als ein 3-GB-Speicher implementiert, wobei eine Lesespeichermaschine benutzt wird, welche adaptiert ist, um mit einem IntelTM-kompatiblen Prozessor zu arbeiten.
  • In beispielhaften Ausführungsformen der Erfindung wird ein Computerprogrammcode benutzt, welcher ein Betriebssystem implementiert, um Gesichtspunkte der Erfindung zu implementieren. Dieser Code kann auf einem Medium gespeichert werden. Das Medium kann magnetisch sein, wie z.B. eine Diskette, ein Band oder eine Festplatte, oder optisch, wie z.B. ein CD-ROM oder ein DVD-ROM. Der Computerprogrammcode kann in einer Halbleiterspeichereinrichtung gespeichert werden. Zusätzlich kann der Computerprogrammcode über das Internet oder über eine andere Art von Netzwerk geliefert werden. Eine Arbeitsstation oder ein Computersystem lässt den Code typischerweise als Teil eines Betriebssystems laufen. Das Computersystem kann auch als ein "Programmlaufsystem" oder ein "Instruktionsausführungssystem" bezeichnet werden. Der Computerprogrammcode bildet in Kombination mit dem Computersystem die Einrichtung, die Erfindung auszuführen.
  • Kurze Beschreibung der Zeichnungen
  • 1 ist eine Konzeptdarstellung, welche einen virtuellen Speicherraum für einen Intel-kompatiblen Prozessor darstellt, ohne das Verwenden der Erfindung oder bevor die Erfindung Speicherräume Adressräumen innerhalb der Programmlaufabschirmung zugewiesen hat.
  • 2 ist eine Konzeptdarstellung, ähnlich der in 1 dargestellten, jedoch zeigt 2 den virtuellen Speicherraum, nachdem die Erfindung Speicherbereiche zugewiesen hat.
  • 3 ist eine Zeichnung eines Flussdiagramms, welches ein Teil des Speicherzuweisungsprozesses der Ausführungsformen der Erfindung darstellt.
  • 4 ist ein Flussdiagramm, welches einen Teil des Prozesses darstellt, um den Codesegment-Grenzwert, entsprechend den Ausführungsformen der Erfindung, einzustellen.
  • 5 ist ein zusätzliches Flussdiagramm, welches die Fehlerverarbeitung darstellt, wenn die Ausführung des Codes außerhalb der Programmlaufabschirmung, entsprechend zu einigen Ausführungsformen der Erfindung, abgelehnt wird.
  • 6 ist ein Flussdiagramm, welches das Zurücksetzen des Codesegment-Grenzwertes bei einer Kontextschaltung, entsprechend zu einigen Ausführungsformen der Erfindung, darstellt.
  • 7 ist ein Blockschaltbild eines Instruktionsprogrammlaufsystems, einer Arbeitsstation oder eines Computers, welches eine Ausführungsform der Erfindung implementiert.
  • Die beste Art und Weise, die Erfindung auszuführen Die vorliegende Erfindung ist typischerweise in Computer-Software oder in einem Computerprogrammprodukt beinhaltet. Die Ausführungsformen der vorliegenden Erfindung, welche hier beschrieben sind, sind in einer Rechnerplatteform implementiert, wobei das Computerbetriebssystem, welches allgemein als "Linux" bekannt ist, benutzt wird, welches als offene Quelle direkt über das Internet verfügbar ist. Die präsentierten Beispiele werden auch auf Rechnerplattformen angewandt, welche auf Intel-kompatiblen Prozessoren basieren. Es gibt eine Anzahl von Intel-basierten Rechnersystemen. Ebenso ist Linux über verschiedene Verkäufer erhältlich, welche Service und Unterstützung für das Linux-Betriebssystem liefern. Zu diesen Verkäufern gehört Red Hat, Inc., von Raleigh, North Carolina, USA. Es ist davon auszugehen, dass das Linux-Beispiel, welches hier diskutiert wird, nur zur Darstellung benutzt wird, um eine beispielhafte Ausführungsform der Erfindung zu liefern. Das erfinderische Konzept, welches hier beschrieben wird, kann an irgendeine Computerplattform adaptiert werden, welche irgendein Betriebssystem nutzt, wobei jene beinhaltet sind, welche auf MacintoshTM, UnixTM und WindowsTM basieren.
  • Die Bedeutung von gewissen Ausdrücken, wie sie im Kontext dieser Veröffentlichung benutzt werden, sollte wie folgt verstanden werden. Der Begriff „Ausführungsgrenze" bzw. "Programmlaufgrenze" und ähnliche Terme sollen, wenigstens in den meisten Fällen, dazu dienen, sich auf Grenzen zu beziehen, welche sich auf spezifische Prozesse oder Aufgaben beziehen, welche innerhalb des Speichers gespeichert sind. Im Gegensatz dazu bedeutet gewöhnlich der Begriff "Codesegmentgrenze", dass er sich auf eine einzelne Adressgrenze bezieht, welche durch den Prozessor unter der Steuerung des Betriebssystems durchgeführt wird. Entsprechend der Erfindung wird diese Grenze dynamisch aktualisiert, um zu implementieren, was hier als eine "Programmlaufabschirmung" bezeichnet wird, außerhalb derer der Code nicht ausgeführt wird. Jeder der vorausgehenden Terme kann durch das Benutzen des Wortes "Wert" modifiziert werden, um den aktuellen Adresswert anzuzeigen, welcher gespeichert ist. Das Wort "Aufgabe" und seine verschiedenen Formen werden im herkömmlichen Sinn mit Bezug auf mehrprogrammfähige Betriebssysteme benutzt. Der Zentralprozessor einer Rechnerplattform oder eines Instruktionsausführungssystems kann als "Prozessor", als "Zentralverarbeitungseinheit" oder einfach als "CPU" bezeichnet werden. Wörter, wie z.B. "Prozess" und "Programm", können austauschbar mit dem Wort "Aufgabe" benutzt werden. Ein Teil des Speichers, welcher zugewiesen ist, einen Code zu speichern, welcher einer Aufgabe zugeordnet ist, kann als ein "virtueller Speicherbereich", "virtuelle Speicherfläche" oder als ein "Adressraum" bezeichnet werden. Im Allgemeinen wird der letztere Term dazu benutzt, sich auf Speicherbereiche zu beziehen, welche über eine Applikation des erfinderischen Prozesses, der hier beschrieben wird, zurück zugewiesen werden. Der gesamte verfügbare virtuelle Speicher (3 GB in Intel-Systemen, welche unter Linux laufen) wird hier als der "virtuelle Speicherraum" bezeichnet. An gewissen Stellen wird innerhalb dieser Veröffentlichung das Wort "substanziell" benutzt. Dieses Wort sollte im Kontext und im Allgemeinen bedeuten, dass der Prozess oder der Schritt im notwendigen Ausmaß ausgeführt wird, um nützliche Ziele zu erreichen, welche mit der Erfindung vorgesehen sind. Man beachte auch, dass die Begriffe "Pufferüberlauf", "Stapelspeicherüberschreitung" und "Datenzeigerüberlauf" hier austauschbar benutzt werden.
  • Wie vorher diskutiert, reduziert die Anwendung der Erfindung die Wirkung von Sicherheitsproblemen aufgrund von Pufferüberlauf, Datenzeigerüberlauf oder Stapelspeicherüberschreitung. In den veröffentlichten Ausführungsformen ist das Merkmal voll in den Betriebssystemkern implementiert und ist voll für Applikationen transparent. Das Merkmal arbeitet, in dem es virtuelle Speicherbereiche, welche durch Applikationen definiert sind, als ausführbar aufspürt und die Kernablaufsteuerung veranlasst, neu ausgeführte Aufgabencode-Grenzwert-Beschreibungswerte zu modifizieren. Der Codegrenzwert ist ein Hardware-Merkmal von Intel-kompatiblen Prozessoren, wobei eine virtuelle Speicheradressgrenze definiert wird. Die Erfindung gebraucht diese Grenze, um eine dynamische, dicht gemanagte Programmlaufabschirmung zu implementieren, indem ausführbare virtuelle Speicherräume konstant auf niedrige Adressen abgebildet werden und die Codesegmentgrenze dynamisch va riiert wird, um jeder Aufgabe Rechnung zu tragen, wenn sie ausgeführt wird.
  • Die Erfindung verschiebt auch ausführbare virtuelle Speicherbereiche, welche normalerweise über den virtuellen Speicherraum verstreut sind, zu Adressräumen, welche substanziell die niedrigstmöglichen Adressen aufweisen. Die Erfindung stellt dann tatsächlich eine dynamische Programmlaufabschirmung auf, welche die Ausführgrenzen der speziellen Aufgaben berücksichtigt. Der ausführbare Code wird in den Adressräumen gespeichert, welche alle innerhalb der Programmlaufabschirmung sind und alle zusammengruppiert sind. Diese Technik hat den Effekt, dass sie verhindert, dass ein schädlicher Code, welcher überschriebene Daten oder unbenützte Bereiche besitzt, ausgeführt wird. Ein derartiger Code wird typischerweise benutzt, eine Applikation zu überlisten, dass sie Prozesse ausführt, welche einem Angreifer den Zugriff auf das System gestatten. Der praktische Effekt besteht darin, dass der schädliche Code außerhalb der Programmlaufabschirmung ist und jegliche Übertragung des Programmlaufs für einen derartig gesetzten Code dazu führen wird, dass die Applikation durch den Betriebssystemkern ausgeschaltet wird. Das Betriebssystem kann auch das Ereignis dokumentieren und/oder das Ereignis einem Benutzer oder einem Systemadministrator melden.
  • Die 1 und 2 erläutern die Auswirkung der Erfindung auf einen Adressraum in einer Ausführungsform. 1 ist eine Konzeptionszeichnung, welche einen virtuellen Speicherraum zeigt, ohne dass die Erfindung angewendet wird. Die Darstellung zeigt eine typische Gestaltung eines Linux-ELF-Binärspeicherabbildes 100. Die Anwendung ist die sehr bekannte "Cat"- bzw. "Katzen"-Anwendung, und 1 ist die Grundgestaltung für diese Anwendung. Die "Cat"-Anwendung ist eine einfache Anwendung, welche jeglichen Inhalt eines Text-Files auf dem Terminal bzw. Endgerät anzeigt. Der ausführbare Adressraum 118 ist der gesamte 3-GB-virtuelle Speicherraum, welcher einem typischen Intel-kompatiblen System zugewiesen ist. Jedes vertikale Rechteck, welches innerhalb des Adressraumes dargestellt wird, korrespondiert mit einem Bereich, welcher einen virtuellen Speicherbereich definiert. Diese Bereiche mit ihren Adressbereichen und die Details über sie sind in der nachfolgenden Tabelle zusammen mit ihren entsprechenden Zeichnungsreferenznummern in der äußersten linken Spalte aufgeführt. Einige Bereiche sind speziell für den Code, die Daten, oder sie werden als "BSS" bezeichnet. Obwohl "BSS" "block started by symbol" bzw. "Block, gestartet durch Symbol" bedeutet, wird bei modernen Systemen der Term für null-initialisierte globale Datensegmente innerhalb des virtuellen Speicherraumes benutzt. Man beachte, dass die virtuellen Speicherbereiche, in welchen die Erfindung am meisten betrieben wird, die Codebereiche sind.
  • Figure 00090001
  • 2 zeigt, wie die Adressen und Berechtigungen entsprechend der Erfindung modifiziert werden. Nur die ersten 1 GB des virtuellen Speicherraumes 200 werden der Klarheit wegen gezeigt. Der Endblock verbleibt bei der gleichen Adresse, wie dies in 1 dargestellt wird, er verliert aber sein Ausführungsbit und wird ungefähr bei der 3-GB-Grenze festgelegt. (Dies wird in der unten stehenden Tabelle, jedoch nicht in der Zeichnung gezeigt . Man beachte, dass substanziell der gesamte ausführbare Code in den Adressräumen im Wesentlichen in dem untersten Adressteil des ersten 1-GB-Speicherplatzes platziert ist, wie dies durch den Pfeil 218 gezeigt wird. Die unten stehende Tabelle zeigt, wie die Adressen und Berechtigungen modifiziert wurden, um neue Adressräume für die ausführbaren Code zu schaffen.
  • Figure 00100001
  • Die hexadezimalen Bereiche stellen die (Speicher-)Abbildung bzw. Zuordnung dar. Jede Adresse im Bereich des Pfeils 218 ist gültig und kann von der Applikation genutzt werden. Die Adressen außerhalb des Bereiches, z.B. die Adresse 0x88887777, wird außerhalb der Programmlaufabschirmung fallen und wird ungültig sein. Der Versuch, den Code bei irgendeiner der Adressen außerhalb der Programmlaufabschirmung auszuführen, wird eine Ablaufunterbrechung auslösen und die Applikation abschalten, welche versucht, den Code auszuführen. In einer Ausführungsform wird die Ablaufunterbrechung als ein Segmentfehler gemeldet und wird zu einem so genannten "core dump" bzw. "Hauptspeicherabzug" führen. Man beachte, dass die Anzahl der Einträge in der Speicherabbildung nicht die gleiche sein muss, da der Kern darin frei ist, Speicherbereiche zu verbinden oder aufzuteilen, wie dies notwendig ist, jedoch bleibt die gesamte Größe der Einträge die gleiche. Man beach te auch, dass sich die Zulässigkeitsbits der Applikationsgrundlage bei der Adresse bfffc000-c0000000 verändert haben, so dass sie nicht ausführbar ist, ein weiterer Effekt der Anwendung der Programmlaufabschirmung.
  • Man beachte, dass die Zulassungswerte oben durch "rwx" angezeigt werden. Bei vielen Betriebssystemen, am meisten bei Unix, wird durch r die Erlaubnis ausgedrückt, zu lesen, durch b die Erlaubnis ausgedrückt, zu schreiben und durch r eine Erlaubnis ausgedrückt, eine Ressource auszuführen oder, in diesem Fall, einen Bereich von Adressen. Man beachte, dass bei den meisten Intel-kompatiblen Systemen das x-Berechtigungsbit aktuell mit dem r-Lesebit verbunden wird, da die Intel-Systeme nur Lese- und Schreibbits unterstützen, und damit sind diese Felder in diesem Beispiel wie dieses bis zu einem gewissen Ausmaß von konzeptioneller Natur sind.
  • Die Auswirkungen der Applikation der Programmlaufabschirmung auf den virtuellen Speicherraum, wie sie in den 1 und 2 dargestellt werden, werden schließlich in den Figuren sichtbar. Eine Anzahl von Abbildungen bzw. Umsetzungen wurde zu niedrigen Adressen hin bewegt. In der Tat liegen alle Bereiche mit einem X in ihren Berechtigungsindikatoren oben nun unterhalb der virtuellen Speicheradresse von 16 Megabytes. (Die Zeichnung ist konzeptionell angelegt und zeigt die Adressbereiche nicht exakt maßstabsgetreu.) Auch für diese Aufgabe wird der Codesegment-Grenzwert nur so festgelegt, dass er nur den Programmablauf in einer Abschirmung gestattet, welche durch die Adresse 0x01004000 definiert ist. Dadurch wird der Schutz der Ausnutzung gegenüber Stapelspeicherüberläufen wesentlich erhöht.
  • Es sollte beachtet werden, dass aufgrund der Berechtigungseinschränkungen bei den oben diskutierten Intel-x86-Prozessoren einige Bereiche, welche durch ein rw- gekennzeichnet sind, noch ausführbar sind. Z.B. ist die Adresse 0x00245000 in dem obigen Beispiel außerhalb der Abschirmung und ist ausführbar. Wenn gegeben ist, dass das x-Bit nicht in den Prozessor-Seitentabellen implementiert ist, ist dies das beste, was mit der Intel-Architektur getan werden kann, aber sogar dieser Pegel des Schutzes ist substanziell und wird für die meisten Zwecke vor Attacken schützen. Ein fachmännischer Beobachter kann fragen, warum einige dieser Bereiche, z.B. der Bereich 00245000-00248000, in der Abschirmung weggelassen wurde, wenn das obige Problem gegeben ist. Der Grund liegt darin, die Flexibilität beizubehalten, um den Code zu verschieben, gesetzt den Fall, dass der darauf bezogene Code, die Daten und die bss-Bereiche im Falle einer ELF-Binärformatapplikation zusammenbleiben müssen.
  • Die 3-6 sind Zeichnungen im Stil von Ablaufdiagrammen, welche einige der Prozesse entsprechend zu beispielhaften Ausführungsformen der Erfindung erläutern. Anfangs kann der Betriebssystemkern das System räumen, indem alle Speicherabbildungen gelöscht werden und der Programmlauf-Abschirmungsgrenzwert auf null gesetzt wird. Wendet man sich der 3 zu, so werden die Prozesse der Erfindung initialisiert, wenn eine Applikation den Kern anruft, um eine Speicherabbildung auszuführen, wie dies im Schritt 302 gezeigt wird. Man beachte, dass die Applikation in diesem Punkt im Nutzerraum abläuft. Wenn dieser Aufruf gemacht ist, wendet sich die Verarbeitung dem Kern zu, und damit dem Kernraum. Eine Überprüfung, ob die Schutzkennzeichnung gesetzt ist, wird im Schritt 304 durchgeführt. In Linux-Systemen wird dieses Bit als PROT_EXEC bezeichnet. Wenn das Bit nicht gesetzt ist, sind die Bereiche, die abzubilden sind, Datenbereiche und nicht ausführbare Bereiche. Damit wird die Abbildung in der gleichen Weise gehandhabt, als würde sie entsprechend dem Stand der Technik im Schritt 306 gehandhabt. Wenn jedoch die Sicherungskennzeichnung gesetzt ist, beginnt das Abbilden entsprechend der Erfindung beim Schritt 308. Der Betriebssystemkern spürt parallel den Ausführungsgrenzen für jede Aufgabe nach. In 3, beim Schritt 308, beginnt der Kern mit der Zuordnung einer Vielzahl von virtuellen Speicherregionen, welche mit den verschiedenen Aufgaben verbunden sind, zu Adresseräumen, indem zuerst insgesamt nach einem Loch gesucht wird, welches eine passende Startbasisadresse bezogen auf einen Speicherbereich besitzt, welcher durch die Aufgabe genutzt wird. Ein Loch ist ein Bereich innerhalb des virtuellen Speicherplatzes, welcher keine aktiven Abbildungen bzw. Umsetzungen entweder zu Daten oder zu einem ausführbaren Code besitzt. Wenn keine Löcher gefunden werden, fährt die Umsetzung anfangs in der normalen Weise bei 306 fort. Wenn ein Loch beim Schritt 310 gefunden wird, wird jedoch die Lochadresse zu einer Routine zurückgegeben, welche die Verschiebung der ausführbaren zu niedrigen Adressräumen beim Schritt 312 aktuell durchführt. Diese Routine, welche als do mmap() bekannt ist, ruft eine nicht abgebildete Bereichsfunktion auf, um geeignete Adressen zu akquirieren, in welchen Adressräume zu erstellen sind. Der Schritt 306 würde nur in dem seltenen Fall ausgeführt, bei welchem eine normale Abbildung ohne Gebrauchen des Abbildungsteils der Erfindung zu allen ausführbaren Adressräumen führen würde, welche die niedrigstmöglichen Adressen besitzen. Die do mmap()-Funktion wird in dem angeführten Quellcode benutzt.
  • Man beachte, dass bei Linux die meisten virtuellen Speicherzuteilungen dadurch "ortsunabhängig" sind, dass das Betriebssystem frei ist, nach irgendeinem freien Raum zu suchen, den es auf irgendeine Weise finden kann, wie es eben unter diesen Umständen geeignet erscheint. In einer Linux-Ausführungsform der Erfindung wird diese Ortsunabhängigkeit benutzt, ausführbare Bereiche zu niedrigeren Adressen hin zu verdichten, wie dies zuvor hier beschrieben wurde. Um dies durchzuführen, muss der Betriebssystemkern "wissen", wo die Löcher sind, wie dies mit Bezug auf das Verfahren, das in 3 dargestellt wird, gezeigt wird.
  • 4 stellt den Prozess des Verfolgens der Ausführgrenzen für Aufgaben und das Festlegen des Codesegment-Grenzwertes dar, so dass dieser substanziell gleich der höchsten Spei cheradresse für die gegenwärtige bzw. aktuell laufende Aufgabe ist. Bei dem Schritt 402 modifiziert der Speichermanager des Betriebssystems eine neue virtuelle Speicherfläche oder fügt sie hinzu. Die virtuelle Speicherfläche würde normalerweise in einen virtuellen Speicherbereich abgebildet, welcher in einem niedrigen Adressraum sein kann oder nicht. Aufgrund der Speicherabbildung, welche parallel zum dynamischen Setzen des Codesegment-Grenzwertes durchgeführt werden kann, wird jedoch die virtuelle Speicherfläche in einen Adressraum abgebildet, welcher substanziell die niedrigstmögliche Adresse besitzt. Bei dem Schritt 404 wird das virtuelle Speicherausführbit geprüft, um zu sehen, ob es für die neue virtuelle Speicherfläche gesetzt ist. Wenn dieses nicht gesetzt ist, wird die normale Verarbeitung bei dem Schritt 406 ausgeführt. Das virtuelle Speicherausführbit wird nur gesetzt, wenn die neue virtuelle Speicherfläche für einen ausführbaren Code ist, und deshalb ist eine Ausführungsgrenze mit dem Code verbunden, in einer ähnlichen Weise, wie für die Schutzkennung, welche zuvor diskutiert wurde. Wenn das Bit bei dem Schritt 404 gesetzt ist, wird eine Überprüfung beim Schritt 408 durchgeführt, ob die aktuelle Codesegmentgrenze kleiner als die Endadresse der neuen virtuellen Speicherfläche ist. Diese Endadresse korrespondiert mit der Ausführungsgrenze für die aktuelle Aufgabe. Wenn der Codesegment-Grenzwert richtig ist, wird die Verarbeitung fortgeführt, wobei von der Programmlaufabschirmung beim Schritt 412 Gebrauch gemacht wird. Wenn jedoch die Codesegmentgrenze zurückgesetzt werden muss, wird sie bei dem Schritt 410 zurückgesetzt. In diesem Fall wird mit der Verarbeitung fortgefahren, wobei die Programmlaufabschirmung bei dem Schritt 412 benutzt wird, jedoch nachdem der Codesegment-Grenzwert zurückgesetzt wurde.
  • 5 stellt die Fehlerverarbeitung entsprechend der Erfindung dar. Eine Aufgabe oder eine Anwendung wird bei dem Schritt 502 ausgeführt. Wenn die Aufgabe versucht, die Ausführung auf eine Adresse außerhalb der Programmlaufabschirmung zu übertragen, bei dem Schritt 504, wird die Fehlerbear beitung bei dem Schritt 506 aufgerufen. Anderenfalls fährt die Aufgabe bei dem Schritt 502 mit der Ausführung fort. Wenn einmal die Fehlerverarbeitung bei dem Schritt 506 aufgerufen ist, tritt die Verarbeitung bei dem Schritt 508 in den Kern ein. Das Übertragen der Ausführungssteuerung an den Code, welcher an der virtuellen Speicheradresse höher als die der höchsten Adresse in der Programmlaufabschirmung positioniert ist, wird abgelehnt. In beispielhaften Ausführungsformen wird dies zum Teil durch das Gebrauchen eines vorher festgelegten Bedienprogramms bei dem Schritt 510 erreicht. Dieses vorher festgelegte Bedienprogramm kann das Protokollieren und/oder eine Meldung für den Operator oder Administrator beinhalten. Ungeachtet dessen, welche anderen Operationen ausgeführt werden, oder sogar ob ein spezifisches, vorher festgelegtes Bedienprogramm im Gegensatz zum Beibehalten aller Bearbeitungsvorgänge innerhalb des Kernes selbst benutzt wird, wird die verletzende Applikation bei dem Schritt 512 abgeschaltet.
  • Es gibt variierende Möglichkeiten für die Fehlerbehandlung, welche entsprechend den Ausführungsformen der Erfindung implementiert werden können. Bei Intel-basierten CPU-Systemen kann das so genannte "allgemeine Sicherungsfehler-Bedienprogramm" aufgerufen werden. Wann immer dieses Bedienprogramm aufgerufen wird, sichert der Betriebssystemkern den Zustand aller Register und den Zustand der Applikation, so dass diese wiederhergestellt werden kann, wenn der Fehler wieder gutzumachen ist. Das Bedienprogramm interpretiert dann die Art der Ausnahme/des Fehlers, welche bzw. welcher auftrat, und entscheidet dann, ob die Applikation abhängig von den Umständen abgebrochen wird. Wenn dieses Bedienprogramm von der Programmlaufabschirmung, welche hier beschrieben wird, benutzt wird, ist der Fehler nicht wieder gutzumachen – die Applikation wird abgestellt und der ursächliche Prozess der Applikation wird notiert. Im Falle des Linux-Code-Beispiels, welches im Anhang beinhaltet ist, wird die Meldung über ein Segmentierungssignal als SIGSEGV bezeichnet. Der ursächliche Prozess wird typischerweise eine Shell bzw. eine Schale sein. Wenn einmal die Schale die Meldung empfängt, bestimmt sie, was passiert, d.h. ob die Anwendung ruhig verschwinden sollte, ob das Ereignis notiert wird und/oder ob der Nutzer oder Operator benachrichtigt wird. Bei Systemen, welche in Hochsicherheitsumgebungen benutzt werden, wird gewöhnlich ein Administrator benachrichtigt.
  • 6 ist ein Flussdiagramm, welches anzeigt, wie Kontextschalter benutzt werden. Eine aktuelle Aufgabe wird bei dem Schritt 602 ausgeführt. Wenn ein Kontextschalter bei dem Schritt 604 detektiert wird, wird er durch den Betriebssystemkernabwickler bei dem Schritt 606 aufgerufen. Bei dem Schritt 608 wird das aktuelle Codesegment-Grenzfeld auf den neuen Aufgabenausführungsgrenzwert gesetzt, so dass die neue Aufgabe innerhalb der Programmlaufabschirmung verbleibt. Auf diese Weise wird der Codesegment-Grenzwert und damit die Größe der Programmlaufabschirmung dynamisch festgelegt, um maximale Effektivität beizubehalten. Das Kontextschalten wird bei dem Schritt 610 ausgeführt, und die neue Aufgabe beginnt mit dem Ausführen bei dem Schritt 612. Wenn ein anderes Kontextschalten bei dem Schritt 614 aufgerufen wird, wiederholt sich der Prozess.
  • Mit dem Merkmal der Programmlaufabschirmung in dieser beispielhaften Ausführungsform, welche hier gezeigt wird, wird das Merkmal bei einem Kontextschalten praktisch durch den Kern implementiert, welcher die vierte Segmentbezeichnung in der globalen Bezeichnungstabelle (GDT) des Prozessors modifiziert, so dass er einen Grenzfeldwert besitzt, welcher gleich der höchsten ausführbaren Adresse ist. Der Codesegment-Grenzwert ändert sich, während sich die Aufgaben, welche ausgeführt werden, ändern. Damit passt er sich dynamisch an das an, was die Verarbeitungsplattform tut. Die erforderliche Grenze variiert abhängig von den dynamischen Bibliotheken, welche zu irgendeiner gegebenen Zeit und unter ähnlichen Faktoren geladen wurden. Wenn natürlich viele Teilprozesse sich den gesamten virtuellen Speicher teilen, dann teilen sie sich die gleiche Ausführungsgrenze ebenso.
  • Es sollte beachtet werden, dass in wenigstens einer beispielhaften Ausführungsform eine Codesegmentgrenze für einen Prozess in einer virtuellen Speicherdatenstruktur, genannt struct mm, gespeichert wird. Der Wert kann in dem Format einer Sechs-Byte-Bezeichnung gespeichert werden, welche auch in der Datenstruktur gespeichert wird. Bei einer Kontextschaltung kopiert der Kern jene sechs Bytes auf die Codesegmentbezeichnung. Dieses Speichern liefert eine Leistungsoptimierung dahingehend, dass eine Sechs-Byte-Bezeichnung effizienter im Laufzeitaufbau ist.
  • Es ist auch davon auszugehen, dass die Flussdiagramme, welche benutzt werden, um die erfinderischen Konzepte zu erläutern, nicht wechselseitig exklusiv sind. In vielen Fällen werden diese Prozesse parallel ausgeführt. In ähnlicher Weise werden die Schritte in den angehängten Ansprüchen nicht notwendigerweise in der aufgeführten Ordnung durchgeführt, und tatsächlich werden in vielen Fällen zwei oder mehr der Schritte parallel durchgeführt.
  • Wie vorher diskutiert, wird die Erfindung in einigen Ausführungsformen über einen Computerprogrammcode implementiert, welcher auf einem programmierbaren Rechnersystem oder einem Befehlsausführungssystem, wie z.B. einem Personal Computer oder einer Arbeitsstation oder einer anderen Mikroprozessorbasierten Plattform arbeitet. Damit dient das Gebrauchen der Erfindung dazu, den Betrieb eines derartigen Systems gegenüber der Ausnutzung von Überläufen zu schützen. 7 erläutert ein weiteres Detail eines Befehlsausführungssystems, welches die Erfindung implementiert. Der Systembus 701 verbindet die hauptsächlichen Komponenten. Das System wird durch den Mikroprozessor 702 gesteuert, welcher in einigen Ausführungsformen ein Intel-kompatibler Mikroprozessor ist. Man beachte, dass die Erfindung für andere Architekturen angewendet werden kann. Der Systemspeicher 703 ist typischerweise in verschiedene Bereiche oder Arten von Speichern aufgeteilt. Wenigstens einer von diesen ist ein Direktzugriffsspeicher (RAM) 704. Da die Erfindung in dem System der 7 läuft, besitzt das RAM verschiedene virtuelle Speicherfelder, welche in Adressräume abgebildet sind, in der Art, wie sie mit der Erfindung, wie sie hier beschrieben wird, konsistent ist. Dieses Abbilden wird konzeptuell durch die Speicherabbildung 705 erläutert. Eine Vielzahl von allgemeinen Eingangs/Ausgangs-(E/A-)Adaptern oder -Geräten 706 liegt vor. Diese sind an verschiedene periphere Geräte angeschlossen, wobei ein Festplattenantrieb 707, ein optischer Antrieb 708, eine Anzeige 709 und ein Tastaturfeld 710 beinhaltet sind. Man kann auch typischerweise eine Verbindung zu einem Netzwerk herstellen. Computerprogrammcode-Instruktionen, in einigen Ausführungsformen Teil des Betriebssystems, implementieren die Funktionen der Erfindung und werden bei 712 auf einem Festplattenlaufwerk 707 gespeichert. Das Computerprogrammprodukt, welches die Instruktionen enthält, kann auf Medien geliefert werden, z.B. auf dem Medium 714, welches eine optische Platte ist. Die Computerprogramminstruktionen führen die verschiedenen Operationen aus, welche die Erfindung implementieren, wobei das Speicherabbilden und das Setzen des Programmlauf-Abschirmungsgrenzwerts beinhaltet sind. Es sollte beachtet werden, dass das System der 7 nur als ein erläuterndes Beispiel dienen sollte. Verschiedene Arten von allgemeinen Rechnersystemen sind verfügbar und können genutzt werden.
  • Speziell kann die Erfindung mit jedem System benutzt werden, bei dem sich die CPU nicht des ausführbaren Bits in ihren Seitentabellen bedient, sei es eine Arbeitsstation oder ein eingebettetes System. Die Erfindung wird auch in Multiprozessorumgebungen, wie z.B. in symmetrischen Multiprozessor-(SMP-Systemen und in nicht-gleichförmigen Speicherarchitektur(NUMA-)Systemen arbeiten. Eine Ausführungsform wurde ebenso auf einem SMP-System getestet. Da ein individueller Prozess typischerweise zu einer Zeit auf einer CPU ausgeführt wird, behält jeder Prozessor seinen eigenen Codesegment-Grenzwert bei. Deshalb ist es ganz unkompliziert, die Erfindung an Multiprozessorplattformen anzupassen. Es ist auch ganz unkompliziert, die erfinderischen Konzepte hier auf ein Betriebssystem anzupassen, das auf einer Plattform läuft, welche auf einer CPU, ähnlich der oben beschriebenen, basiert, wobei Versionen von Microsoft WindowsTM-Betriebssystemen beinhaltet sind.
  • Elemente der Erfindung können in Hardware oder in Software eingebettet sein. Z.B. kann zusätzlich zu einem Computerprogrammcode, welcher die Erfindung implementiert, wobei die Form eines Computerprogrammprodukts auf einem Medium angenommen wird, der Computerprogrammcode in einer elektrischen, magnetischen, optischen, elektromagnetischen, infraroten oder Halbleitereinrichtung gespeichert werden. Zusätzlich kann das Computerprogramm einfach ein Strom von Informationen sein, welcher wiedergewonnen oder über ein Netzwerk, wie das Internet, heruntergeladen wird.
  • Eine Ausführungsform der Erfindung kann durch Modifizieren einer Version des Linux-Betriebssystems, wie es hier beschrieben wird, modifiziert werden, z.B. mit einem "Ablauffähige-Schale"-Korrekturprogramm. Linux ist ein Betriebssystem mit offener Quelle, welches über das Internet und von Gesellschaften, welche Unterstützung dafür liefern, bezogen werden kann. Eine Version des Betriebssystems, welches zur Zeit des Prioritätsdatums dieser Anmeldung wohl bekannt ist, wird allgemein "Phoebe" genannt und kann, neben von anderen Stellen, heruntergeladen werden von:
    http://rawhide.redhat.com/pub/redhat/linux/beta/phoebe/en/os /i386/SRBMS/kernel-2.4.20-2.48.src.rpm
  • Ein Fachmann kann leicht die Erfindung auf andere Versionen von Linux adaptieren, und kann die Erfindung an andere Betriebssysteme anpassen.
  • Spezielle Ausführungsformen einer Erfindung werden hier beschrieben. Ein Computerfachmann und ein Fachmann für das Programmieren wird erkennen, dass die Erfindung in anderen Umgebungen und auf andere Weise angewendet werden kann. Es ist nicht beabsichtigt, dass die folgenden Ansprüche den Umfang der Erfindung auf spezielle Ausführungsformen, welche oben beschrieben wurden, beschränken. Ich beanspruche:
  • Zusammenfassung
  • Die vorliegende Erfindung minimiert das Sicherheitsrisiko, welches von so genannten „Stapelspeicher-Überläufen" und "Zeiger-Überläufen" resultiert, indem eine „Programmlauf-Abschirmung" innerhalb des virtuellen Speicherraumes eines Instruktionsprogramm-Laufsystems geschaffen wird, wie z.B. einem Personalcomputer oder einer Workstation bzw. Arbeitsstation. Die Programmlauf-Abschirmung ist durch das dynamische Setzen bzw. Einstellen eines Codesegment-Grenzwertes definiert (410, 608), welcher fortlaufend zurück gesetzt wird, um zu berücksichtigen, dass ausführbare Codebereiche bei Untergrenze-Adressen (218) des virtuellen Speicherraumes komprimiert werden. Wenn eine Applikation versucht, einen Code außerhalb des Schutzschildes (504) auszuführen, welcher natürlich ein schädlicher Code sein kann, welcher so gestaltet ist, dass er unautorisierten Zugriff auf das System gewährt, wird die Applikation abgeschaltet (510). Damit wird das Betreiben des Systems gegenüber dem Ausnutzen von Überlaufbedingungen bzw. -zuständen gesichert.

Claims (20)

  1. Verfahren zum Sichern des Betriebs eines Befehlsausführungssystems, wobei das Verfahren aufweist: Abbilden einer Vielzahl von virtuellen Speicherbereichen, wobei die Vielzahl der virtuellen Speicherbereiche mit einer Vielzahl von Aufgaben verbunden ist, in eine Vielzahl von Adressräumen, welche substanziell die niedrigstmöglichen Adressen besitzen; Verfolgen einer Ausführungsgrenze für jede aus der Vielzahl von Aufgaben, wobei die Ausführungsgrenze mit einer höchsten ausführbaren virtuellen Speicheradresse für wenigstens eine aus der Vielzahl von Aufgaben korrespondiert; Setzen eines dynamischen Codesegment-Grenzwertes, so dass er substanziell gleich der Ausführungsgrenze für eine aktuelle Aufgabe aus der Vielzahl von Aufgaben ist; und Ablehnen einer Übertragung der Ausführungssteuerung auf einen Code, welcher bei einer virtuellen Speicheradresse positioniert ist, welche höher als diejenige ist, welche durch den Codesegment-Grenzwert definiert ist.
  2. Verfahren nach Anspruch 1, welches ferner aufweist, dass bei einem Kontextschalten auf eine neue Aufgabe aus der Vielfalt der Aufgaben, der Codesegment-Grenzwert so gesetzt wird, dass er substanziell gleich einem neuen Ausführungsgrenzwert ist, welcher mit der neuen Aufgabe verbunden ist.
  3. Verfahren nach Anspruch 1, wobei das Setzen des Codesegment-Grenzwertes ferner das Umformatieren einer Grenzbezeichnung beinhaltet.
  4. Verfahren nach Anspruch 2, wobei das Setzen des Codesegment-Grenzwertes auf den substanziell gleichen neuen Ausführungsgrenzwert ferner das Umformatieren einer Grenzbezeichnung beinhaltet.
  5. Verfahren nach Anspruch 3, wobei das Umformatieren der Grenzbezeichnung ferner das Umformatieren der Grenzbezeichnung in ein 6-Byte-Bezeichnungsformat beinhaltet.
  6. Verfahren nach Anspruch 4, wobei das Umformatieren der Grenzbezeichnung ferner das Umformatieren der Grenzbezeichnung in ein 6-Byte-Bezeichnungsformat beinhaltet.
  7. Verfahren nach Anspruch 1, wobei das Ablehnen der Übertragung der Ausführungssteuerung ferner das Benachrichtigen eines Operators beinhaltet.
  8. Verfahren nach Anspruch 6, wobei das Ablehnen der Übertragung der Ausführungssteuerung ferner das Benachrichtigen eines Operators beinhaltet.
  9. Gerät zum Erstellen einer Programmlaufabschirmung in einem Befehlsausführungssystem, wobei das Gerät aufweist: eine Einrichtung zum Zuordnen einer Vielzahl von virtuellen Speicherbereichen, wobei die Vielzahl der virtuellen Speicherbereiche mit einer Vielzahl von Aufgaben verbunden ist, zu einer Vielzahl von Adressräumen, welche substanziell die niedrigstmöglichen Adressen beinhalten; eine Einrichtung zum Verfolgen einer Ausführungsgrenze für jede aus der Vielzahl der Aufgaben, wobei die Ausführungsgrenze mit der höchstausführbaren virtuellen Speicheradresse für wenigstens eine aus der Vielzahl von Aufgaben korrespondiert; eine Einrichtung zum dynamischen Setzen eines Codesegment-Grenzwertes, so dass dieser substanziell gleich der Ausführungsgrenze für eine aktuelle Aufgabe aus der Vielzahl der Aufgaben ist; und eine Einrichtung zum Ablehnen einer Übertragung einer Ausführungssteuerung gegenüber jedem Code, der an einer virtuellen Speicheradresse positioniert ist, die höher ist als die, welche durch den Codesegment-Grenzwert definiert ist.
  10. Gerät nach Anspruch 9, welches ferner eine Einrichtung zum Umformatieren einer Grenzbezeichnung aufweist.
  11. Gerät nach Anspruch 10, wobei die Einrichtung zum Umformatieren der Grenzwertbezeichnung ferner eine Einrichtung zum Umformatieren der Grenzwertbezeichnung in ein 6-Byte-Bezeichnungsformat beinhaltet.
  12. Gerät nach Anspruch 9, welches ferner eine Einrichtung zum Benachrichtigen eines Operators aufweist, wenn die Übertragung der Ausführungssteuerung abgelehnt wird.
  13. Gerät nach Anspruch 10, welches ferner eine Einrichtung zum Benachrichtigen eines Operators aufweist, wenn die Übertragung der Ausführungssteuerung abgelehnt wird.
  14. Gerät nach Anspruch 11, welches ferner eine Einrichtung zum Benachrichtigen eines Operators aufweist, wenn die Übertragung der Ausführungssteuerung abgelehnt wird.
  15. Computerprogrammprodukt, welches ein Computerprogramm besitzt, welches darin enthalten ist, wobei das Computerprogramm wenigstens in einem Teil betreibbar ist, um den Betrieb eines Befehlsausführungssystems zu sichern, wobei das Computerprogramm beinhaltet: Befehle zum Abbilden einer Vielzahl von virtuellen Speicherbereichen, wobei die Vielzahl der virtuellen Speicherbereiche mit einer Vielzahl von Aufgaben verbunden ist, in eine Vielzahl von Adressräumen, welche substanziell die niedrigstmöglichen Adressen besitzen; Befehle zum Verfolgen einer Ausführungsgrenze für jede aus der Vielzahl von Aufgaben, wobei die Ausführungsgrenze mit einer höchstausführbaren virtuellen Speicheradresse für wenigstens eine aus der Vielzahl von Aufgaben korrespondiert; Befehle zum dynamischen Setzen eines Codesegment-Grenzwertes, so dass dieser substanziell gleich der Ausführungsgrenze für eine aktuelle Aufgabe aus der Vielzahl von Aufgaben ist; und Befehle zum Ablehnen einer Übertragung einer Ausführungssteuerung für jeden Code, der bei einer virtuellen Speicheradresse höher als der positioniert ist, welche durch den Codesegment-Grenzwert definiert ist.
  16. Computerprogrammprodukt nach Anspruch 15, wobei das Computerprogramm ferner Befehle zum Umformatieren einer Grenzwertbezeichnung beinhaltet.
  17. Computerprogrammprodukt nach Anspruch 16, wobei die Befehle zum Umformatieren der Grenzwertbezeichnung ferner Befehle zum Umformatieren der Grenzwertbezeichnung in ein 6-Byte-Bezeichnungsformat beinhalten.
  18. Computerprogrammprodukt nach Anspruch 15, wobei das Computerprogramm ferner Befehle zum Benachrichtigen eines Operators beinhaltet, wenn die Übertragung der Ausführungssteuerung abgelehnt wird.
  19. Computerprogrammprodukt nach Anspruch 16, wobei das Computerprogramm ferner Befehle zum Benachrichtigen eines Operators beinhaltet, wenn die Übertragung der Ausführungssteuerung abgelehnt wird.
  20. Computerprogrammprodukt nach Anspruch 17, wobei das Computerprogramm ferner Befehle zum Benachrichtigen eines Operators beinhaltet, wenn die Übertragung der Ausführungssteuerung abgelehnt wird.
DE112004000626T 2003-04-22 2004-04-21 Verfahren und Gerät zur Schaffung einer Programmlauf- bzw. Ausführungsabschirmung Ceased DE112004000626T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/420,253 US20040250105A1 (en) 2003-04-22 2003-04-22 Method and apparatus for creating an execution shield
US10/420,253 2003-04-22
PCT/US2004/012487 WO2004095275A2 (en) 2003-04-22 2004-04-21 Method and apparatus for creating an execution shield

Publications (1)

Publication Number Publication Date
DE112004000626T5 true DE112004000626T5 (de) 2006-03-16

Family

ID=33309560

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112004000626T Ceased DE112004000626T5 (de) 2003-04-22 2004-04-21 Verfahren und Gerät zur Schaffung einer Programmlauf- bzw. Ausführungsabschirmung

Country Status (4)

Country Link
US (1) US20040250105A1 (de)
DE (1) DE112004000626T5 (de)
TW (1) TW200506612A (de)
WO (1) WO2004095275A2 (de)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2423849A (en) * 2004-01-15 2006-09-06 Matsushita Electric Ind Co Ltd Information-processing method and apparatus
US7571428B2 (en) * 2004-05-14 2009-08-04 Microsoft Corporation Reliability contracts
DE602005024514D1 (de) * 2005-03-31 2010-12-16 Texas Instruments Inc Verfahren und System zum Vereiteln und Neutralisieren von Pufferüberläufangriffen
WO2007035623A1 (en) * 2005-09-17 2007-03-29 Technology Group Northwest Inc. System and method for foiling code-injection attacks in a computing device
JP2007304954A (ja) * 2006-05-12 2007-11-22 Sharp Corp メモリ保護機能を有するコンピュータシステム
US20080005797A1 (en) * 2006-06-30 2008-01-03 Microsoft Corporation Identifying malware in a boot environment
US20080016305A1 (en) * 2006-07-12 2008-01-17 International Business Machines Corporation Implementation of Soft Protections to Safeguard Program Execution
US7802050B2 (en) * 2006-09-29 2010-09-21 Intel Corporation Monitoring a target agent execution pattern on a VT-enabled system
US20080148399A1 (en) * 2006-10-18 2008-06-19 Microsoft Corporation Protection against stack buffer overrun exploitation
US9081966B2 (en) * 2012-12-21 2015-07-14 International Business Machines Corporation System and method for protection from buffer overflow vulnerability due to placement new constructs in C++
US11221967B2 (en) * 2013-03-28 2022-01-11 Hewlett Packard Enterprise Development Lp Split mode addressing a persistent memory
US9189214B2 (en) 2013-10-30 2015-11-17 International Business Machines Corporation Code stack management
US9904485B2 (en) * 2016-03-31 2018-02-27 Intel Corporation Secure memory controller
US11816484B2 (en) 2020-10-30 2023-11-14 Apple Inc. Hardware verification of dynamically generated code

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5781753A (en) * 1989-02-24 1998-07-14 Advanced Micro Devices, Inc. Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions
US5577219A (en) * 1994-05-02 1996-11-19 Intel Corporation Method and apparatus for preforming memory segment limit violation checks
WO1996035165A1 (en) * 1995-05-06 1996-11-07 National Semiconductor Corporation Instruction memory limit check in microprocessor
US5799165A (en) * 1996-01-26 1998-08-25 Advanced Micro Devices, Inc. Out-of-order processing that removes an issued operation from an execution pipeline upon determining that the operation would cause a lengthy pipeline delay
US5701448A (en) * 1995-12-15 1997-12-23 Cyrix Corporation Detecting segment limit violations for branch target when the branch unit does not supply the linear address
US5996071A (en) * 1995-12-15 1999-11-30 Via-Cyrix, Inc. Detecting self-modifying code in a pipelined processor with branch processing by comparing latched store address to subsequent target address
US6049897A (en) * 1997-01-07 2000-04-11 Intel Corporation Multiple segment register use with different operand size
US6292874B1 (en) * 1999-10-19 2001-09-18 Advanced Technology Materials, Inc. Memory management method and apparatus for partitioning homogeneous memory and restricting access of installed applications to predetermined memory ranges

Also Published As

Publication number Publication date
WO2004095275A2 (en) 2004-11-04
WO2004095275A3 (en) 2005-12-15
TW200506612A (en) 2005-02-16
US20040250105A1 (en) 2004-12-09

Similar Documents

Publication Publication Date Title
DE69936162T2 (de) Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem
DE10196005B4 (de) Einrichtung und Verfahren zur isolierten Ausführung von Isoliert-Befehlen
DE10393920B4 (de) Verfahren und Systeme zur Steuerung virtueller Maschinen
DE10197121B4 (de) Neuer Prozessormodus zum Begrenzen des Betriebes von auf einer virtuellen Maschine laufender Gast-Software mit Unterstützung eines Virtuelle-Maschine-Monitors
US5819091A (en) User level control of degree of client-side processing
DE69724862T2 (de) Verfahren und Anordnung für die Zugangs- und Informationsverfälschungskontrolle in Rechnersystemen
DE112005002298B4 (de) Leistungssteigerung einer Adreßübersetzung unter Verwendung von Übersetzungstabellen, die große Adreßräume umfassen
DE69737709T2 (de) Verfahren und Vorrichtung für Informationsverarbeitung und Speicherzuordnungsanordnung
DE4215063C2 (de) Einrichtung und Verfahren zum Seitenwechsel bei einem nicht-flüchtigen Speicher
DE10394383B4 (de) Verfahren und Vorrichtung zum Laden eines vertrauenswürdigen Betriebssystems
DE10297281B4 (de) Verfahren zum elementaren Aktualisieren einer Vielzahl von Dateien
DE2458065C2 (de) Datenverarbeitungsanlage
DE69721634T2 (de) Computersystem und Verfahren für die Ausführung von mehreren Threads mit reduziertem Runtime-Speicherbedarf
DE112004000626T5 (de) Verfahren und Gerät zur Schaffung einer Programmlauf- bzw. Ausführungsabschirmung
DE2517276A1 (de) Datenverarbeitungssystem
DE112004001605T5 (de) Computersystem, in welchem eine abgesicherte Ausführungsumgebung angewendet wird und in dem eine Speichersteuerung enthalten ist, die zum Löschen des Speichers ausgebildet ist
DE112007001714T5 (de) Virtualisieren von Leistungszählern
DE112010003554T5 (de) Symmetrische Direktmigration von Virtuellen Maschinen
DE112009000612T5 (de) Multi-Betriebssystem-Booteinrichtung (OS), Multi-OS-Boot-Programm, Aufzeichnungsmedium und Multi-OS-Bootverfahren
DE10196440B4 (de) Steuern des Zugriffs auf mehrere isolierte Speicher in einer isolierten Ausführungsumgebung
DE112017001027T5 (de) Seitenfehlerbehebung
WO2013110736A1 (de) Speichercontroller zur bereitstellung mehrerer definierter bereiche eines massenspeichermediums als unabhängige massenspeicher an einen master-betriebssystem - kern zur exklusiven bereitstellung an virutelle maschinen
EP1358558B1 (de) Mikroprozessorschaltung für datenträger und verfahren zum organisieren des zugriffs auf in einem speicher abgelegten daten
DE60304005T2 (de) Änderung von Ladeadressen von ausführbaren Programmodulen
DE102007039431A1 (de) Technik zur Speicherreferenzfilterung

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law

Ref document number: 112004000626

Country of ref document: DE

Date of ref document: 20060316

Kind code of ref document: P

R016 Response to examination communication
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R006 Appeal filed
R008 Case pending at federal patent court
R003 Refusal decision now final
R011 All appeals rejected, refused or otherwise settled