DE112017004843T5 - Technologien für deterministischen Codeflussintegritätsschutz - Google Patents

Technologien für deterministischen Codeflussintegritätsschutz Download PDF

Info

Publication number
DE112017004843T5
DE112017004843T5 DE112017004843.5T DE112017004843T DE112017004843T5 DE 112017004843 T5 DE112017004843 T5 DE 112017004843T5 DE 112017004843 T DE112017004843 T DE 112017004843T DE 112017004843 T5 DE112017004843 T5 DE 112017004843T5
Authority
DE
Germany
Prior art keywords
hash
path
instruction
code
evaluator
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.)
Pending
Application number
DE112017004843.5T
Other languages
English (en)
Inventor
Michael E. Kounavis
David M. Durham
Ravi L. Sahita
Karanvir S. Grewal
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE112017004843T5 publication Critical patent/DE112017004843T5/de
Pending legal-status Critical Current

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
    • 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/562Static detection
    • G06F21/563Static detection by source code analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)
  • Storage Device Security (AREA)

Abstract

Technologien für einen Codeflussintegritätsschutz enthalten einen statischen Analysator, der ein potenzielles Gadget in einen Atomic-Code-Pfad eines geschützten Codes identifiziert. Eine Marker-Instruktion wird nach dem potenziellen Gadget mit einem Parameter eingefügt, der einer Adresse der Marker-Instruktion entspricht, eine Hash-Evaluator-Instruktion wird nach einem Austrittspunkt des Atomic-Code-Pfades mit einem Parameter eingefügt, der der Adresse der Marker-Instruktion entspricht, und eine Vergleichs-Evaluator-Instruktion und eine Hash-Überprüfungsinstruktion werden nach der Hash-Evaluator-Instruktion eingefügt. Eine Ziel-Computervorrichtung führt den geschützten Code aus und aktualisiert einen Pfad-Hash als eine Funktion des Parameters der Marker-Instruktion, bestimmt einen erwarteten Hash-Wert als eine Funktion des Parameters der Hash-Evaluator-Instruktion, und generiert eine Ausnahme, falls der Pfad-Hash und der erwartete Hash-Wert nicht übereinstimmen. Weitere Ausführungsformen werden beschrieben und beansprucht.

Description

  • OUERVERWEIS AUF VERWANDTE US-PATENTANMELDUNG
  • Die vorliegende Anmeldung beansprucht die Priorität der US-Gebrauchsmusteranmeldung mit der Seriennummer 15/276,895 mit dem Titel „TECHNOLOGIES FOR DETERMINISTIC CODE FLOW INTEGRITY PROTECTION“, die am 27. September 2016 eingereicht wurde.
  • HINTERGRUND
  • Return-Oriented Programming (ROP)-Exploits sind eine immer häufiger anzutreffende Form bösartiger Software (Malware), die bestimmte Abwehrmechanismen umgehen kann, die Orte im Speicher als nicht-ausführbar markieren. Ein ROP-Exploit verkettet eine große Anzahl vorhandener Segmente von ausführbarem Code miteinander, die jeweils mit einer „Return“-Instruktion enden (als Gadgets bekannt). Jedes ROP-Gadget ist in der Regel kurz und entspricht in der Regel keinem existierenden Procedere und nicht einmal einer existierenden Instruktionsgrenze in dem ausführbaren Code. Der Angreifer konstruiert einen bösartigen Stapel, der eine Reihe von Return-Adressen enthält, die auf die gewünschte Sequenz von Gadgets zeigen. Das ROP-Exploit wird ausgeführt, indem der Prozessor des Computers veranlasst wird, Software unter Verwendung des bösartigen Stapels anstelle des legitimen Systemstapels auszuführen. Zum Beispiel kann der bösartige Stapel hineingetragen werden durch: Zerschlagen des Stapels, unter Verwendung eines Pufferüberlauf-Exploits, Schwenken zu einem neuen Stapel, oder sonstiges Beschädigen des Systemstapels. Jump-Oriented Programming (JOP) und Call-Oriented Programming (COP)-Exploits sind ähnlich, aber zielen auf Gadgets ab, die mit einer indirekten Jump-Instruktion bzw. einer Ruf-Instruktion anstelle einer Return-Instruktion beginnen oder enden.
  • Einige ROP-Exploits können verhindert werden, indem man parallel zu dem gewöhnlichen Systemstapel (auch als „Legacy-Stapel“ bezeichnet) einen „Schattenstapel“ benutzt. Der Schattenstapel verwahrt eine Kopie des Legacy-Stapels im Speicher, auf den gewöhnliche Software nicht zugreifen kann, und kann dafür verwendet werden zu bestimmen, ob der Legacy-Stapel durch Malware manipuliert wurde. Zu anderen verfügbaren Maßnahmen, die helfen, ROP-, JOP- oder andere Steuerungsfluss-Exploits zu vermeiden, kann gehören, ENDBRANCH-Instruktionen in Binäre einzufügen, um zulässige Ziele für indirekte Abzweigungen (Branches) oder Sprünge (Jumps) zu markieren.
  • Figurenliste
  • Die im vorliegenden Text beschriebenen Konzepte sind in den beiliegenden Figuren beispielhaft und nicht zum Zweck der Einschränkung veranschaulicht. Im Interesse der Einfachheit und Verständlichkeit der Veranschaulichung sind die in den Figuren veranschaulichten Elemente nicht unbedingt maßstabsgetreu gezeichnet. Wenn es für zweckmäßig erachtet wurde, wurden Bezeichner in den Figuren wiederholt, um entsprechende oder analoge Elemente anzugeben.
    • 1 ist ein vereinfachtes Blockschaubild mindestens einer Ausführungsform einer Computervorrichtung für einen Codeflussintegritätsschutz;
    • 2 ist ein vereinfachtes Blockschaubild von verschiedenen Umgebungen, die durch eine oder mehrere Computervorrichtungen von 1 geschaffen werden können;
    • 3 ist ein vereinfachtes Flussdiagramm mindestens einer Ausführungsform eines Verfahrens zum statischen Analysieren und Instrumentieren von Code, der durch eine Computervorrichtung der 1-2 ausgeführt werden kann;
    • 4 ist ein vereinfachtes Flussdiagramm mindestens einer Ausführungsform von Atomic-Code-Pfaden, die für einen Codeflussintegritätsschutz instrumentiert werden;
    • 5A und 5B sind ein vereinfachtes Flussdiagramm mindestens einer Ausführungsform eines Verfahrens für einen Codeflussintegritätsschutz, das durch eine Computervorrichtung der 1-2 ausgeführt werden kann; und
    • 6 ist ein vereinfachtes Flussdiagramm mindestens einer Ausführungsform eines Verfahrens für einen Codeflussintegritätsschutz, das durch einen Prozessor einer Computervorrichtung der 1-2 ausgeführt werden kann.
  • DETAILLIERTE BESCHREIBUNG DER ZEICHNUNGEN
  • Obgleich sich die Konzepte der vorliegenden Offenbarung für verschiedene Modifizierungen und alternative Formen anbieten, wurden konkrete Ausführungsformen davon beispielhaft in den Zeichnungen gezeigt und werden im vorliegenden Text im Detail beschrieben. Es versteht sich jedoch, dass es nicht beabsichtigt ist, die Konzepte der vorliegenden Offenbarung auf die konkret offenbarten Formen zu beschränken, sondern dass es vielmehr beabsichtigt ist, alle Modifizierungen, Äquivalente und Alternativen, die den Prinzipien der vorliegenden Offenbarung und den beiliegenden Ansprüchen entsprechen, zu erfassen.
  • Wenn in der Spezifikation von „einer bestimmten Ausführungsform“ „einer Ausführungsform“ „einer veranschaulichenden Ausführungsform“ usw. gesprochen wird, so bedeutet das, dass die beschriebene Ausführungsform ein spezielles Merkmal, eine spezielle Struktur oder eine spezielle Eigenschaft enthalten kann, dass aber nicht jede Ausführungsform unbedingt dieses spezielle Merkmal, diese spezielle Struktur oder diese spezielle Eigenschaft enthalten muss. Des Weiteren beziehen sich solche Formulierungen nicht unbedingt auf dieselbe Ausführungsform. Wenn des Weiteren ein spezielles Merkmal, eine spezielle Struktur oder eine spezielle Eigenschaft in Verbindung mit einer Ausführungsform beschrieben wird, so wird davon ausgegangen, dass es innerhalb des Wissensstandes eines Fachmanns liegt, ein solches Merkmal, eine solche Struktur oder eine solche Eigenschaft in Verbindung mit anderen Ausführungsformen zu realisieren, unabhängig davon, ob sie ausdrücklich beschrieben werden oder nicht. Außerdem versteht es sich, dass Punkte, die in einer Liste in der Form von „mindestens eines von A, B und C“ enthalten sind, (A); (B); (C); (A und B); (A und C); (B und C); oder (A, B und C) bedeuten können. In ähnlicher Weise können Punkte, die in der Form von „mindestens eines von A, B oder C“ enthalten sind, (A); (B) ; (C) ; (A und B); (A und C); (B und C) ; oder (A, B und C) bedeuten.
  • Die offenbarten Ausführungsformen können in einigen Fällen in Hardware, Firmware, Software oder jeder Kombination davon implementiert werden. Die offenbarten Ausführungsformen können auch als Instruktionen implementiert werden, die durch ein oder mehrere transitorische oder nicht-transitorische maschinenlesbare (zum Beispiel computerlesbare) Speichermedien transportiert oder darauf gespeichert werden, die durch einen oder mehrere Prozessoren gelesen und ausgeführt werden können. Ein maschinenlesbares Speichermedium kann als jede Speichervorrichtung, jeder Speichermechanismus oder sonstige physische Struktur zum Speichern oder Senden von Informationen in einer Form verkörpert sein, die durch eine Maschine (zum Beispiel einen flüchtigen oder nicht-flüchtigen Speicher, eine Medien-Disk oder sonstige Medien-Vorrichtung) gelesen werden kann.
  • In den Zeichnungen können einige strukturelle oder Verfahrensmerkmale in speziellen Anordnungen und/oder Reihenfolgen gezeigt sein. Es versteht sich jedoch, dass solche speziellen Anordnungen und/oder Reihenfolgen nicht erforderlich sein müssen. Vielmehr können in einigen Ausführungsformen solche Merkmale in einer anderen Weise und/oder Reihenfolge angeordnet werden, als in den veranschaulichenden Figuren gezeigt ist. Des Weiteren soll die Aufnahme eines strukturellen oder Verfahrensmerkmals in eine bestimmte Figur nicht implizieren, dass das Merkmal in allen Ausführungsformen vorhanden sein muss; in einigen Ausführungsformen braucht es nicht enthalten zu sein oder kann mit anderen Merkmalen kombiniert werden.
  • In 1 kann - in einer veranschaulichenden Ausführungsform - eine Computervorrichtung 100 für einen Codeflussintegritätsschutz verwendet werden. Während des Gebrauchs kann, wie weiter unten noch beschrieben wird, eine Kompilierer-Computervorrichtung 100a geschützten Code statisch analysieren und instrumentieren, und eine Ziel-Computervorrichtung 100b kann den instrumentierten Code ausführen. Die Kompilierer-Computervorrichtung 100a identifiziert einen oder mehrere Atomic-Code-Pfade innerhalb des geschützten Codes und fügt Marker-Instruktionen ein, die auf jedes potenzielle Gadget in dem Atomic-Code-Pfad folgen. Die Kompilierer-Computervorrichtung 100a fügt Code an jedem Austrittspunkt von einem Atomic-Code-Pfad ein, um zu verifizieren, dass jede der Marker-Instruktionen eines gültigen Atomic-Code-Pfades ausgeführt wurde. Während des Gebrauchs führt die Ziel-Computervorrichtung 100b den Atomic-Code-Pfad einschließlich der Marker-Instruktionen aus. Jede Marker-Instruktion veranlasst die Ziel-Computervorrichtung 100b, ein Pfad-Hash-Register auf der Basis des Versatzes der momentanen Marker-Instruktion zu aktualisieren. Beim Verlassen des Atomic-Code-Pfades bestimmt die Ziel-Computervorrichtung 100b, ob das momentane Pfad-Hash-Register mit dem erwarteten Hash-Wert für jeden Atomic-Code-Pfad für diesen Austrittspunkt übereinstimmt. Somit kann die Computervorrichtung 100 einen deterministischen Schutz vor Codefluss-Exploits wie zum Beispiel Call-Oriented Programming-, Return-Oriented Programming- oder Jump-Oriented Programming-Angriffe erlauben. Ein solcher Schutz wird sogar für Calls gewährt, die über verschiedene statisch verbundene Packages (zum Beispiel DLLs) hinweg getätigt werden. Außerdem kann die Computervorrichtung 100 Steuerungsflussintegritätsschutz zu vernünftigen Kosten im Hinblick auf Leistung und/oder erforderliche Prozessor-Hardware bereitstellen. Obgleich als Kompilieren und Instrumentieren des geschützten Codes mit einer Kompilierer-Computervorrichtung 100a und Ausführen des geschützten Codes mit einer Ziel-Computervorrichtung 100b beschrieben, versteht es sich, dass in einigen Ausführungsformen dieselbe Computervorrichtung 100 den geschützten Code analysieren, instrumentieren und ausführen kann.
  • Die Computervorrichtung 100 kann als jede Art von Berechnungs- oder Computervorrichtung verkörpert sein, die in der Lage ist, die im vorliegenden Text beschriebenen Funktionen auszuführen, einschließlich beispielsweise ein Computer, ein Desktop-Computer, eine Workstation, ein Server, ein Laptop-Computer, ein Notebook-Computer, ein Tablet-Computer, eine mobile Computervorrichtung, eine am Körper tragbare Computervorrichtung, eine Netzwerkvorrichtung, eine Web-Vorrichtung, ein verteiltes Computersystem, ein Prozessor-basiertes System und/oder eine Konsumelektronik-Vorrichtung. Wie in 1 gezeigt, enthält die Computervorrichtung 100 zur Veranschaulichung den Prozessor 120, ein Eingabe/Ausgabe-Teilsystem 122, einen Speicher 124, eine Datenspeichervorrichtung 126 und ein Kommunikations-Teilsystem 128. Natürlich kann die Computervorrichtung 100 in anderen Ausführungsformen auch andere oder zusätzliche Komponenten enthalten, wie zum Beispiel solche, die man gemeinhin in einem Desktop-Computer findet (zum Beispiel verschiedene Eingabe/Ausgabe-Vorrichtungen). Außerdem können in einigen Ausführungsformen eine oder mehrere der veranschaulichenden Komponenten in eine andere Komponente integriert sein oder können auf sonstige Weise einen Teil von ihr bilden. Zum Beispiel können in einigen Ausführungsformen der Speicher 124 oder Abschnitte davon in den Prozessor 120 integriert sein.
  • Der Prozessor 120 kann als jede Art von Prozessor verkörpert sein, der in der Lage ist, die im vorliegenden Text beschriebenen Funktionen auszuführen. Der Prozessor 120 kann als ein oder mehrere Ein- oder Mehrkernprozessor(en), ein Digitalsignalprozessor, ein Mikrocontroller oder ein sonstiger Prozessor oder Verarbeitungs-/Steuerschaltkreis verkörpert sein. In ähnlicher Weise kann der Speicher 124 als jede Art von flüchtigem oder nicht-flüchtigem Speicher oder Datenspeicher verkörpert sein, der in der Lage ist, die im vorliegenden Text beschriebenen Funktionen auszuführen. Während des Betriebes kann der Speicher 124 verschiedene Daten und Software speichern, die während des Betriebes der Computervorrichtung 100 verwendet werden, wie zum Beispiel Betriebssysteme, Anwendungen, Programme, Bibliotheken und Treiber.
  • Der Speicher 124 ist kommunikativ mit dem Prozessor 120 über das E/A-Teilsystem 122 gekoppelt, das als Schaltungen und/oder Komponenten verkörpert sein kann, um Eingabe/Ausgabe-Operationen mit dem Prozessor 120, dem Speicher 124 und anderen Komponenten der Computervorrichtung 100 zu ermöglichen. Zum Beispiel kann das E/A-Teilsystem 122 verkörpert sein als, oder kann auf sonstige Weise enthalten: Speichercontroller-Hubs, Eingabe/Ausgabe-Steuerungs-Hubs, Plattformcontroller-Hubs, integrierte Steuerungsschaltungen, Firmware-Vorrichtungen, Kommunikationslinks (d. h. Punkt-zu-Punkt-Links, Bus-Links, Drähte, Kabel, Lichtleiter, Leiterbahnen gedruckter Leiterplatten, usw.) und/oder andere Komponenten und Teilsysteme zum Ermöglichen der Eingabe/Ausgabe-Operationen. In einigen Ausführungsformen kann das E/A-Teilsystem 122 einen Teil eines System-on-Chip (SoC) bilden und zusammen mit dem Prozessor 120, dem Speicher 124 und anderen Komponenten der Computervorrichtung 100 auf einem einzelnen integrierten Schaltkreis-Chip enthalten sein.
  • Die Datenspeichervorrichtung 126 kann als jede Art von Vorrichtung oder Vorrichtungen verkörpert sein, die für die kurzfristige oder langfristige Speicherung von Daten konfiguriert ist, wie zum Beispiel Speichervorrichtungen und -schaltkreise, Speicherkarten, Festplatten, Festkörperlaufwerke oder andere Datenspeichervorrichtungen. Das Kommunikations-Teilsystem 128 der Computervorrichtung 100 kann als jeder Kommunikationsschaltkreis, jede Kommunikationsvorrichtung oder Zusammenstellung davon verkörpert sein, die in der Lage ist, eine Kommunikation zwischen der Computervorrichtung 100 und anderen räumlich abgesetzten Vorrichtungen über ein Netzwerk. Das Kommunikations-Teilsystem 128 kann dafür konfiguriert sein, eine oder mehrere Kommunikationstechnologien (zum Beispiel leitungsgebundene oder drahtlose Kommunikation) und zugehörige Protokolle (zum Beispiel Ethernet, Bluetooth®, Wi-Fi®, WiMAX, usw.) zu verwenden, um eine solche Kommunikation zu realisieren.
  • Wie gezeigt, kann die Computervorrichtung 100 ebenfalls eine oder mehrere Peripherievorrichtungen 130 enthalten. Die Peripherievorrichtungen 130 können eine beliebige Anzahl von zusätzlichen Eingabe/AusgabeVorrichtungen, Schnittstellenvorrichtungen und/oder anderen Peripherievorrichtungen enthalten. Zum Beispiel können in einigen Ausführungsformen die Peripherievorrichtungen 130 eine Anzeige, einen Berührungsbildschirm, Grafikschaltungen, eine Tastatur, eine Maus, ein Lautsprechersystem, ein Mikrofon, eine Netzwerkschnittstelle und/oder andere Eingabe/AusgabeVorrichtungen, Schnittstellenvorrichtungen und/oder Peripherievorrichtungen enthalten.
  • Wir wenden uns nun 2 zu. In einer veranschaulichenden Ausführungsform erzeugt die Kompilierer-Computervorrichtung 100a eine Umgebung 200 während des Betriebes. Die veranschaulichende Umgebung 200 enthält einen statischen Analysator 204 und einen Instrumentierungsmanager 206. Die verschiedenen Komponenten der Umgebung 200 können als Hardware, Firmware, Software oder eine Kombination davon verkörpert sein. Insofern können in einigen Ausführungsformen eine oder mehrere der Komponenten der Umgebung 200 als Schaltungen oder eine Zusammenstellung elektrischer Vorrichtungen verkörpert sein (zum Beispiel statische Analysatorschaltungen 204 und/oder Instrumentierungsmanager-Schaltungen 206). Es versteht sich, dass in solchen Ausführungsformen eine oder mehrere der statischen Analysatorschaltungen 204 und/oder der Instrumentierungsmanager-Schaltungen 206 einen Abschnitt von einem oder mehreren des Prozessors 120, des E/A-Teilsystems 122 und/oder anderen Komponenten der Kompilierer-Computervorrichtung 100a bilden können. Außerdem können in einigen Ausführungsformen eine oder mehrere der veranschaulichenden Komponenten einen Abschnitt einer anderen Komponente bilden, und/oder eine oder mehrere der veranschaulichenden Komponenten können voneinander unabhängig sein.
  • Der statische Analysator 204 ist dafür konfiguriert, Atomic-Code-Pfade eines geschützten Codes 202 zu identifizieren. Der geschützte Code 202 kann als jeder binäre Code, Bytecode, Zwischendarstellung oder sonstiger Code verkörpert sein, der durch den Prozessor 120 der Ziel-Computervorrichtung 100b ausgeführt werden kann oder durch den Prozessor 120 der Ziel-Computervorrichtung 100b weiter kompiliert werden kann, um ausgeführt zu werden. Ein Atomic-Code-Pfad kann beispielsweise als ein Code-Pfad verkörpert sein, der keine Subroutinen-Calls und -Returns, keine Jumps außer den Jumps von If-then-else- und Case-Statements, und keine Loops, einschließlich For-, While- und Do-while-Loops, enthält. Jeder Atomic-Code-Pfad enthält einen Eintrittspunkt und einen Austrittspunkt und kann als eine Sequenz von Code ohne einen Subroutinen-Call, einen Subroutinen-Return, einen Loop-Eintritt oder einen Jump außer einem If-Statement-Jump oder einem Case-Statement-Jump verkörpert sein. Der statische Analysator 204 ist des Weiteren dafür konfiguriert, potenzielle Gadgets in jedem Atomic-Code-Pfad zu identifizieren. Zu potenziellen Gadgets können gehören: Return-Oriented Programming-Gadgets, Jump-Oriented Programming-Gadgets oder externe Dynamic Linked Library (DLL)-Calls. In einigen Ausführungsformen kann der statische Analysator 204 dafür konfiguriert sein, einen Non-Return-Jump des geschützten Codes 202 zu identifizieren, der zu dem Eintrittspunkt eines Atomic-Code-Pfades springt.
  • Der Instrumentierungsmanager 206 instrumentiert den geschützten Code 202, der den instrumentierten geschützten Code 202' generiert. Der Instrumentierungsmanager 206 ist dafür konfiguriert, eine Marker-Instruktionen in jeden Atomic-Code-Pfad in der Nähe jedes potenzielles Gadgets einzufügen (zum Beispiel unmittelbar vor einem oder unmittelbar nach jedem Gadget), wobei jede Marker-Instruktion einen Parameter hat, der einer Adresse der Marker-Instruktion entspricht. In einigen Ausführungsformen ist der Instrumentierungsmanager 206 des Weiteren dafür konfiguriert, eine Marker-Instruktion in den geschützten Code 202 vor einem Non-Return-Jump mit einem Parameter einzufügen, der einer Adresse der Marker-Instruktion entspricht. Der Instrumentierungsmanager 206 ist des Weiteren dafür konfiguriert, eine oder mehrere Steuerungsflussintegritätsevaluierungsinstruktionen in den geschützten Code 202 nach dem Austrittspunkt des Atomic-Code-Pfades einzufügen. Die Steuerungsflussintegritätsevaluierungsinstruktionen können Hash-Evaluator-Instruktionen, Vergleichs-Evaluator-Instruktionen und Hash-Überprüfungsinstruktionen enthalten. Der Instrumentierungsmanager 206 kann dafür konfiguriert sein, Hash-Evaluator-Instruktionen in den geschützten Code 202 nach dem Austrittspunkt eines Atomic-Code-Pfades einzufügen, wobei jede Hash-Evaluator-Instruktion einen Parameter hat, der der Adresse einer Marker-Instruktion entspricht, eine Vergleichs-Evaluator-Instruktion in den geschützten Code 202 nach jeder Gruppe von Hash-Evaluator-Instruktionen einzufügen, und eine Hash-Überprüfungsinstruktion in den geschützten Code 202 nach der letzten eingefügten Vergleichs-Evaluator-Instruktion für jeden Austrittspunkt einzufügen. Der Instrumentierungsmanager 206 kann dafür konfiguriert sein, eine Push-Instruktion in den geschützten Code 202 an jedem Eintrittspunkt eines Atomic-Code-Pfades einzufügen und eine Pop-Instruktion in den geschützten Code 202 nach der Hash-Überprüfungsinstruktion für jeden Austrittspunkt einzufügen.
  • Wir bleiben bei 2. In der veranschaulichenden Ausführungsform erzeugt die Ziel-Computervorrichtung 100b eine Umgebung 220 während des Betriebes. Die veranschaulichende Umgebung 220 enthält einen Pfad-Hash-Aktualisierer 222, einen Hash-Evaluator 226, einen Codefluss-Integritätsprüfer 232, einen Zustandsmanager 234 und in einigen Ausführungsformen einen Speichermanager 236. Die verschiedenen Komponenten der Umgebung 220 können als Hardware, Firmware, Software oder eine Kombination davon verkörpert sein. Insofern können in einigen Ausführungsformen eine oder mehrere der Komponenten der Umgebung 220 als Schaltungen oder eine Zusammenstellung elektrischer Vorrichtungen verkörpert sein (zum Beispiel Pfad-Hash-Aktualisierer-Schaltungen 222, Hash-Evaluator-Schaltungen 226, Codefluss-Integritätsprüfer-Schaltungen 232, Zustandsmanager-Schaltungen 234 und/oder Speichermanager-Schaltungen 236). Es versteht sich, dass in solchen Ausführungsformen eine oder mehrere der Pfad-Hash-Aktualisierer-Schaltungen 222, der Hash-Evaluator-Schaltungen 226, der Codefluss-Integritätsprüfer-Schaltungen 232, der Zustandsmanager-Schaltungen 234 und/oder der Speichermanager-Schaltungen 236 einen Abschnitt von einem oder mehreren des Prozessors 120, des E/A-Teilsystems 122 und/oder anderen Komponenten der Ziel-Computervorrichtung 100b bilden können. Außerdem können in einigen Ausführungsformen eine oder mehrere der veranschaulichenden Komponenten einen Abschnitt einer anderen Komponente bilden, und/oder eine oder mehrere der veranschaulichenden Komponenten können voneinander unabhängig sein.
  • Der Pfad-Hash-Aktualisierer 222 ist dafür konfiguriert, Atomic-Code-Pfade des geschützten Codes 202' auszuführen. Jeder Atomic-Code-Pfad enthält einen Eintrittspunkt, einen Austrittspunkt und eine oder mehrere Marker-Instruktionen. Der Pfad-Hash-Aktualisierer 222 ist dafür konfiguriert, einen Pfad-Hash als eine Funktion einer Adresse einer Marker-Instruktion in Reaktion auf das Ausführen des Atomic-Code-Pfades zu aktualisieren. Wie gezeigt, enthält die Computervorrichtung 100b des Weiteren ein Pfad-Hash-Register 224, und das Aktualisieren des Pfad-Hashs kann das Speichern des Pfad-Hashs in dem Pfad-Hash-Register 224 enthalten. Das Pfad-Hash-Register 224 kann als ein internes Register des Prozessors 120 verkörpert sein und kann als Teil eines Prozesssteuerungsblocks eines Prozesses gespeichert und wiederhergestellt werden. Der Pfad-Hash kann aktualisiert werden, indem die Marker-Instruktionen des Atomic-Code-Pfades mit dem Prozessor 120 ausgeführt werden, wobei jede Marker-Instruktion einen Parameter hat, der der Adresse dieser Marker-Instruktion entspricht. Der Pfad-Hash-Aktualisierer 222 kann den Austrittspunkt eines Atomic-Code-Pfades erreichen, wenn der Atomic-Code-Pfad ausgeführt wird.
  • Der Hash-Evaluator 226 ist dafür konfiguriert, in Reaktion auf das Erreichen des Austrittspunktes einen erwarteten Hash-Wert als eine Funktion einer oder mehrerer Adressen zu generieren, die den Marker-Instruktionen eines gültigen Atomic-Code-Pfades entsprechen, die an dem Austrittspunkt enden. Wie gezeigt, enthält die Computervorrichtung 100b des Weiteren ein Evaluator-Hash-Register 228, und das Generieren des erwarteten Hash-Wertes kann das Speichern des erwarteten Hash-Wertes in dem Evaluator-Hash-Register 228 enthalten. Das Evaluator-Hash-Register 228 kann als ein internes Register des Prozessors 120 verkörpert sein und kann als Teil eines Prozesssteuerungsblocks eines Prozesses gespeichert und wiederhergestellt werden. Jeder erwartete Hash-Wert kann generiert werden, indem durch den Prozessor 120 eine Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen ausgeführt wird, wobei jede Hash-Evaluator-Instruktion der Gruppe einer Marker-Instruktion eines gültigen Atomic-Code-Pfades entspricht, der an dem Austrittspunkt endet. Der Hash-Evaluator 226 ist des Weiteren dafür konfiguriert zu bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt. Wie gezeigt, umfasst die Computervorrichtung 100b des Weiteren ein Integritätsprüfbit 230. Das Integritätsprüfbit 230 kann als ein internes Register des Prozessors 120 verkörpert sein und kann als Teil eines Prozesssteuerungsblocks eines Prozesses gespeichert und wiederhergestellt werden. Das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, kann enthalten, das Integritätsprüfbit 230 in Reaktion auf das Bestimmen zu setzen, dass der Pfad-Hash mit dem erwarteten Hash übereinstimmt. Das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, kann enthalten, durch den Prozessor 120 eine Vergleichs-Evaluator-Instruktion auszuführen.
  • Der Codefluss-Integritätsprüfer 232 ist dafür konfiguriert, eine Codeflussintegritätsausnahme in Reaktion auf das Bestimmen zu generieren, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt. Das Generieren der Codeflussintegritätsausnahme kann enthalten, durch den Prozessor 120 eine Hash-Überprüfungsinstruktion auszuführen.
  • Der Zustandsmanager 234 ist dafür konfiguriert, einen vorherigen Pfad-Hash an einem sicheren Speicherort der Computervorrichtung 100b zu speichern und den vorherigen Pfad-Hash aus dem sicheren Speicherort wiederherzustellen, falls der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt. Der vorherige Pfad kann vor dem Ausführen eines Atomic-Code-Pfades gespeichert werden. Das Speichern des vorherigen Pfad-Hashs kann enthalten, eine Push-Instruktion durch den Prozessor 120 auszuführen, um den vorherigen Pfad-Hash in einem sicheren Stapel zu speichern, und das Wiederherstellen des vorherigen Pfad-Hashs kann enthalten, eine Pop-Instruktion durch den Prozessor 120 auszuführen, um den vorherigen Pfad-Hash aus dem sicheren Stapel abzurufen.
  • Der Speichermanager 236 ist dafür konfiguriert, einen verschlüsselten Speicherzugriff mit dem Pfad-Hash als einen Parameter während der Ausführung eines Atomic-Code-Pfades auszuführen. Oder anders ausgedrückt: Der Wert des Pfad-Hashs, der in Reaktion auf die Ausführung verschiedener Marker-Instruktionen aktualisiert wird, kann dafür verwendet werden, den verschlüsselten Speicherzugriff auszuführen.
  • Obgleich die Umgebungen 200, 220 so veranschaulicht sind, dass sie durch eine separate Kompilierer-Computervorrichtung 100a und Ziel-Computervorrichtung 100b geschaffen werden, versteht es sich, dass in einigen Ausführungsformen einige oder alle der Umgebungen 200, 220 durch dieselbe Computervorrichtung 100 geschaffen werden können. Zum Beispiel kann der geschützte Code 202 in einigen Ausführungsformen durch dieselbe Computervorrichtung 100 instrumentiert und ausgeführt werden.
  • Wir wenden uns nun 3 zu. Während des Gebrauchs kann die Kompilierer-Computervorrichtung 100a ein Verfahren 300 zum statischen Analysieren und Instrumentieren von Code ausführen. Es versteht sich, dass in einigen Ausführungsformen die Operationen des Verfahrens 300 durch ein oder mehrere Module der Umgebung 200 der Kompilierer-Computervorrichtung 100a ausgeführt werden können, wie in 2 gezeigt. Zusätzlich oder alternativ kann das Verfahren 300 in einigen Ausführungsformen als verschiedene Instruktionen verkörpert sein, die auf einem computerlesbaren Medium gespeichert sind und durch den Prozessor 120 und/oder andere Komponenten der Computervorrichtung 100 ausgeführt werden können, um die Computervorrichtung 100 zu veranlassen, das Verfahren 300 auszuführen. Das computerlesbare Medium kann als jede Art von Medium verkörpert sein, das durch die Computervorrichtung 100 gelesen werden kann, einschließlich beispielsweise der Speicher 124, die Datenspeichervorrichtung 126, andere Speicher- oder Datenspeichervorrichtungen der Computervorrichtung 100, tragbare Medien, die durch eine Peripherievorrichtung der Computervorrichtung 100 gelesen werden können, und/oder anderen Medien.
  • Das Verfahren 300 beginnt in Block 302, in dem die Kompilierer-Computervorrichtung 100a den geschützten Code 202 statisch analysiert. Der geschützte Code 202 kann als Quellcode, Objektcode, ausführbarer Code, Bytecode oder jede andere Computercode verkörpert sein, der durch die Ziel-Computervorrichtung 100b ausgeführt werden kann. Wie oben beschrieben, kann die statische Analyse durch einen Kompilierer, einen Linker und/oder ein eigenständiges statisches Analyse-Tool ausgeführt werden. Die Kompilierer-Computervorrichtung 100a kann den geschützten Code 202 während der statischen Analyse analysieren und instrumentieren, wie weiter unten noch beschrieben wird. Während die Kompilierer-Computervorrichtung 100a den geschützten Code 202 instrumentiert, können eine oder mehrere Instruktionen in den instrumentierten geschützten Code 202' eingefügt werden.
  • In Block 304 identifiziert die Kompilierer-Computervorrichtung 100a einen oder mehrere Atomic-Code-Pfade innerhalb des geschützten Codes 202. Ein Atomic-Code-Pfad kann als ein zusammenhängendes Segment von Code verkörpert sein, das keine Subroutinen-Calls oder -Returns enthält, keine anderen Jumps als Jumps von If-then-else-Statements oder Case-Statements enthält, und keine Loops (zum Beispiel For-Loops, While-Loops, Do-while-Loops usw.) enthält. Wie weiter unten noch beschrieben wird, kann eine Laufzeit-Verarbeitung eines Atomic-Code-Pfades durch Subroutinen-Calls, bestimmte Jumps oder Loops unterbrochen werden, und die Verarbeitung des Atomic-Codes kann nach einer Rückkehr von der Unterbrechung wiederaufgenommen werden. Jeder Atomic-Code-Pfad enthält einen Eintrittspunkt und einen Austrittspunkt. Bestimmte Atomic-Code-Pfade können zu mehreren Austrittspunkten abzweigen, und jeder Austrittspunkt kann von mehreren Atomic-Code-Pfaden aus erreichbar sein. In einigen Ausführungsformen kann die Kompilierer-Computervorrichtung 100a in Block 306 eine Gruppe mehrerer zugehöriger Atomic-Code-Pfade identifizieren. Die Atomic-Code-Pfade innerhalb einer Gruppe können die Ausführung überlappen, Eintrittspunkte oder Austrittspunkte gemeinsam nutzen oder auf sonstige Weise zugehörig sein.
  • Wir wenden uns 4 zu, wo ein Schaubild 400 einer möglichen Ausführungsform einer Atomic-Code-Pfad-Gruppe 402 veranschaulicht ist. Wie gezeigt, enthält die Atomic-Code-Pfad-Gruppe 402 einen einzelnen Eintrittspunkt 404 und zwei Austrittspunkte 406, 408. Die Atomic-Code-Pfad-Gruppe 402 enthält des Weiteren mehrere Code-Pfad-Segmente 410, 412, 414, 416, 418. Wie gezeigt, führt der Eintrittspunkt 404 zu dem Code-Pfad-Segment 410, das zu den Code-Segmenten 412, 414, 416 abzweigt. Das Code-Pfad-Segment 412 führt zu dem Austrittspunkt 406. Die Code-Pfad-Segmente 414, 416 knüpfen an das Code-Pfad-Segment 418 an, das zu dem Austrittspunkt 408 führt. Somit enthält die Atomic-Code-Pfad-Gruppe 402 mindestens drei Atomic-Code-Pfade: einen Pfad, der die Code-Pfad-Segmente 410, 412 enthält, einen Pfad, der die Code-Pfad-Segmente 410, 414, 418 enthält, und einen Pfad, der die Code-Pfad-Segmente 410, 416, 418 enthält.
  • Wir kehren zu 3 zurück. Nach der Identifizierung der Atomic-Code-Pfade in Block 304 fügt die Kompilierer-Computervorrichtung 100a in Block 308 Zutrittscode am Eintrittspunkt eines Atomic-Code-Pfades ein. Wie weiter unten noch in Verbindung mit den 5A und 5B beschrieben wird, wird der Zutrittscode bei Laufzeit durch die Ziel-Computervorrichtung 100b ausgeführt, um eine Steuerungsflussintegritätsprüfung vorzubereiten. In Block 310 fügt die Kompilierer-Computervorrichtung 100a eine oder mehrere Push-Instruktionen ein, um das Pfad-Hash-Register 224 der Ziel-Computervorrichtung 100b auf einen sicheren Stapel zu schieben. Der sichere Stapel kann als jeder sichere Speicherort der Ziel-Computervorrichtung 100b verkörpert sein, der vor unbefugtem Zugriff und/oder Modifizieren geschützt ist. Zum Beispiel kann der sichere Stapel als eine verschlüsselte Speicherseite oder als eine Registerdatei des Prozessors 120 verkörpert sein. In Block 312 fügt die Kompilierer-Computervorrichtung 100a eine oder mehrere Instruktionen zum Initialisieren des Pfad-Hash-Registers 224 der Ziel-Computervorrichtung 100b ein. Die Instruktionen können das Pfad-Hash-Register 224 löschen, das Pfad-Hash-Register 224 auf einen Standardwert wie zum Beispiel null setzen, oder das Pfad-Hash-Register 224 auf sonstige Weise auf die Ausführung eines Steuerungsflussschutzes vorbereiten. In Block 314 fügt die Kompilierer-Computervorrichtung 100a eine oder mehrere Instruktionen zum Initialisieren des Integritätsprüfbits 230 der Ziel-Computervorrichtung 100b ein. Die Instruktionen können das Integritätsprüfbit 230 löschen, das Integritätsprüfbit 230 auf einen Standardwert wie zum Beispiel null setzen, oder auf sonstige Weise das Integritätsprüfbit 230 auf die Ausführung eines Steuerungsflussschutzes vorbereiten. In Block 316 fügt die Kompilierer-Computervorrichtung 100a eine Marker-Instruktion am Eintrittspunkt des Atomic-Code-Pfades ein. Die Marker-Instruktion kann an der Adresse des Eintrittspunktes oder nahe dem Eintrittspunkt eingefügt werden, dergestalt, dass die Marker-Instruktion ausgeführt wird, wenn auf den Atomic-Code-Pfad gegangen wird. Die Kompilierer-Computervorrichtung 100a kann den Versatz der Marker-Instruktion als einen Parameter zu der Marker-Instruktion enthalten. Wie weiter unten noch beschrieben wird, aktualisiert die Marker-Instruktion während der Ausführung bei Laufzeit das Pfad-Hash-Register 224 auf der Basis des übermittelten Versatzes der Marker-Instruktion.
  • In einigen Ausführungsformen kann die Kompilierer-Computervorrichtung 100a in Block 318 eine Marker-Instruktion vor einer Non-Returning-Jump-Instruktion einfügen, die zu dem Eintrittspunkt des Atomic-Code-Pfades springt. In ähnlicher Weise kann die Kompilierer-Computervorrichtung 100a den Versatz der Marker-Instruktion als einen Parameter zu der Marker-Instruktion enthalten. Das Ausführen der Marker-Instruktion vor dem Non-Returning-Jump enthält praktisch den Sprung in dem Steuerungsfluss des Atomic-Code-Pfades und erlaubt somit eine Überprüfung der Codeflussintegrität des Non-Return-Jumps und des Atomic-Code-Pfades.
  • In Block 320 identifiziert die Kompilierer-Computervorrichtung 100a ein oder mehrere potenzielle Gadgets in dem Atomic-Code-Pfad. Jedes Gadget kann als eine Sequenz von Instruktionen verkörpert sein, die in einem binären String enden, der in einem Codefluss-Exploit verwendet werden könnte. Zum Beispiel können Gadgets, die in dem Äquivalent einer Return-Instruktion oder einer Jump-Instruktion enden, in Return-Oriented Programming (ROP)- bzw. in Jump-Oriented Programming (JOP)-Exploits verwendet werden. Für bestimmte Prozessorarchitekturen, wie zum Beispiel die Intel®64- und IA-32-Architekturen, können Instruktionen eine variable Länge haben, so dass die Gadgets nicht auf Instruktionsgrenzen des Atomic-Code-Pfades ausgerichtet zu werden brauchen.
  • In Block 322 fügt die Kompilierer-Computervorrichtung 100a eine Marker-Instruktion in der Nähe jedes potenzielles Gadgets in dem Atomic-Code-Pfad ein. In einer Ausführungsform kann eine Marker-Instruktion vor einem potenziellen Gadget in dem Atomic-Code-Pfad angeordnet werden. In einer anderen Ausführungsform kann eine Marker-Instruktion nach einem potenziellen Gadget in dem Atomic-Code-Pfad angeordnet werden. Die Marker-Instruktion kann in den instrumentierten geschützten Code 202' an der Instruktionsgrenze unmittelbar vor oder nach dem Gadget eingefügt werden. Sollte also das Gadget als Teil eines Exploits ausgeführt werden, so würde die Marker-Instruktion möglicherweise nicht ausgeführt werden. Sollte das Gadget als Teil eines Exploits ausgeführt werden, so könnte die Marker-Instruktion zusätzlich oder alternativ in der falschen Reihenfolge ausgeführt werden. Die Kompilierer-Computervorrichtung 100a enthält den Versatz der Marker-Instruktion als einen Parameter zu der Marker-Instruktion. Wie weiter unten noch beschrieben wird, aktualisiert die Marker-Instruktion während der Ausführung das Pfad-Hash-Register 224 auf der Basis des übermittelten Versatzes der Marker-Instruktion.
  • In Block 324 fügt die Kompilierer-Computervorrichtung 100a Austrittscode an der Austrittspunkt des Atomic-Code-Pfades ein. Wie weiter unten noch in Verbindung mit den 5A und 5B beschrieben wird, wird der Austrittscode bei Laufzeit durch die Ziel-Computervorrichtung 100b ausgeführt, um zu bestimmen, ob ein gültiger Atomic-Code-Pfad zu dem Austrittspunkt ausgeführt wurde, und dadurch die Codeflussintegrität zu überprüfen. Der Austrittscode kann in den instrumentierten geschützten Code 202' unmittelbar nach dem Austrittspunkt eingefügt werden.
  • In Block 326 fügt die Kompilierer-Computervorrichtung 100a eine Hash-Evaluator-Instruktion für jede Marker-Instruktion des Atomic-Code-Pfades, der an dem Austrittspunkt endet, ein. Jede Hash-Evaluator-Instruktion enthält einen Parameter gleich dem Versatz der entsprechenden Marker-Instruktion. Die Hash-Evaluator-Instruktionen werden in derselben Reihenfolge eingefügt wie die entsprechenden Marker-Instruktionen. Bei Laufzeit veranlasst das Ausführen jeder Hash-Evaluator-Instruktion die Ziel-Computervorrichtung 100b, das Evaluator-Hash-Register 228 zu aktualisieren. Weil die Hash-Evaluator-Instruktionen die gleichen Parameter und die gleiche Reihenfolge haben wie die Marker-Instruktionen eines gültigen Atomic-Code-Pfades, stimmt der endgültige Wert des Evaluator-Hash-Registers 228 mit dem erwarteten Wert des Pfad-Hash-Registers 224 für diesen gültigen Atomic-Code-Pfad überein. Da die gültigen Atomic-Code-Pfade und potenziellen Gadgets statisch identifiziert werden, können die Hash-Evaluator-Instruktionen und zugehörigen Parameter auch statisch in den instrumentierten geschützten Code 202' eingebunden werden.
  • In Block 328 fügt die Kompilierer-Computervorrichtung 100a eine Vergleichs-Evaluator-Instruktion nach der oder den Hash-Evaluator-Instruktionen ein. Bei Laufzeit veranlasst das Ausführen der Vergleichs-Evaluator-Instruktion die Ziel-Computervorrichtung 100b, die Werte des Pfad-Hash-Registers 224 und des Evaluator-Hash-Registers 228 zu vergleichen. Wenn diese Werte übereinstimmen, dann kann die Ziel-Computervorrichtung 100b das Integritätsprüfbit 230 zum Beispiel unter Verwendung einer logischen OR-Operation setzen. Wenn die Werte nicht übereinstimmen, dann braucht die Ziel-Computervorrichtung 100b den Wert des Integritätsprüfbits 230 nicht zu ändern. Wenn das Pfad-Hash-Register 224 mit dem Evaluator-Hash-Register 228 übereinstimmt, so zeigt dies an, dass die Ziel-Computervorrichtung 100b alle Marker-Instruktionen des Atomic-Code-Pfades in der richtigen Reihenfolge ausgeführt hat, was anzeigt, dass der Atomic-Code-Pfad ordnungsgemäß ausgeführt wurde.
  • In Block 330 bestimmt die Kompilierer-Computervorrichtung 100a, ob andere Atomic-Code-Pfade für den momentanen Austrittspunkt existieren. Zum Beispiel kann die Kompilierer-Computervorrichtung 100a eine Gruppe zugehöriger Atomic-Code-Pfade untersuchen, um zusätzliche Atomic-Code-Pfade zu finden, die an dem momentanen Austrittspunkt enden. In Block 332 überprüft die Kompilierer-Computervorrichtung 100a, ob zusätzliche Atomic-Code-Pfade übrig bleiben. Wenn ja, so kehrt das Verfahren 300 zu Block 324 zurück, in dem die Kompilierer-Computervorrichtung 100a Hash-Evaluator-Instruktionen und eine Vergleichs-Evaluator-Instruktion für die zusätzlichen Atomic-Code-Pfade einfügt. Wenn keine weiteren Atomic-Code-Pfade für den momentanen Austrittspunkt existieren, so schreitet das Verfahren 300 zu Block 334 voran.
  • In Block 334 fügt die Kompilierer-Computervorrichtung 100a eine Hash-Überprüfungsinstruktion ein. Die Hash-Überprüfungsinstruktion veranlasst die Ziel-Computervorrichtung 100b zu bestimmen, ob eine der Vergleichs-Evaluator-Instruktionen eine Übereinstimmung zwischen dem Pfad-Hash-Register 224 und dem Evaluator-Hash-Register 228 gefunden hat, und falls nicht, eine(n) Codeflussintegritätsfehler, -ausnahme oder - interrupt zu generieren oder auf sonstige Weise anzuzeigen, dass eine Codeflussintegritätsverletzung stattgefunden hat. Zum Beispiel kann die Hash-Überprüfungsinstruktion bestimmen, ob das Integritätsprüfbit 230 gesetzt wurde, und falls nicht, eine Codeflussintegritätsausnahme zu generieren.
  • In Block 336 fügt die Kompilierer-Computervorrichtung 100a eine Pop-Instruktion ein, um die Ziel-Computervorrichtung 100b zu veranlassen, einen gespeicherten Wert des Pfad-Hash-Registers 224 aus dem sicheren Stapel wiederherzustellen. Wie oben beschrieben, kann der Wert des Pfad-Hash-Registers 224 zu dem sicheren Stapel geschoben worden sein, als auf den Atomic-Code-Pfad gegangen wurde. Das Wiederherstellen des Pfad-Hash-Registers 224 kann es der Ziel-Computervorrichtung 100b erlauben, das Überprüfen der Steuerungsflussintegrität eines Atomic-Code-Pfades fortzusetzen, der zum Beispiel durch einen Subroutinen-Call oder eine Schleife unterbrochen wurde.
  • In Block 338 bestimmt die Kompilierer-Computervorrichtung 100a, ob zusätzliche Atomic-Code-Pfade in dem geschützten Code 202 existieren. Wenn ja, so kehrt das Verfahren 300 zu Block 308 zurück, um Zutrittscode, Marker-Instruktionen und Austrittscode einzufügen und anderenfalls den instrumentierten geschützten Code 202' zu generieren. Wenn keine weiteren Atomic-Code-Pfade existieren, so kehrt das Verfahren 300 zu Block 302 zurück, in dem die Kompilierer-Computervorrichtung 100a zusätzlichen geschützten Code 202 verarbeiten kann.
  • Wir kehren zu 4 zurück. Wie oben beschrieben, veranschaulicht das Schaubild 400 eine Atomic-Code-Pfad-Gruppe 402, die durch die Kompilierer-Computervorrichtung 100a analysiert und instrumentiert werden kann. Das Schaubild 400 veranschaulicht auch eine instrumentierte Atomic-Code-Pfad-Gruppe 402', die durch die Kompilierer-Computervorrichtung 100a ausgegeben werden kann. Die instrumentierte Atomic-Code-Pfad-Gruppe 402' enthält instrumentierte Code-Pfad-Segmente 410', 412', 414', 416', 418', die durch Einfügen von Marker-Instruktionen nach jedem potenziellen Gadget instrumentiert wurden. Das instrumentierte Code-Pfad-Segment 410' enthält Marker-Instruktion 420, das instrumentierte Code-Pfad-Segment 412' enthält Marker-Instruktionen 422, 424, das instrumentierte Code-Pfad-Segment 414' enthält Marker-Instruktion 426, das instrumentierte Code-Pfad-Segment 416' enthält Marker-Instruktion 428, und das instrumentierte Code-Pfad-Segment 418' enthält Marker-Instruktion 430. Jede Marker-Instruktion enthält einen Parameter gleich dem speicherinternen Versatz dieser Marker-Instruktion. Zum Beispiel befindet sich Marker-Instruktion 420 bei Versatz A, Marker-Instruktion 422 befindet sich bei Versatz B, und so weiter, wie in 4 gezeigt.
  • Wie des Weiteren in 4 gezeigt, wurde Austrittscode nach den Austrittspunkten 406, 408 eingefügt. Hash-Evaluator-Instruktionen 432, 434, 436 folgen dem Austrittspunkt 406. Die Hash-Evaluator-Instruktionen 432, 434, 436 bilden eine Gruppe 438, die dem Atomic-Code-Pfad 410', 412' entspricht. Somit stimmt der Parameter A der Hash-Evaluator-Instruktion 432 mit dem Versatz A der Marker-Instruktion 420 überein, der Parameter B der Hash-Evaluator-Instruktion 434 stimmt mit dem Versatz B der Marker-Instruktion 422 überein, und der Parameter C der Hash-Evaluator-Instruktion 436 stimmt mit dem Versatz C der Marker-Instruktion 424 überein. Eine Vergleichs-Evaluator-Instruktion 440 folgt der Gruppe 438, und eine Hash-Überprüfungsinstruktion 442 folgt der Vergleichs-Evaluator-Instruktion 442.
  • In ähnlicher Weise folgen Hash-Evaluator-Instruktionen 444, 446, 448 dem Austrittspunkt 408. Die Hash-Evaluator-Instruktionen 444, 446, 448 bilden eine Gruppe 450, die dem Atomic-Code-Pfad 410', 414', 418' entspricht. Somit stimmt der Parameter A der Hash-Evaluator-Instruktion 444 mit dem Versatz A der Marker-Instruktion 420 überein, der Parameter D der Hash-Evaluator-Instruktion 446 stimmt mit dem Versatz D der Marker-Instruktion 426 überein, und der Parameter E der Hash-Evaluator-Instruktion 448 stimmt mit dem Versatz E der Marker-Instruktion 430 überein. Eine Vergleichs-Evaluator-Instruktion 452 folgt der Gruppe 450. Weil der Austrittspunkt 408 zwei möglicherweise gültige Atomic-Code-Pfade hat, folgen die Hash-Evaluator-Instruktionen 454, 456, 458 der Vergleichs-Evaluator-Instruktion 452. Die Hash-Evaluator-Instruktionen 454, 456, 458 bilden eine Gruppe 460, die dem Atomic-Code-Pfad 410', 416', 418' entspricht. Somit stimmt der Parameter A der Hash-Evaluator-Instruktion 454 mit dem Versatz A der Marker-Instruktion 420 überein, der Parameter F der Hash-Evaluator-Instruktion 456 stimmt mit dem Versatz F der Marker-Instruktion 428 überein, und der Parameter E der Hash-Evaluator-Instruktion 458 stimmt mit dem Versatz E der Marker-Instruktion 430 überein. Eine Vergleichs-Evaluator-Instruktion 462 folgt der Gruppe 460, und eine Hash-Überprüfungsinstruktion 464 folgt der Vergleichs-Evaluator-Instruktion 462.
  • Wie in 4 gezeigt, kann eine Push-Instruktion 466 vor dem Eintrittspunkt 404 eingefügt werden, und Pop-Instruktionen 468, 470 können jeweils nach jedem der Hash-Überprüfungsinstruktionen 442, 464 eingefügt werden. Es ist anzumerken, dass die Push- und Pop-Instruktionen, die an Pfad-Hash-Werten arbeiten, sich von regulären Prozessor-Push- und Pop-Instruktionen, die an Allzweckregister-Inhalten arbeiten, unterscheiden können. In einer Ausführungsform können Push- und Pop-Instruktionen, die an Pfad-Hash-Werten arbeiten, Pfad-Hash-Werte in einen geschützten Speicherbereich einfügen oder Pfad-Hash-Werte aus einem geschützten Speicherbereich extrahieren.
  • Wir wenden uns nun den 5A und 5B zu. Während des Gebrauchs kann die Ziel-Computervorrichtung 100b ein Verfahren 500 für einen Codeflussintegritätsschutz ausführen. Es versteht sich, dass in einigen Ausführungsformen die Operationen des Verfahrens 500 durch ein oder mehrere Module der Umgebung 220 der Ziel-Computervorrichtung 100b ausgeführt werden können, wie in 2 gezeigt. Zusätzlich oder alternativ kann das Verfahren 500 in einigen Ausführungsformen als verschiedene Instruktionen verkörpert sein, die auf einem computerlesbaren Medium gespeichert sind und die durch den Prozessor 120 und/oder andere Komponenten der Computervorrichtung 100 ausgeführt werden können, um die Computervorrichtung 100 zu veranlassen, das Verfahren 500 auszuführen. Das computerlesbare Medium kann als jede Art von Medium verkörpert sein, das durch die Computervorrichtung 100 gelesen werden kann, einschließlich beispielsweise der Speicher 124, die Datenspeichervorrichtung 126, andere Speicher- oder Datenspeichervorrichtungen der Computervorrichtung 100, tragbare Medien, die durch eine Peripherievorrichtung der Computervorrichtung 100 gelesen werden können, und/oder sonstige Medien.
  • Das Verfahren 500 kann durch die Ziel-Computervorrichtung 100b während der Ausführung von instrumentiertem geschütztem Code 202' ausgeführt werden. Wie oben in Verbindung mit dem Verfahren von 3 beschrieben, kann die Kompilierer-Computervorrichtung 100a den geschützten Code 202 statisch analysieren, um den instrumentierten geschützten Code 202' zu generieren. Die Ziel-Computervorrichtung 100b kann den instrumentierten geschützten Code 202' über eine Netzwerkverbindung empfangen oder kann anderenfalls mit dem instrumentierten geschützten Code 202' bereitgestellt werden. Natürlich kann der instrumentierte geschützte Code 202' in einigen Ausführungsformen auch durch dieselbe Computervorrichtung 100 instrumentiert und ausgeführt werden.
  • Das Verfahren 500 beginnt in Block 502, in dem die Ziel-Computervorrichtung 100b bestimmt, ob ein Eintrittspunkt eines Atomic-Code-Pfades erreicht wurde. Ein Atomic-Code-Pfad Eintrittspunkt kann zum Beispiel erreicht werden, wenn begonnen wird, den Atomic-Code-Pfad auszuführen, oder wenn ein anderer Atomic-Code-Pfad unterbrochen wird, um den Atomic-Code-Pfad auszuführen. Wie oben in Verbindung mit 3 beschrieben, kann der Eintrittspunkt des Atomic-Code-Pfades während der statischen Analyse des geschützten Codes 202 identifiziert werden, und somit kann die Bestimmung, ob ein Eintrittspunkt erreicht wurde, statisch in dem geschützten Code 202' codiert werden. Wenn ein Eintrittspunkt nicht erreicht wurde, so kehrt das Verfahren 500 zu Block 502 zurück, um das Überwachen auf Eintrittspunkte fortzusetzen. Wenn ein Eintrittspunkt erreicht wurde, so schreitet das Verfahren 500 zu Block 504 voran.
  • In Block 504 speichert die Ziel-Computervorrichtung 100b den momentanen Pfad-Hash-Zustand an einem sicheren Speicherort. Zum Beispiel kann die Ziel-Computervorrichtung 100b den momentanen Zustand des Pfad-Hash-Registers 224 speichern. Das Speichern des momentanen Pfad-Hash-Zustands kann es der Ziel-Computervorrichtung 100b erlauben, die Codeflussintegritätsprüfung für einen momentanen Atomic-Code-Pfad zu unterbrechen und eine Codeflussintegritätsprüfung für den neuen Atomic-Code-Pfad auszuführen. In Block 506 führt die Ziel-Computervorrichtung 100b eine Push-Instruktion aus, um den Inhalt des Pfad-Hash-Registers 224 auf einem sicheren Stapel zu speichern. Wie oben beschrieben, kann der sichere Stapel als ein beliebiger sicherer Speicherort verkörpert sein, der vor unbefugtem Zugriff und/oder Modifizieren geschützt ist, wie zum Beispiel eine verschlüsselte Speicherseite oder eine Registerdatei des Prozessors 120. Der sichere Stapel kann eine relativ kleine Anzahl von Einträgen (zum Beispiel 16, 32 oder 128) unterstützen und kann somit unter Verwendung prozessorinterner dedizierter Registerdateien realisiert werden.
  • In Block 508 initialisiert die Ziel-Computervorrichtung 100b den Pfad-Hash-Zustand, um eine Steuerungsflussintegritätsprüfung für den neuen Atomic-Code-Pfad vorzubereiten. In Block 510 initialisiert die Ziel-Computervorrichtung 100b das Pfad-Hash-Register 224 und das Evaluator-Hash-Register 228. Die Ziel-Computervorrichtung 100b kann zum Beispiel die Register 224, 228 löschen, die Register 224, 228 auf einen Standardwert wie zum Beispiel null setzen, oder auf sonstige Weise die Register 224, 228 auf die Ausführung eines Steuerungsflussschutzes vorbereiten. In Block 512 löscht die Ziel-Computervorrichtung 100b das Integritätsprüfbit 230 zum Beispiel durch Setzen des Integritätsprüfbits 230 auf null.
  • In Block 514 aktualisiert die Ziel-Computervorrichtung 100b das Pfad-Hash-Register 224 auf der Basis der Adresse des Eintrittspunktes. Das Aktualisieren des Pfad-Hash-Registers 224 auf der Basis der Adresse des Eintrittspunktes zeigt an, dass die Ziel-Computervorrichtung 100b Code am Eintrittspunkt ausgeführt hat. Zum Beispiel kann die Ziel-Computervorrichtung 100b das Pfad-Hash-Register 224 auf den Hash des vorherigen Wertes des Pfad-Hash-Registers 224 mit dem Versatz des Austrittspunktes setzen. In Block 516, um das Pfad-Hash-Register 224 zu aktualisieren, führt die Ziel-Computervorrichtung 100b eine Marker-Instruktion mit einem Versatzparameter aus, der gleich dem Versatz des Eintrittspunktes ist. Beim Ausführen der Marker-Instruktion aktualisiert der Prozessor 120 das Pfad-Hash-Register 224 unter Verwendung des übermittelten Parameters.
  • In Block 518 führt die Ziel-Computervorrichtung 100b Code des Atomic-Code-Pfades aus. Die Ziel-Computervorrichtung 100b kann den ursprünglichen Code des geschützten Codes 202 (zum Beispiel Anwendungscode) sowie eine Instrumentierung, die in den instrumentierten geschützten Code 202' eingefügt wurde, ausführen. In Block 520 aktualisiert die Ziel-Computervorrichtung 100b das Pfad-Hash-Register 224 auf der Basis der Adresse von Marker-Instruktionen, die an verschiedenen Stellen in dem Atomic-Code-Pfad enthalten sind. Zum Beispiel kann die Ziel-Computervorrichtung 100b das Pfad-Hash-Register 224 auf den Hash des vorherigen Wertes des Pfad-Hash-Registers 224 mit dem Versatz einer Marker-Instruktion in dem Atomic-Code-Pfad setzen. Wie oben in Verbindung mit 3 beschrieben, kann diese Marker-Instruktionen potenziellen Gadgets folgen, die in dem Atomic-Code-Pfad gefunden werden. Das Aktualisieren des Pfad-Hash-Registers 224 auf der Basis der einem Gadget folgenden Adresse zeigt an, dass die Ziel-Computervorrichtung 100b Code ausgeführt hat, der dem Gadget folgt, was seinerseits anzeigt, dass das Gadget nicht als Teil eines Exploits ausgeführt wurde. In Block 522, um das Pfad-Hash-Register 224 zu aktualisieren, führt die Ziel-Computervorrichtung 100b eine Marker-Instruktion mit einem Versatzparameter aus, der gleich dem Versatz der Marker-Instruktion ist. Beim Ausführen der Marker-Instruktion aktualisiert der Prozessor 120 das Pfad-Hash-Register 224 unter Verwendung des übermittelten Parameters.
  • In einigen Ausführungsformen kann die Ziel-Computervorrichtung 100b in Block 524 den Inhalt des Pfad-Hash-Registers 224 als Schlüsseldomänenselektoren für einen verschlüsselten Speicherzugriff verwenden. Die Hash-Werte, die mit einem gültigen Code-Pfad verknüpft sind (d. h. der Inhalt des Pfad-Hash-Registers 224), können durch Speicherzugriffsinstruktionen verwendet werden, um anwendungsspezifische Speicherzugriffskoordinaten, die in dem linearen Adressraum und in Anwendungscode sichtbar sind (d. h. lineare Schlüsseldomänenselektoren), in geheime physische Mappings dieser Koordinaten zu übersetzen, die nur der Instruktionssatzarchitektur und dem Prozessor 120 bekannt sind (d. h. physische Schlüsseldomänenselektoren). Die physischen Schlüsseldomänenselektoren können als Tweak-Werte für den sicheren Zugriff auf verschlüsselte Speicherregionen verwendet werden. Code, der keinem gültigen Atomic-Code-Pfad folgt (wie zum Beispiel Malware, die Gadgets oder anderen Exploit-Code ausführt), kann die richtigen linearen Schlüsseldomänenselektoren zum Zugreifen auf sensible Speicherregionen verwenden; jedoch werden die physischen Schlüsseldomänenselektoren auf der Basis des Pfad-Hash-Registers 224 bestimmt und sind darum falsch. Das Zugreifen auf die verschlüsselten Speicherregionen unter Verwendung der falschen physischen Schlüsseldomänenselektoren (d. h. des falschen Wertes für das Pfad-Hash-Register 224) kann dazu führen, dass die verschlüsselten Speicherregionen zu zufälligem Klartext entschlüsselt werden.
  • In Block 526 in einigen Ausführungsformen kann die Ziel-Computervorrichtung 100b einen neue Atomic-Code-Pfad von innerhalb des Atomic-Code-Pfades ausführen. Zum Beispiel kann die Ziel-Computervorrichtung 100b einen Subroutinen-Call ausführen oder kann in einen Schleifenkörper eintreten. In Reaktion auf das Ausführen des neuen Atomic-Code-Pfades kann die Ziel-Computervorrichtung 100b eine weitere Instanz des Verfahrens 500, beginnend mit Block 502, ausführen. Oder anders ausgedrückt: Wenn der Atomic-Code-Pfad unterbrochen wird, so kann der momentane Pfad-Hash-Zustand gespeichert werden, und der neue Atomic-Code-Pfad kann ausgeführt werden. Nachdem der neue Atomic-Code-Pfad vollendet wurde, zum Beispiel durch Zurückkehren von der Subroutine oder Verlassen der Schleife, kann die Ausführung des vorherigen Atomic-Code-Pfades wiederaufgenommen werden. In einigen Ausführungsformen kann die Ziel-Computervorrichtung 100b in Block 528 eine Return- oder eine Jump-Instruktion ausführen, nachdem zum Beispiel ein Exploit die Ziel-Computervorrichtung 100b veranlasst hat, eine fehlausgerichtete Return- oder Jump-Instruktion auszuführen. Die durch die Computervorrichtung 100b ausgeführte Return- oder Jump-Instruktion überprüft, ob das Steuerungsflussintegrität Bit gesetzt wurde. Wenn nicht, so kann die Ziel-Computervorrichtung 100b eine Codeflussintegritätsausnahme generieren, wie unten in Verbindung mit Block 550 von 5B beschrieben wird.
  • In Block 530 bestimmt die Ziel-Computervorrichtung 100b, ob ein Austrittspunkt für den momentanen Atomic-Code-Pfad erreicht wurde. Ein Atomic-Code-Pfad-Austrittspunkt kann erreicht werden, wenn zum Beispiel aus einer Subroutine zurückgekehrt wird, eine Schleife verlassen wird oder die Ausführung eines Atomic-Code-Pfades auf sonstige Weise beendet wird. Wie oben in Verbindung mit 3 beschrieben, kann der Austrittspunkt des Atomic-Code-Pfades während der statischen Analyse des geschützten Codes 202 identifiziert werden, und somit kann die Bestimmung, ob ein Austrittspunkt erreicht wurde, statisch in dem instrumentierten geschützten Code 202' codiert werden. Wenn kein Austrittspunkt wurde erreicht, so kehrt das Verfahren 500 zu Block 518 zurück, um das Ausführen des Atomic-Code-Pfades fortzusetzen. Wenn ein Austrittspunkt erreicht wurde, so schreitet das Verfahren 500 zu dem in 5B gezeigten Block 532 voran.
  • In Block 532 bestimmt die Ziel-Computervorrichtung 100b einen erwarteten Hash-Wert für einen Atomic-Code-Pfad, der an dem momentanen Austrittspunkt endet. Die Ziel-Computervorrichtung 100b kann den erwarteten Hash-Wert durch Aktualisieren des Evaluator-Hash-Registers 228 auf der Basis der Versatzwerte aller Marker-Instruktionen, die in einem speziellen Atomic-Code-Pfad enthalten sind, der an dem momentanen Austrittspunkt endet, berechnen. Das Evaluator-Hash-Register 228 wird in der gleichen Reihenfolge aktualisiert, in der die Marker-Instruktionen in dem Atomic-Code-Pfad ausgeführt werden würden. In Block 534, um den erwarteten Hash-Wert zu generieren, führt die Ziel-Computervorrichtung 100b eine Hash-Evaluator-Instruktion für jede Marker-Instruktion des Atomic-Code-Pfades aus. An jede Hash-Evaluator-Instruktion wird ein Parameter gleich dem Versatz der entsprechenden Marker-Instruktion übermittelt.
  • In Block 536 vergleicht die Ziel-Computervorrichtung 100b den erwarteten Hash-Wert mit dem momentanen Pfad-Hash. Die Ziel-Computervorrichtung 100b kann die Werte des Pfad-Hash-Registers 224 und des Evaluator-Hash-Registers 228 vergleichen, um zu bestimmen, ob diese Werte übereinstimmen. Wenn das Pfad-Hash-Register 224 mit dem Evaluator-Hash-Register 228 übereinstimmt, so zeigt dies an, dass die Ziel-Computervorrichtung 100b alle Marker-Instruktionen des Atomic-Code-Pfades in der richtigen Reihenfolge ausgeführt hat, was anzeigt, dass der Atomic-Code-Pfad korrekt ausgeführt wurde. Wenn das Pfad-Hash-Register 224 und das Evaluator-Hash-Register 228 übereinstimmen, so darf die Ziel-Computervorrichtung 100b das Integritätsprüfbit 230 setzen, und falls diese Werte nicht übereinstimmen, so darf die Ziel-Computervorrichtung 100b den Wert des Integritätsprüfbits 230 nicht ändern. Zum Beispiel kann die Ziel-Computervorrichtung 100b eine logische OR-Operation mit dem vorherigen Wert des Integritätsprüfbits 230 und dem Ergebnis des Vergleichs zwischen dem Register 224, 228 ausführen. In Block 538, um die Register 224, 228 zu vergleichen, führt die Ziel-Computervorrichtung 100b eine Vergleichs-Evaluator-Instruktion aus.
  • In Block 540 bestimmt die Ziel-Computervorrichtung 100b, ob zusätzliche Atomic-Code-Pfade für den momentanen Austrittspunkt existieren. Wie oben in Verbindung mit 3 beschrieben, können alle Atomic-Code-Pfade und Austrittspunkte statisch in dem geschützten Code 202 identifiziert werden. Somit kann die Bestimmung, ob zusätzliche Atomic-Code-Pfade übrig bleiben, ebenfalls statisch in dem instrumentierten geschützten Code 202' codiert werden. In Block 542 überprüft die Ziel-Computervorrichtung 100b, ob zusätzliche Atomic-Code-Pfade übrig bleiben. Wenn ja, so kehrt das Verfahren 500 zu Block 532 zurück, um zusätzliche erwartete Hash-Werten zu berechnen und zu vergleichen. Wenn keine zusätzlichen Atomic-Code-Pfade übrig bleiben, so schreitet das Verfahren 500 zu Block 544 voran.
  • In Block 544 bestimmt die Ziel-Computervorrichtung 100b, ob jeder der erwarteten Hash-Werte mit dem Pfad-Hash übereinstimmt; das heißt, die Ziel-Computervorrichtung 100b bestimmt, ob jede der Vergleichs-Evaluator-Instruktionen eine Übereinstimmung angezeigte. Die Ziel-Computervorrichtung 100b kann bestimmen, ob eine Übereinstimmung gefunden wurde, indem sie bestimmt, ob das Vergleichsintegritätsprüfbit 230 gesetzt wurde. In Block 546, um zu bestimmen, ob jeder der erwarteten Hash-Werte mit dem Pfad-Hash übereinstimmt, führt die Ziel-Computervorrichtung 100b eine Hash-Überprüfungsinstruktion aus. In Block 548 überprüft die Ziel-Computervorrichtung 100b, ob eine Übereinstimmung gefunden wurde. Wenn ja, so zweigt das Verfahren 500 nach vorn zu Block 552 ab, der unten beschrieben wird. Wenn nicht, so schreitet das Verfahren 500 zu Block 550 voran, in dem die Ziel-Computervorrichtung 100b eine Codeflussintegritätsausnahme generiert. Die Ziel-Computervorrichtung 100b kann eine(n) Codeflussintegritätsfehler, -ausnahme oder -interrupt generieren oder auf sonstige Weise anzeigen, dass eine Codeflussintegritätsverletzung stattgefunden hat. In einigen Ausführungsformen kann die Ziel-Computervorrichtung 100b eine oder mehrere Sicherheitsreaktionen auf der Basis der Codeflussintegritätsausnahme ausführen, wie zum Beispiel Beenden des instrumentierten geschützten Codes 202', Berichten der Verletzung, oder eine andere zweckmäßige Sicherheitsreaktion. Nach dem Generieren der Codeflussintegritätsausnahme kann das Verfahren 500 zu Block 552 voranschreiten.
  • In Block 552 ruft die Ziel-Computervorrichtung 100b den vorherigen Pfad-Hash-Zustand aus dem sicheren Speicherort ab. Zum Beispiel kann die Ziel-Computervorrichtung 100b den vorherigen Zustand des Pfad-Hash-Registers 224 wiederherstellen. Das Wiederherstellen des vorherigen Pfad-Hash-Zustands kann es der Ziel-Computervorrichtung 100b erlauben, die Codeflussintegritätsprüfung für einen zuvor unterbrochenen Atomic-Code-Pfad wiederaufzunehmen. In Block 554 führt die Ziel-Computervorrichtung 100b eine Pop-Instruktion aus, um den vorherigen Pfad-Hash-Wert aus dem sicheren Stapel abzurufen und diesen Wert in dem Pfad-Hash-Register 224 zu speichern. Nach dem Wiederherstellen des vorherigen Pfad-Hash-Zustands kehrt das Verfahren 500 zu dem in 5A gezeigten Block 502 zurück, um die Steuerungsflussintegritätsprüfung für zusätzliche Atomic-Code-Pfade fortzusetzen.
  • Wir wenden uns 6 zu. Während des Gebrauchs kann die Ziel-Computervorrichtung 100b ein Verfahren 600 für einen Codeflussintegritätsschutz ausführen. Es versteht sich, dass die Operationen des Verfahrens 600 in einigen Ausführungsformen durch den in 1 gezeigten Prozessor 120 der Computervorrichtung 100 ausgeführt werden können. Das Verfahren 600 beginnt in Block 602, in dem der Prozessor 120 bestimmt, ob eine Push-Instruktion ausgeführt wird. Wenn nicht, so zweigt das Verfahren 600 nach vorn zu Block 606 ab, der unten beschrieben wird. Wenn eine Push-Instruktion ausgeführt wird, so zweigt das Verfahren 600 zu Block 604 ab, in dem der Prozessor 120 den Wert des Pfad-Hash-Registers 224 auf einen sicheren Stapel schiebt. Wie oben beschrieben, kann der sichere Stapel als ein beliebiger sicherer Speicherort verkörpert sein, der vor unbefugtem Zugriff und/oder Modifizieren geschützt ist, wie zum Beispiel eine verschlüsselte Speicherseite oder eine Registerdatei des Prozessors 120. Nach dem Ausführen der Push-Instruktion schreitet das Verfahren 600 zu Block 606 voran.
  • In Block 606 bestimmt der Prozessor 120, ob eine Marker-Instruktion ausgeführt wird. Wenn nicht, so zweigt das Verfahren 600 nach vorn zu Block 610 ab, der unten beschrieben wird. Wenn eine Marker-Instruktion ausgeführt wird, so zweigt das Verfahren 600 zu Block 608 ab, in dem der Prozessor 120 den Wert des Pfad-Hash-Registers 224 unter Verwendung eines Parameters der Marker-Instruktion aktualisiert. Wie oben beschrieben, kann der Parameter zum Beispiel als ein Versatz der Marker-Instruktion verkörpert sein. Der Parameter kann statisch bestimmt werden und kann zum Beispiel als ein unmittelbarer Wert an den Prozessor 120 übermittelt werden. Der Prozessor 120 kann das Pfad-Hash-Register 224 unter Verwendung einer Hash-Funktion aktualisieren, die gewährleistet, dass keine zwei Sätze von Markern zum gleichen Hash-Wert führen, aber es brauchen keine hohen kryptografischen Stärken erforderlich zu sein. Zum Beispiel kann der Prozessor 120 eine Hash-Funktion auf der Basis von Multiplikator- und Galois-Feld-Inverterbausteinen verwenden, die ein starkes Vermischen der Bits, die Versatzwerte übermittelt haben, unter Verwendung nur einer kleiner Anzahl von Graden kombinatorischer Logik ausführen können. Als ein weiteres Beispiel kann der Prozessor 120 eine kleine Anzahl (zum Beispiel 1, 3, 5 oder 7) von AES-Runden ausführen, gefolgt von einer multiplikationsbasierten Fusionierung. In Abhängigkeit von der genutzten Die-Fläche könnte eine solche Operation in einem einzigen Prozessortakt vollendet werden. Nach dem Ausführen der Marker-Instruktion schreitet das Verfahren 600 zu Block 610 voran.
  • In Block 610 bestimmt der Prozessor 120, ob eine Evaluator-Hash-Instruktion ausgeführt wird. Wenn nicht, so zweigt das Verfahren 600 nach vorn zu Block 614 ab, der unten beschrieben wird. Wenn eine Evaluator-Hash-Instruktion ausgeführt wird, so zweigt das Verfahren 600 zu Block 612 ab, in dem der Prozessor 120 den Wert des Evaluator-Hash-Registers 228 unter Verwendung eines Parameters der Evaluator-Hash-Instruktion aktualisiert. Wie oben beschrieben, kann der Parameter zum Beispiel als ein Versatz einer entsprechenden Marker-Instruktion verkörpert sein. Der Parameter kann statisch bestimmt werden und kann zum Beispiel als ein unmittelbarer Wert an den Prozessor 120 übermittelt werden. Der Prozessor 120 kann das Evaluator-Hash-Register 228 unter Verwendung des gleichen Algorithmus aktualisieren, der durch Marker-Instruktionen verwendet wird, um das Pfad-Hash-Register 224 zu aktualisieren. Nach dem Ausführen der Evaluator-Hash-Instruktion schreitet das Verfahren 600 zu Block 614 voran.
  • In Block 614 bestimmt der Prozessor 120, ob eine Vergleichs-Evaluator-Instruktion ausgeführt wird. Wenn nicht, so zweigt das Verfahren 600 nach vorn zu Block 622 ab, der unten beschrieben wird. Wenn eine Vergleichs-Evaluator-Instruktion ausgeführt wird, so zweigt das Verfahren 600 zu Block 616 ab, in dem der Prozessor 120 das Evaluator-Hash-Register 228 mit dem Pfad-Hash-Register 224 vergleicht. In Block 618 bestimmt der Prozessor 120, ob das Evaluator-Hash-Register 228 mit dem Pfad-Hash-Register 224 übereinstimmt. Wenn nicht, so zweigt das Verfahren 600 nach vorn zu Block 622 ab, der unten beschrieben wird. Wenn das Evaluator-Hash-Register 228 mit dem Pfad-Hash-Register 224 übereinstimmt, so schreitet das Verfahren 600 zu Block 620 voran, in dem der Prozessor 120 das Integritätsprüfbit 230 setzt. Nach dem Ausführen der Vergleichs-Evaluator-Instruktion schreitet das Verfahren 600 zu Block 622 voran.
  • In Block 622 bestimmt der Prozessor 120, ob eine Hash-Überprüfungsinstruktion ausgeführt wird. Wenn nicht, so zweigt das Verfahren 600 nach vorn zu Block 630 ab, der unten beschrieben wird. Wenn eine Hash-Überprüfungsinstruktion ausgeführt wird, so zweigt das Verfahren 600 zu Block 624 ab, in dem der Prozessor 120 bestimmt, ob das Integritätsprüfbit 230 gesetzt wurde. In Block 626 überprüft der Prozessor 120, ob das Integritätsprüfbit 230 gesetzt wurde. Wenn ja, so zweigt das Verfahren 600 nach vorn zu Block 630 ab, der unten beschrieben wird. Wenn das Integritätsprüfbit 230 nicht gesetzt wurde, so schreitet das Verfahren 600 zu Block 628 voran, in dem der Prozessor 120 eine Codeflussintegritätsausnahme generiert. Nach dem Ausführen der Hash-Überprüfungsinstruktion schreitet das Verfahren 600 zu Block 630 voran.
  • In Block 630 bestimmt der Prozessor 120, ob eine Pop-Instruktion ausgeführt wird. Wenn nicht, so kehrt das Verfahren 600 zu Block 602 zurück, um das Verarbeiten von Instruktionen fortzusetzen. Wenn eine Pop-Instruktion ausgeführt wird, so zweigt das Verfahren 600 zu Block 632 ab, in dem der Prozessor 120 den Spitzenwert aus dem sicheren Stapel hervorholt („pop“) und diesen Wert in dem Pfad-Hash-Register 224 speichert.
  • Nach dem Ausführen der Pop-Instruktion kehrt das Verfahren 600 zu Block 602 zurück, um das Verarbeiten von Instruktionen fortzusetzen.
  • BEISPIELE
  • Im Folgenden werden veranschaulichende Beispiele der im vorliegenden Text offenbarten Technologien dargelegt. Eine Ausführungsform der Technologien kann eines oder mehrere der unten beschriebenen Beispiele sowie jede Kombination davon enthalten.
  • Beispiel 1 enthält eine Computervorrichtung für einen Steuerungsflussintegritätsschutz, wobei die Computervorrichtung Folgendes umfasst: einen statischen Analysator zum (i) Identifizieren eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt und einen Austrittspunkt umfasst, und (ii) Identifizieren eines potenziellen Gadgets in dem Atomic-Code-Pfad; und einen Instrumentierungsmanager zum (i) Einfügen einer ersten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des potenziellen Gadgets mit einem Parameter, der einer Adresse der ersten Marker-Instruktion entspricht, wobei die erste Marker-Instruktion, wenn sie ausgeführt wird, einen Prozessor einer Ziel-Computervorrichtung veranlasst, einen Pfad-Hash der Ziel-Computervorrichtung als eine Funktion der Adresse der ersten Marker-Instruktion zu aktualisieren, und (ii) Einfügen einer oder mehrerer Steuerungsflussintegritätsevaluierungsinstruktionen in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades, wobei die Steuerungsflussintegritätsevaluierungsinstruktionen, wenn sie ausgeführt werden, den Prozessor der Ziel-Computervorrichtung veranlassen, den Pfad-Hash mit einem erwarteten Hash-Wert zu vergleichen.
  • Beispiel 2 enthält den Gegenstand von Beispiel 1, und wobei das Einfügen der ersten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des potenziellen Gadgets umfasst, die erste Marker-Instruktion in den Atomic-Code-Pfad unmittelbar vor oder unmittelbar nach dem potenziellen Gadget einzufügen.
  • Beispiel 3 enthält den Gegenstand von einem der Beispiele 1 und 2, und wobei der Atomic-Code-Pfad umfasst eine Sequenz von Code ohne einen Subroutinen-Call, einen Subroutinen-Return, einen Loop-Entry oder einen anderen Jump als einen If-Statement-Jump oder einen Case-Statement-Jump.
  • Beispiel 4 enthält den Gegenstand von einem der Beispiele 1-3, und wobei das Identifizieren des potenziellen Gadgets umfasst, ein Segment des Atomic-Code-Pfades zu identifizieren, das durch einen Steuerungsfluss-Exploit ausgeführt werden kann.
  • Beispiel 5 enthält den Gegenstand von einem der Beispiele 1-4, und wobei das potenzielle Gadget ein Return-Oriented Programming-Gadget oder ein Jump-Oriented Programming-Gadget umfasst.
  • Beispiel 6 enthält den Gegenstand von einem der Beispiele 1-5, und wobei das potenzielle Gadget einen externen dynamischen Linked Library Call umfasst.
  • Beispiel 7 enthält den Gegenstand von einem der Beispiele 1-6, und wobei: der statische Analysator des Weiteren dazu dient, den geschützten Code statisch zu analysieren; wobei das Identifizieren des Atomic-Code-Pfades umfasst, den Atomic-Code-Pfad in Reaktion auf die statische Analyse des geschützten Codes zu identifizieren; und das Identifizieren des potenziellen Gadgets in dem Atomic-Code-Pfad umfasst, das potenzielle Gadget in Reaktion auf die statische Analyse des geschützten Codes zu identifizieren.
  • Beispiel 8 enthält den Gegenstand von einem der Beispiele 1-7, und wobei das Einfügen der einen oder der mehreren Steuerungsflussintegritätsevaluierungsinstruktionen Folgendes umfasst: Einfügen einer ersten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades mit einem Parameter, der der Adresse der ersten Marker-Instruktion entspricht; Einfügen einer ersten Vergleichs-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion; und Einfügen einer Hash-Überprüfungsinstruktion in den geschützten Code nach der ersten Vergleichs-Evaluator-Instruktion.
  • Beispiel 9 enthält den Gegenstand von einem der Beispiele 1-8, und wobei: der statische Analysator des Weiteren dazu dient, ein zweites potenzielles Gadget in dem Atomic-Code-Pfad zu identifizieren, wobei das zweite potenzielle Gadget nach dem ersten potenziellen Gadget in dem Atomic-Code-Pfad auftritt; wobei der Instrumentierungsmanager dient des Weiteren zum: (i) Einfügen einer zweiten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des zweiten potenziellen Gadgets mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht, und (ii) Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht; und wobei das Einfügen der ersten Vergleichs-Evaluator-Instruktion des Weiteren umfasst, die erste Vergleichs-Evaluator-Instruktion nach der zweiten Hash-Evaluator-Instruktion einzufügen.
  • Beispiel 10 enthält den Gegenstand von einem der Beispiele 1-9, und wobei: der statische Analysator dient des Weiteren zum: (i) Identifizieren eines zweiten Atomic-Code-Pfades des geschützten Codes, wobei der zweite Atomic-Code-Pfad einen Eintrittspunkt und einen Austrittspunkt umfasst, und wobei der Austrittspunkt des Atomic-Code-Pfades den Austrittspunkt des zweiten Atomic-Code-Pfades umfasst, und (ii) Identifizieren eines zweiten potenziellen Gadgets in dem zweiten Atomic-Code-Pfad; wobei der Instrumentierungsmanager dient des Weiteren zum: (i) Einfügen einer zweiten Marker-Instruktion in den zweiten Atomic-Code-Pfad in der Nähe des zweiten potenziellen Gadgets mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht, (ii) Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach der ersten Vergleichs-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht, und (iii) Einfügen einer zweiten Vergleichs-Evaluator-Instruktion in den geschützten Code nach der zweiten Hash-Evaluator-Instruktion; und wobei das Einfügen der Hash-Überprüfungsinstruktion des Weiteren umfasst, die Hash-Überprüfungsinstruktion nach dem zweiten Vergleichs-Evaluator-Instruktion einzufügen.
  • Beispiel 11 enthält den Gegenstand von einem der Beispiele 1-10, und wobei der Instrumentierungsmanager dient des Weiteren zum: Einfügen einer zweiten Marker-Instruktion in den Atomic-Code-Pfad am Eintrittspunkt des Atomic-Code-Pfades mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; und Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt und vor der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht.
  • Beispiel 12 enthält den Gegenstand von einem der Beispiele 1-11, und wobei: der statische Analysator des Weiteren dazu dient, einen Non-Return-Jump des geschützten Codes zu identifizieren, der zu dem Eintrittspunkt des Atomic-Code-Pfades springt; und wobei der Instrumentierungsmanager dient des Weiteren zum: (i) Einfügen einer zweiten Marker-Instruktion in den geschützten Code vor dem Non-Return-Jump mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht, und (ii) Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt und vor der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht.
  • Beispiel 13 enthält den Gegenstand von einem der Beispiele 1-12, und wobei: das Einfügen der ersten Hash-Evaluator-Instruktion umfasst, eine erste Hash-Evaluator-Instruktion einzufügen, die, wenn sie ausgeführt wird, den Prozessor veranlasst, den erwarteten Hash-Wert der Ziel-Computervorrichtung als eine Funktion der Adresse der ersten Marker-Instruktion zu aktualisieren; das Einfügen der ersten Vergleichs-Evaluator-Instruktion umfasst, eine erste Vergleichs-Evaluator-Instruktion einzufügen, die, wenn sie ausgeführt wird, den Prozessor veranlasst zu bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; und wobei das Einfügen der Hash-Überprüfungsinstruktion umfasst, eine Hash-Überprüfungsinstruktion einzufügen, die, wenn sie ausgeführt wird, den Prozessor veranlasst, eine Codeflussintegritätsausnahme in Reaktion auf eine Bestimmung zu generieren, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt.
  • Beispiel 14 enthält den Gegenstand von einem der Beispiele 1-13, und wobei der Instrumentierungsmanager dient des Weiteren zum: Einfügen einer Push-Instruktion in den geschützten Code am Eintrittspunkt des Atomic-Code-Pfades; und Einfügen einer Pop-Instruktion in den geschützten Code nach der Hash-Überprüfungsinstruktion.
  • Beispiel 15 enthält den Gegenstand von einem der Beispiele 1-14, und wobei: das Einfügen der Push-Instruktion umfasst, eine Push-Instruktion einzufügen, die, wenn sie ausgeführt wird, einen Prozessor einer Ziel-Computervorrichtung veranlasst, einen Pfad-Hash der Ziel-Computervorrichtung an einem sicheren Speicherort der Ziel-Computervorrichtung zu speichern; und wobei das Einfügen der Pop-Instruktion umfasst, eine Pop-Instruktion einzufügen, die, wenn sie ausgeführt wird, den Prozessor veranlasst, den Pfad-Hash aus dem sicheren Speicherort wiederherzustellen.
  • Beispiel 16 enthält eine Computervorrichtung für einen Steuerungsflussintegritätsschutz, wobei die Computervorrichtung Folgendes umfasst: einen Pfad-Hash-Aktualisierer zum (i) Ausführen eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt, einen Austrittspunkt und eine oder mehrere Marker-Instruktionen umfasst, (ii) Aktualisieren eines Pfad-Hashs als eine Funktion einer Adresse einer ersten Marker-Instruktion der einen oder der mehreren Marker-Instruktionen in Reaktion auf die Ausführung des Atomic-Code-Pfades, und (iii) Erreichen des Austrittspunktes des Atomic-Code-Pfades in Reaktion auf die Ausführung des Atomic-Code-Pfades; einen Hash-Evaluator zum (i) Generieren eines erwarteten Hash-Wertes als eine Funktion einer oder mehrerer Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede der einen oder der mehreren Adressen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht, und (ii) Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; und einen Codefluss-Integritätsprüfer, um eine Codeflussintegritätsausnahme in Reaktion auf eine Bestimmung zu generieren, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt.
  • Beispiel 17 enthält den Gegenstand von Beispiel 16, und wobei: die Computervorrichtung des Weiteren einen Prozessor umfasst; das Aktualisieren des Pfad-Hashs umfasst, durch den Prozessor die erste Marker-Instruktion des Atomic-Code-Pfades mit einem Parameter auszuführen, der der Adresse der ersten Marker-Instruktion entspricht; das Generieren des erwarteten Hash-Wertes umfasst, durch den Prozessor eine Gruppe von einem oder mehreren Hash-Evaluator-Instruktionen auszuführen, wobei jede Hash-Evaluator-Instruktion der Gruppe von einem oder mehreren Hash-Evaluator-Instruktionen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht; das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, umfasst, durch den Prozessor eine Vergleichs-Evaluator-Instruktion auszuführen; und das Generieren der Codeflussintegritätsausnahme in Reaktion auf die Bestimmung, dass der Pfad-Hash nicht mit dem erwarteten Hash übereinstimmt, umfasst, durch den Prozessor eine Hash-Überprüfungsinstruktion auszuführen.
  • Beispiel 18 enthält den Gegenstand von einem der Beispiele 16 und 17, und wobei: das Aktualisieren des Pfad-Hashs als eine Funktion der Adresse der ersten Marker-Instruktion umfasst, den Pfad-Hash als eine Funktion eines Versatzes der ersten Marker-Instruktion in dem geschützten Code zu aktualisieren; und das Generieren des erwarteten Hash-Wertes als eine Funktion der einen oder der mehreren Adressen umfasst, den erwarteten Hash-Wert als eine Funktion einer oder mehrerer Versatzwerte zu generieren, wobei jeder des einen oder der mehreren Versatzwerte einem Versatz einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht.
  • Beispiel 19 enthält den Gegenstand von einem der Beispiele 16-18, und wobei der Atomic-Code-Pfad eine Sequenz von Code ohne einen Subroutinen-Call, einen Subroutinen-Return, einen Loop-Entry oder einen anderen Jump als einen If-Statement-Jump oder einen Case-Statement-Jump umfasst.
  • Beispiel 20 enthält den Gegenstand von einem der Beispiele 16-19, und wobei: die Computervorrichtung des Weiteren ein Pfad-Hash-Register und einen Evaluator-Hash-Register umfasst; das Aktualisieren des Pfad-Hashs das Speichern des Pfad-Hashs in dem Pfad-Hash-Register umfasst; das Generieren des erwarteten Hash-Wertes das Speichern des erwarteten Hash-Wertes in dem Evaluator-Hash-Register umfasst; und das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, umfasst, das Pfad-Hash-Register und das Evaluator-Hash-Register zu vergleichen.
  • Beispiel 21 enthält den Gegenstand von einem der Beispiele 16-20, und wobei: die Computervorrichtung des Weiteren ein Integritätsprüfbit umfasst; und das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, umfasst, das Integritätsprüfbit in Reaktion auf eine Bestimmung, dass der Pfad-Hash mit dem erwarteten Hash übereinstimmt, zu setzen.
  • Beispiel 22 enthält den Gegenstand von einem der Beispiele 16-21, und wobei: der geschützte Code einen zweiten Atomic-Code-Pfad umfasst, der den Austrittspunkt und einen zweiten Satz aus einer oder mehreren Marker-Instruktionen enthält; wobei der Hash-Evaluator dient des Weiteren zum: (i) Generieren eines zweiten erwarteten Hash-Wertes als eine Funktion eines zweiten Satzes aus einer oder mehreren Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede des zweiten Satzes aus einer oder mehreren Adressen einer Marker-Instruktion des zweiten Satzes aus einer oder mehreren Marker-Instruktionen des zweiten Atomic-Code-Pfades entspricht, und (ii) Bestimmen, ob der Pfad-Hash mit dem zweiten erwarteten Hash-Wert übereinstimmt; und das Generieren der Codeflussintegritätsausnahme umfasst, die Codeflussintegritätsausnahme in Reaktion auf eine Bestimmung zu generieren, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert oder dem zweiten erwarteten Hash-Wert übereinstimmt.
  • Beispiel 23 enthält den Gegenstand von einem der Beispiele 16-22, und wobei: die Computervorrichtung des Weiteren einen Prozessor umfasst; das Generieren des erwarteten Hash-Wertes umfasst, durch den Prozessor eine erste Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen auszuführen, wobei jede Hash-Evaluator-Instruktion der ersten Gruppe einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen des Atomic-Code-Pfades entspricht; das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, umfasst, durch den Prozessor eine Vergleichs-Evaluator-Instruktion auszuführen; das Generieren des zweiten erwarteten Hash-Wertes umfasst, durch den Prozessor eine zweite Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen auszuführen, wobei jede Hash-Evaluator-Instruktion der zweiten Gruppe einer Marker-Instruktion des zweiten Satzes aus einer oder mehreren Marker-Instruktionen des zweiten Atomic-Code-Pfades entspricht; das Bestimmen, ob der Pfad-Hash mit dem zweiten erwarteten Hash übereinstimmt, umfasst, durch den Prozessor eine zweite Vergleichs-Evaluator-Instruktion auszuführen; und das Generieren der Codeflussintegritätsausnahme umfasst, durch den Prozessor eine Hash-Überprüfungsinstruktion auszuführen.
  • Beispiel 24 enthält den Gegenstand von einem der Beispiele 16-23, und umfasst des Weiteren: einen Zustandsmanager zum (i) Speichern eines vorherigen Pfad-Hashs an einem sicheren Speicherort der Computervorrichtung, und (ii) Wiederherstellen des vorherigen Pfad-Hashs aus dem sicheren Speicherort in Reaktion auf eine Bestimmung, dass der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; wobei das Ausführen des Atomic-Code-Pfades umfasst, den Atomic-Code-Pfad in Reaktion auf das Speichern des vorherigen Pfad-Hashs auszuführen.
  • Beispiel 25 enthält den Gegenstand von einem der Beispiele 16-24, und wobei: die Computervorrichtung des Weiteren einen Prozessor umfasst; das Speichern des vorherigen Pfad-Hashs umfasst, durch den Prozessor eine Push-Instruktion auszuführen, um den vorherigen Pfad-Hash in einem sicheren Stapel zu speichern; und wobei das Wiederherstellen des vorherigen Pfad-Hashs umfasst, durch den Prozessor eine Pop-Instruktion auszuführen, um den vorherigen Pfad-Hash aus dem sicheren Stapel abzurufen.
  • Beispiel 26 enthält den Gegenstand von einem der Beispiele 16-25, und wobei der sichere Speicherort eine verschlüsselte Speicherseite umfasst.
  • Beispiel 27 enthält den Gegenstand von einem der Beispiele 16-26, und wobei der sichere Speicherort eine sichere Registerdatei eines Prozessors der Computervorrichtung umfasst.
  • Beispiel 28 enthält den Gegenstand von einem der Beispiele 16-27 und umfasst des Weiteren: einen Speichermanager zum (i) Generieren eines Schlüsseldomänenselektors als eine Funktion des Pfad-Hashs in Reaktion auf das Aktualisieren des Pfad-Hashs, und (ii) Ausführen eines verschlüsselten Speicherzugriffs mit dem Schlüsseldomänenselektor.
  • Beispiel 29 enthält ein Verfahren für einen Steuerungsflussintegritätsschutz, wobei das Verfahren Folgendes umfasst: Identifizieren, durch eine Computervorrichtung, eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt und einen Austrittspunkt umfasst; Identifizieren, durch die Computervorrichtung, eines potenziellen Gadgets in dem Atomic-Code-Pfad; Einfügen, durch die Computervorrichtung, einer ersten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des potenziellen Gadgets mit einem Parameter, der einer Adresse der ersten Marker-Instruktion entspricht, wobei die erste Marker-Instruktion, wenn sie ausgeführt wird, einen Prozessor einer Ziel-Computervorrichtung veranlasst, einen Pfad-Hash der Ziel-Computervorrichtung als eine Funktion der Adresse der ersten Marker-Instruktion zu aktualisieren; und Einfügen, durch die Computervorrichtung, einer oder mehrerer Steuerungsflussintegritätsevaluierungsinstruktionen in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades, wobei die Steuerungsflussintegritätsevaluierungsinstruktionen, wenn sie ausgeführt werden, den Prozessor der Ziel-Computervorrichtung veranlassen, den Pfad-Hash mit einem erwarteten Hash-Wert zu vergleichen.
  • Beispiel 30 enthält den Gegenstand von Beispiel 29, und wobei das Einfügen der ersten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des potenziellen Gadgets umfasst, die erste Marker-Instruktion in den Atomic-Code-Pfad unmittelbar vor oder unmittelbar nach dem potenziellen Gadget einzufügen.
  • Beispiel 31 enthält den Gegenstand von einem der Beispiele 29 und 30, und wobei der Atomic-Code-Pfad eine Sequenz von Code ohne einen Subroutinen-Call, einen Subroutinen-Return, einen Loop-Eintritt oder einen Jump außer einem If-Statement-Jump oder einem Case-Statement-Jump umfasst.
  • Beispiel 32 enthält den Gegenstand von einem der Beispiele 29-31, und wobei das Identifizieren des potenziellen Gadgets das Identifizieren eines Segments des Atomic-Code-Pfades umfasst, das durch einen Steuerungsfluss-Exploit ausgeführt werden kann.
  • Beispiel 33 enthält den Gegenstand von einem der Beispiele 29-32, und wobei das potenzielle Gadget ein Return-Oriented Programming-Gadget oder ein Jump-Oriented Programming-Gadget umfasst.
  • Beispiel 34 enthält den Gegenstand von einem der Beispiele 29-33, und wobei das potenzielle Gadget einen externen dynamischen Linked Library Call umfasst.
  • Beispiel 35 enthält den Gegenstand von einem der Beispiele 29-34, und umfasst des Weiteren: statisches Analysieren, durch die Computervorrichtung, des geschützten Codes; wobei das Identifizieren des Atomic-Code-Pfades das Identifizieren des Atomic-Code-Pfades in Reaktion auf das statische Analysieren des geschützten Codes umfasst; und wobei das Identifizieren des potenziellen Gadgets in dem Atomic-Code-Pfad das Identifizieren des potenziellen Gadgets in Reaktion auf das statische Analysieren des geschützten Codes umfasst.
  • Beispiel 36 enthält den Gegenstand von einem der Beispiele 29-35, und wobei das Einfügen der einen oder der mehreren Steuerungsflussintegritätsevaluierungsinstruktionen umfasst: Einfügen einer ersten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades mit einem Parameter, der der Adresse der ersten Marker-Instruktion entspricht; Einfügen einer ersten Vergleichs-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion; und Einfügen einer Hash-Überprüfungsinstruktion in den geschützten Code nach der ersten Vergleichs-Evaluator-Instruktion.
  • Beispiel 37 enthält den Gegenstand von einem der Beispiele 29-36, und umfasst des Weiteren: Identifizieren, durch die Computervorrichtung, eines zweiten potenziellen Gadgets in dem Atomic-Code-Pfad, wobei das zweite potenzielle Gadget nach dem ersten potenziellen Gadget in dem Atomic-Code-Pfad auftritt; Einfügen, durch die Computervorrichtung, einer zweiten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des zweiten potenziellen Gadgets mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; und Einfügen, durch die Computervorrichtung, einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht; wobei das Einfügen der ersten Vergleichs-Evaluator-Instruktion des Weiteren das Einfügen der ersten Vergleichs-Evaluator-Instruktion nach der zweiten Hash-Evaluator-Instruktion umfasst.
  • Beispiel 38 enthält den Gegenstand von einem der Beispiele 29-36, und umfasst des Weiteren: Identifizieren, durch die Computervorrichtung, eines zweiten Atomic-Code-Pfades des geschützten Codes, wobei der zweite Atomic-Code-Pfad einen Eintrittspunkt und einen Austrittspunkt umfasst, und wobei der Austrittspunkt des Atomic-Code-Pfades den Austrittspunkt des zweiten Atomic-Code-Pfades umfasst; Identifizieren, durch die Computervorrichtung, eines zweiten potenziellen Gadgets in dem zweiten Atomic-Code-Pfad; Einfügen, durch die Computervorrichtung, einer zweiten Marker-Instruktion in den zweiten Atomic-Code-Pfad in der Nähe des zweiten potenziellen Gadgets mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; Einfügen, durch die Computervorrichtung, einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach der ersten Vergleichs-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht; und Einfügen, durch die Computervorrichtung, einer zweiten Vergleichs-Evaluator-Instruktion in den geschützten Code nach der zweiten Hash-Evaluator-Instruktion; wobei das Einfügen der Hash-Überprüfungsinstruktion des Weiteren das Einfügen der Hash-Überprüfungsinstruktion nach der zweiten Vergleichs-Evaluator-Instruktion umfasst.
  • Beispiel 39 enthält den Gegenstand von einem der Beispiele 29-37, und umfasst des Weiteren: Einfügen, durch die Computervorrichtung, einer zweiten Marker-Instruktion in den Atomic-Code-Pfad am Eintrittspunkt des Atomic-Code-Pfades mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; und Einfügen, durch die Computervorrichtung, einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt und vor der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht.
  • Beispiel 40 enthält den Gegenstand von einem der Beispiele 29-39, und umfasst des Weiteren: Identifizieren, durch die Computervorrichtung, eines Non-Return-Jump des geschützten Codes, der zu dem Eintrittspunkt des Atomic-Code-Pfades springt; Einfügen, durch die Computervorrichtung, einer zweiten Marker-Instruktion in den geschützten Code vor dem Non-Return-Jump mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; und Einfügen, durch die Computervorrichtung, einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt und vor der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht.
  • Beispiel 41 enthält den Gegenstand von einem der Beispiele 29-40, und wobei: das Einfügen der ersten Hash-Evaluator-Instruktion das Einfügen einer ersten Hash-Evaluator-Instruktion umfasst, die, wenn sie ausgeführt wird, den Prozessor veranlasst, den erwarteten Hash-Wert der Ziel-Computervorrichtung als eine Funktion der Adresse der ersten Marker-Instruktion zu aktualisieren; das Einfügen der ersten Vergleichs-Evaluator-Instruktion das Einfügen einer ersten Vergleichs-Evaluator-Instruktion umfasst, die, wenn sie ausgeführt wird, den Prozessor veranlasst zu bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; und das Einfügen der Hash-Überprüfungsinstruktion das Einfügen einer Hash-Überprüfungsinstruktion umfasst, die, wenn sie ausgeführt wird, den Prozessor veranlasst, eine Codeflussintegritätsausnahme in Reaktion auf eine Bestimmung zu generieren, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt.
  • Beispiel 42 enthält den Gegenstand von einem der Beispiele 29-41, und umfasst des Weiteren: Einfügen, durch die Computervorrichtung, einer Push-Instruktion in den geschützten Code am Eintrittspunkt des Atomic-Code-Pfades; und Einfügen, durch die Computervorrichtung, einer Pop-Instruktion in den geschützten Code nach der Hash-Überprüfungsinstruktion.
  • Beispiel 43 enthält den Gegenstand von einem der Beispiele 29-42, und wobei: das Einfügen der Push-Instruktion das Einfügen einer Push-Instruktion umfasst, die, wenn sie ausgeführt wird, einen Prozessor einer Ziel-Computervorrichtung veranlasst, einen Pfad-Hash der Ziel-Computervorrichtung an einem sicheren Speicherort der Ziel-Computervorrichtung zu speichern; und das Einfügen der Pop-Instruktion das Einfügen einer Pop-Instruktion umfasst, die, wenn sie ausgeführt wird, den Prozessor veranlasst, den Pfad-Hash aus dem sicheren Speicherort wiederherzustellen.
  • Beispiel 44 enthält ein Verfahren für einen Steuerungsflussintegritätsschutz, wobei das Verfahren Folgendes umfasst: Ausführen, durch eine Computervorrichtung, eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt, einen Austrittspunkt und eine oder mehrere Marker-Instruktionen umfasst; Aktualisieren, durch die Computervorrichtung, eines Pfad-Hashs als eine Funktion einer Adresse einer ersten Marker-Instruktion der einen oder der mehreren Marker-Instruktionen in Reaktion auf das Ausführen des Atomic-Code-Pfad; Erreichen, durch die Computervorrichtung, des Austrittspunktes des Atomic-Code-Pfades in Reaktion auf das Ausführen des Atomic-Code-Pfades; Generieren, durch die Computervorrichtung, eines erwarteten Hash-Wertes als eine Funktion einer oder mehrerer Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede der einen oder der mehreren Adressen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht; Bestimmen, durch die Computervorrichtung, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; und Generieren, durch die Computervorrichtung, einer Codeflussintegritätsausnahme in Reaktion auf das Bestimmen, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt.
  • Beispiel 45 enthält den Gegenstand von Beispiel 44, und wobei: das Aktualisieren des Pfad-Hashs das Ausführen, durch einen Prozessor der Computervorrichtung, der ersten Marker-Instruktion des Atomic-Code-Pfades mit einem Parameter umfasst, der der Adresse der ersten Marker-Instruktion entspricht; das Generieren des erwarteten Hash-Wertes das Ausführen, durch den Prozessor, einer Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen umfasst, wobei jede Hash-Evaluator-Instruktion der Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht; das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, das Ausführen, durch den Prozessor, einer Vergleichs-Evaluator-Instruktion umfasst; und das Generieren des erwarteten Hashs das Ausführen, durch den Prozessor, einer Hash-Überprüfungsinstruktion umfasst.
  • Beispiel 46 enthält den Gegenstand von einem der Beispiele 44 und 45, und wobei: das Aktualisieren des Pfad-Hashs als eine Funktion der Adresse der ersten Marker-Instruktion das Aktualisieren des Pfad-Hashs als eine Funktion eines Versatzes der ersten Marker-Instruktion in dem geschützten Code umfasst; und das Generieren des erwarteten Hash-Wertes als eine Funktion der einen oder der mehreren Adressen das Generieren des erwarteten Hash-Wertes als eine Funktion einer oder mehrerer Versatzwerte umfasst, wobei jeder des einen oder der mehreren Versatzwerte einem Versatz einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht.
  • Beispiel 47 enthält den Gegenstand von einem der Beispiele 44-46, und wobei der Atomic-Code-Pfad eine Sequenz von Code ohne einen Subroutinen-Call, einen Subroutinen-Return, einen Loop-Entry oder einen anderen Jump als einen If-Statement-Jump oder einen Case-Statement-Jump umfasst.
  • Beispiel 48 enthält den Gegenstand von einem der Beispiele 44-47, und wobei: das Aktualisieren des Pfad-Hashs das Speichern des Pfad-Hashs in einem Pfad-Hash-Register der Computervorrichtung umfasst; das Generieren des erwarteten Hash-Wertes das Speichern des erwarteten Hash-Wertes in einem Evaluator-Hash-Register der Computervorrichtung umfasst; und das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, das Vergleichen des Pfad-Hash-Registers und des Evaluator-Hash-Registers umfasst.
  • Beispiel 49 enthält den Gegenstand von einem der Beispiele 44-48, und wobei das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, das Setzen eines Integritätsprüfbits der Computervorrichtung in Reaktion auf das Bestimmen umfasst, dass der Pfad-Hash mit dem erwarteten Hash übereinstimmt.
  • Beispiel 50 enthält den Gegenstand von einem der Beispiele 44-49, und wobei der geschützte Code einen zweiten Atomic-Code-Pfad enthält, der den Austrittspunkt und einen zweiten Satz aus einer oder mehreren Marker-Instruktionen enthält, wobei das Verfahren des Weiteren umfasst: Generieren, durch die Computervorrichtung, eines zweiten erwarteten Hash-Wertes als eine Funktion eines zweiten Satzes aus einer oder mehreren Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede des zweiten Satzes aus einer oder mehreren Adressen einer Marker-Instruktion des zweiten Satzes aus einer oder mehreren Marker-Instruktionen des zweiten Atomic-Code-Pfades entspricht; und Bestimmen, durch die Computervorrichtung, ob der Pfad-Hash mit dem zweiten erwarteten Hash-Wert übereinstimmt; wobei das Generieren der Codeflussintegritätsausnahme das Generieren der Codeflussintegritätsausnahme in Reaktion auf das Bestimmen umfasst, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert oder dem zweiten erwarteten Hash-Wert übereinstimmt.
  • Beispiel 51 enthält den Gegenstand von einem der Beispiele 44-50, und wobei: das Generieren des erwarteten Hash-Wertes das Ausführen, durch einen Prozessor der Computervorrichtung, einer ersten Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen umfasst, wobei jede Hash-Evaluator-Instruktion der ersten Gruppe einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen des Atomic-Code-Pfades entspricht; das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, das Ausführen, durch den Prozessor, einer Vergleichs-Evaluator-Instruktion umfasst; das Generieren des zweiten erwarteten Hash-Wertes das Ausführen, durch den Prozessor, einer zweiten Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen umfasst, wobei jede Hash-Evaluator-Instruktion der zweiten Gruppe einer Marker-Instruktion des zweiten Satzes aus einer oder mehreren Marker-Instruktionen des zweiten Atomic-Code-Pfades entspricht; das Bestimmen, ob der Pfad-Hash mit dem zweiten erwarteten Hash übereinstimmt, das Ausführen, durch den Prozessor, einer zweiten Vergleichs-Evaluator-Instruktion umfasst; und das Generieren der Codeflussintegritätsausnahme das Ausführen, durch den Prozessor, einer Hash-Überprüfungsinstruktion umfasst.
  • Beispiel 52 enthält den Gegenstand von einem der Beispiele 44-51, und umfasst des Weiteren: Speichern, durch die Computervorrichtung, eines vorherigen Pfad-Hashs an einem sicheren Speicherort der Computervorrichtung; und Wiederherstellen, durch die Computervorrichtung, des vorherigen Pfad-Hashs aus dem sicheren Speicherort in Reaktion auf das Bestimmen, dass der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; wobei das Ausführen des Atomic-Code-Pfades das Ausführen des Atomic-Code-Pfades in Reaktion auf das Speichern des vorherigen Pfad-Hashs umfasst.
  • Beispiel 53 enthält den Gegenstand von einem der Beispiele 44-52, und wobei: das Speichern des vorherigen Pfad-Hashs das Ausführen, durch einen Prozessor der Computervorrichtung, einer Push-Instruktion umfasst, um den vorherigen Pfad-Hash in einem sicheren Stapel zu speichern; und das Wiederherstellen des vorherigen Pfad-Hashs das Ausführen, durch den Prozessor, einer Pop-Instruktion umfasst, um den vorherigen Pfad-Hash aus dem sicheren Stapel abzurufen.
  • Beispiel 54 enthält den Gegenstand von einem der Beispiele 44-53, und wobei der sichere Speicherort eine verschlüsselte Speicherseite umfasst.
  • Beispiel 55 enthält den Gegenstand von einem der Beispiele 44-54, und wobei der sichere Speicherort eine sichere Registerdatei eines Prozessors der Computervorrichtung umfasst.
  • Beispiel 56 enthält den Gegenstand von einem der Beispiele 44-55, und umfasst des Weiteren: Generieren, durch die Computervorrichtung, eines Schlüsseldomänenselektors als eine Funktion des Pfad-Hashs in Reaktion auf das Aktualisieren des Pfad-Hashs; und Ausführen, durch die Computervorrichtung, eines verschlüsselten Speicherzugriffs unter Verwendung des Schlüsseldomänenselektors.
  • Beispiel 57 enthält eine Computervorrichtung, die Folgendes umfasst: einen Prozessor; und einen Speicher, in dem mehrere Instruktionen gespeichert sind, die, wenn sie durch den Prozessor ausgeführt werden, die Computervorrichtung veranlassen, das Verfahren von einem der Beispiele 29-56 auszuführen.
  • Beispiel 58 enthält ein oder mehrere maschinenlesbare Speichermedien, auf denen mehrere Instruktionen gespeichert sind, die, wenn sie ausgeführt werden, dazu führen, dass eine Computervorrichtung das Verfahren von einem der Beispiele 29-56 ausführt.
  • Beispiel 59 enthält eine Computervorrichtung, die ein Mittel umfasst, um das Verfahren von einem der Beispiele 29-56 auszuführen.
  • Beispiel 60 enthält eine Computervorrichtung für einen Steuerungsflussintegritätsschutz, wobei die Computervorrichtung Folgendes umfasst: ein Mittel zum Identifizieren eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt und einen Austrittspunkt umfasst; ein Mittel zum Identifizieren eines potenziellen Gadgets in dem Atomic-Code-Pfad; ein Mittel zum Einfügen einer ersten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des potenziellen Gadgets mit einem Parameter, der einer Adresse der ersten Marker-Instruktion entspricht, wobei die erste Marker-Instruktion, wenn sie ausgeführt wird, einen Prozessor einer Ziel-Computervorrichtung veranlasst, einen Pfad-Hash der Ziel-Computervorrichtung als eine Funktion der Adresse der ersten Marker-Instruktion zu aktualisieren; und ein Mittel zum Einfügen einer oder mehrerer Steuerungsflussintegritätsevaluierungsinstruktionen in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades, wobei die Steuerungsflussintegritätsevaluierungsinstruktionen, wenn sie ausgeführt werden, den Prozessor der Ziel-Computervorrichtung veranlassen, den Pfad-Hash mit einem erwarteten Hash-Wert zu vergleichen.
  • Beispiel 61 enthält den Gegenstand von Beispiel 60, und wobei das Mittel zum Einfügen der ersten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des potenziellen Gadgets ein Mittel zum Einfügen der ersten Marker-Instruktion in den Atomic-Code-Pfad unmittelbar vor oder unmittelbar nach dem potenziellen Gadget umfasst.
  • Beispiel 62 enthält den Gegenstand von einem der Beispiele 60 und 61, und wobei der Atomic-Code-Pfad eine Sequenz von Code ohne einen Subroutinen-Call, einen Subroutinen-Return, einen Loop-Entry oder einen anderen Jump als einen If-Statement-Jump oder einen Case-Statement-Jump umfasst.
  • Beispiel 63 enthält den Gegenstand von einem der Beispiele 60-62, und wobei das Mittel zum Identifizieren des potenziellen Gadgets ein Mittel zum Identifizieren eines Segments des Atomic-Code-Pfades, das durch einen Steuerungsfluss-Exploit ausgeführt werden kann, umfasst.
  • Beispiel 64 enthält den Gegenstand von einem der Beispiele 60-63, und wobei das potenzielle Gadget ein Return-Oriented Programming-Gadget oder ein Jump-Oriented Programming-Gadget umfasst.
  • Beispiel 65 enthält den Gegenstand von einem der Beispiele 60-64, und wobei das potenzielle Gadget einen externen dynamischen Linked Library Call umfasst.
  • Beispiel 66 enthält den Gegenstand von einem der Beispiele 60-65, und umfasst des Weiteren: ein Mittel zum statischen Analysieren des geschützten Codes; wobei das Mittel zum Identifizieren des Atomic-Code-Pfades ein Mittel zum Identifizieren des Atomic-Code-Pfades in Reaktion auf das statische Analysieren des geschützten Codes umfasst; und wobei das Mittel zum Identifizieren des potenziellen Gadgets in dem Atomic-Code-Pfad ein Mittel zum Identifizieren des potenziellen Gadgets in Reaktion auf das statische Analysieren des geschützten Codes umfasst.
  • Beispiel 67 enthält den Gegenstand von einem der Beispiele 60-66, und wobei das Mittel zum Einfügen der einen oder der mehreren Steuerungsflussintegritätsevaluierungsinstruktionen umfasst: ein Mittel zum Einfügen einer ersten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades mit einem Parameter, der der Adresse der ersten Marker-Instruktion entspricht; ein Mittel zum Einfügen einer ersten Vergleichs-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion; und ein Mittel zum Einfügen einer Hash-Überprüfungsinstruktion in den geschützten Code nach der ersten Vergleichs-Evaluator-Instruktion.
  • Beispiel 68 enthält den Gegenstand von einem der Beispiele 60-67, und umfasst des Weiteren: ein Mittel zum Identifizieren eines zweiten potenziellen Gadgets in dem Atomic-Code-Pfad, wobei das zweite potenzielle Gadget nach dem ersten potenziellen Gadget in dem Atomic-Code-Pfad auftritt; ein Mittel zum Einfügen einer zweiten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des zweiten potenziellen Gadgets mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; und ein Mittel zum Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht; wobei das Mittel zum Einfügen der ersten Vergleichs-Evaluator-Instruktion des Weiteren ein Mittel zum Einfügen der ersten Vergleichs-Evaluator-Instruktion nach der zweiten Hash-Evaluator-Instruktion umfasst.
  • Beispiel 69 enthält den Gegenstand von einem der Beispiele 60-68, und umfasst des Weiteren: ein Mittel zum Identifizieren eines zweiten Atomic-Code-Pfades des geschützten Codes, wobei der zweite Atomic-Code-Pfad einen Eintrittspunkt und einen Austrittspunkt umfasst, und wobei der Austrittspunkt des Atomic-Code-Pfades den Austrittspunkt des zweiten Atomic-Code-Pfades umfasst; ein Mittel zum Identifizieren eines zweiten potenziellen Gadgets in dem zweiten Atomic-Code-Pfad; ein Mittel zum Einfügen einer zweiten Marker-Instruktion in den zweiten Atomic-Code-Pfad in der Nähe des zweiten potenziellen Gadgets mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; ein Mittel zum Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach der ersten Vergleichs-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht; und ein Mittel zum Einfügen einer zweiten Vergleichs-Evaluator-Instruktion in den geschützten Code nach der zweiten Hash-Evaluator-Instruktion; wobei das Mittel zum Einfügen der Hash-Überprüfungsinstruktion des Weiteren ein Mittel zum Einfügen der Hash-Überprüfungsinstruktion nach der zweiten Vergleichs-Evaluator-Instruktion umfasst.
  • Beispiel 70 enthält den Gegenstand von einem der Beispiele 60-69, und umfasst des Weiteren: ein Mittel zum Einfügen einer zweiten Marker-Instruktion in den Atomic-Code-Pfad am Eintrittspunkt des Atomic-Code-Pfades mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; und ein Mittel zum Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt und vor der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht.
  • Beispiel 71 enthält den Gegenstand von einem der Beispiele 60-70, und umfasst des Weiteren: ein Mittel zum Identifizieren eines Non-Return-Jump des geschützten Codes, der zu dem Eintrittspunkt des Atomic-Code-Pfades springt; ein Mittel zum Einfügen einer zweiten Marker-Instruktion in den geschützten Code vor dem Non-Return-Jump mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; und ein Mittel zum Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt und vor der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht.
  • Beispiel 72 enthält den Gegenstand von einem der Beispiele 60-71, und wobei: das Mittel zum Einfügen der ersten Hash-Evaluator-Instruktion ein Mittel zum Einfügen einer ersten Hash-Evaluator-Instruktion umfasst, die, wenn sie ausgeführt wird, den Prozessor veranlasst, den erwarteten Hash-Wert der Ziel-Computervorrichtung als eine Funktion der Adresse der ersten Marker-Instruktion zu aktualisieren; das Mittel zum Einfügen der ersten Vergleichs-Evaluator-Instruktion ein Mittel zum Einfügen einer ersten Vergleichs-Evaluator-Instruktion umfasst, die, wenn sie ausgeführt wird, den Prozessor veranlasst zu bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; und das Mittel zum Einfügen der Hash-Überprüfungsinstruktion ein Mittel zum Einfügen einer Hash-Überprüfungsinstruktion umfasst, die, wenn sie ausgeführt wird, den Prozessor veranlasst, eine Codeflussintegritätsausnahme in Reaktion auf eine Bestimmung zu generieren, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt.
  • Beispiel 73 enthält den Gegenstand von einem der Beispiele 60-72, und umfasst des Weiteren: ein Mittel zum Einfügen einer Push-Instruktion in den geschützten Code am Eintrittspunkt des Atomic-Code-Pfades; und ein Mittel zum Einfügen einer Pop-Instruktion in den geschützten Code nach der Hash-Überprüfungsinstruktion.
  • Beispiel 74 enthält den Gegenstand von einem der Beispiele 60-73, und wobei: das Mittel zum Einfügen der Push-Instruktion ein Mittel zum Einfügen einer Push-Instruktion umfasst, die, wenn sie ausgeführt wird, einen Prozessor einer Ziel-Computervorrichtung veranlasst, einen Pfad-Hash der Ziel-Computervorrichtung an einem sicheren Speicherort der Ziel-Computervorrichtung zu speichern, und das Mittel zum Einfügen der Pop-Instruktion ein Mittel zum Einfügen einer Pop-Instruktion umfasst, die, wenn sie ausgeführt wird, den Prozessor veranlasst, den Pfad-Hash aus dem sicheren Speicherort wiederherzustellen.
  • Beispiel 75 enthält eine Computervorrichtung für einen Steuerungsflussintegritätsschutz, wobei die Computervorrichtung Folgendes umfasst: ein Mittel zum Ausführen eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt, einen Austrittspunkt und eine oder mehrere Marker-Instruktionen umfasst; ein Mittel zum Aktualisieren eines Pfad-Hashs als eine Funktion einer Adresse einer ersten Marker-Instruktion der einen oder der mehreren Marker-Instruktionen in Reaktion auf das Ausführen des Atomic-Code-Pfades; ein Mittel zum Erreichen des Austrittspunktes des Atomic-Code-Pfades in Reaktion auf das Ausführen des Atomic-Code-Pfades; ein Mittel zum Generieren eines erwarteten Hash-Wertes als eine Funktion einer oder mehrerer Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede der einen oder der mehreren Adressen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht; ein Mittel zum Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; und ein Mittel zum Generieren einer Codeflussintegritätsausnahme in Reaktion auf das Bestimmen, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt.
  • Beispiel 76 enthält den Gegenstand von Beispiel 75, und wobei: das Mittel zum Aktualisieren des Pfad-Hashs ein Mittel zum Ausführen, durch einen Prozessor der Computervorrichtung, die erste Marker-Instruktion des Atomic-Code-Pfades mit einem Parameter umfasst, der der Adresse der ersten Marker-Instruktion entspricht; das Mittel zum Generieren des erwarteten Hash-Wertes ein Mittel zum Ausführen, durch den Prozessor, einer Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen umfasst, wobei jede Hash-Evaluator-Instruktion der Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht; das Mittel zum Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, ein Mittel zum Ausführen, durch den Prozessor, einer Vergleichs-Evaluator-Instruktion umfasst; und das Mittel zum Generieren der Codeflussintegritätsausnahme in Reaktion auf das Bestimmen, dass der Pfad-Hash nicht mit dem erwarteten Hash übereinstimmt, ein Mittel zum Ausführen, durch den Prozessor, einer Hash-Überprüfungsinstruktion umfasst.
  • Beispiel 77 enthält den Gegenstand von einem der Beispiele 75 und 76, und wobei: das Mittel zum Aktualisieren des Pfad-Hashs als eine Funktion der Adresse der ersten Marker-Instruktion ein Mittel zum Aktualisieren des Pfad-Hashs als eine Funktion eines Versatzes der ersten Marker-Instruktion in dem geschützten Code umfasst; und das Mittel zum Generieren des erwarteten Hash-Wertes als eine Funktion der einen oder der mehreren Adressen ein Mittel zum Generieren des erwarteten Hash-Wertes als eine Funktion einer oder mehrerer Versatzwerte umfasst, wobei jeder des einen oder der mehreren Versatzwerte einem Versatz einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht.
  • Beispiel 78 enthält den Gegenstand von einem der Beispiele 75 und 77, und wobei der Atomic-Code-Pfad eine Sequenz von Code ohne einen Subroutinen-Call, einen Subroutinen-Return, einen Loop-Entry oder einen anderen Jump als einen If-Statement-Jump oder einen Case-Statement-Jump umfasst.
  • Beispiel 79 enthält den Gegenstand von einem der Beispiele 75-78, und wobei: das Mittel zum Aktualisieren des Pfad-Hashs ein Mittel zum Speichern des Pfad-Hashs in einem Pfad-Hash-Register der Computervorrichtung umfasst; das Mittel zum Generieren des erwarteten Hash-Wertes ein Mittel zum Speichern des erwarteten Hash-Wertes in einem Evaluator-Hash-Register der Computervorrichtung umfasst; und das Mittel zum Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, ein Mittel zum Vergleichen des Pfad-Hash-Registers und des Evaluator-Hash-Registers umfasst.
  • Beispiel 80 enthält den Gegenstand von einem der Beispiele 75-79, und wobei das Mittel zum Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, ein Mittel zum Setzen eines Integritätsprüfbits der Computervorrichtung in Reaktion auf das Bestimmen umfasst, dass der Pfad-Hash mit dem erwarteten Hash übereinstimmt.
  • Beispiel 81 enthält den Gegenstand von einem der Beispiele 75-80, und wobei der geschützte Code einen zweiten Atomic-Code-Pfad enthält, der den Austrittspunkt und einen zweiten Satz aus einer oder mehreren Marker-Instruktionen enthält, wobei die Computervorrichtung des Weiteren Folgendes umfasst: ein Mittel zum Generieren eines zweiten erwarteten Hash-Wertes als eine Funktion eines zweiten Satzes aus einer oder mehreren Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede des zweiten Satzes aus einer oder mehreren Adressen einer Marker-Instruktion des zweiten Satzes aus einer oder mehreren Marker-Instruktionen des zweiten Atomic-Code-Pfades entspricht; und ein Mittel zum Bestimmen, ob der Pfad-Hash mit dem zweiten erwarteten Hash-Wert übereinstimmt; wobei das Mittel zum Generieren der Codeflussintegritätsausnahme ein Mittel zum Generieren der Codeflussintegritätsausnahme in Reaktion auf das Bestimmen umfasst, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert oder dem zweiten erwarteten Hash-Wert übereinstimmt.
  • Beispiel 82 enthält den Gegenstand von einem der Beispiele 75-81, und wobei: das Mittel zum Generieren des erwarteten Hash-Wertes ein Mittel zum Ausführen, durch einen Prozessor der Computervorrichtung, einer ersten Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen umfasst, wobei jede Hash-Evaluator-Instruktion der ersten Gruppe einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen des Atomic-Code-Pfades entspricht; das Mittel zum Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, ein Mittel zum Ausführen, durch den Prozessor, einer Vergleichs-Evaluator-Instruktion umfasst; das Mittel zum Generieren des zweiten erwarteten Hash-Wertes ein Mittel zum Ausführen, durch den Prozessor, einer zweiten Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen umfasst, wobei jede Hash-Evaluator-Instruktion der zweiten Gruppe einer Marker-Instruktion des zweiten Satzes aus einer oder mehreren Marker-Instruktionen des zweiten Atomic-Code-Pfades entspricht; das Mittel zum Bestimmen, ob der Pfad-Hash mit dem zweiten erwarteten Hash übereinstimmt, ein Mittel zum Ausführen, durch den Prozessor, einer zweiten Vergleichs-Evaluator-Instruktion umfasst; und das Mittel zum Generieren der Codeflussintegritätsausnahme ein Mittel zum Ausführen, durch den Prozessor, einer Hash-Überprüfungsinstruktion umfasst.
  • Beispiel 83 enthält den Gegenstand von einem der Beispiele 75-82, und umfasst des Weiteren: ein Mittel zum Speichern eines vorherigen Pfad-Hashs an einem sicheren Speicherort der Computervorrichtung; und ein Mittel zum Wiederherstellen des vorherigen Pfad-Hashs aus dem sicheren Speicherort in Reaktion auf das Bestimmen, dass der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; wobei das Mittel zum Ausführen des Atomic-Code-Pfades ein Mittel zum Ausführen des Atomic-Code-Pfades in Reaktion auf das Speichern des vorherigen Pfad-Hashs umfasst.
  • Beispiel 84 enthält den Gegenstand von einem der Beispiele 75-83, und wobei: das Mittel zum Speichern des vorherigen Pfad-Hashs ein Mittel zum Ausführen, durch einen Prozessor der Computervorrichtung, einer Push-Instruktion umfasst, um den vorherigen Pfad-Hash in einem sicheren Stapel zu speichern; und das Mittel zum Wiederherstellen des vorherigen Pfad-Hashs ein Mittel zum Ausführen, durch den Prozessor, einer Pop-Instruktion umfasst, um den vorherigen Pfad-Hash aus dem sicheren Stapel abzurufen.
  • Beispiel 85 enthält den Gegenstand von einem der Beispiele 75-84, und wobei der sichere Speicherort eine verschlüsselte Speicherseite umfasst.
  • Beispiel 86 enthält den Gegenstand von einem der Beispiele 75-85, und wobei der sichere Speicherort eine sichere Registerdatei eines Prozessors der Computervorrichtung umfasst.
  • Beispiel 87 enthält den Gegenstand von einem der Beispiele 75-86, und umfasst des Weiteren: ein Mittel zum Generieren eines Schlüsseldomänenselektors als eine Funktion des Pfad-Hashs in Reaktion auf das Aktualisieren des Pfad-Hashs; und ein Mittel zum Ausführen eines verschlüsselten Speicherzugriffs unter Verwendung des Schlüsseldomänenselektors.

Claims (25)

  1. Computervorrichtung für einen Steuerungsflussintegritätsschutz, wobei die Computervorrichtung Folgendes umfasst: einen statischen Analysator zum (i) Identifizieren eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt und einen Austrittspunkt umfasst, und (ii) Identifizieren eines potenziellen Gadgets in dem Atomic-Code-Pfad; und einen Instrumentierungsmanager zum (i) Einfügen einer ersten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des potenziellen Gadgets mit einem Parameter, der einer Adresse der ersten Marker-Instruktion entspricht, wobei die erste Marker-Instruktion, wenn sie ausgeführt wird, einen Prozessor einer Ziel-Computervorrichtung veranlasst, einen Pfad-Hash der Ziel-Computervorrichtung als eine Funktion der Adresse der ersten Marker-Instruktion zu aktualisieren, und (ii) Einfügen einer oder mehrerer Steuerungsflussintegritätsevaluierungsinstruktionen in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades, wobei die Steuerungsflussintegritätsevaluierungsinstruktionen, wenn sie ausgeführt werden, den Prozessor der Ziel-Computervorrichtung veranlassen, den Pfad-Hash mit einem erwarteten Hash-Wert zu vergleichen.
  2. Computervorrichtung nach Anspruch 1, wobei der Atomic-Code-Pfad eine Sequenz von Code ohne einen Subroutinen-Call, einen Subroutinen-Return, einen Loop-Entry oder einen anderen Jump als einen If-Statement-Jump oder einen Case-Statement-Jump umfasst.
  3. Computervorrichtung nach Anspruch 1, wobei das Identifizieren des potenziellen Gadgets umfasst, ein Segment des Atomic-Code-Pfades zu identifizieren, das durch einen Steuerungsfluss-Exploit ausgeführt werden kann, wobei das potenzielle Gadget ein Return-Oriented Programming-Gadget, ein Jump-Oriented Programming-Gadget oder einen externen dynamischen Linked Library Call umfasst.
  4. Computervorrichtung nach einem der Ansprüche 1-3, wobei das Einfügen der einen oder der mehreren Steuerungsflussintegritätsevaluierungsinstruktionen Folgendes umfasst: Einfügen einer ersten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades mit einem Parameter, der der Adresse der ersten Marker-Instruktion entspricht; Einfügen einer ersten Vergleichs-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion; und Einfügen einer Hash-Überprüfungsinstruktion in den geschützten Code nach der ersten Vergleichs-Evaluator-Instruktion.
  5. Computervorrichtung nach Anspruch 4, wobei: der statische Analysator des Weiteren dazu dient, ein zweites potenzielles Gadget in dem Atomic-Code-Pfad zu identifizieren, wobei das zweite potenzielle Gadget nach dem ersten potenziellen Gadget in dem Atomic-Code-Pfad auftritt; der Instrumentierungsmanager dient des Weiteren zum: (i) Einfügen einer zweiten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des zweiten potenziellen Gadgets mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht, und (ii) Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht; und das Einfügen der ersten Vergleichs-Evaluator-Instruktion des Weiteren umfasst, die erste Vergleichs-Evaluator-Instruktion nach der zweiten Hash-Evaluator-Instruktion einzufügen.
  6. Computervorrichtung nach Anspruch 4, wobei der Instrumentierungsmanager dient des Weiteren zum: Einfügen einer zweiten Marker-Instruktion in den Atomic-Code-Pfad am Eintrittspunkt des Atomic-Code-Pfades mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht; und Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt und vor der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht.
  7. Computervorrichtung nach Anspruch 4, wobei: der statische Analysator des Weiteren dazu dient, einen Non-Return-Jump des geschützten Codes zu identifizieren, der zu dem Eintrittspunkt des Atomic-Code-Pfades springt; und der Instrumentierungsmanager dient des Weiteren zum: (i) Einfügen einer zweiten Marker-Instruktion in den geschützten Code vor dem Non-Return-Jump mit einem Parameter, der einer Adresse der zweiten Marker-Instruktion entspricht, und (ii) Einfügen einer zweiten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt und vor der ersten Hash-Evaluator-Instruktion mit einem Parameter, der der Adresse der zweiten Marker-Instruktion entspricht.
  8. Computervorrichtung für einen Steuerungsflussintegritätsschutz, wobei die Computervorrichtung Folgendes umfasst: einen Pfad-Hash-Aktualisierer zum (i) Ausführen eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt, einen Austrittspunkt und eine oder mehrere Marker-Instruktionen umfasst, (ii) Aktualisieren eines Pfad-Hashs als eine Funktion einer Adresse einer ersten Marker-Instruktion der einen oder der mehreren Marker-Instruktionen in Reaktion auf die Ausführung des Atomic-Code-Pfades, und (iii) Erreichen des Austrittspunktes des Atomic-Code-Pfades in Reaktion auf die Ausführung des Atomic-Code-Pfades; einen Hash-Evaluator zum (i) Generieren eines erwarteten Hash-Wertes als eine Funktion einer oder mehrerer Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede der einen oder der mehreren Adressen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht, und (ii) Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; und einen Codefluss-Integritätsprüfer, um eine Codeflussintegritätsausnahme in Reaktion auf eine Bestimmung zu generieren, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt.
  9. Computervorrichtung nach Anspruch 8, wobei: die Computervorrichtung des Weiteren einen Prozessor umfasst; das Aktualisieren des Pfad-Hashs umfasst, durch den Prozessor die erste Marker-Instruktion des Atomic-Code-Pfades mit einem Parameter auszuführen, der der Adresse der ersten Marker-Instruktion entspricht; das Generieren des erwarteten Hash-Wertes umfasst, durch den Prozessor eine Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen auszuführen, wobei jede Hash-Evaluator-Instruktion der Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht; das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, umfasst, durch den Prozessor eine Vergleichs-Evaluator-Instruktion auszuführen; das Generieren der Codeflussintegritätsausnahme in Reaktion auf die Bestimmung, dass der Pfad-Hash nicht mit dem erwarteten Hash übereinstimmt, umfasst, durch den Prozessor eine Hash-Überprüfungsinstruktion auszuführen; das Aktualisieren des Pfad-Hashs als eine Funktion der Adresse der ersten Marker-Instruktion umfasst, den Pfad-Hash als eine Funktion eines Versatzes der ersten Marker-Instruktion in dem geschützten Code zu aktualisieren; und das Generieren des erwarteten Hash-Wertes als eine Funktion der einen oder der mehreren Adressen umfasst, den erwarteten Hash-Wert als eine Funktion einer oder mehrerer Versatzwerte zu generieren, wobei jeder des einen oder der mehreren Versatzwerte einem Versatz einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht.
  10. Computervorrichtung nach Anspruch 8, wobei: die Computervorrichtung des Weiteren ein Pfad-Hash-Register und einen Evaluator-Hash-Register umfasst; das Aktualisieren des Pfad-Hashs das Speichern des Pfad-Hashs in dem Pfad-Hash-Register umfasst; das Generieren des erwarteten Hash-Wertes das Speichern des erwarteten Hash-Wertes in dem Evaluator-Hash-Register umfasst; und das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, umfasst, das Pfad-Hash-Register und das Evaluator-Hash-Register zu vergleichen.
  11. Computervorrichtung nach Anspruch 8, wobei: die Computervorrichtung des Weiteren ein Integritätsprüfbit umfasst; und das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, umfasst, das Integritätsprüfbit in Reaktion auf eine Bestimmung, dass der Pfad-Hash mit dem erwarteten Hash übereinstimmt, zu setzen.
  12. Computervorrichtung nach einem der Ansprüche 8-11, wobei: die Computervorrichtung des Weiteren einen Prozessor umfasst; der geschützte Code einen zweiten Atomic-Code-Pfad umfasst, der den Austrittspunkt und einen zweiten Satz aus einer oder mehreren Marker-Instruktionen enthält; der Hash-Evaluator dient des Weiteren zum: (i) Generieren eines zweiten erwarteten Hash-Wertes als eine Funktion eines zweiten Satzes aus einer oder mehreren Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede des zweiten Satzes aus einer oder mehreren Adressen einer Marker-Instruktion des zweiten Satzes aus einer oder mehreren Marker-Instruktionen des zweiten Atomic-Code-Pfades entspricht, und (ii) Bestimmen, ob der Pfad-Hash mit dem zweiten erwarteten Hash-Wert übereinstimmt; das Generieren der Codeflussintegritätsausnahme umfasst, die Codeflussintegritätsausnahme in Reaktion auf eine Bestimmung zu generieren, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert oder dem zweiten erwarteten Hash-Wert übereinstimmt; das Generieren des erwarteten Hash-Wertes umfasst, durch den Prozessor eine erste Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen auszuführen, wobei jede Hash-Evaluator-Instruktion der ersten Gruppe einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen des Atomic-Code-Pfades entspricht; das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, umfasst, durch den Prozessor eine Vergleichs-Evaluator-Instruktion auszuführen; das Generieren des zweiten erwarteten Hash-Wertes umfasst, durch den Prozessor eine zweite Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen auszuführen, wobei jede Hash-Evaluator-Instruktion der zweiten Gruppe einer Marker-Instruktion des zweiten Satzes aus einer oder mehreren Marker-Instruktionen des zweiten Atomic-Code-Pfades entspricht; das Bestimmen, ob der Pfad-Hash mit dem zweiten erwarteten Hash übereinstimmt, umfasst, durch den Prozessor eine zweite Vergleichs-Evaluator-Instruktion auszuführen; und das Generieren der Codeflussintegritätsausnahme umfasst, durch den Prozessor eine Hash-Überprüfungsinstruktion auszuführen.
  13. Computervorrichtung nach einem der Ansprüche 8-11, die des Weiteren Folgendes umfasst: einen Prozessor; und einen Zustandsmanager zum (i) Speichern eines vorherigen Pfad-Hashs an einem sicheren Speicherort der Computervorrichtung, und (ii) Wiederherstellen des vorherigen Pfad-Hashs aus dem sicheren Speicherort in Reaktion auf eine Bestimmung, dass der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; wobei das Ausführen des Atomic-Code-Pfades umfasst, den Atomic-Code-Pfad in Reaktion auf das Speichern des vorherigen Pfad-Hashs auszuführen; wobei das Speichern des vorherigen Pfad-Hashs umfasst, durch den Prozessor eine Push-Instruktion auszuführen, um den vorherigen Pfad-Hash in einem sicheren Stapel zu speichern; und wobei das Wiederherstellen des vorherigen Pfad-Hashs umfasst, durch den Prozessor eine Pop-Instruktion auszuführen, um den vorherigen Pfad-Hash aus dem sicheren Stapel abzurufen.
  14. Computervorrichtung nach Anspruch 13, wobei der sichere Speicherort eine verschlüsselte Speicherseite oder eine sichere Registerdatei eines Prozessors der Computervorrichtung umfasst.
  15. Computervorrichtung nach einem der Ansprüche 8-11, die des Weiteren Folgendes umfasst: einen Speichermanager zum (i) Generieren eines Schlüsseldomänenselektors als eine Funktion des Pfad-Hashs in Reaktion auf das Aktualisieren des Pfad-Hashs, und (ii) Ausführen eines verschlüsselten Speicherzugriffs mit dem Schlüsseldomänenselektor.
  16. Verfahren für einen Steuerungsflussintegritätsschutz, wobei das Verfahren Folgendes umfasst: Identifizieren, durch eine Computervorrichtung, eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt und einen Austrittspunkt umfasst; Identifizieren, durch die Computervorrichtung, eines potenziellen Gadgets in dem Atomic-Code-Pfad; Einfügen, durch die Computervorrichtung, einer ersten Marker-Instruktion in den Atomic-Code-Pfad in der Nähe des potenziellen Gadgets mit einem Parameter, der einer Adresse der ersten Marker-Instruktion entspricht, wobei die erste Marker-Instruktion, wenn sie ausgeführt wird, einen Prozessor einer Ziel-Computervorrichtung veranlasst, einen Pfad-Hash der Ziel-Computervorrichtung als eine Funktion der Adresse der ersten Marker-Instruktion zu aktualisieren; und Einfügen, durch die Computervorrichtung, einer oder mehrerer Steuerungsflussintegritätsevaluierungsinstruktionen in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades, wobei die Steuerungsflussintegritätsevaluierungsinstruktionen, wenn sie ausgeführt werden, den Prozessor der Ziel-Computervorrichtung veranlassen, den Pfad-Hash mit einem erwarteten Hash-Wert zu vergleichen.
  17. Verfahren nach Anspruch 16, wobei das Einfügen der einen oder der mehreren Steuerungsflussintegritätsevaluierungsinstruktionen umfasst: Einfügen einer ersten Hash-Evaluator-Instruktion in den geschützten Code nach dem Austrittspunkt des Atomic-Code-Pfades mit einem Parameter, der der Adresse der ersten Marker-Instruktion entspricht; Einfügen einer ersten Vergleichs-Evaluator-Instruktion in den geschützten Code nach der ersten Hash-Evaluator-Instruktion; und Einfügen einer Hash-Überprüfungsinstruktion in den geschützten Code nach der ersten Vergleichs-Evaluator-Instruktion.
  18. Verfahren für einen Steuerungsflussintegritätsschutz, wobei das Verfahren Folgendes umfasst: Ausführen, durch eine Computervorrichtung, eines Atomic-Code-Pfades eines geschützten Codes, wobei der Atomic-Code-Pfad einen Eintrittspunkt, einen Austrittspunkt und eine oder mehrere Marker-Instruktionen umfasst; Aktualisieren, durch die Computervorrichtung, eines Pfad-Hashs als eine Funktion einer Adresse einer ersten Marker-Instruktion der einen oder der mehreren Marker-Instruktionen in Reaktion auf das Ausführen des Atomic-Code-Pfades; Erreichen, durch die Computervorrichtung, des Austrittspunktes des Atomic-Code-Pfades in Reaktion auf das Ausführen des Atomic-Code-Pfades; Generieren, durch die Computervorrichtung, eines erwarteten Hash-Wertes als eine Funktion einer oder mehrerer Adressen in Reaktion auf das Erreichen des Austrittspunktes, wobei jede der einen oder der mehreren Adressen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht; Bestimmen, durch die Computervorrichtung, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt; und Generieren, durch die Computervorrichtung, einer Codeflussintegritätsausnahme in Reaktion auf das Bestimmen, dass der Pfad-Hash nicht mit dem erwarteten Hash-Wert übereinstimmt.
  19. Verfahren nach Anspruch 18, wobei: das Aktualisieren des Pfad-Hashs das Ausführen, durch einen Prozessor der Computervorrichtung, der ersten Marker-Instruktion des Atomic-Code-Pfades mit einem Parameter umfasst, der der Adresse der ersten Marker-Instruktion entspricht; das Generieren des erwarteten Hash-Wertes das Ausführen, durch den Prozessor, einer Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen umfasst, wobei jede Hash-Evaluator-Instruktion der Gruppe aus einer oder mehreren Hash-Evaluator-Instruktionen einer Marker-Instruktion der einen oder den mehreren Marker-Instruktionen entspricht; das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, das Ausführen, durch den Prozessor, einer Vergleichs-Evaluator-Instruktion umfasst; und das Generieren der Codeflussintegritätsausnahme in Reaktion auf das Bestimmen, dass der Pfad-Hash nicht mit dem erwarteten Hash übereinstimmt, das Ausführen, durch den Prozessor, einer Hash-Überprüfungsinstruktion umfasst.
  20. Verfahren nach Anspruch 18, wobei: das Aktualisieren des Pfad-Hashs das Speichern des Pfad-Hashs in einem Pfad-Hash-Register der Computervorrichtung umfasst; das Generieren des erwarteten Hash-Wertes das Speichern des erwarteten Hash-Wertes in einem Evaluator-Hash-Register der Computervorrichtung umfasst; und das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, das Vergleichen des Pfad-Hash-Registers und des Evaluator-Hash-Registers umfasst.
  21. Verfahren nach Anspruch 18, wobei das Bestimmen, ob der Pfad-Hash mit dem erwarteten Hash-Wert übereinstimmt, das Setzen eines Integritätsprüfbits der Computervorrichtung in Reaktion auf das Bestimmen umfasst, dass der Pfad-Hash mit dem erwarteten Hash übereinstimmt.
  22. Verfahren nach Anspruch 18, das des Weiteren Folgendes umfasst: Generieren, durch die Computervorrichtung, eines Schlüsseldomänenselektors als eine Funktion des Pfad-Hashs in Reaktion auf das Aktualisieren des Pfad-Hashs; und Ausführen, durch die Computervorrichtung, eines verschlüsselten Speicherzugriffs unter Verwendung des Schlüsseldomänenselektors.
  23. Computervorrichtung, die Folgendes umfasst: einen Prozessor; und einen Speicher, in dem mehrere Instruktionen gespeichert sind, die, wenn sie durch den Prozessor ausgeführt werden, die Computervorrichtung veranlassen, das Verfahren nach einem der Ansprüche 16-22 auszuführen.
  24. Ein oder mehrere maschinenlesbare Speichermedien, auf denen mehrere Instruktionen gespeichert sind, die, wenn sie ausgeführt werden, dazu führen, dass eine Computervorrichtung das Verfahren nach einem der Ansprüche 16-22 ausführt.
  25. Computervorrichtung, die ein Mittel umfasst, um das Verfahren nach einem der Ansprüche 16-22 auszuführen.
DE112017004843.5T 2016-09-27 2017-08-17 Technologien für deterministischen Codeflussintegritätsschutz Pending DE112017004843T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/276,895 US10223528B2 (en) 2016-09-27 2016-09-27 Technologies for deterministic code flow integrity protection
US15/276,895 2016-09-27
PCT/US2017/047363 WO2018063562A1 (en) 2016-09-27 2017-08-17 Technologies for deterministic code flow integrity protection

Publications (1)

Publication Number Publication Date
DE112017004843T5 true DE112017004843T5 (de) 2019-06-27

Family

ID=61687292

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112017004843.5T Pending DE112017004843T5 (de) 2016-09-27 2017-08-17 Technologien für deterministischen Codeflussintegritätsschutz

Country Status (4)

Country Link
US (1) US10223528B2 (de)
CN (1) CN109643345B (de)
DE (1) DE112017004843T5 (de)
WO (1) WO2018063562A1 (de)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2539958B (en) * 2015-07-03 2019-09-25 Advanced Risc Mach Ltd Data processing systems
US10489272B2 (en) * 2017-01-11 2019-11-26 The Bank Of New York Mellon Automatic instrumentation of code
US20190140851A1 (en) * 2017-11-09 2019-05-09 iMQ Technology Inc. Secure logic system with physically unclonable function
JP6460433B1 (ja) * 2018-08-15 2019-01-30 株式会社Attc 変換装置、変換プログラム、プログラム変換方法
EP3674939A1 (de) 2018-12-31 2020-07-01 SafeNet, Inc. Verfahren, system und vorrichtung zur verwaltung einer ausführung eines programms im teilweisen oder kompletten zusammenhang mit einer ersten anwendung
US11516234B1 (en) * 2019-07-08 2022-11-29 Cisco Technology, Inc. In-process correlation through class field injection
CN112668004B (zh) * 2019-10-16 2022-06-21 武汉斗鱼网络科技有限公司 一种基于llvm的函数校验方法及相关装置
CN111611507A (zh) * 2020-05-27 2020-09-01 掌阅科技股份有限公司 基于模块化的应用内页面跳转方法及计算设备
CN111898120B (zh) * 2020-06-29 2023-10-10 中国科学院信息工程研究所 控制流完整性保护方法及装置
CN116324774A (zh) * 2020-09-30 2023-06-23 谷歌有限责任公司 确定具有控制流的函数中的期望散列值
US20220191020A1 (en) * 2020-12-16 2022-06-16 International Business Machines Corporation Hardware support for software pointer authentification in a computing system
US12008149B2 (en) * 2020-12-16 2024-06-11 International Business Machines Corporation Method and system for on demand control of hardware support for software pointer authentification in a computing system
US11720674B2 (en) * 2021-01-28 2023-08-08 Northrop Grumman Systems Corporation Systems and methods for malware detection
US11361400B1 (en) 2021-05-06 2022-06-14 Arm Limited Full tile primitives in tile-based graphics processing
US11698969B1 (en) * 2021-06-25 2023-07-11 Amazon Technologies, Inc. Boot security of integrated circuit device
US20230305992A1 (en) * 2022-03-25 2023-09-28 Nokia Solutions And Networks Oy Processor using target instructions

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2298990A1 (en) * 2000-02-18 2001-08-18 Cloakware Corporation Method and system for resistance to power analysis
US20060047955A1 (en) 2004-08-30 2006-03-02 Axalto Inc. Application code integrity check during virtual machine runtime
US8079019B2 (en) 2007-11-21 2011-12-13 Replay Solutions, Inc. Advancing and rewinding a replayed program execution
EP1870829B1 (de) * 2006-06-23 2014-12-03 Microsoft Corporation Softwareschutz durch Erzwingen der Datenflussintegrität
US20090113111A1 (en) 2007-10-30 2009-04-30 Vmware, Inc. Secure identification of execution contexts
US8117660B2 (en) 2008-06-19 2012-02-14 Microsoft Corporation Secure control flows by monitoring control transfers
WO2010100598A1 (en) * 2009-03-02 2010-09-10 Nxp B.V. Software protection
US20100251221A1 (en) * 2009-03-24 2010-09-30 Microsoft Corporation Combination may-must code analysis
US9846789B2 (en) * 2011-09-06 2017-12-19 International Business Machines Corporation Protecting application programs from malicious software or malware
US8904189B1 (en) * 2010-07-15 2014-12-02 The Research Foundation For The State University Of New York System and method for validating program execution at run-time using control flow signatures
CA2777434C (en) * 2012-05-18 2019-09-10 Ibm Canada Limited - Ibm Canada Limitee Verifying application security vulnerabilities
US9063721B2 (en) * 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9158922B2 (en) * 2013-05-29 2015-10-13 Lucent Sky Corporation Method, system, and computer-readable medium for automatically mitigating vulnerabilities in source code
US9390260B2 (en) 2014-06-09 2016-07-12 Lehigh University Methods for enforcing control flow of a computer program
CN105790931B (zh) * 2014-12-26 2019-05-24 ***通信集团公司 一种密钥分发方法、网络设备、终端设备及***
US10229273B2 (en) * 2015-02-25 2019-03-12 Veracode, Inc. Identifying components for static analysis of software applications
EP3440817B1 (de) * 2016-04-06 2022-06-22 Karamba Security Automatisierte sicherheitsrichtlinienerzeugung für steuergeräte

Also Published As

Publication number Publication date
US10223528B2 (en) 2019-03-05
CN109643345A (zh) 2019-04-16
CN109643345B (zh) 2023-07-25
US20180089422A1 (en) 2018-03-29
WO2018063562A1 (en) 2018-04-05

Similar Documents

Publication Publication Date Title
DE112017004843T5 (de) Technologien für deterministischen Codeflussintegritätsschutz
DE602004005025T2 (de) Instruktionen zur verarbeitung einer verschlusselten nachricht
US8589897B2 (en) System and method for branch extraction obfuscation
US9195476B2 (en) System and method for aggressive self-modification in dynamic function call systems
DE102009013384B4 (de) System und Verfahren zur Bereitstellung einer sicheren Anwendungsfragmentierungsumgebung
DE102009041176B4 (de) Compiler-System und Verfahren zum Kompilieren eines Quellencodes zu einem verschlüsselten Maschinensprachcode
DE102012215196A1 (de) Schützen von Anwendungsprogrammen vor zerstörerischer Software oder Malware
JP7154365B2 (ja) ソフトウェアコードをセキュアにするための方法
US20150310193A1 (en) Control flow flattening for code obfuscation where the next block calculation needs run-time information
Block et al. Linux memory forensics: Dissecting the user space process heap
DE112017004962T5 (de) Steuerflussintegrität
DE102010054614A1 (de) Eindringen in eine gesicherte EDV-Umgebung unter Verwendung mehrerer authentifizierter Codemodule
DE602004004079T2 (de) Befehl zur berechnung eines sicherheits-nachricht-authentifizierungskodes
DE202016007893U1 (de) Systeme zum Entfernen von PLT-Stubs aus dynamisch verknüpften Binärdateien
DE102019119831A1 (de) Verschlüsselungsschaltung zum Durchführen von virtuellen Verschlüsselungsoperationen
US10409572B2 (en) Compiled file normalization
DE112020004190T5 (de) Verbessern der sicheren programmierung im hauptspeicher unter verwendung eines seitenrahmen-kennzeichenmechanismus
DE102014214792A1 (de) Vorrichtung und Verfahren zum Zugreifen auf einen verschlüsselten Speicherabschnitt
DE102015113468A1 (de) Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe
DE102021130906A1 (de) Optimieren von zugriffen auf begrenzungsinformationen beim pufferschutz
EP2937803B1 (de) Steuerflussglättung zur codeverschleierung, wo die nächste blockberechnung laufzeitinformationen benötigt
DE202016008006U1 (de) Generierung von Integrationstests im Kleinen
US11256786B2 (en) Method to secure a software code
Mühlberg et al. Learning assertions to verify linked-list programs
DE102005046696A1 (de) Verfahren zum Erzeugen von geschütztem Programmcode und Verfahren zum Ausführen von Programmcode eines geschützten Computerprogramms sowie Computerprogrammprodukt

Legal Events

Date Code Title Description
R083 Amendment of/additions to inventor(s)