DE112020004190T5 - Verbessern der sicheren programmierung im hauptspeicher unter verwendung eines seitenrahmen-kennzeichenmechanismus - Google Patents

Verbessern der sicheren programmierung im hauptspeicher unter verwendung eines seitenrahmen-kennzeichenmechanismus Download PDF

Info

Publication number
DE112020004190T5
DE112020004190T5 DE112020004190.5T DE112020004190T DE112020004190T5 DE 112020004190 T5 DE112020004190 T5 DE 112020004190T5 DE 112020004190 T DE112020004190 T DE 112020004190T DE 112020004190 T5 DE112020004190 T5 DE 112020004190T5
Authority
DE
Germany
Prior art keywords
functions
source code
function
main memory
gadgets
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.)
Granted
Application number
DE112020004190.5T
Other languages
English (en)
Other versions
DE112020004190B4 (de
Inventor
Juscelino Candido De Lima Junior
Carlos Eduardo Seo
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112020004190T5 publication Critical patent/DE112020004190T5/de
Application granted granted Critical
Publication of DE112020004190B4 publication Critical patent/DE112020004190B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F21/54Monitoring 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 by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1433Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a module or a part of a module
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Virology (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

Eine Technik zum Entschärfen von Angriffen mittels rücksprungorientierter Programmierung (ROP-Angriffen) (ROP = return oriented programming), die während der Ausführung einer Anwendung auftreten, umfasst ein Empfangen von Quellcode zum Kompilieren in eine ausführbare Anwendung. Während einer Kompilierung des Quellcodes werden eine oder mehrere Funktionen innerhalb des Quellcodes ermittelt, die Gadgets in einem ROP-Angriff zugehörig sind, wobei jede der einen oder mehreren Funktionen einer oder mehreren geschützten Hauptspeicherseiten zugewiesen wird und jeder der einen oder mehreren Funktionen ein Kennzeichen zugewiesen wird. Das Kennzeichen für jede Funktion ist der geschützten Hauptspeicherseite zugeordnet, der die Funktion zugewiesen ist.

Description

  • HINTERGRUND
  • Die vorliegende Erfindung betrifft Computersicherheit und konkreter Techniken zum Verwenden eines Seitenrahmenkennzeichen-Mechanismus, um Angriffe mittels rücksprungorientierter Programmierung (ROP-Angriffe) (ROP = return oriented programming) zu entschärfen.
  • Softwareprogramme (oder -anwendungen) können in einigen Fällen gegenüber verschiedenen Arten von Exploit anfällig sein. Diese Exploits können z.B. zur Injektion in ein und Ausführung von böswilligem Code in einem Programm eine Berechtigungseskalation ermöglichen, die es dem Programm ermöglicht, Aktionen durchzuführen, die normalerweise durch Systemadministratoren eingeschränkt sein können, Daten abzugreifen und dergleichen. Einige dieser Exploits können unberechtigten Benutzern ermöglichen, auf Daten auf einem Computersystem zuzugreifen und diese Daten auszuschleusen.
  • Bei einem üblichen Exploit erfolgt ein Angreifen des Ausführungsablaufs eines Programms, indem der Aufruf-Stack abgeändert wird. Bei dem Aufruf-Stack handelt es sich zum Beispiel um eine wesentliche Datenstruktur, die während der gesamten Ausführung von Anwendungen verwendet und aufrechterhalten wird. Der Ausführungsablauf (eines Programms) kann gesteuert werden, indem die Rücksprungadressen der aufgerufenen Funktionen mit Hilfe einer Push-Operation zum Stack übertragen werden. Böswillige Akteure können daher den Aufruf-Stack manipulieren, um die Ausführung eines Programms umzuleiten, um frei wählbaren Code auszuführen. ROP ist ein Beispiel eines häufig genutzten Exploits, der ein Abändern des Aufruf-Stacks zur Folge hat. Bei einem ROP-Exploit verwendet ein böswilliger Akteur normalerweise mehrere Teile von bestehendem Code (die üblicherweise als „Grafikobjekte“ (Gadgets) bezeichnet werden), um einen Bedienoberflächencode (Shell-Code) auszuführen. Zum Beispiel kann der böswillige Akteur die Rücksprungadresse in dem Stack manipulieren, um Gadget auszuführen, indem der Wert der Rücksprungadresse durch den der Adresse für das Gadget ersetzt wird. Im verketteten Zustand ermöglichen diese Aktionen dem böswilligen Akteur ein Durchführen frei wählbarer Operationen, die den Ausführungsablauf des Programms beeinträchtigen.
  • Herkömmliche Techniken, die zum Verteidigen gegenüber ROP-Techniken verwendet werden, schließen die Realisierung einer zufälligen Gestaltung des Adressraumlayouts oder von Steuerungsablauf-Integritätssystemen ein. Die zufällige Gestaltung des Adressraumlayouts schließt zum Beispiel ein Anordnen der Adressraumpositionen von Datenbereichen von Prozessen ein, um einen Angreifer daran zu hindern, ungehindert zu Exploit-befallenen Funktionen im Speicher zu springen. Steuerungsablauf-Integritätssysteme nutzen üblicherweise Techniken, zu denen ein Verhindern gehört, dass der Steuerungsablauf selbst von dem Exploit befallen wird. Diese herkömmlichen Techniken sind jedoch mit einem hohen Laufzeitaufwand, eingeschränktem Hypervisor-Support usw. verbunden. Darüber hinaus kann das Realisieren dieser Techniken zu einem arbeitsintensiven Neuordnen des Codes in einem erheblichen Umfang führen.
  • KU RZDARSTELLU NG
  • Eine hierin vorgestellte Ausführungsform beschreibt ein Verfahren zum Entschärfen eines Angriffs mittels rücksprungorientierter Programmierung (ROP-Angriffs), der während der Ausführung einer Anwendung erfolgt. Das Verfahren umfasst allgemein ein Empfangen von Quellcode zum Kompilieren in eine ausführbare Anwendung. Das Verfahren umfasst außerdem während einer Kompilierung des Quellcodes ein Ermitteln einer oder mehrerer Funktionen innerhalb des Quellcodes, die den Gadgets in einem ROP-Angriff zugehörig sind, und ein Zuweisen einer jeden der einen oder mehreren Funktionen zu einer oder mehreren geschützten Seiten des Hauptspeichers für die ausführbare Anwendung. Das Verfahren umfasst ferner während der Kompilierung des Quellcodes ein Zuweisen eines Kennzeichens zu jeder der einen oder mehreren Funktionen. Das Kennzeichen für jede Funktion ist der geschützten Hauptspeicherseite zugeordnet, der die Funktion zugewiesen ist.
  • Andere Ausführungsformen umfassen, ohne auf diese beschränkt zu sein, ein Computerprogrammprodukt, das ein Speichermedium umfasst, das durch einen Computer lesbaren Programmcode enthält, der einer Verarbeitungseinheit ermöglicht, einen oder mehrere Aspekte der offenbarten Verfahren zu realisieren, sowie ein Datenverarbeitungssystem, das einen Prozessor, einen Hauptspeicher und Anwendungsprogramme enthält, die so konfiguriert sind, dass sie eines oder mehrere der offenbarten Verfahren realisieren.
  • Figurenliste
  • Im Folgenden werden Ausführungsformen der Erfindung lediglich beispielhaft beschrieben, wobei auf die beigefügten Zeichnungen Bezug genommen wird, in denen:
    • 1 ein beispielhaftes Datenverarbeitungssystem veranschaulicht, das mit einer Schutzkomponente gemäß einer Ausführungsform konfiguriert ist.
    • 2 eine beispielhafte Realisierungsform eines Hauptspeicher-Schutzschlüsselmechanismus innerhalb eines Datenverarbeitungssystems gemäß einer Ausführungsform veranschaulicht.
    • 3 ein Beispiel eines Angriffs mittels rücksprungorientierter Programmierung gemäß einer Ausführungsform veranschaulicht.
    • 4 ein Flussdiagramm eines Verfahrens zum Entschärfen eines Angriffs mittels rücksprungorientierter Programmierung gemäß einer Ausführungsform ist.
    • 5 ein Beispiel von Funktionen veranschaulicht, die gemäß einer Ausführungsform geschützten Seitenrahmen zugeordnet sind.
    • 6 ein Beispiel des Entschärfens eines ROP-Angriffs auf eine Anwendung gemäß einer Ausführungsform veranschaulicht.
    • 7 ein Flussdiagramm eines Verfahrens zum Ausführen einer Anwendung gemäß einer Ausführungsform ist.
    • 8 ein beispielhaftes Datenverarbeitungssystem veranschaulicht, das so konfiguriert ist, dass es einen ROP-Angriff auf eine Anwendung gemäß einer Ausführungsform entschärft.
  • Zur Erleichterung des Verständnisses wurden, soweit möglich, identische Bezugsnummern verwendet, um in den Zeichnungen vorkommende identische Elemente zu bezeichnen. Es ist beabsichtigt, dass Elemente und Merkmale einer Ausführungsform ohne weiteren Vortrag vorteilhaft in andere Ausführungsformen einbezogen werden können.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Hierin beschriebene Ausführungsformen stellen Verfahren, Verarbeitungssysteme und durch einen Computer lesbare Medien zum Verwenden eines Seitenrahmenkennzeichen-Mechanismus bereit, der in Hardware innerhalb eines Datenverarbeitungssystems unterstützt wird, um Angriffe mittels rücksprungorientierter Programmierung (ROP-Angriffe) auf Softwareanwendungen zu entschärfen.
  • Zum Beispiel können einige Datenverarbeitungssysteme ein Hauptspeicher-Schutzschlüsselmerkmal unterstützen, das es ermöglicht, Hauptspeicherseiten Schutzschlüssel zu Zugriffssteuerungszwecken zuzuweisen. Im aktivierten Zustand dieses Merkmals kann ein Satz von Bits (z.B. vier Bits) in jedem Seitentabelleneintrag verwendet werden, um einer bestimmten Seite einen eines Satzes von (z.B. sechszehn) Schlüsselwerten zuzuweisen. Diese Schlüsselwerte können zum Durchsetzen von Schutzmaßnahmen auf der Grundlage von Seiten verwendet werden. Zum Beispiel kann ein Datenverarbeitungssystem, das dieses Merkmal unterstützt, ein Register mit zwei Bits für jeden Schlüsselwert verwenden, um Schreib- und Leseversuche auf eine bestimmte Seite zu steuern. Ein Setzen des Bits „Schreiben deaktivieren“ für einen bestimmten Schlüssel blockiert Versuche, auf eine Seite mit diesem Schlüsselwert zu schreiben. In ähnlicher Weise blockiert ein Setzen des Bits „Zugriff deaktivieren“ für einen bestimmten Schlüssel Versuche, eine Seite mit diesem Schlüsselwert zu lesen.
  • Hierin beschriebene Ausführungsformen können das Hauptspeicher-Schutzschlüsselmerkmal (das normalerweise zum Durchsetzen von Schutzmaßnahmen auf der Grundlage von Seiten verwendet wird) innerhalb eines Datenverarbeitungssystems vorteilhaft nutzen, um ROP-Angriffe zu entschärfen. Konkreter können Ausführungsformen das Hauptspeicher-Schutzschlüsselmerkmal verwenden, um jeder Funktion in geschützten Seitenrahmen Kennzeichen zuzuweisen, sodass das Programm in einer bestimmten Reihenfolge ausgeführt wird und abläuft. Bei einer nachstehend ausführlicher beschriebenen Ausführungsform kann ein Compiler während der Kompilierungszeit von Quellcode einen Satz von Funktionen innerhalb des Quellcodes erkennen, die ROP-Angriffen zugehörig sind (z.B. Hochrisiko-Funktionen, die anfällig dafür sind, als Gadgets in einem ROP-Angriff verwendet zu werden), den erkannten Satzfunktionen geschützten Seitenrahmen zuweisen (die z.B. mit einem Hauptspeicher-Schutzschlüssel geschützt sind) und jeder Funktion ein Kennzeichen zuweisen. Indem Hochrisiko-Funktionen auf diese Weise geschützten Seitenrahmen zugewiesen werden, können Ausführungsformen Exploits entschärfen, die versuchen, die Ausführung des Programms abzuändern. Zum Beispiel können Ausführungsformen einen böswilligen Akteur daran hindern, von Gadgets zu profitieren, um einen ROP-Angriff aufzubauen, da ein unter Verwendung der hierin vorgestellten Techniken geschütztes Programm nicht ausgeführt wird, wenn eine aufgerufene markierte Funktion ein falsches Kennzeichen hat.
  • 1 veranschaulicht ein beispielhaftes Datenverarbeitungssystem 100 gemäß einer Ausführungsform, das mit einer Schutzkomponente 110 konfiguriert ist. Das Datenverarbeitungssystem 100 umfasst eine oder mehrere Anwendungen 102, einen Compiler 104, ein Betriebssystem 106 und Hardware 108. Das Datenverarbeitungssystem 100 steht für verschiedene Datenverarbeitungseinheiten, unter anderem zum Beispiel für einen Desktop-Computer, einen Notebook-Computer, eine mobile Einheit, einen Tablet-Computer usw. Die Hardware 108 umfasst einen Prozessor/Prozessoren 120 und einen Hauptspeicher 122. Der/die Prozessor/en 120 kann/können für einen oder mehrere Prozessoren (z.B. Mikroprozessoren, Zentraleinheiten (CPUs) usw.) oder Mehrkernprozessoren stehen. Der/die Prozessor/en 120 kann/können verschiedene Register, Puffer, Hauptspeicher und andere, durch integrierte Schaltungen gebildete Einheiten umfassen und können gemäß RISC-Datenverarbeitungstechniken (RISC = reduced instruction set) arbeiten. Der Hauptspeicher 122 kann eine Vielfalt von durch einen Computer lesbaren Medien umfassen, unter anderem zum Beispiel flüchtige und/oder nichtflüchtige Medien, wechselbare und/oder nichtwechselbare Medien usw. Der Hauptspeicher 122 kann einen oder mehrere Caches, Direktzugriffsspeicher, Nur-Lese-Speicher usw. umfassen. Darüber hinaus kann der Hauptspeicher 122 Hauptspeicher umfassen, der sich physisch in dem Datenverarbeitungssystem 100 oder auf einer anderen Datenverarbeitungseinheit befindet, die mit dem Datenverarbeitungssystem 100 verbunden ist.
  • Das Datenverarbeitungssystem 100 arbeitet unter der Steuerung des Betriebssystems 106, das zum Ausführen von Anwendungen 102 und zum Verwalten des Zugriffs der Anwendungen 102 auf Hardware 108 zuständig ist. Das Betriebssystem 106 steht allgemein für ein beliebiges Betriebssystem, wobei zu Beispielen unter anderem Versionen von Microsoft® Windows®, Linux®- und Unix®-Distributionen usw. gehören. Wie gezeigt umfasst das Betriebssystem 106 eine Systemaufrufschnittstelle 116 und eine Seitenrahmen-Zuordnungsfunktion 118, die sich in dem Kern 114 des Betriebssystems 106 befinden. Die Anwendung/en 102 kann/können über die Systemaufrufschnittstelle 116 Dienste aus dem Betriebssystem 106 anfordern (z.B. Systemaufrufe vornehmen). Die Anforderung in Bezug auf Dienste kann eine Anforderung bezüglich eines oder mehrerer Prozesse, Anforderungen zur Erstellung und Ausführung neuer Prozesse, Anforderungen bezüglich des Zugriffs auf verschiedene Hardwareeinheiten (z.B. bestimmte Peripherieeinheiten usw.), Anforderungen bezüglich Datenübertragungsdiensten und andere umfassen. Die Anwendung 102 kann als Satz von Anweisungen realisiert sein, die im Hauptspeicher 122 gespeichert sind, und der/die Prozessor/en 120 kann/können so konfiguriert sein, dass er/sie die Anweisungen ausführt/ausführen, um eine angegebene Aufgabe oder eine Reihe von Aufgaben durchzuführen. Die Seitenrahmen-Zuordnungsfunktion 118 kann Hauptspeicher zu Anwendungsprozessen auf der Grundlage ihres Bedarfs zuordnen und/oder diese Zuordnungen aufheben. Bei einer Ausführungsform kann die Seitenrahmen-Zuordnungsfunktion 118 eine Liste freier Seiten des realen Hauptspeichers aufrechterhalten, aus denen sie die den Anwendungsprozessen zuordnen kann.
  • Bei hierin beschriebenen Ausführungsformen unterstützt das Datenverarbeitungssystem 100 einen Hauptspeicher-Schutzschlüsselmechanismus, der es ermöglicht, dass zu Zugriffssteuerungszwecken ein oder mehrere Schutzschlüssel (protection keys, pkeys) 124 zu Hauptspeicherseiten zugewiesen werden (z.B. durch die Seitenrahmen-Zuordnungsfunktion 118 zugeordnet). Unter Verwendung dieses Mechanismus kann eine bestimmte Anwendung (oder ein bestimmter Prozess) 102 seinen/ihren Hauptspeicher in mehrere Bereiche konfigurieren und den Zugriff auf beliebige dieser Bereiche selektiv deaktivieren oder aktivieren. Zum Beispiel handelt es sich bei einem Schutzschlüssel 124 im Allgemeinen um einen Mehrbitwert (z.B. vier Bits), die in jedem Seitentabelleneintrag für jede Seite in einem Adressraum einer Anwendung gespeichert sein können. Somit können unter der Annahme, dass es sich bei einem Schutzschlüssel 124 um einen Vier-Bit-Wert handelt, Seiten einem von sechzehn Schlüsselwerten zugewiesen werden. Für jeden dieser Schlüssel kann die Anwendung 102 den/die Prozessor/en 120 so konfigurieren, dass er/sie Schreiboperationen oder Leseoperationen in Bezug auf die jeweiligen Hauptspeicherseiten verweigert/verweigern, die durch den Schlüssel geschützt sind. Bei einem Beispiel kann eine Anwendung 102 über die Systemaufrufschnittstelle 116 einen Schutzschlüssel 124 mit einem Systemaufruf „pkey_alloc()“ beziehen, der einen Ganzzahlindex zurückgibt, der angibt, welcher Schlüssel zugeordnet wurde. Die Anwendung 102 kann über die Systemaufrufschnittstelle 116 mit einem Systemaufruf „pkey_mprotect()“ einer bestimmten Seite einen Schlüssel zuweisen. Die Anwendung 102 kann den Systemaufruf „pkey_free()“ verwenden, um einen Schutzschlüssel zuzuordnen oder freizugeben, um ihn für spätere Zuordnungen verfügbar zu machen.
  • 2 veranschaulicht eine beispielhafte Realisierungsform des Hauptspeicher-Schutzschlüsselmechanismus gemäß einer Ausführungsform. Hierbei umfasst die Seitenrahmen-Zuordnungsfunktion 118 eine Seitentabelle 202 und ein Register 204 mit Schutzschlüsselrechten für Benutzerseiten (PKRU-Register) (PKRU = protection key rights for user pages). Die Seitentabelle 202 umfasst einen oder mehrere Seitentabelleneinträge 206, von denen jedem ein Schutzschlüssel 124 zugewiesen sein kann. Bei dem PKRU-Register 204 handelt es sich um ein Steuerregister, das für rigiden Schutzschlüssel 124 zwei getrennte Bits umfasst (z.B. ein Zugriffsdeaktivierungsbit und ein Schreibdeaktivierungsbit). Bei diesem Beispiel umfasst das PKRU-Register 204 zwei getrennte Bits für einen ersten Schutzschlüssel 124A („foo“) und einen zweiten Schutzschlüssel 124B („bar“).
  • Das PKRU-Register 204 kann für jeden Schutzschlüssel 124 bestimmen, ob auf die Hauptspeicherseite (des Seitentabelleneintrags 206), die diesem Schutzschlüssel 124 zugehörig ist, zugegriffen (z.B. von dieser gelesen oder auf diese geschrieben) werden kann. Bei diesem bestimmten Beispiel umfasst der Seitentabelleneintrag 206 ein Schutzschlüsselfeld 208 für einen Schutzschlüssel 124, das für Benutzerebenenseiten (z.B. U/S = 1) gilt. Der Schutzschlüssel 124 innerhalb des Schutzfeldes 208 wird als Index auf das PKRU 204 verwendet. Zugriffsberechtigungen auf die Hauptspeicherseiten werden anschließend auf der Grundlage bisheriger Seitenberechtigungen (aus dem Seitentabelleneintrag 206) und der PKRU-Berechtigungen für den Schutzschlüssel 124 (der dem Seitentabelleneintrag 206 zugehörig ist) ermittelt. Wenn zum Beispiel die PKRU-Berechtigungen den Zugriff auf eine bestimmte Hauptspeicherseite verweigern, kann der Anwendung 102 der Zugriff auf diese Hauptspeicherseite verweigert werden. In ähnlicher Weise können direkte Hauptspeicherzugriffe auf diese Hauptspeicherseite aus dem Kern 114 ebenfalls zurückgewiesen werden.
  • Unter erneuter Bezugnahme auf 1 kann der Compiler 104 im Allgemeinen Quellcode aus einer höheren Programmiersprache (z.B. C, C+ usw.) in eine Sprache einer unteren Ebene (z.B. Assemblercode, Objektcode, Maschinencode usw.) übersetzen, um ein ausführbares Programm (z.B. Anwendung 102) zu erstellen. Zu beachten ist, dass in 1 der Compiler 104 zwar innerhalb des Datenverarbeitungssystems 100 dargestellt ist, der Compiler 104 sich bei anderen Ausführungsformen jedoch innerhalb eines weiteren Datenverarbeitungssystems befinden kann. Bei einigen Ausführungsformen kann sich der Compiler 104 in einem Datenverarbeitungssystem befinden, das in einer Cloud-Computing-Umgebung (nicht gezeigt) gehostet wird. Bei einigen Ausführungsformen kann die Anwendung 102 von Funktionen Gebrauch machen, die entweder in das Programm selbst oder als Teil einer Bibliothek (z.B. C-Bibliothek (Iibc)) codiert sind, das/die in dem Hauptspeicher 122 gespeichert ist. Funktionen können innerhalb von Anwendungen 102 (oder Programmen) oder getrennt in Bibliotheken definiert sein, die durch mehrere Anwendungen verwendet werden können. Eine Funktion ist oftmals so codiert, dass sie während der Ausführung einer Anwendung 102 mehrmals und von verschiedenen Orten aus gestartet oder aufgerufen werden kann, unter anderem von anderen Funktionen, und dann zur nächsten Anweisung nach dem Aufruf zurückverzweigen oder zurückspringen kann, sobald die Aufgabe ausgeführt ist. Eine Funktion kann auch als Prozedur, Unterroutine, Routine, Methode, Unterprogramm usw. bezeichnet werden.
  • Ein Prozessor 120 kann einen Aufruf-Stack verwenden, um Funktionsaufrufe und -rücksprünge zu realisieren. Zum Beispiel erstellt jeder Funktionsaufruf einen neuen Eintrag oder Stack-Rahmen an einem Ende des Stacks. Wenn die Funktion zurückspringt, wird der Stack-Rahmen aus dem Stack gelöscht, und der Platz kann für andere Funktionsaufrufe verwendet werden. Jeder Stack-Rahmen kann die privaten Daten (z.B. Parameter und interne Variablen) der entsprechenden Aufruf- und Rücksprungadresse (z.B. die Adresse der Anweisung nach dem Aufruf) umfassen. Ein Aufruf-Stack dient zum Nachverfolgen des Punkts, bis zu dem jede aktive Funktion die Steuerung zurückgeben sollte, wenn sie das Ausführen beendet. Bei einer aktiven Funktion handelt es sich zum Beispiel um eine, die aufgerufen wurde, aber die Ausführung noch nicht beendet hat, wonach die Steuerung an den Punkt des Aufrufs oder an die aufrufende Funktion zurückgegeben werden sollte.
  • Eine Funktion kann außerdem einen Funktionsprolog und einen Funktionsepilog umfassen, die den Rumpf der Funktion umschließen und zum Manipulieren des Stacks verwendet werden können. Zum Beispiel steht der Funktionsprolog am Anfang der Funktionen und bereitet den Stack und die Register zur Verwendung innerhalb der Funktion vor. In ähnlicher Weise steht der Funktionsepilog am Ende der Funktion und stellt den Stack und die Register wieder in den Zustand her, in dem sie sich befanden, bevor die Funktion aufgerufen wurde. Der Funktionsepilog umfasst normalerweise den Funktionsaustrittspunkt oder die Rücksprunganweisung wie z.B. „ret“ in x86-Assemblersprache.
  • Wie angemerkt verwendet ein böswilliger Akteur bei einem ROP-Angriff oftmals mehrere Gadgets, um den Aufruf-Stack zu manipulieren und die Programmausführung zu verändern. Im hierin verwendeten Sinne bezeichnet ein Gadget eine Abfolge von Anweisungen, die eine Operation für ein rücksprungorientiertes Programm bereitstellt. Jedes Gadget kann mit einer Rücksprunganweisung (z.B. x86-Anweisung RET) enden. Zum Beispiel handelt es sich bei „move eax. 10: ret“ um ein Gadget, das eax auf 10 (dezimal) setzt. Bei den Gadgets handelt es sich normalerweise um Abfolgen von Anweisungen, die im Hauptspeicher (z.B. im Adressraum) der Anwendung 102 zu finden sind. Bei einer beispielhaften Quelle eines derartigen Gadgets handelt es sich um eine Bibliothek wie z.B. libc, die für die Anwendung 102 zugänglich ist. Böswillige Akteure können durch Analysieren des Binärcodes von Programmen oder Bibliotheken eines Betriebssystems oftmals die Abfolgen von Anweisungen erkennen, die als Gadgets verwendet werden können. Im Allgemeinen kann eine beliebige Anweisungsabfolge, die mit einer Zieladresse endet, die während der Laufzeit ermittelt werden kann, wie z.B. eine Rücksprunganweisung, möglicherweise als Gadget verwendet werden. Zu Beispielen häufig verwendeter Gadgets gehören Gadgets, die Daten von einem Ort auf einen anderen speichern und laden (z.B. Register zu Register, Register zum Hauptspeicher, Hauptspeicher zum Register usw.), Gadgets, die arithmetische Operationen durchführen (z.B. ADD, SUB, MUL, DIV XOR, Drehungen, Verschiebungen usw.) usw.
  • In einigen Fällen kann ein böswilliger Akteur den ROP-Angriff in Form eines rücksprungorientierten Programms ausführen. Das rücksprungorientierte Programm kann zum Beispiel ein oder mehrere Gadgets umfassen, die in einer bestimmten Reihenfolge angeordnet sind, sodass sie bei Ausführung das beabsichtigte Verhalten des böswilligen Akteurs verwirklichen. Eine Nutzlast bei den Gadgets kann im Hauptspeicher der ausgenutzten Anwendungen (z.B. Anwendung 102) abgelegt werden, und der Stack-Zeiger kann so umgeleitet werden, dass er auf das erste Gadget zeigt. Bei einem Beispiel kann dies mit einem Pufferüberlauf des Stacks erreicht werden. Die Gadget-Rahmen werden normalerweise in dem übergelaufenen Stack abgelegt, sodass das erste Gadget den gespeicherten Anweisungszeiger einer bestimmten Funktion überschrieben hat. Wenn diese Funktion zurückzuspringen versucht, wird stattdessen das rücksprungorientierte Programm ausgeführt. Jedes Gadget in dem rücksprungorientierten Programm ist so aufgebaut, dass, wenn die Rücksprunganweisung in der letzten Anweisung der Abfolge ausgeführt wird, der Stack-Zeiger auf das nächste auszuführende Gadget zeigt. Auf diese Weise führt das rücksprungorientierte Programm ein Gadget nach dem anderen aus, wodurch der beabsichtigte Ausführungsablauf der Anwendung 102 verändert wird.
  • 3 veranschaulicht ein Referenzbeispiel eines ROP-Angriffs gemäß einer Ausführungsform. Bei diesem Referenzbeispiel startet die Anwendung 102 bei 302 und wartet bei 304 auf Benutzereingaben (z.B. kann die Anwendung 102 eine Funktion aufrufen, die Benutzereingaben erfordert). Hierbei kann die Anwendung 102 bei 304 eine bekannte Schwachstelle enthalten (z.B. ist die Anwendung gegenüber einem Pufferüberlauf in dem Aufruf-Stack anfällig). Bei 306 nutzt ein böswilliger Akteur diese Schwachstelle aus und überschreibt den Stack 350 mit frei wählbaren Daten. Wie gezeigt überschreibt in diesem Fall der Pufferüberlauf die Rücksprungadresse der aufgerufenen Funktion und nachfolgende Stack-Bereiche mit Hauptspeicheradressen von Interesse.
  • Bei 308 wird die Ausführung der Anwendung 102 fortgesetzt und bei 310 springt die aktuelle Funktion zurück. Anstelle des Zurückspringens zu der vorherigen Rücksprungadresse, die der aktuellen Funktion zugehörig ist, springt die Anwendung 102 jedoch zu der Adresse eines ersten Gadgets (innerhalb der Bibliothek 360, die sich im Hauptspeicher der Anwendung 102 befindet) und führt bei 312 Anweisungen aus, die dem ersten Gadget zugehörig sind. Wenn die Rücksprunganweisung des ersten Gadgets ausgeführt wird, springt die Anwendung 102 zu der Adresse eines zweiten Gadgets (innerhalb der Bibliothek 360) und führt bei 314 Anweisungen aus, die dem zweiten Gadget zugehörig sind. Wenn die Rücksprunganweisung des zweiten Gadgets ausgeführt wird, springt die Anwendung 102 zu der Adresse eines dritten Gadgets (innerhalb der Bibliothek 360) und führt bei 316 Anweisungen aus, die dem dritten Gadget zugehörig sind. Bei diesem Prozess wird jedes Gadget über eine Rücksprungfunktion (z.B. ret) aufgerufen, und dieses Gadget endet mit einer Rücksprungfunktion, die auf das nächste Gadget zeigt. Der böswillige Akteur kann die Argumente der Gadgets innerhalb der Bibliothek 360 über den Stack 350 übergeben.
  • Dieser Prozess kann auf diese Weise fortgesetzt werden, bis der böswillige Akteur sein Ziel erreicht hat. Zum Beispiel kann ein böswilliger Akteur diesen ROP-Angriff verwenden, um der Funktionsausführung eine frei wählbare Reihenfolge aufzuzwingen, um Türen zu öffnen (z.B. Öffnen einer Root-Shell unter Unix), die durch den böswilligen Akteur ausgenutzt werden können. Ferner kann der in 3 dargestellte ROP-Angriff realisiert werden, ohne neuen Code zu injizieren. Das heißt, der ROP-Angriff verwendet erneut Funktionen aus einer Bibliothek (der Bibliothek 360 wie z.B. libc) im Hauptspeicher und übergibt frei wählbare Parameter an die Funktionen in dem Stack 350.
  • Hierin beschriebene Ausführungsformen stellen Techniken bereit, die ROP-Angriffe wie z.B. den in 3 dargestellten ROP-Angriff entschärfen können, indem der (z.B. in 2 dargestellte) Hauptspeicher-Schutzschlüsselmechanismus genutzt wird, der durch das Datenverarbeitungssystem 100 unterstützt wird. Unter erneuter Bezugnahme auf 1 umfasst der Compiler 104 eine Schutzkomponente 110, die so konfiguriert ist, dass sie eine oder mehrere hierin beschriebene Techniken zum Entschärfen von ROP-Angriffen realisiert. Zu beachten ist, dass 1 lediglich eine mögliche Anordnung des Datenverarbeitungssystems 100 veranschaulicht und dass andere Anordnungen von Datenverarbeitungssystemen verwendet werden können, um die hierin beschriebenen Techniken zu realisieren. Zum Beispiel kann sich der Compiler 104 bei einer Ausführungsform auf einem weiteren Datenverarbeitungssystem befinden und Quellcode unter Verwendung der hierin beschriebenen Techniken zur Ausführung durch das Datenverarbeitungssystem 100 kompilieren.
  • Bei einer Ausführungsform kann die Schutzkomponente 110 CPU-Anweisungen einer Anwendung 102 mit einem oder mehreren Schutzschlüsseln 124 während der Kompilierungszeit schützen, um die Anwendung 102 vor ROP-Angriffen zu schützen, wenn sie auf dem Datenverarbeitungssystem 100 ausgeführt wird. Zum Beispiel kann die Schutzkomponente 110 beim Kompilieren von Quellcode einer Anwendung 102 „Hochrisiko“-Funktionen zuordnen, die anfällig dafür sind, als Gadgets für Seitenrahmen innerhalb des Hauptspeichers 122 verwendet zu werden, die mit einem oder mehreren Schutzschlüsseln 124 geschützt sind. Bei einer Ausführungsform kann die Schutzkomponente 110 auf der Grundlage einer vorkonfigurierten Liste von Funktionen, die von einem Entwickler (z.B. einem Entwickler der Anwendung 102) empfangen wurde, feststellen, dass es sich um eine „Hochrisiko“-Funktion handelt.
  • Beim Kompilieren des Quellcodes kann die Schutzkomponente 110 außerdem einer jeden der „Hochrisiko“-Funktionen, die mit einem bestimmten Schutzschlüssel 124 geschützt sind, ein Schutzkennzeichen 112 zuweisen. Jedes Schutzkennzeichen 112 ist einem bestimmten Seitenrahmen zugehörig, der mit einem Schutzschlüssel 124 geschützt ist. Bei einer nachstehend ausführlicher beschriebenen Ausführungsform kann die Schutzkomponente 110 die Schutzkennzeichen 112 verwenden, um die ordnungsgemäße Ausführungsreihenfolge der Funktionen innerhalb des Quellcodes der Anwendung 102 zu definieren, sodass Funktionen der Anwendung 102 nur ausgeführt werden, wenn der Seitenrahmen, in dem sich die Funktion befindet, die ordnungsgemäße Kennzeichenreihenfolge enthält.
  • 4 ist ein Flussdiagramm eines Verfahrens 400 zum Entschärfen von ROP-Angriffen gemäß einer Ausführungsform. Das Verfahren 400 kann durch einen Compiler (z.B. Compiler 104) durchgeführt werden. Bei einer Ausführungsform kann das Verfahren 400 während der Kompilierungszeit (z.B. vor der Laufzeit oder Ausführung) der Anwendung 102 durchgeführt werden.
  • Das Verfahren 400 kann bei Block 402 in den Ablauf eintreten, bei dem der Compiler die Aufbauphase (build-phase) startet. Bei Block 404 erkennt der Compiler eine Art einer oder mehrerer Funktionen innerhalb des Quellcodes. Bei Block 406 ermittelt der Compiler, bei welchen Arten von Funktionen des Quellcodes es sich um „Hochrisiko“-Funktionen handelt, die anfällig dafür sind, als Gadgets verwendet zu werden. Zu Beispielen von „Hochrisiko“-Funktionen können Funktionen gehören, die anfällig für Pufferüberlauf-Angriffe sind (z.B. Kopierfunktionen, Verschiebefunktionen usw.). Bei einer Ausführungsform kann der Compiler einen Satz von „Hochrisiko“-Funktionen auf der Grundlage einer vorgegebenen Liste derartiger Funktionen ermitteln, die von einem Entwickler empfangen wurde. Bei einer weiteren Ausführungsform kann der Compiler zum Ermitteln des Satzes von „Hochrisiko“-Funktionen dem Quellcode zugehörige Informationen (z.B. einen Satz von Entwicklerrichtlinien) analysieren oder auswerten, die von einem Entwickler des Quellcodes empfangen wurden. Zum Beispiel können die Entwicklerrichtlinien angeben, welche Arten von Funktionen unterschiedlichen Seitenrahmen zugeordnet werden sollten, um die Funktionen davor zu schützen, bei einem ROP-Angriff als Gadgets verwendet zu werden.
  • Bei Block 408 löst der Compiler die Zuweisung einer jeden des Satzes von „Hochrisiko“-Funktionen zu einem oder mehreren Seitenrahmen aus, die mit einem oder mehreren Schutzschlüsseln 124 geschützt sind. Bei einer Ausführungsform kann der Compiler die Zuweisung durch Anweisen (oder Anfordern) einer Seitenrahmen-Zuweisungsfunktion (z.B. Seitenrahmen-Zuweisungsfunktion 118) auslösen, um den Satz von „Hochrisiko“-Funktionen einem oder mehreren Seitenrahmen zuzuordnen, die mit einem oder mehreren Schutzschlüsseln 124 geschützt sind. Nach dem Zuweisen weist der Computer jeder Funktion in dem Satz von „Hochrisiko“-Funktionen ein Schutzkennzeichen 112 zu (Block 410). Bei einer Ausführungsform kann der Compiler einen Systemaufruf (z.B. pkey_alloc_flag()) über die Systemaufrufschnittstelle 116 verwenden, um jedes Schutzkennzeichen 112 zuzuweisen. Die Zuweisung eines Schutzkennzeichens 112 zu einer bestimmten Funktion modifiziert den Funktionsprolog und den -epilog, sodass diese das Schutzkennzeichen 112 umfassen. Der Compiler gibt die Reihenfolge an, in der die Funktionen in dem Quellcode über den Satz von Schutzkennzeichen 112 auszuführen sind. Sobald die Schutzkennzeichen 112 zugewiesen sind, kann der Compiler den Aufbauprozess beenden (Block 412), und das Verfahren 400 endet.
  • 5 veranschaulicht ein Beispiel von Funktionen, die Seitenrahmen zugeordnet sind, die gemäß einer Ausführungsform mit Schutzschlüsseln 124 geschützt sind. Bei dieser Ausführungsform weist der Compiler 104 drei unterschiedliche Funktionen, A(), B() und C(), drei unterschiedlichen Seitenrahmen 502A, 502B bzw. 502C zu. Jeder Seitenrahmen 502A, 502B und 502C ist durch einen jeweiligen Schutzschlüssel 124A, 124B und 124C geschützt. Wie gezeigt weist der Compiler 104 außerdem den Funktionen A(), B() und C() Schutzkennzeichen 112A, 112B bzw. 112C zu. Jedes Schutzkennzeichen 112 ist einem der Schutzschlüssel 124 zugeordnet. Wie angemerkt kann der Compiler 104 den Satz von Schutzkennzeichen 112 verwenden, um zu steuern, welche Funktionen der Anwendung 102 ausgeführt werden, und/oder die Reihenfolge zu definieren, in der die „Hochrisiko“-Funktionen der Anwendung 102 ausgeführt werden. Da der Compiler 104 die Reihenfolge berechtigter Funktionen mit den Schutzschlüsseln 124 verarbeitet, können zum Beispiel die Funktionen nur ausgeführt werden, wenn jeder Seitenrahmen die ordnungsgemäße Kennzeichenreihenfolge hat. Auf diese Weise kann, wenn ein böswilliger Akteur die Funktionsaufruf-Reihenfolge zu ändern versucht, die Anwendung 102 anhalten, da der Funktionsaufruf nicht den korrekten Schutzschlüssel enthält.
  • Zu beachten ist, dass 5 zwar drei Funktionen darstellt, die drei unterschiedlichen geschützten Seitenrahmen zugeordnet sind, jedoch bei anderen Ausführungsformen die als „Hochrisiko“ erkannten Funktionen auf andere Weise geschützten Seitenrahmen zugeordnet werden können. Zum Beispiel können bei einigen Ausführungsformen mehrere Funktionen demselben geschützten Seitenrahmen zugeordnet sein. Bei diesen Ausführungsformen kann jeder dieser Funktionen ein Schutzkennzeichen 112 zugewiesen sein, das demselben Schutzschlüssel 124 zugeordnet ist. Bei anderen Ausführungsformen können mehrere Funktionen vorliegen, die einem gleichen Seitenrahmen zugewiesen sind, der mit mehreren Schutzschlüsseln 124 geschützt ist. Zum Beispiel können bei diesen Ausführungsformen unterschiedliche Hauptspeicherbereiche (oder -regionen) innerhalb des Seitenrahmens mit einem anderen Schutzschlüssel 124 geschützt sein, und eine oder mehrere Funktionen können den unterschiedlichen Hauptspeicherbereichen zugewiesen (oder zugeordnet) sein.
  • Betrachtet werden soll das in 6 dargestellte beispielhafte Szenario eines ROP-Angriffs auf eine Anwendung 102, die unter Verwendung der hierin beschriebenen ROP-Entschärfungstechniken kompiliert wurde. Ähnlich wie bei dem ROP-Angriff in 3 nutzt ein böswilliger Angreifer bei diesem ROP-Angriff bei 306 eine Schwachstelle (z.B. einen Pufferüberlauf) in der Anwendung aus (z.B. nachdem das Programm bei 302 startet und anhält, um bei 304 auf eine Eingabe zu warten). Insbesondere versucht der böswillige Akteur einen Pufferüberlauf an dem Stack 350, der die Rücksprungadresse der aufgerufenen Funktion mit der Adresse eines Gadgets innerhalb der Bibliothek 360 der Hauptspeicherseite 502 überschreibt. Bei dieser Ausführungsform wird jedoch, wenn die beschädigte Rücksprungadresse bei 602 versucht, das Gadget im Hauptspeicher aufzurufen, die Ausführung angehalten, da die aufgerufene Funktion gekennzeichnet ist und der Funktionsaufruf nicht das korrekte Schutzkennzeichen 112 bereitstellt (das Schutzkennzeichen 112, das dem Schutzschlüssel 124 für die Hauptspeicherseite 502 zugehörig ist). Auf diese Weise stellen Ausführungsformen einen sicheren Mechanismus bereit, der durch den Compiler vollständig realisiert werden kann und der für den Benutzer und den Entwickler transparent ist. Darüber hinaus können Ausführungsformen die hierin beschriebenen Techniken mit minimalem Aufwand realisieren (z.B. im Verhältnis zu dem Aufwand, der herkömmlichen Techniken zugehörig ist) und erfordern kein Neuordnen von Quellcode.
  • 7 ist ein Flussdiagramm eines Verfahrens 700 zum Ausführen einer Anwendung (z.B. Anwendung 102) gemäß einer Ausführungsform, die durch einen Compiler (z.B. Compiler 104) kompiliert wurde. Das Verfahren 700 kann durch eine oder mehrere Komponenten (z.B. Prozessor(en) 120) des Datenverarbeitungssystems 100 durchgeführt werden.
  • Das Verfahren 700 kann in den Ablauf bei Block 702 eintreten, bei dem das Datenverarbeitungssystem 100 ein oder mehrere Schutzkennzeichen (z.B. Schutzkennzeichen 112) aus einem Prolog einer (ersten) Funktion erkennt, die der Anwendung zugehörig ist. Wie angemerkt sind die Schutzkennzeichen Funktionen zugehörig, die sich innerhalb der Hauptspeicherseiten befinden, die mit einem oder mehreren Schutzschlüsseln (z.B. Schutzschlüssel 124) geschützt sind. Bei Block 704 beginnt das Datenverarbeitungssystem 100 mit dem Ausführen der Funktion. Bei einer Ausführungsform kann das Datenverarbeitungssystem 100 zum Beispiel wegen Benutzereingaben oder zum Durchführen einer anderen Operation pausieren. In einigen Fällen kann während der Ausführung ein böswilliger Akteur eine Schwachstelle innerhalb der Anwendung ausnutzen und einen Pufferüberlauf bewirken, der die Rücksprungadresse der ersten Funktion mit der Adresse einer weiteren (zweiten) Funktion (oder eines Gadgets)im Hauptspeicher überschreibt. Bei Block 706 stellt das Datenverarbeitungssystem 100 zum Beispiel fest, dass der Funktionsrücksprung eine weitere Funktion im Hauptspeicher aufruft.
  • Bei Block 708 ermittelt das Datenverarbeitungssystem 100, ob der Funktionsrücksprungaufruf das/die der anderen Funktion zugehörigen Schutzkennzeichen umfasst. Wenn der Funktionsrücksprungaufruf das/die relevanten Schutzkennzeichen nicht umfasst, hält das Datenverarbeitungssystem 100 die Ausführung an und blockiert den Zugriff auf die andere Funktion (Block 710). Wenn der Funktionsrücksprungaufruf das/die relevanten Schutzkennzeichen doch umfasst, führt das Datenverarbeitungssystem 100 die andere Funktion aus (Block 712). Das Verfahren 700 verlässt dann den Ablauf. Bei einer Ausführungsform kann das Datenverarbeitungssystem Wiederholungen der Operationen in 702, 704, 706 und 708 als Teil des Durchführens der Operationen in 712 durchführen.
  • 8 veranschaulicht ein Datenverarbeitungssystem 800 gemäß einer Ausführungsform, das so konfiguriert ist, dass es ein Eingliedern (onboarding) von Einheiten durchführt. Wie gezeigt umfasst das Datenverarbeitungssystem 800, ohne auf diese beschränkt zu sein, eine Zentraleinheit (central processing unit, CPU) 805, eine Netzwerkschnittstelle 815, einen Hauptspeicher 820 und einen Speicher 860, die jeweils mit einem Bus 817 verbunden sind. Das Datenverarbeitungssystem 800 kann außerdem eine E/A-Einheitenschnittstelle 810 zum Anschließen von E/A-Einheiten 812 (z.B. einer Tastatur-, Anzeige- und Mauseinheit) an das Datenverarbeitungssystem 800 umfassen. Ferner können im Kontext dieser Offenbarung die in dem Datenverarbeitungssystem 800 gezeigten Datenverarbeitungselemente einem physischen Datenverarbeitungssystem (z.B. einem System in einem Datenzentrum) entsprechen, oder es kann sich hierbei um eine virtuelle Datenverarbeitungsinstanz handeln, die innerhalb einer Datenverarbeitungs-Cloud ausgeführt wird.
  • Die CPU 805 ruft in dem Hauptspeicher 820 gespeicherte Programmieranweisungen ab und führt diese aus und speichert und ruft Anwendungsdaten ab, die sich in dem Hauptspeicher 820 befinden. Die Zwischenverbindung 817 dient zum Übertragen von Programmieranweisungen und Anwendungsdaten zwischen der CPU 805, der E/A-Einheitenschnittstelle 810, dem Speicher 860, der Netzwerkschnittstelle 815 und dem Hauptspeicher 820. Zu beachten ist, dass die CPU 805 stellvertretend für eine einzige CPU, mehrere CPUs, eine einzige CPU, die mehrere Verarbeitungskerne enthält, und dergleichen steht. Der Hauptspeicher 820 ist allgemein stellvertretend für einen Direktzugriffsspeicher enthalten. Bei dem Speicher 860 kann es sich um eine Plattenlaufwerk-Speichereinheit handeln. Zwar ist der Speicher 860 als eine einzige Einheit gezeigt, jedoch kann es sich hierbei m eine Kombination aus festen und/oder wechselbaren Speichereinheiten wie z.B. Festplattenlaufwerken, wechselbaren Speicherkarten oder einem optischen Speicher, netzgebundenem Speicher (network attached storage, NAS) oder einem Speichernetzwerk (storage area network, SAN) handeln. Der Speicher 860 enthält Schutzkennzeichen 112 und Schutzschlüssel 124, die vorstehend ausführlicher beschrieben sind. Zur Veranschaulichung enthält der Hauptspeicher 820 den Compiler 104 und das Betriebssystem 106, die vorstehend ausführlicher beschrieben sind.
  • Die Beschreibungen der verschiedenen Ausführungsformen der vorliegenden Erfindung sollen der Veranschaulichung dienen, sind jedoch nicht als vollständig oder auf die offenbarten Ausführungsformen beschränkt gedacht. Für Fachleute sind viele Modifikationen und Variationen denkbar, ohne dass diese eine Abweichung vom Schutzumfang und Grundgedanken der beschriebenen Ausführungsformen darstellen würden. Die hierin verwendete Terminologie wurde gewählt, um die Grundgedanken der Ausführungsformen, die praktische Anwendung bzw. die technische Verbesserung gegenüber den auf dem Markt vorgefundenen Technologien zu erläutern bzw. anderen mit entsprechenden Fachkenntnissen das Verständnis der hierin offenbarten Ausführungsformen zu ermöglichen.
  • Im Folgenden wird Bezug auf in dieser Offenbarung vorgestellte Ausführungsformen genommen. Der Schutzumfang der vorliegenden Offenbarung ist jedoch nicht auf bestimmte beschriebene Ausführungsformen beschränkt. Stattdessen ist eine beliebige Kombination der folgenden Merkmale und Elemente unabhängig davon denkbar, ob sie mit unterschiedlichen Ausführungsformen im Zusammenhang stehen, um die Erfindung zu realisieren und in die Praxis umzusetzen. Obwohl hierin offenbarte Ausführungsformen möglicherweise Vorteile gegenüber anderen möglichen Lösungen oder gegenüber dem Stand der Technik erzielen, schränkt des Weiteren eine angegebene Ausführungsform den Schutzbereich der vorliegenden Offenbarung unabhängig davon nicht ein, ob ein bestimmter Vorteil durch eine angegebene Ausführungsform erzielt wird. Daher tragen die folgenden Aspekte, Merkmale, Ausführungsformen und Vorteile lediglich einen veranschaulichenden Charakter und sind nicht als Elemente oder Einschränkungen der beigefügten Ansprüche gedacht, ausgenommen in Fällen, in denen dies in einem Anspruch bzw. in Ansprüchen ausdrücklich angegeben ist. Ebenso ist ein Bezug auf „die Erfindung“ nicht als Verallgemeinerung eines hierin offenbarten Erfindungsgegenstands auszulegen und nicht als Element oder Einschränkung der beigefügten Ansprüche anzusehen, ausgenommen in Fällen, in denen dies in einem Anspruch bzw. in Ansprüchen ausdrücklich angegeben ist.
  • Aspekte der vorliegenden Erfindung können die Form einer vollständig in Hardware realisierten Ausführungsform, einer vollständig in Software realisierten Ausführungsform (unter anderem Firmware, residente Software, Mikrocode usw.) oder einer Ausführungsform annehmen, die Software- und Hardwareaspekte kombiniert, die im hierin allgemein als „Schaltung“, „Modul“ oder „System“ bezeichnet sind.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt handeln. Das Computerprogrammprodukt kann (ein) durch einen Computer lesbare(s) Speichermedium (oder -medien) enthalten, auf dem/denen durch einen Computer lesbare Programmanweisungen gespeichert sind, um einen Prozessor zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine materielle Einheit handeln, auf der Anweisungen zur Verwendung durch eine Einheit zur Ausführung von Anweisungen aufbewahrt und gespeichert sein können. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel, ohne auf diese beschränkt zu sein, um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder eine beliebige geeignete Kombination des Vorstehenden handeln. Eine nicht erschöpfende Liste genauerer Beispiele des durch einen Computer lesbaren Speichermediums umfasst Folgendes: eine transportable Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (RAM), einen Nur-Lese-Speicher (ROM), einen löschbaren programmierbaren Nur-Lese-Speicher (EPROM oder Flash-Speicher), einen statischen Direktzugriffsspeicher (SRAM), einen transportablen Nur-Lese-Speicher in Form einer Compact Disc (CD-ROM), eine Digital Versatile Disc (DVD), einen Speicherstick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder erhöhte Strukturen in einer Rille mit darauf aufgezeichneten Anweisungen oder beliebige geeignete Kombinationen des Vorstehenden. Ein durch einen Computer lesbares Speichermedium im hierin verwendeten Sinne ist nicht so auszulegen, dass es sich dabei um flüchtige Signale an sich handelt, beispielsweise um Funkwellen oder sich frei ausbreitende elektromagnetische Wellen, um elektromagnetische Wellen, die sich durch einen Hohlleiter oder andere Übertragungsmedien ausbreiten (z.B. ein Lichtwellenleiterkabel durchlaufende Lichtimpulse) oder um elektrische Signale, die über ein Kabel übertragen werden.
  • Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können über ein Netzwerk, zum Beispiel das Internet, ein lokales Netzwerk ein Weitverkehrsnetzwerk und/oder ein Drahtlosnetzwerk von einem durch einen Computer lesbaren Speichermedium auf betreffende Datenverarbeitungs-/Verarbeitungseinheiten oder auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, Drahtlosübertragung, Router, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder eine Netzwerkschnittstelle in der Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der jeweiligen Datenverarbeitungs-/Verarbeitungseinheit weiter.
  • Durch einen Computer lesbare Programmanweisungen zum Ausführen von Operationen der vorliegenden Erfindung können Assembleranweisungen, ISA-Anweisungen (ISA = Instruction Set Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, Daten zum Setzen von Zuständen oder entweder Quellcode oder Objektcode sein, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben sind, zu denen eine objektorientierte Programmiersprache wie beispielsweise Smalltalk, C++ oder Ähnliches und herkömmliche prozedurale Programmiersprachen wie beispielsweise die Programmiersprache „C“ oder ähnliche Programmiersprachen gehören. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. Bei dem letztgenannten Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über eine beliebige Art von Netzwerk verbunden sein, unter anderem über ein lokales Netzwerk (Local Area Network, LAN) oder über ein Weitverkehrsnetzwerk (Wide Area Network, WAN), oder die Verbindung kann zu einem externen Computer hergestellt werden (beispielsweise über das Internet unter Nutzung eines Internetdienstanbieters (Internet Service Provider)). Bei einigen Ausführungsformen können elektronische Schaltungen, zu denen beispielsweise programmierbare Logikschaltungen, vor Ort programmierbare Gatteranordnungen (Field-Programmable Gate Arrays, FPGA) oder programmierbare Logikanordnungen (PLA) gehören, die durch einen Computer lesbaren Programmanweisungen ausführen, indem Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen genutzt werden, um die elektronische Schaltung zu personalisieren, sodass Aspekte der vorliegenden Erfindung durchgeführt werden.
  • Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Flussdiagrammdarstellungen und/oder Blockschemata von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird klar sein, dass jeder Block der Flussdiagramme und/oder der Blockschemata und Kombinationen von Blöcken in den Flussdiagrammen und/oder Blockschemata mit Hilfe von durch einen Computer lesbaren Programmanweisungen realisiert werden kann bzw. können.
  • Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder anderer programmierbaren Datenverarbeitungsvorrichtungen bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computers oder anderer programmierbarer Datenverarbeitungsvorrichtungen ausgeführt werden, Mittel schaffen, um die in einem Block bzw. in den Blöcken des Flussdiagramms bzw. der Flussdiagramme und/oder des Blockschemas bzw. der Blockschemata angegebenen Funktionen/Aktionen zu realisieren. Diese durch einen Computer lesbaren Programmanweisungen können ebenfalls in einem durch einen Computer lesbaren Medium gespeichert sein, das einen Computer, andere programmierbare Datenverarbeitungsvorrichtungen oder andere Einheiten anweisen kann, in einer bestimmten Weise zu funktionieren, sodass das durch einen Computer lesbare Medium mit darauf gespeicherten Anweisungen ein Erzeugnis aufweist, das Anweisungen enthält, die die in einem Block bzw. in den Blöcken der Flussdiagramme und/oder der Blockschemata angegebene Funktion/Aktion realisieren.
  • Die durch einen Computer lesbaren Programmanweisungen können auch in einen Computer, in andere programmierbare Datenverarbeitungsvorrichtungen oder in andere Einheiten geladen werden, um zu bewirken, dass auf dem Computer, auf anderen programmierbaren Vorrichtungen oder anderen Einheiten eine Reihe von Operationen ausgeführt wird, um einen mittels Computer realisierten Prozess zu schaffen, sodass die Anweisungen, die auf dem Computer, auf anderen programmierbaren Vorrichtungen oder Einheiten ausgeführt werden, die in einem Block bzw. in den Blöcken der Flussdiagramme und/oder der Blockschemata angegebenen Funktionen/Aktionen realisieren.
  • Die Flussdiagramme und Blockschemata in den Figuren veranschaulichen die Architektur, Funktionalität und Wirkungsweise möglicher Realisierungsformen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Flussdiagrammen bzw. in den Blockschemata ein Modul, ein Segment oder einen Abschnitt von Anweisungen darstellen, das bzw. der eine oder mehrere ausführbare Anweisungen zum Realisieren der angegebenen Logikfunktion bzw. Logikfunktionen aufweist. Bei einigen alternativen Realisierungsformen können die in dem Block angegebenen Funktionen in einer anderen als in der Reihenfolge ausgeführt werden, die in den Figuren angegeben ist. Zum Beispiel können zwei hintereinander aufgeführte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können je nach der mit den Blöcken verbundenen Funktionalität manchmal in umgekehrter Reihenfolge ausgeführt werden. Darüber hinaus ist anzumerken, dass jeder Block der Blockschemata und/oder Flussdiagrammdarstellungen sowie Kombinationen von Blöcken in den Blockschemata und/oder Flussdiagrammdarstellungen mit Hilfe zweckgebundener hardwaregestützter Systeme zum Ausführen der angegebenen Funktionen bzw. Aktionen oder mit Hilfe von Kombinationen aus zweckgebundener Hardware und zweckgebundenen Computeranweisungen realisiert werden kann bzw. können.
  • Ausführungsformen der Erfindung können Endbenutzern über eine Cloud-Datenverarbeitungsinfrastruktur bereitgestellt werden. Der Begriff „Cloud-Datenverarbeitung“ („Cloud-Computing“) bezeichnet allgemein die Bereitstellung skalierbarer Datenverarbeitungsressourcen als Dienst über ein Netzwerk. Formaler ausgedrückt kann Cloud-Computing als Datenverarbeitungsfunktion definiert werden, die eine Abstraktion zwischen der Datenverarbeitungsressource und ihrer zugrundeliegenden technischen Architektur (z.B. Server, Speicher, Netzwerke) bereitstellt, die den benutzerfreundlichen bedarfsorientierten Netzwerkzugriff auf eine gemeinsam genutzte Ansammlung konfigurierbarer Datenverarbeitungsressourcen ermöglicht, die mit minimalem Verwaltungsaufwand bzw. über minimale Interaktion mit dem Dienstanbieter bereitgestellt und freigegeben werden kann. Somit ermöglicht Cloud-Computing einem Benutzer unabhängig von den zugrundeliegenden physischen Systemen (oder den Standorten der Systeme), die zur Bereitstellung der Datenverarbeitungsressourcen verwendet werden, auf virtuelle Datenverarbeitungsressourcen (z.B. Speicher, Daten, Anwendungen und selbst auf komplette virtualisierte Datenverarbeitungssysteme) in der „Cloud“ zuzugreifen.
  • Normalerweise werden Cloud-Computing-Ressourcen einem Benutzer auf einer Grundlage der Kosten pro Nutzung (pay-per-use) bereitgestellt, bei der Benutzern nur Kosten für die tatsächlich genutzten Datenverarbeitungsressourcen (z.B. eine Größe des durch einen Benutzer in Anspruch genommenen Speicherplatzes oder eine Anzahl virtueller Systeme, die der Benutzer instanziiert hat) in Rechnung gestellt werden. Ein Benutzer kann über das Internet jederzeit und von überall auf beliebige der Ressourcen zugreifen, die sich in der Cloud befinden. Im Kontext der vorliegenden Erfindung kann ein Benutzer auf Anwendungen (z.B. Compiler 104) und zugehörige Daten zugreifen, die in der Cloud zur Verfügung stehen. Zum Beispiel könnte der Compiler 104 auf einem Datenverarbeitungssystem in der Cloud ausgeführt werden und unter Verwendung einer oder mehrerer hierin beschriebener ROP-Entschärfungstechniken Quellcode für eine Anwendung (z.B. Anwendung 102) kompilieren. In einem derartigen Fall könnte der Compiler 104 „Hochrisiko“-Funktionen im Quellcode einer Anwendung erkennen, die Zuweisung dieser „Hochrisiko“-Funktionen zu Speicherseiten auslösen, die mit einem oder mehreren Schutzschlüsseln geschützt sind, und den „Hochrisiko“-Funktionen Schutzkennzeichen zuweisen. Die Anwendung 102 kann dann gespeichert werden, um später durch ein Datenverarbeitungssystem abgerufen zu werden. Zum Beispiel kann das Datenverarbeitungssystem dann während des Ausführens der Anwendung auf der Grundlage, ob die Funktion die relevanten Schutzkennzeichen umfasst, ermitteln, ob auf eine bestimmte Funktion im Hauptspeicher zugegriffen werden kann. Dies ermöglicht einem Benutzer, von einem beliebigen Datenverarbeitungssystem, das an ein mit der Cloud verbundenes Netzwerk (z.B. das Internet) angeschlossen ist, auf diese Daten zuzugreifen.
  • Zwar ist das Vorstehende auf Ausführungsformen der vorliegenden Erfindung gerichtet, es können jedoch andere und weitere Ausführungsformen der Erfindung entwickelt werden, ohne von deren grundlegendem Schutzumfang abzuweichen, wobei deren Schutzumfang durch die nachfolgenden Ansprüche festgelegt ist.

Claims (20)

  1. Mittels Computer realisiertes Verfahren zum Entschärfen von Angriffen mittels rücksprungorientierter Programmierung (ROP-Angriffen) (ROP = return oriented programming), wobei das mittels Computer realisierte Verfahren aufweist: Empfangen von Quellcode zum Kompilieren in eine ausführbare Anwendung; Ermitteln, während einer Kompilierung des Quellcodes, einer oder mehrerer Funktionen innerhalb des Quellcodes, die Gadgets in einem ROP-Angriff zugehörig sind; Zuweisen, während der Kompilierung des Quellcodes, einer jeden der einen oder mehreren Funktionen zu einer oder mehreren geschützten Seiten des Hauptspeichers für die ausführbare Anwendung; und Zuweisen, während der Kompilierung des Quellcodes, eines Kennzeichens zu jeder der einen oder mehreren Funktionen, wobei das Kennzeichen für jede Funktion der geschützten Hauptspeicherseite zugeordnet ist, der die Funktion zugewiesen ist.
  2. Mittels Computer realisiertes Verfahren nach Anspruch 1, wobei das Ermitteln der einen oder mehreren Funktionen innerhalb des Quellcodes, die Gadgets in dem ROP-Angriff zugehörig sind, ein Empfangen einer Liste einer oder mehrerer Funktionen, die Gadgets in dem ROP-Angriff zugehörig sind, von einem Entwickler des Quellcodes aufweist.
  3. Mittels Computer realisiertes Verfahren nach Anspruch 1, wobei das Ermitteln der einen oder mehreren Funktionen innerhalb des Quellcodes, die Gadgets in dem ROP-Angriff zugehörig sind, aufweist: Ermitteln einer oder mehrerer Arten von Funktionen, die als Gadgets in dem ROP-Angriff verwendet werden können, auf der Grundlage einer Auswertung von Informationen, die dem Quellcode zugehörig sind, der von einem Entwickler des Quellcodes empfangen wurde; und Feststellen, dass es sich bei der einen oder den mehreren Funktionen um eine der ermittelten Arten von Funktionen handelt, die als Gadgets in dem ROP-Angriff verwendet werden können.
  4. Mittels Computer realisiertes Verfahren nach Anspruch 1, das während einer Ausführung der ausführbaren Anwendung ferner aufweist: Feststellen, dass ein Funktionsrücksprung der ausführbaren Anweisung eine zweite Funktion im Hauptspeicher für die ausführbare Anwendung aufruft; und nach dem Feststellen, dass der Funktionsrücksprung das Kennzeichen nicht enthält, das der zweiten Funktion zugehörig ist, Anhalten der Ausführung der ausführbaren Anwendung.
  5. Mittels Computer realisiertes Verfahren nach Anspruch 1, wobei das Zuweisen des Kennzeichens zu jeder der einen oder mehreren Funktionen ein Modifizieren von mindestens einem aus einem Prolog der Funktion und einem Epilog der Funktion aufweist, um einen Verweis auf das Kennzeichen zu enthalten.
  6. Mittels Computer realisiertes Verfahren nach Anspruch 1, wobei das Zuweisen einer jeden der einen oder mehreren Funktionen zu der einen oder den mehreren geschützten Hauptspeicherseiten ein Zuweisen jeder Funktion zu einer anderen geschützten Hauptspeicherseite aufweist.
  7. Mittels Computer realisiertes Verfahren nach Anspruch 1, wobei das Zuweisen einer jeden der einen oder mehreren Funktionen zu der einen oder den mehreren geschützten Hauptspeicherseiten ein Zuweisen einer Mehrzahl von Funktionen innerhalb des Quellcodes zu einer gleichen geschützten Hauptspeicherseite aufweist.
  8. System, das aufweist: mindestens einen Prozessor; und einen Hauptspeicher, in dem ein oder mehrere Anwendungen gespeichert sind, die bei Ausführung durch den Prozessor eine Operation zum Entschärfen eines Angriffs mittels rücksprungorientierter Programmierung (ROP-Angriff) durchführen, der während der Ausführung einer Anwendung auftritt, wobei die Operation aufweist: Empfangen von Quellcode zum Kompilieren in eine ausführbare Anwendung; Ermitteln, während einer Kompilierung des Quellcodes, einer oder mehrerer Funktionen innerhalb des Quellcodes, die Gadgets in einem ROP-Angriff zugehörig sind; Zuweisen, während der Kompilierung des Quellcodes, einer jeden der einen oder mehreren Funktionen zu einer oder mehreren geschützten Seiten des Hauptspeichers für die ausführbare Anwendung; und Zuweisen, während der Kompilierung des Quellcodes, eines Kennzeichens zu jeder der einen oder mehreren Funktionen, wobei das Kennzeichen für jede Funktion der geschützten Hauptspeicherseite zugeordnet ist, der die Funktion zugewiesen ist.
  9. System nach Anspruch 8, wobei das Ermitteln der einen oder mehreren Funktionen innerhalb des Quellcodes, die Gadgets in dem ROP-Angriff zugehörig sind, ein Empfangen einer Liste einer oder mehrerer Funktionen, die Gadgets in dem ROP-Angriff zugehörig sind, von einem Entwickler des Quellcodes aufweist.
  10. System nach Anspruch 8, wobei das Ermitteln der einen oder mehreren Funktionen innerhalb des Quellcodes, die Gadgets in dem ROP-Angriff zugehörig sind, aufweist: Ermitteln einer oder mehrerer Arten von Funktionen, die als Gadgets in dem ROP-Angriff verwendet werden können, auf der Grundlage einer Auswertung von Informationen, die dem Quellcode zugehörig sind, der von einem Entwickler des Quellcodes empfangen wurde; und Feststellen, dass es sich bei der einen oder den mehreren Funktionen um eine der ermittelten Arten von Funktionen handelt, die als Gadgets in dem ROP-Angriff verwendet werden können.
  11. System nach Anspruch 8, wobei die Operation während einer Ausführung der ausführbaren Anwendung ferner aufweist: Feststellen, dass ein Funktionsrücksprung der ausführbaren Anweisung eine zweite Funktion im Hauptspeicher für die ausführbare Anwendung aufruft; und nach dem Feststellen, dass der Funktionsrücksprung das Kennzeichen nicht enthält, das der zweiten Funktion zugehörig ist, Anhalten der Ausführung der ausführbaren Anwendung.
  12. System nach Anspruch 8, wobei das Zuweisen des Kennzeichens zu jeder der einen oder mehreren Funktionen ein Modifizieren von mindestens einem aus einem Prolog der Funktion und einem Epilog der Funktion aufweist, um einen Verweis auf das Kennzeichen zu enthalten.
  13. System nach Anspruch 8, wobei das Zuweisen einer jeden der einen oder mehreren Funktionen zu der einen oder den mehreren geschützten Hauptspeicherseiten ein Zuweisen jeder Funktion zu einer anderen geschützten Hauptspeicherseite aufweist.
  14. System nach Anspruch 8, wobei das Zuweisen einer jeden der einen oder mehreren Funktionen zu der einen oder den mehreren geschützten Hauptspeicherseiten ein Zuweisen einer Mehrzahl von Funktionen innerhalb des Quellcodes zu einer gleichen geschützten Hauptspeicherseite aufweist.
  15. Computerprogrammprodukt zum Entschärfen von Angriffen mittels rücksprungorientierter Programmierung (ROP-Angriffen), wobei das Computerprogrammprodukt ein oder mehrere, durch einen Computer lesbare Speichermedien aufweist, auf denen zusammen durch einen Computer lesbarer Programmcode gespeichert ist, wobei der durch einen Computer lesbare Programmcode durch einen oder mehrere Prozessoren ausführbar ist, um eine Operation durchzuführen, die aufweist: Empfangen von Quellcode zum Kompilieren in eine ausführbare Anwendung; Ermitteln, während einer Kompilierung des Quellcodes, einer oder mehrerer Funktionen innerhalb des Quellcodes, die Gadgets in einem ROP-Angriff zugehörig sind; Zuweisen, während der Kompilierung des Quellcodes, einer jeden der einen oder mehreren Funktionen zu einer oder mehreren geschützten Seiten des Hauptspeichers für die ausführbare Anwendung; und Zuweisen, während der Kompilierung des Quellcodes, eines Kennzeichens zu jeder der einen oder mehreren Funktionen, wobei das Kennzeichen für jede Funktion der geschützten Hauptspeicherseite zugeordnet ist, der die Funktion zugewiesen ist.
  16. Computerprogrammprodukt nach Anspruch 15, wobei das Ermitteln der einen oder mehreren Funktionen innerhalb des Quellcodes, die Gadgets in dem ROP-Angriff zugehörig sind, ein Empfangen einer Liste einer oder mehrerer Funktionen, die Gadgets in dem ROP-Angriff zugehörig sind, von einem Entwickler des Quellcodes aufweist.
  17. Computerprogrammprodukt nach Anspruch 15, wobei das Ermitteln der einen oder mehreren Funktionen innerhalb des Quellcodes, die Gadgets in dem ROP-Angriff zugehörig sind, aufweist: Ermitteln einer oder mehrerer Arten von Funktionen, die als Gadgets in dem ROP-Angriff verwendet werden können, auf der Grundlage einer Auswertung von Informationen, die dem Quellcode zugehörig sind, der von einem Entwickler des Quellcodes empfangen wurde; und Feststellen, dass es sich bei der einen oder den mehreren Funktionen um eine der ermittelten Arten von Funktionen handelt, die als Gadgets in dem ROP-Angriff verwendet werden können.
  18. Computerprogrammprodukt nach Anspruch 15, wobei die Operation während einer Ausführung der ausführbaren Anwendung ferner aufweist: Feststellen, dass ein Funktionsrücksprung der ausführbaren Anweisung eine zweite Funktion im Hauptspeicher für die ausführbare Anwendung aufruft; und nach dem Feststellen, dass der Funktionsrücksprung das Kennzeichen nicht enthält, das der zweiten Funktion zugehörig ist, Anhalten der Ausführung der ausführbaren Anwendung.
  19. Computerprogrammprodukt nach Anspruch 15, wobei das Zuweisen des Kennzeichens zu jeder der einen oder mehreren Funktionen ein Modifizieren von mindestens einem aus einem Prolog der Funktion und einem Epilog der Funktion aufweist, um einen Verweis auf das Kennzeichen zu enthalten.
  20. Computerprogrammprodukt nach Anspruch 15, wobei das Zuweisen einer jeden der einen oder mehreren Funktionen zu der einen oder den mehreren geschützten Hauptspeicherseiten ein Zuweisen jeder Funktion zu einer anderen geschützten Hauptspeicherseite aufweist.
DE112020004190.5T 2019-11-08 2020-10-16 Verbessern der sicheren programmierung im hauptspeicher unter verwendung eines seitenrahmen-kennzeichenmechanismus Active DE112020004190B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/678,904 US11341241B2 (en) 2019-11-08 2019-11-08 Enhancing memory safe programming using a page frame tag mechanism
US16/678,904 2019-11-08
PCT/IB2020/059767 WO2021090096A1 (en) 2019-11-08 2020-10-16 Enhancing memory safe programming using page frame tag mechanism

Publications (2)

Publication Number Publication Date
DE112020004190T5 true DE112020004190T5 (de) 2022-05-19
DE112020004190B4 DE112020004190B4 (de) 2024-09-19

Family

ID=75846855

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020004190.5T Active DE112020004190B4 (de) 2019-11-08 2020-10-16 Verbessern der sicheren programmierung im hauptspeicher unter verwendung eines seitenrahmen-kennzeichenmechanismus

Country Status (6)

Country Link
US (1) US11341241B2 (de)
JP (1) JP7495193B2 (de)
CN (1) CN114641770B (de)
DE (1) DE112020004190B4 (de)
GB (1) GB2603444B (de)
WO (1) WO2021090096A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11610000B2 (en) * 2020-10-07 2023-03-21 Bank Of America Corporation System and method for identifying unpermitted data in source code
US20230208871A1 (en) * 2021-12-28 2023-06-29 SecureX.AI, Inc. Systems and methods for vulnerability assessment for cloud assets using imaging methods
US20230208870A1 (en) * 2021-12-28 2023-06-29 SecureX.AI, Inc. Systems and methods for predictive analysis of potential attack patterns based on contextual security information
CN117093377A (zh) * 2022-05-12 2023-11-21 北京图森智途科技有限公司 用于在多个模块之间传输数据的系统和方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5619671A (en) 1993-04-19 1997-04-08 International Business Machines Corporation Method and apparatus for providing token controlled access to protected pages of memory
US7272832B2 (en) 2001-10-25 2007-09-18 Hewlett-Packard Development Company, L.P. Method of protecting user process data in a secure platform inaccessible to the operating system and other tasks on top of the secure platform
JP2006185233A (ja) 2004-12-28 2006-07-13 Hitachi Ltd セキュリティ向上のためのプログラム変換方法及びこれを用いたコンパイラプログラム
US20130166922A1 (en) 2011-12-23 2013-06-27 Ati Technologies Ulc Method and system for frame buffer protection
US8776223B2 (en) 2012-01-16 2014-07-08 Qualcomm Incorporated Dynamic execution prevention to inhibit return-oriented programming
US9569612B2 (en) * 2013-03-14 2017-02-14 Daniel Shawcross Wilkerson Hard object: lightweight hardware enforcement of encapsulation, unforgeability, and transactionality
US10311228B2 (en) * 2014-09-30 2019-06-04 Apple Inc. Using a fine-grained address space layout randomization to mitigate potential security exploits
CN105022956B (zh) * 2015-08-14 2018-11-09 中国科学院计算技术研究所 一种抵御代码重用攻击的方法
US9767292B2 (en) 2015-10-11 2017-09-19 Unexploitable Holdings Llc Systems and methods to identify security exploits by generating a type based self-assembling indirect control flow graph
CN105224864B (zh) * 2015-11-04 2018-05-04 中国科学院计算技术研究所 一种抵御代码重用攻击的工作进程随机化方法及系统
US10628589B2 (en) * 2016-01-22 2020-04-21 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for preventing code reuse attacks
CN107798241B (zh) * 2016-09-07 2020-01-31 龙芯中科技术有限公司 攻击检测装置、系统及方法
US10884952B2 (en) 2016-09-30 2021-01-05 Intel Corporation Enforcing memory operand types using protection keys
US10572666B2 (en) 2017-04-20 2020-02-25 Microsoft Technology Licensing, Llc Return-oriented programming mitigation
US10885183B2 (en) * 2017-09-28 2021-01-05 International Business Machines Corporation Return oriented programming attack protection
GB2572158B (en) 2018-03-20 2020-11-25 Advanced Risc Mach Ltd Random tag setting instruction

Also Published As

Publication number Publication date
WO2021090096A1 (en) 2021-05-14
US20210141899A1 (en) 2021-05-13
US11341241B2 (en) 2022-05-24
JP7495193B2 (ja) 2024-06-04
CN114641770B (zh) 2024-06-25
GB2603444A (en) 2022-08-03
DE112020004190B4 (de) 2024-09-19
GB202207658D0 (en) 2022-07-06
JP2023501091A (ja) 2023-01-18
GB2603444B (en) 2023-01-25
CN114641770A (zh) 2022-06-17

Similar Documents

Publication Publication Date Title
DE112020004190B4 (de) Verbessern der sicheren programmierung im hauptspeicher unter verwendung eines seitenrahmen-kennzeichenmechanismus
DE112018002031B4 (de) Sichern einer betriebssystemkonfiguration unter verwendung von hardware
DE112015004555B4 (de) Verarbeiten eines Gast-Ereignisses in einem von einem Hypervisor gesteuerten System
DE10195999B3 (de) Computersystem mit einer in einem Chipsatz enthaltenen Speichersteuereinrichtung zum Kontrollieren von Zugriffen auf einen isolierten Speicher für eine isolierte Ausführung
DE112016005571T5 (de) Aufrufergeschützte stapelrücksprungadresse in einer hardware-verwalteten stapelarchitektur
DE202009019137U1 (de) Apparat für die Validierung eines nicht vertrauenswürdigen Nativen Code-Moduls
DE102012200613A1 (de) System und Verfahren zur Unterstützung von JIT in einem sicheren System und zufällig zugewiesenen Speicherbereichen
DE202009019136U1 (de) Systeme zur sicheren Ausführung eines nicht vertrauenswürdigen Nativen Codemoduls auf einer Datenverarbeitungsvorrichtung
DE112017004843T5 (de) Technologien für deterministischen Codeflussintegritätsschutz
DE202014011092U1 (de) Sicherheitsarchitektur für virtuelle Maschinen
DE112019001121T5 (de) Erkennen von malware
DE102015002124A1 (de) Rücksprungzielbeschränkte Prozedurrücksprungbefehle, Prozessoren, Verfahren und Systeme
DE102018115670A1 (de) Technologien für die Ausführung von nicht vertrauenswürdigem Code mit Prozessor-Sandbox-Unterstützung
DE102021124623A1 (de) Schützen vor ungültigen arbeitsspeicherreferenzen
DE102012215196A1 (de) Schützen von Anwendungsprogrammen vor zerstörerischer Software oder Malware
DE112019000594T5 (de) Injizieren von Abfangcode in einen Ausführungspfad eines ein Programm ausführenden Prozesses, um einen Abfangadressbereich zu erzeugen, um möglichen schädlichen Programmcode zu erkennen
DE202014011116U1 (de) System zum Bewahren und nachfolgenden Wiederherstellen eines Emulatorzustands
DE102020126293A1 (de) Vorrichtungen, verfahren und systeme für anweisungen für kryptografisch an daten gebundene nutzungsbeschränkungen
DE102021130906A1 (de) Optimieren von zugriffen auf begrenzungsinformationen beim pufferschutz
DE112020000280T5 (de) Transparente interpretation von gastbefehlen in einer sicheren virtuellen maschinenumgebung
DE102021131418A1 (de) Dedizierte registerdatei mit begrenzungsinformationen zum schützen vor speicherreferenzen ausserhalb der begrenzungen
DE202017007430U1 (de) Erkennen von Bussperrbedingungen und Vermeiden von Bussperren
DE112018002954T5 (de) Bereitstellen eines konfigurationsabhängigen arbeitsablaufs
DE112020005517T5 (de) Prozessgestütztes virtualisierungssystem zum ausführen eines sicheren anwendungsprozesses
DE112017004160T5 (de) Schützen eines Webservers vor einer nicht autorisierten Client-Anwendung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R084 Declaration of willingness to licence
R016 Response to examination communication
R018 Grant decision by examination section/examining division