DE102015113468A1 - Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe - Google Patents

Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe Download PDF

Info

Publication number
DE102015113468A1
DE102015113468A1 DE102015113468.3A DE102015113468A DE102015113468A1 DE 102015113468 A1 DE102015113468 A1 DE 102015113468A1 DE 102015113468 A DE102015113468 A DE 102015113468A DE 102015113468 A1 DE102015113468 A1 DE 102015113468A1
Authority
DE
Germany
Prior art keywords
data processing
return address
instruction
computer program
subroutine
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE102015113468.3A
Other languages
English (en)
Inventor
Benedikt DRIESSEN
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.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
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 Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102015113468.3A priority Critical patent/DE102015113468A1/de
Priority to US15/234,018 priority patent/US20170046280A1/en
Publication of DE102015113468A1 publication Critical patent/DE102015113468A1/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/402Encrypted data

Abstract

Gemäß einem Ausführungsbeispiel wird eine Datenverarbeitungsvorrichtung beschrieben aufweisend einen Instruktionsspeicher, der ein Computerprogramm speichert, eine Verarbeitungseinheit, die das Computerprogramm ausführt, eine Verschlüsselungseinrichtung, die eingerichtet ist, bei Aufruf eines Unterprogramms eine Rücksprungadresse zu verschlüsseln und die verschlüsselte Rücksprungadresse auf einem Aufrufstapel abzulegen und eine Entschlüsselungseinrichtung, die nach der Ausführung des Unterprogramms die verschlüsselte Rücksprungadresse von dem Aufrufstapel liest, entschlüsselt und einen Programmzähler basierend auf der entschlüsselten Rücksprungadresse einstellt.

Description

  • Ausführungsbeispiele betreffen allgemein Datenverarbeitungsvorrichtungen und Verfahren zum Sichern eines Computerprogramms gegen Angriffe.
  • Datenverarbeitungsvorrichtungen, die sicherheitsrelevante Daten speichern oder verarbeiten, wie beispielsweise Chipkarten, müssen gegen Angriffe geschützt werden. Ein solcher Angriff ist das Überschreiben einer Rücksprungadresse bei der Ausführung eines Computerprogramms durch einen Angreifer, der dadurch in den Programmfluss eingreifen kann. Effiziente Mechanismen zum Sichern einer Datenverarbeitungsvorrichtung gegen solche Angriffe sind wünschenswert.
  • Gemäß einer Ausführungsform wird eine Datenverarbeitungsvorrichtung bereitgestellt aufweisend einen Instruktionsspeicher, der eingerichtet ist, ein Computerprogramm zu speichern;, eine Verarbeitungseinheit, die eingerichtet ist, das Computerprogramm auszuführen, einen Programmzähler, der eingerichtet ist, einen als nächstes auszuführenden Befehl des Computerprogramms im Instruktionsspeicher anzugeben, einen Aufrufstapel, eine Verschlüsselungseinrichtung, die eingerichtet ist, bei Aufruf eines Unterprogramms in dem Computerprogramm eine Rücksprungadresse, die einen Befehl des Computerprogramms im Instruktionsspeicher angibt, mit dem nach der Ausführung des Unterprogramms fortgefahren werden soll, zu verschlüsseln und die verschlüsselte Rücksprungadresse auf dem Aufrufstapel abzulegen und eine Entschlüsselungseinrichtung, die eingerichtet ist, nach der Ausführung des Unterprogramms die verschlüsselte Rücksprungadresse von dem Aufrufstapel zu lesen, zu entschlüsseln und den Programmzähler basierend auf der entschlüsselten Rücksprungadresse einzustellen.
  • Die Figuren geben nicht die tatsächlichen Größenverhältnisse wieder sondern sollen dazu dienen, die Prinzipien der verschiedenen Ausführungsbeispiele zu illustrieren. Im Folgenden werden verschiedene Ausführungsbeispiele mit Bezug auf die folgenden Figuren beschrieben.
  • 1 zeigt bei einem Unterprogrammaufruf beteiligte Komponenten einer Datenverarbeitungsvorrichtung.
  • 2 zeigt einen Aufrufstapel.
  • 3 zeigt eine Datenverarbeitungsvorrichtung gemäß einer Ausführungsform.
  • 4 zeigt ein Ablaufdiagramm, das ein Verfahren zum Sichern eines Computerprogramms gegen Angriffe gemäß einer Ausführungsform veranschaulicht.
  • 5 zeigt die an einer Verschlüsselung einer Rücksprungadresse beteiligten Komponenten einer Datenverarbeitungsvorrichtung.
  • Die folgende detaillierte Beschreibung bezieht sich auf die beiliegenden Figuren, die Details und Ausführungsbeispiele zeigen. Diese Ausführungsbeispiele sind so detailliert beschrieben, dass der Fachmann die Erfindung ausführen kann. Andere Ausführungsformen sind auch möglich und die Ausführungsbeispiele können in struktureller, logischer und elektrischer Hinsicht geändert werden, ohne vom Gegenstand der Erfindung abzuweichen. Die verschiedenen Ausführungsbeispiele schließen sich nicht notwendig gegenseitig aus sondern es können verschiedene Ausführungsformen miteinander kombiniert werden, so dass neue Ausführungsformen entstehen. Im Rahmen dieser Beschreibung werden die Begriffe "verbunden", "angeschlossen" sowie "gekoppelt" verwendet zum Beschreiben sowohl einer direkten als auch einer indirekten Verbindung, eines direkten oder indirekten Anschlusses sowie einer direkten oder indirekten Kopplung.
  • Das Aufrufen einer Subroutine (oder Unterprogramms) in einem Programm passiert üblicherweise durch eine CALL-Instruktion. Dabei wird die Folgeadresse (Adresse der Instruktion nach dem CALL, d.h. nach der Ausführung der Subroutine, im Instruktionsspeicher) als Rücksprungadresse auf einem Stapelspeicher (auch als Aufrufstapel oder Stack bezeichnet) gesichert (ggf. mit weiteren Registerwerten). Wenn die Subroutine abgearbeitet wurde, endet sie mit einer RETURN-Anweisung, die die Rücksprungadresse vom Stack liest und zu dieser Adresse im Instruktionsspeicher (Befehlsspeicher) springt. Dies wird im Folgenden mit Bezug auf 1 genauer erläutert.
  • 1 zeigt bei einem Unterprogrammaufruf beteiligte Komponenten einer Datenverarbeitungsvorrichtung 100, z.B. eines Chipkartenmoduls, das auf einer Chipkarte (z.B. einer Smartcard) angeordnet ist.
  • Die Datenverarbeitungsvorrichtung 100 weist eine Verarbeitungseinrichtung in der Form einer ALU (Arithmetic Logic Unit) 101 auf, die ein Computerprogramm, das in einem Instruktionsspeicher 102, in diesem Beispiel Teil des Arbeitsspeichers 103 (z.B. als RAM (Random Access Memory) ausgestaltet) gespeichert ist.
  • Ein Befehlszähler 104 (auch als Program Counter bezeichnet) speichert dazu die Adresse der nächsten auszuführenden Instruktion im Instruktionsspeicher, d.h. zeigt auf die nächste auszuführende Instruktion. Diese Instruktion wird einem Instruktionsdekodierer 105 zugeführt, der die Instruktion in eine für die ALU 101 interpretierbare Form bringt und führt sie der ALU 101 zu. Nach dem Auslesen einer Instruktion wird der Befehlszähler entsprechend erhöht, um auf die nächste Instruktion zu zeigen.
  • Ist die Instruktion nun eine CALL-Instruktion, d.h. der Aufruf eines Unterprogramms, so wird die Adresse des auf die CALL-Instruktion folgenden Befehls (d.h. die Rücksprung-Adresse oder Return-Adresse) in einem Aufrufstapel 107, in diesem Beispiel ebenfalls im Arbeitsspeicher 103 implementiert, geschrieben und es wird statt dessen die Unterprogrammadresse des Unterprogramms (die beispielsweise die ALU 101 ermittelt) im Instruktionsspeicher in den Befehlszähler 104 geschrieben, damit der Programmfluss mit dem Unterprogramm fortfährt.
  • Wenn das Unterprogramm schließlich endet (mit einer Return-Instruktion), so wird die Rücksprungadresse vom Stack gelesen, vom Stack gelöscht und in den Befehlszähler geschrieben, so dass der Programmfluss mit der auf die CALL-Instruktion folgenden Befehl fortfährt.
  • Das Speichern und Laden der Adressen wird beispielspeise von einer entsprechenden Steuerung (z.B. dem Steuerwerk der CPU, die auch die ALU enthält) vorgenommen.
  • 2 zeigt einen Aufrufstapel 200 in größerem Detail.
  • Der Aufrufstapel (Stack) 200 wächst typischerweise nach oben, d.h. Werte werden auf seinem oberen Ende abgelegt (Push-Operation) und von seinem oberen Ende gelesen (Pop-Operation). In diesem Beispiel enthält der Stack 200 ganz oben eine Rücksprungadresse 201. Zusätzlich zu der Rücksprungadresse 201 können weitere Parameter (z.B. Registerinhalte) 202, die nach der Rückkehr von dem Unterprogramm verwendet werden sollen, auf dem Stapel 200 abgelegt sein. Da der Aufruf von Unterprogrammen geschachtelt werden kann, können neben der Rücksprungadresse 201 und den Parametern 202 für den aktuellen Unterprogrammaufruf 203 analog Rücksprungadressen und Parameter für frühere Unterprogrammaufrufe 204 gespeichert sein, d.h. für Unterprogramme, die noch nicht beendet sind.
  • Bei Beendigung des aktuellen Unterprogramms wird die Rücksprungadresse 201 vom Stack 200 gelesen und in den Befehlszähler 104 geschrieben, die weiteren Parameter 202 werden vom Stack gelesen und entsprechend gespeichert, beispielsweise in entsprechenden weiteren Registern der CPU, die die ALU und den Befehlszähler 104 enthält, und die Rücksprungadresse 201 und die weiteren Parameter 202 werden vom Stack 200 gelöscht.
  • In einem ungestörten Ablauf wird damit der Programmablauf mit der auf die CALL-Instruktion folgende Instruktion im Befehlsspeicher 102 fortgesetzt.
  • Allerdings existieren Angriffe, die Programmierfehler in dem Computerprogramm ausnutzen können, indem sie mittels Pufferüberlauf-Angriffen auf Subroutinen zu klein allokierte Puffer im Arbeitsspeicher ausnutzen, um Teile des Stacks 107 zu überschreiben, mit dem Ziel, die dort liegende Rücksprungadresse 201 zu überschreiben. Kann ein Angreifer die Rücksprungadresse 201 zuverlässig mit einer Adresse überschreiben, die der Angreifer kontrolliert, so kann er damit den Programmablauf in seinem Sinne manipulieren, sobald die nächste RETURN Anweisung ausgeführt wird.
  • Dieser Art von Angriff wird durch Hardware-basierten Schutzmechanismen, die sich nur gegen Hardware-Angriffe (Laser, Aufsetzen von Nadeln, etc.) richten, nicht abgewehrt.
  • Ansätze, um einen solchen Angriff auf ein Computerprogramm, das von einer Datenverarbeitungsvorrichtung (z.B. einer Chipkarte) ausgeführt wird, abzuwehren, basieren typischerweise auf manuellen oder teil-automatisierten Überprüfungen des Quellcodes des Computerprogramms und/oder weiteren Software-Lösungen, entweder im Compiler, der für das Computerprogramm verwendet wird, oder in der Ausführungsumgebung (Laufzeitbibliotheken oder Betriebssystem) des zu schützenden Computerprogramms.
  • Modifikationen im Compiler sind jedoch nicht immer möglich (z.B. wenn der Compiler zugeliefert wird) und wenn, dann typischerweise mit der Folge, dass der generierte Code des Computerprogramms in der Größe wächst, was gerade im Umfeld von Smartcards typischerweise nicht wünschenswert ist. Ein Beispiel hierfür sind „Canaries“, d.h., dass ein Zufallswert, oberhalb der Rücksprungadresse 201 auf dem Stack 200 abgelegt wird und bei einer RETURN-Instruktion auf Integrität geprüft wird.
  • Eine weitere Möglichkeit, solche Angriffe abzuwehren, ist ein Audit des Quellcodes des zu schützenden Computerprogramms. Jedoch kann dabei zum einen Fehlerfreiheit nicht garantiert werden und zum anderen benötigt ein Audit spezifisches Fachwissen und Zeit.
  • Modifikationen der Laufzeitumgebung kosten in der Regel ebenfalls Performanz oder Speicher. Im Fall des Schutzes eines Computerprogramms, das von einem PC ausgeführt wird, kann dies oft vernachlässigt werden aber bei einem auf einer Smartcard (oder allgemein eingebetteten Kontrollern) ist dies typischerweise nicht wünschenswert.
  • Ansätze, die im Prozessor (d.h. der CPU) selbst eingesetzt werden, setzen typischerweise vor allem darauf, Regionen auf dem Stack 107 als nicht-ausführbar zu markieren. Damit lassen sich zwar Angriffe älterer Generationen abfangen (bei denen Angriffscode direkt als Teil des überschriebenen Speicherbereichs mitgeliefert und angesprungen wird), neuere Techniken wie das „Return-Oriented Programming“ (ROP) werden von solchen Lösungen allerdings nicht behindert. Beim ROP springt der Angreifer Teile von existierenden Routinen auf dem System an, die per Definition ausführbar sind.
  • Gemäß einer Ausführungsform wird ein Ansatz bereitgestellt, der auf der Verschlüsselung einer Rücksprungadresse basiert und im Folgenden mit Bezug auf 3 genauer erläutert wird.
  • 3 zeigt eine Datenverarbeitungsvorrichtung 300 gemäß einer Ausführungsform.
  • Die Datenverarbeitungsvorrichtung 300 weist einen Instruktionsspeicher 301, der eingerichtet ist, ein Computerprogramm zu speichern, und eine Verarbeitungseinheit 302 auf, die eingerichtet ist, das Computerprogramm auszuführen.
  • Die Datenverarbeitungsvorrichtung 300 weist ferner einen Programmzähler 303 auf, der eingerichtet ist, einen als nächstes auszuführenden Befehl des Computerprogramms im Instruktionsspeicher anzugeben.
  • Außerdem weist die Datenverarbeitungsvorrichtung 300 einen Aufrufstapel 304 und eine Verschlüsselungseinrichtung 305 auf, die eingerichtet ist, bei Aufruf eines Unterprogramms in dem Computerprogramm eine Rücksprungadresse, die einen Befehl des Computerprogramms im Instruktionsspeicher 301 angibt, mit dem nach der Ausführung des Unterprogramms fortgefahren werden soll, zu verschlüsseln und die verschlüsselte Rücksprungadresse auf dem Aufrufstapel 304 abzulegen.
  • Die Datenverarbeitungsvorrichtung 300 weist ferner eine Entschlüsselungseinrichtung 306 auf, die eingerichtet ist, nach der Ausführung des Unterprogramms die verschlüsselte Rücksprungadresse von dem Aufrufstapel 304 zu lesen, zu entschlüsseln und den Programmzähler 303 basierend auf der entschlüsselten Rücksprungadresse einzustellen.
  • In anderen Worten wird eine Rücksprungadresse für ein Unterprogramm, bevor sie auf dem Aufrufstapel (Stack) abgelegt wird, verschlüsselt (beispielsweise mit einer Blockchiffre mit einem zufälligen Sitzungsschlüssel). Dies erfolgt beispielsweise bei der Ausführung einer CALL Instruktion für das Unterprogramm. Wenn eine entsprechende RETURN-Anweisung ausgeführt wird, wird der auf dem Stack gespeicherte Wert (für den die verschlüsselte Rücksprungadresse erwartet wird) entschlüsselt und angesprungen. Für die Verschlüsselung wird beispielsweise bei jedem Start des Systems, das die Datenverarbeitungsvorrichtung 300 enthält, ein neuer Schlüssel verwendet.
  • Beispielsweise wird ein Mikrocontroller, z.B. ein 32-Bit Controller (z.B. mit einer wie in 1 dargestellten Architektur) durch drei Komponenten erweitert:
    • 1. Ein Zufallszahlengenerator (Random Number Generator (RNG)) wird für die Generierung von Schlüsseln beim Systemstart vorgesehen.
    • 2. Eine Blockchiffre mit einer Blockbreite von z.B. 32-bit wird implementiert. Diese wird idealerweise derart implementiert, dass sie die Verschlüsselung der Rücksprungadresse in einem Takt vornehmen kann. Ansonsten wird die Ausführungszeit von CALL-Anweisungen und RETURN-Anweisungen um die entsprechende Ausführungszeit der Blockchiffre für die Verschlüsselung bzw. Entschlüsselung erhöht.
    • 3. Der Instruktionsdekodierer (und ggf. die Kontrolllogik, z.B. das Steuerwerk) des Zielkontrollers wird angepasst, so dass die Abarbeitung von CALL-Instruktionen und RETURN-Instruktionen mit der Verschlüsselung bzw. Entschlüsselung durch die Blockchiffre verbunden wird und ggf. das Timing der verschiedenen Operationen angepasst wird (z.B. wenn sich die Ausführungszeit von CALL-Anweisungen und RETURN-Anweisungen durch die Blockchiffre erhöht).
  • Die Erweiterung kann alleine in Hardware und für den Nutzer der Datenverarbeitungsvorrichtung transparent umgesetzt werden. Beispielsweise kann ein Kontroller (wie z.B. ein SC300) mit geringem Aufwand (z.B. 3000 bis 5000 Gatteräquivalenten) erweitert werden.
  • Die mit Bezug auf 3 beschriebene Vorgehensweise ermöglicht die Abwehr von Pufferüberlauf-Angriffen auf den Stack dadurch, dass sie die Vorhersagbarkeit einer Pufferüberlauf-Attacke drastisch reduziert. Zwar kann ein Angreifer existierende Pufferüberläufe weiterhin nutzen, um den Stack zu überschreiben, jedoch wird jede Adresse, die er statt der eigentlichen, verschlüsselten Adresse auf den Stack schreibt durch die Blockchiffre auf einen Wert abgebildet, der aus Sicht eines Angreifers, der nicht im Besitz des Schlüssels für die Verschlüsselung ist, ein Zufallswert wert. Dieser Zufallswert wird bei der Ausführung des Computerprogramms angesprungen und führt zu einem von dem Angreifer nicht vorhersagbaren Ergebnis. Auf einer so geschützten Verarbeitungsvorrichtung (z.B. einem Mikrokontroller oder Chipkartenmodul) verlieren Pufferüberlauf-Angriffe an Wert, da ein Angreifer sie nur noch für Denial-Of-Service-Angriffe nutzen kann.
  • Die Verwendung einer Verschlüsselung ermöglicht es, einen Angriff auf ein fehlerhaftes Computerprogramm abzuwehren, bei denen Werte vom Stack gelesen werden können (z.B. über Formatstring-Fehler). Wird bei einem solchen Angriff z.B. nur ein XOR-Kombination der Rücksprungadresse (statt einer Verschlüsselung) mit einem Sitzungsschüssel eingesetzt, so kann der Angreifer den Sitzungsschlüssel aus dem vom Stack gelesenen Wert bestimmen (indem er auch die Rücksprungadresse aus dem Programmablauf ermittelt) und damit dann den korrekten Wert der Adresse, die er auf dem Stack ablegen möchte, berechnen. In anderen Worten wird gemäß einer Ausführungsform unter einer Verschlüsselung ein sicheres Verfahren in dem Sinne verstanden, das aus einem verschlüsselten Wert zusammen mit dem unverschlüsselten Wert nicht (zumindest nicht ohne zu hohen Aufwand) der Schlüssel ermittelt werden kann (anders als bei einer einfachen XOR-Kombination). Beispielsweise ist die Verschlüsselung eine kryptographisch starke Verschlüsselung.
  • Die Komponenten der Datenverarbeitungsvorrichtung (z.B. die Verarbeitungseinheit, die Verschlüsselungseinrichtung und die Entschlüsselungseinrichtung) können durch ein oder mehrere Schaltkreise realisiert sein. In einer Ausführungsform ist ein "Schaltkreis" als jegliche Einheit zu verstehen, die eine Logik implementiert, und die sowohl Hardware, Software, Firmware oder eine Kombination daraus sein kann. Somit kann ein "Schaltkreis" in einer Ausführungsform ein hart-verdrahteter Logik-Schaltkreis oder ein programmierbarer Logik-Schaltkreis sein, wie beispielsweise ein programmierbarer Prozessor, z.B. ein Mikroprozessor. Unter einem "Schaltkreis" kann auch ein Prozessor zu verstehen sein, der Software ausführt, zu verstehen sein. Unter einem "Schaltkreis" kann in einer Ausführungsform jegliche Art der Implementierung der im Weiteren beschriebenen Funktionen zu verstehen sein.
  • Die Datenverarbeitungsvorrichtung führ beispielsweise ein Verfahren aus, wie es in 4 dargestellt ist.
  • 4 zeigt ein Ablaufdiagramm 400, das ein Verfahren zum Sichern einer Datenverarbeitungsvorrichtung gegen Angriffe veranschaulicht.
  • In 401 führt eine Datenverarbeitungsvorrichtung ein Computerprogramm aus einem Instruktionsspeicher aus.
  • In 402 wird bei Aufruf eines Unterprogramms in dem Computerprogramm, eine Rücksprungadresse, die einen Befehl des Computerprogramms im Instruktionsspeicher angibt, mit dem nach der Ausführung des Unterprogramms fortgefahren werden soll, verschlüsselt.
  • In 403, wird die verschlüsselte Rücksprungadresse auf einem Aufrufstapel abgelegt.
  • In 404, nach der Ausführung des Unterprogramms, wird die verschlüsselte Rücksprungadresse vom Aufrufstapel gelesen.
  • In 405 wird die verschlüsselte (vom Stapel gelesene) Rücksprungadresse entschlüsselt.
  • In 406 wird ein Programmzählers der Datenverarbeitungsvorrichtung, der einen als nächstes auszuführenden Befehl des Computerprogramms im Instruktionsspeicher angibt, basierend auf der entschlüsselten Rücksprungadresse eingestellt (z.B. die entschlüsselten Rücksprungadresse hineingeschrieben).
  • Im Folgenden werden verschiedene Ausführungsformen angegeben.
  • Ausführungsform 1 ist eine Datenverarbeitungsvorrichtung, wie sie in 3 dargestellt ist.
  • Ausführungsform 2 ist eine Datenverarbeitungsvorrichtung gemäß Ausführungsform 1, wobei die Verschlüsselungseinrichtung eingerichtet ist, die Rücksprungadresse mittels einer Blockverschlüsselung zu verschlüsseln und die Entschlüsselungseinrichtung eingerichtet ist, die verschlüsselte Rücksprungadresse gemäß der Blockverschlüsselung zu entschlüsseln.
  • Ausführungsform 3 ist eine Datenverarbeitungsvorrichtung gemäß Ausführungsform 1 oder 2, wobei die Verarbeitungseinheit eine ALU ist.
  • Ausführungsform 4 ist eine Datenverarbeitungsvorrichtung gemäß einer der Ausführungsformen 1 bis 3, aufweisend eine CPU, die die Verarbeitungseinheit, den Programmzähler, die Verschlüsselungseinrichtung und die Entschlüsselungseinrichtung aufweist.
  • Ausführungsform 5 ist eine Datenverarbeitungsvorrichtung gemäß einer der Ausführungsformen 1 bis 4, aufweisend einen Schlüsselgenerator, der eingerichtet ist, einen kryptographischen Schlüssel zu erzeugen, wobei die Verschlüsselungseinrichtung eingerichtet ist, die Rücksprungadresse mittels des kryptographischen Schlüssels zu verschlüsseln.
  • Ausführungsform 6 ist eine Datenverarbeitungsvorrichtung gemäß Ausführungsform 5, wobei die Verschlüsselungseinrichtung eingerichtet ist, für jeden mehrerer Unterprogrammaufrufe die jeweilige Rücksprungadresse mittels desselben kryptographischen Schlüssels zu verschlüsseln.
  • Ausführungsform 7 ist eine Datenverarbeitungsvorrichtung gemäß Ausführungsform 5 oder 6, wobei der Schlüsselgenerator eingerichtet ist, den kryptographischen Schlüssel bei einem Start der Datenverarbeitungsvorrichtung zu erzeugen.
  • Ausführungsform 8 ist eine Datenverarbeitungsvorrichtung gemäß einer der Ausführungsformen 1 bis 7, wobei die Verschlüsselungseinrichtung eingerichtet ist, die Rücksprungadresse mittels eines Permutations-Substitutions-Netzwerks zu verschlüsseln.
  • Ausführungsform 9 ist eine Datenverarbeitungsvorrichtung gemäß einer der Ausführungsformen 1 bis 8, wobei die Verschlüsselungseinrichtung eingerichtet ist, für einen aktuell auszuführenden Befehl die Adresse des auf den aktuellen Befehl im Instruktionsspeicher folgenden Befehl zu verschlüsseln und, falls der aktuell auszuführende Befehl ein Unterprogrammaufruf ist, die verschlüsselte Adresse als verschlüsselte Rücksprungadresse im Aufrufstapel abzulegen.
  • Ausführungsform 10 ist eine Datenverarbeitungsvorrichtung gemäß Ausführungsform 9, wobei die Verschlüsselungseinrichtung eingerichtet ist, für einen aktuell auszuführenden Befehl die Adresse des auf den aktuellen Befehl im Instruktionsspeicher folgenden Befehl, unabhängig davon, ob der aktuell auszuführende Befehl ein Unterprogrammaufruf ist, zu verschlüsseln.
  • Ausführungsform 11 ist eine Datenverarbeitungsvorrichtung gemäß einer der Ausführungsformen 1 bis 10, wobei die Datenverarbeitungsvorrichtung ein Chipkartenmodul einer Chipkarte ist.
  • Ausführungsform 12 ist ein Verfahren zum Sichern eines Computerprogramms gegen Angriffe wie in 4 dargestellt.
  • Es sollte beachtet werden, dass jede beschriebene Ausführungsform mit jeder anderen beschriebenen Ausführungsform kombiniert werden kann.
  • Im Folgenden werden Ausführungsformen in größerem Detail beschrieben.
  • Gemäß einer Ausführungsform verschlüsselt die Verschlüsselungseinrichtung 305 die Rücksprungadresse immer dann, wenn eine CALL-Instruktion auftritt, also in anderen Worten auf Anfrage. In diesem Fall kann es jedoch zu Verzögerungen der Programmausführung aufgrund der Ausführungsdauer der Verschlüsselung (z.B. der Chiffre kommen).
  • Alternativ dazu kann, auf Kosten des Stromverbrauchs, in jedem (Befehls-)Takt, d.h. für jede ausgeführte Instruktion, direkt die Folgeadresse, d.h. die Adresse der im Instruktionsspeicher 301 auf die Instruktion folgende Instruktion, verschlüsselt werden. Ein entsprechendes Ausführungsbeispiel ist in 5 dargestellt.
  • 5 zeigt die an einer Verschlüsselung einer Rücksprungadresse beteiligten Komponenten einer Datenverarbeitungsvorrichtung 500.
  • Die Datenverarbeitungsvorrichtung 500 weist einen Befehlszähler 501 und einen in einem Arbeitsspeicher 502 vorgesehenen Aufrufstapel 503 auf, die beispielsweise wie mit Bezug auf 1 und 2 beschrieben verwendet werden.
  • In diesem Ausführungsbeispiel wird für jede Instruktion die Adresse der im Instruktionsspeicher folgenden Instruktion, also der nach Inkrementierung des Befehlszählers durch einen Inkrementierer 504 erzeugte Befehlszählerwert (beispielsweise erhöht der Inkrementierer 504 den Befehlszähler nach Auslesen einer Instruktion aus dem Instruktionsspeicher um vier, d.h. der Inkrementierer erzeugt die Adresse PC + 4) als Rücksprungadresse angenommen.
  • Die Datenverarbeitungsvorrichtung weist eine Verschlüsselungseinrichtung 505 auf, die beim Start der Datenverarbeitungsvorrichtung einen zufälligen (beispielsweise 128-Bit-)Schlüssel 506 von einem Zufallszahlengenerator 507 erhält und mittels dieses Schlüssels die von dem Inkrementierer 504 erzeugte Adresse verschlüsselt. Anschaulich wird die nächste Befehlsadresse spekulativ verschlüsselt.
  • Die Verschlüsselungseinrichtung implementiert beispielsweise eine Blockchiffre in SPN(Substitutions-Permutations-Netzwerk)-Bauweise mit einer Anzahl von Runden (beispielsweise acht), die ausreicht, um eine gewünschte Sicherheit gegen kryptoanalytische Attacken zu erzielen.
  • In dem Fall, dass die aktuelle Instruktion ein CALL ist, legt die Verschlüsselungseinrichtung 505 direkt die verschlüsselte Adresse 508 auf dem Stack 503 ab.
  • Für die RETURN-Instruktion wird ein solcher Trade-Off zwischen Stromverbrauch und Ausführungsgeschwindigkeit beispielsweise nicht gemacht sondern der tatsächlich zu verwendende verschlüsselte Rücksprungadressenwert von dem Stapel 503 gelesen, von einer Entschlüsselungseinrichtung 509 entschlüsselt und in den Befehlszähler 501 geschrieben, da ein spekulatives Lesen sehr aufwändig ist. Die Entschlüsselungseinrichtung 509 erhält auch den Schlüssel 506 und führt eine der Verschlüsselung durch die Verschlüsselungseinrichtung 505 entsprechende Entschlüsselung durch. Die Verschlüsselungseinrichtung 505 und die Entschlüsselungseinrichtung 509 können beispielsweise durch dieselbe Kryptoeinheit realisiert werden.
  • Obwohl die Erfindung vor allem unter Bezugnahme auf bestimmte Ausführungsformen gezeigt und beschrieben wurde, sollte es von denjenigen, die mit dem Fachgebiet vertraut sind, verstanden werden, dass zahlreiche Änderungen bezüglich Ausgestaltung und Details daran vorgenommen werden können, ohne vom Wesen und Bereich der Erfindung, wie er durch die nachfolgenden Ansprüche definiert wird, abzuweichen. Der Bereich der Erfindung wird daher durch die angefügten Ansprüche bestimmt, und es ist beabsichtigt, dass sämtliche Änderungen, welche unter den Wortsinn oder den Äquivalenzbereich der Ansprüche fallen, umfasst werden.

Claims (12)

  1. Datenverarbeitungsvorrichtung aufweisend: einen Instruktionsspeicher, der eingerichtet ist, ein Computerprogramm zu speichern; eine Verarbeitungseinheit, die eingerichtet ist, das Computerprogramm auszuführen; einen Programmzähler, der eingerichtet ist, einen als nächstes auszuführenden Befehl des Computerprogramms im Instruktionsspeicher anzugeben; einen Aufrufstapel; eine Verschlüsselungseinrichtung, die eingerichtet ist, bei Aufruf eines Unterprogramms in dem Computerprogramm eine Rücksprungadresse, die einen Befehl des Computerprogramms im Instruktionsspeicher angibt, mit dem nach der Ausführung des Unterprogramms fortgefahren werden soll, zu verschlüsseln und die verschlüsselte Rücksprungadresse auf dem Aufrufstapel abzulegen; eine Entschlüsselungseinrichtung, die eingerichtet ist, nach der Ausführung des Unterprogramms die verschlüsselte Rücksprungadresse von dem Aufrufstapel zu lesen, zu entschlüsseln und den Programmzähler basierend auf der entschlüsselten Rücksprungadresse einzustellen.
  2. Datenverarbeitungsvorrichtung gemäß Anspruch 1, wobei die Verschlüsselungseinrichtung eingerichtet ist, die Rücksprungadresse mittels einer Blockverschlüsselung zu verschlüsseln und die Entschlüsselungseinrichtung eingerichtet ist, die verschlüsselte Rücksprungadresse gemäß der Blockverschlüsselung zu entschlüsseln.
  3. Datenverarbeitungsvorrichtung gemäß Anspruch 1 oder 2, wobei die Verarbeitungseinheit eine ALU ist.
  4. Datenverarbeitungsvorrichtung gemäß einem der Ansprüche 1 bis 3, aufweisend eine CPU, die die Verarbeitungseinheit, den Programmzähler, die Verschlüsselungseinrichtung und die Entschlüsselungseinrichtung aufweist.
  5. Datenverarbeitungsvorrichtung gemäß einem der Ansprüche 1 bis 4, aufweisend einen Schlüsselgenerator, der eingerichtet ist, einen kryptographischen Schlüssel zu erzeugen, wobei die Verschlüsselungseinrichtung eingerichtet ist, die Rücksprungadresse mittels des kryptographischen Schlüssels zu verschlüsseln.
  6. Datenverarbeitungsvorrichtung gemäß Anspruch 5, wobei die Verschlüsselungseinrichtung eingerichtet ist, für jeden mehrerer Unterprogrammaufrufe die jeweilige Rücksprungadresse mittels desselben kryptographischen Schlüssels zu verschlüsseln.
  7. Datenverarbeitungsvorrichtung gemäß Anspruch 5 oder 6, wobei der Schlüsselgenerator eingerichtet ist, den kryptographischen Schlüssel bei einem Start der Datenverarbeitungsvorrichtung zu erzeugen.
  8. Datenverarbeitungsvorrichtung gemäß einem der Ansprüche 1 bis 7, wobei die Verschlüsselungseinrichtung eingerichtet ist, die Rücksprungadresse mittels eines Permutations-Substitutions-Netzwerks zu verschlüsseln.
  9. Datenverarbeitungsvorrichtung gemäß einem der Ansprüche 1 bis 8, wobei die Verschlüsselungseinrichtung eingerichtet ist, für einen aktuell auszuführenden Befehl die Adresse des auf den aktuellen Befehl im Instruktionsspeicher folgenden Befehl zu verschlüsseln und, falls der aktuell auszuführende Befehl ein Unterprogrammaufruf ist, die verschlüsselte Adresse als verschlüsselte Rücksprungadresse im Aufrufstapel abzulegen.
  10. Datenverarbeitungsvorrichtung gemäß Anspruch 9, wobei die Verschlüsselungseinrichtung eingerichtet ist, für einen aktuell auszuführenden Befehl die Adresse des auf den aktuellen Befehl im Instruktionsspeicher folgenden Befehl, unabhängig davon, ob der aktuell auszuführende Befehl ein Unterprogrammaufruf ist, zu verschlüsseln.
  11. Datenverarbeitungsvorrichtung gemäß einem der Ansprüche 1 bis 10, wobei die Datenverarbeitungsvorrichtung ein Chipkartenmodul einer Chipkarte ist.
  12. Verfahren zum Sichern einer Datenverarbeitungsvorrichtung gegen Angriffe aufweisend: Ausführen eines Computerprogramms aus einem Instruktionsspeicher durch eine Datenverarbeitungsvorrichtung; Verschlüsseln, bei Aufruf eines Unterprogramms in dem Computerprogramm, einer Rücksprungadresse, die einen Befehl des Computerprogramms im Instruktionsspeicher angibt, mit dem nach der Ausführung des Unterprogramms fortgefahren werden soll, Ablegen der verschlüsselten Rücksprungadresse auf einem Aufrufstapel; Lesen der verschlüsselten Rücksprungadresse vom Aufrufstapel nach der Ausführung des Unterprogramms; Entschlüsseln der verschlüsselten Rücksprungadresse; Einstellen eines Programmzählers der Datenverarbeitungsvorrichtung, der einen als nächstes auszuführenden Befehl des Computerprogramms im Instruktionsspeicher angibt, basierend auf der entschlüsselten Rücksprungadresse.
DE102015113468.3A 2015-08-14 2015-08-14 Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe Ceased DE102015113468A1 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102015113468.3A DE102015113468A1 (de) 2015-08-14 2015-08-14 Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe
US15/234,018 US20170046280A1 (en) 2015-08-14 2016-08-11 Data processing device and method for protecting a data processing device against attacks

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102015113468.3A DE102015113468A1 (de) 2015-08-14 2015-08-14 Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe

Publications (1)

Publication Number Publication Date
DE102015113468A1 true DE102015113468A1 (de) 2017-02-16

Family

ID=57908102

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015113468.3A Ceased DE102015113468A1 (de) 2015-08-14 2015-08-14 Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe

Country Status (2)

Country Link
US (1) US20170046280A1 (de)
DE (1) DE102015113468A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11295025B2 (en) 2019-05-31 2022-04-05 Nxp B.V Probabilistic memory safety using cryptography

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9767272B2 (en) * 2014-10-20 2017-09-19 Intel Corporation Attack Protection for valid gadget control transfers
US10289842B2 (en) 2015-11-12 2019-05-14 Samsung Electronics Co., Ltd. Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation
US10360373B2 (en) * 2016-09-28 2019-07-23 Intel Corporation Return address encryption
US10572666B2 (en) * 2017-04-20 2020-02-25 Microsoft Technology Licensing, Llc Return-oriented programming mitigation
CN112181491A (zh) * 2019-07-01 2021-01-05 华为技术有限公司 处理器及返回地址的处理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030217277A1 (en) * 2002-05-15 2003-11-20 Nokia, Inc. Preventing stack buffer overflow attacks
US20140173293A1 (en) * 2012-12-17 2014-06-19 Advanced Micro Devices, Inc. Hardware Based Return Pointer Encryption
DE102014213539A1 (de) * 2013-07-15 2015-01-15 Infineon Technologies Ag Einrichtung und Verfahren zur Speicheradressenverschlüsselung

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030217277A1 (en) * 2002-05-15 2003-11-20 Nokia, Inc. Preventing stack buffer overflow attacks
US20140173293A1 (en) * 2012-12-17 2014-06-19 Advanced Micro Devices, Inc. Hardware Based Return Pointer Encryption
DE102014213539A1 (de) * 2013-07-15 2015-01-15 Infineon Technologies Ag Einrichtung und Verfahren zur Speicheradressenverschlüsselung

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Substitution-permutation network. In: Wikipedia, The free Encyclopedia. Bearbeitungsstand: 21. Januar 2015. URL: https://en.wikipedia.org/wiki/Substitution-permutation_network?oldid=643536735 [abgerufen am 8. Juli 2016] *
Substitution-permutation network. In: Wikipedia, The free Encyclopedia. Bearbeitungsstand: 21. Januar 2015. URL: https://en.wikipedia.org/wiki/Substitution-permutation_network?oldid=643536735 [abgerufen am 8. Juli 2016]

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11295025B2 (en) 2019-05-31 2022-04-05 Nxp B.V Probabilistic memory safety using cryptography

Also Published As

Publication number Publication date
US20170046280A1 (en) 2017-02-16

Similar Documents

Publication Publication Date Title
DE102015113468A1 (de) Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe
EP3259698B1 (de) Autonom bootendes system mit einem sicherheitsmodul
DE102009013384B4 (de) System und Verfahren zur Bereitstellung einer sicheren Anwendungsfragmentierungsumgebung
DE102008006759B4 (de) Prozessor-Anordnung und Verfahren zum Betreiben der Prozessor-Anordnung ohne Verringerung der Gesamtsicherheit
DE102012215196A1 (de) Schützen von Anwendungsprogrammen vor zerstörerischer Software oder Malware
US20160239671A1 (en) Method and device for protecting an application and method and device for executing a protected application thus protected
DE112009002502T5 (de) Multilayer inhalte-schützender Mikrocontoller
DE102009041176B4 (de) Compiler-System und Verfahren zum Kompilieren eines Quellencodes zu einem verschlüsselten Maschinensprachcode
DE112017004609T5 (de) Mehrstufiges Speicherintegritätsverfahren und -vorrichtung
EP2899714A1 (de) Gesichertes Bereitstellen eines Schlüssels
DE112010004885T5 (de) Bereitstellen von Integritätsüberprüfung und -bestätigung in einer verborgenen Ausführungsumgebung
DE102016205289A1 (de) Verfahren, Prozessor und Gerät zur Integritätsprüfung von Nutzerdaten
WO2011054639A1 (de) Kryptographisches Hardwaremodul bzw. Verfahren zur Aktualisierung eines kryptographischen Schlüssels
WO2009040207A1 (de) Verfahren und system zum schutz gegen einen zugriff auf einen maschinencode eines gerätes
EP2913772A1 (de) Verfahren und Computersystem zum Schutz eines Computerprogramms gegen Beeinflussung
EP2911080A1 (de) Verfahren und Vorrichtung zum sicheren Initialisieren eines Computers
DE102008050631A1 (de) Datenverarbeitungssystem
DE102016204684A1 (de) Verfahren und Einrichtung zum Bereitstellen einer kryptographischen Sicherheitsfunktion für den Betrieb eines Geräts
EP1636700A1 (de) Verfahren zum nachladen einer software in den bootsektor eines programmierbaren lesespeicher
DE102005046696B4 (de) Verfahren zum Erzeugen von geschütztem Programmcode und Verfahren zum Ausführen von Programmcode eines geschützten Computerprogramms sowie Computerprogrammprodukt
EP3286872B1 (de) Bereitstellen eines gerätespezifischen kryptographischen schlüssels aus einem systemübergreifenden schlüssel für ein gerät
US9740837B2 (en) Apparatus and method for preventing cloning of code
EP3251281B1 (de) Intrinsische authentifizierung von programcode
DE102013108073A1 (de) Datenverarbeitungsanordnung und verfahren zur datenverarbeitung
DE102021110768B3 (de) Forensik-Modul und eingebettetes System

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final