DE102009005764A1 - Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Unterprogramms - Google Patents

Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Unterprogramms Download PDF

Info

Publication number
DE102009005764A1
DE102009005764A1 DE102009005764A DE102009005764A DE102009005764A1 DE 102009005764 A1 DE102009005764 A1 DE 102009005764A1 DE 102009005764 A DE102009005764 A DE 102009005764A DE 102009005764 A DE102009005764 A DE 102009005764A DE 102009005764 A1 DE102009005764 A1 DE 102009005764A1
Authority
DE
Germany
Prior art keywords
program
address
calling
subprogram
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
DE102009005764A
Other languages
English (en)
Inventor
Nouredine Bouabdallah
Michael Baldischweiler
Arvid Wirén
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.)
Giesecke and Devrient Mobile Security GmbH
Original Assignee
Giesecke and Devrient GmbH
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 Giesecke and Devrient GmbH filed Critical Giesecke and Devrient GmbH
Priority to DE102009005764A priority Critical patent/DE102009005764A1/de
Publication of DE102009005764A1 publication Critical patent/DE102009005764A1/de
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Die Erfindung betrifft ein Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Programms durch einen Prozessor (10), der auf einen Speicher (30) zugreift. In dem Speicher (30) ist eine Tabelle vorgesehen oder wird angelegt, in welcher einem aufrufbaren Unterprogramm (26) oder einer aufrufbaren Zieladresse zugeordnete Identifikatoren oder Adressen eines aufrufenden Programms (24) oder einer aufrufenden Adresse gepeichert werden. Vor dem Sprung in das Unterprogramm (26) wird mittels der Tabelle geprüft, ob das aufrufende Programm (24) oder die aufrufende Adresse in der Tabelle dem Unterprogramm (26) oder der aufrufbaren Zieladresse zugeordnet ist. Wenn die Zuordnung korrekt ist, wird das Unterprogramm (26) ausgeführt und wenn die Zuordnung nicht besteht, wird eine Fehlerbehandlungsroutine aufgerufen.

Description

  • Die Erfindung betrifft ein Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Programms durch einen Prozessor, der auf einen Speicher zugreift. Die Erfindung betrifft weiterhin einen Prozessor sowie einen tragbaren Datenträger. Speziell ist die Erfindung für Anwendungen vorgesehen, bei denen Aspekte der Sicherheit und Korrektheit der ausgeführten Programme sowie der Zuverlässigkeit der Programmausführung besondere Bedeutung haben.
  • Typischerweise umfasst ein auf einem Prozessor ablaufendes Programm mehrere Funktionen, die von einem Hauptprogramm aufgerufen werden. Die Funktionen oder Unterprogramme werden mit spezifischen Programmbefehlen, z. B. CALL, ECALL, usw., aufgerufen. Techniken zur Ausführung von Unterprogrammen sind in vielfältigen Ausgestaltungen gut bekannt. Bei der Ausführung eines Unterprogramm-Aufrufbefehls CALL wird unter anderem der aktuelle Stand des Programmzählers in einem Stapelspeicher gespeichert. Die Programmausführung wird dann an einer in dem Unterprogramm-Aufrufbefehl angegebenen Adresse fortgesetzt. Sobald im Zuge der Unterprogrammausführung der erste Unterprogramm-Rücksprungbefehl, z. B. RET, erkannt wird, wird der Programmzähler mit dem jüngsten Eintrag im Stapelspeicher geladen. Dieser Eintrag wird aus dem Stapelspeicher entfernt, indem der Stapelzeiger entsprechend geändert, beispielsweise dekrementiert, wird. Die Wirkung des Unterprogramm-Rücksprungbefehls ist somit, dass die Programmausführung im aufrufenden Programm mit demjenigen Befehl fortgesetzt wird, der dem Unterprogramm-Aufrufbefehl folgt.
  • Wird der Ablauf des Programms, z. B. durch einen Lichtangriff, gestört, so kann es passieren, dass ein Unterprogramm-Aufruf erzeugt wird, der nicht auf der korrekten Anfangsadresse des aufgerufenen Unterprogramms landet. Alternativ ist es möglich, dass Aufrufe erzeugt werden, die an sich innerhalb des korrekten Programmablaufs nicht zugelassen sind.
  • Aus der DE 102 52 347 A1 ist ein Verfahren bekannt, bei dem während des Programmablaufs zumindest eine Plausibilitätsüberprüfung hinsichtlich der Zuordnung eines auszuführenden Unterprogramm-Rücksprungbefehls zu einem vom Programmierer vorgesehenen Aufrufbefehl vorgenommen wird. Dazu wird beim Aufruf eines Unterprogramms nicht nur die Rücksprung-Zieladresse, sondern auch eine Rücksprungbefehlsadresse in einem Stapelspeicher abgelegt. Aus der Rücksprungbefehlsadresse lässt sich durch Auswerten einer vorgegebenen Beziehung ableiten, an welcher Stelle gemäß der Intention des Programmierers der zu dem gegenwärtig ausgeführten Unterprogramm-Aufrufbefehl gehörige Unterprogramm-Rücksprungbefehl bei korrekter Programmausführung zu erwarten ist. Beide genannten Adressen werden im Stapelspeicher abgelegt. Bei der Abarbeitung jedes Unterprogramm-Rücksprungbefehls wird überprüft, ob die Speicheradresse dieses Befehls in der vorgegebenen Beziehung zu der im Stapelspeicher befindlichen Rücksprungbefehlsadresse steht. Nachteilig hieran ist, dass keine Überprüfung stattfindet, ob die Ausführung eines Unterprogramms überhaupt zulässig ist.
  • Aus der WO 98/32072 A1 ist ein Verfahren zur Überwachung der bestimmungsgemäßen Ausführung von Softwareprogrammen bekannt, bei dem das Überschreiben von zur späteren Verwendung gespeicherten Rücksprungadressen und/oder die Verwendung von fehlerhaft gespeicherten oder überschriebenen Rücksprungadressen als Rücksprungadresse verhin dert werden. Auch das in dieser Veröffentlichung beschriebene Verfahren bietet jedoch keinen ausreichenden Schutz für einen fehlerhaften oder unerlaubten Unterprogrammaufruf.
  • Schließlich ist aus der EP 1 507 185 A1 ein Verfahren bekannt, gemäß dem in einem aufrufbaren Unterprogramm ein Verweis auf das aufrufende Programm enthalten ist, so dass eine Überprüfung durchführbar ist, ob der Aufruf des Unterprogramms in erlaubter Weise erfolgt. Zu Beginn eines Unterprogramms können hierbei mehrere Kommandos mit erlaubten Sprungquellen hintereinander vorgesehen sein, um den Einsprung in das Unterprogramm von verschiedenen Stellen des Hauptprogramms zu ermöglichen. Nachteilig an der in dieser Druckschrift vorgetragenen Lösung ist jedoch die statische Zuordnung von Sprungquellen zu aufgerufenen Unterprogrammen.
  • Es ist daher Aufgabe der vorliegenden Erfindung, ein Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Programms anzugeben, das eine Überprüfung erlaubt, ob der Aufruf eines Unterprogramms korrekt und zuverlässig erfolgt. Es ist weiterhin Aufgabe der vorliegenden Erfindung, einen Prozessor zur Durchführung des erfindungsgemäßen Verfahrens sowie einen tragbaren Datenträger mit einem erfindungsgemäßen Prozessor anzugeben.
  • Diese Aufgaben werden gelöst durch ein Verfahren mit den Merkmalen des Patentanspruches 1, einen Prozessor mit den Merkmalen des Patentanspruches 12 sowie einen tragbaren Datenträger mit den Merkmalen des Patentanspruches 13.
  • Die Erfindung schafft ein Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Programms durch einen Prozessor, der auf einen Speicher zugreift. Bei dem Verfahren ist in dem Speicher eine Tabelle vorgesehen oder wird dort angelegt, in welcher Tabelle einem aufrufbaren Unterprogramm oder einer aufrufbaren Zieladresse zugeordnete Identifikatoren eines aufrufenden Programms oder einer aufrufenden Adresse gespeichert werden. Vor dem Sprung in das Unterprogramm wird mittels der Tabelle geprüft, ob das aufrufende Programm oder die aufrufende Adresse in der Tabelle dem Unterprogramm oder der aufrufbaren Zieladresse zugeordnet ist. Wenn die Zuordnung korrekt ist, wird das Unterprogramm ausgeführt. Wenn die Zuordnung nicht besteht, wird eine Fehlerbehandlungsroutine aufgerufen.
  • Das erfindungsgemäße Verfahren ermöglicht einen korrekten Programmablauf hinsichtlich des Aufrufs von Unterprogrammen. Der Programmablauf wird durch das erfindungsgemäße Verfahren ständig auf Korrektheit bei Sprüngen in Unterprogramme oder von Unterprogrammen zurück in ein aufrufendes Programm überprüft. Insbesondere ist ein sog. Ausblitzen von Sprüngen bzw. ein Überspringen von Unterprogrammen nicht mehr möglich. Hierdurch wird die Sicherheit des Ablaufs des Programms verbessert. So kann beispielsweise durch einen Lichtangriff kein ungewollter Programmablauf gestartet werden bzw. es können keine unzulässigen Teilabschnitte ausgeführt werden. Die Zuordnung von Identifikatoren oder Adressen eines aufrufenden Programms zu einem aufrufbaren Unterprogramm oder einer aufrufbaren Zieladresse in einer Tabelle ermöglicht eine große Flexibilität im Rahmen der Erstellung des Programms. Darüber hinaus lässt sich der Programmablauf mit einer hohen Effizienz durchführen.
  • In einer Ausgestaltung der Erfindung ist in der Tabelle das Unterprogramm oder die aufrufbare Zieladresse als überprüfbarer Tabellenname gespeichert oder wird dort gespeichert.
  • Ferner ist gemäß einer weiteren Ausgestaltung der Stand des Programmzählers oder eine Checksumme eines Programmcodes des aufrufenden Programms in der Tabelle gespeichert oder wird in dieser gespeichert. Anstelle der Verwendung von Adressen eines Programmzählers können auch Checksummen zur Überprüfung des korrekten Programmablaufs verwendet werden. Diese Checksummen können beispielsweise aus Codebereichen (z. B. Opcode-Fetch) des Unterprogramms bzw. des aufrufenden Programms (Hauptprogramm) gebildet werden.
  • Dem Eintrag des aufrufenden Programms oder der aufrufenden Adresse ist eine vorgegebene Adresse innerhalb der Tabelle zugeordnet, in der ein vorgegebener Wert gespeichert ist, wenn keine Adresse des aufrufenden Programms innerhalb der Adresse der Tabelle eingespeichert ist. Durch diese zusätzliche Überprüfung kann die Sicherheit des korrekten Programmablaufs weiterhin verbessert werden. Insbesondere wird vor dem Abspeichern der Adresse des aufrufenden Programms überprüft, ob der vorgegebene Wert in der Speicheradresse der Tabelle enthalten ist, wobei im positiven Fall die Adresse des aufrufenden Programms in die Speicheradresse der Tabelle eingeschrieben wird und im negativen Fall auf eine fehlerhafte Programmausführung geschlossen wird. Erst nach erfolgreicher Überprüfung der Sprungquelle im Unterprogramm wird der entsprechende Adresswert in die Tabelle geschrieben.
  • Gemäß einer alternativen Ausgestaltung umfasst die Tabelle für jedes aufrufende Unterprogramm eine Rücksprungadresse zu dem aufrufenden Pro gramm. Dabei wird überprüft, ob die Rücksprungadresse in dem Speicher, insbesondere einem Stapelspeicher oder einem nichtflüchtigen Speicher (NVM), gespeichert ist. Ist dies der Fall, wird die aufgerufene Unterfunktion durchlaufen. Andernfalls wird der Programmablauf gesperrt oder eine Fehlermeldung ausgegeben.
  • In einer weiteren Ausbildung wird vor dem Rücksprung in das aufrufende Programm überprüft, ob die Rücksprungadresse in dem Speicher mit der im Programmablauf des Unterprogramms aufgerufenen Rücksprungadresse übereinstimmt. Diese zweite Überprüfung ist zweckmäßig, da es auch möglich ist, über einen Lichtangriff mitten in ein Unterprogramm einzuspringen und dieses teilweise auszuführen.
  • Alternativ wird bei einem Aufruf eines Unterprogramms durch das aufrufende Programm die Adresse des aufrufenden Programms beim Aufruf dem Unterprogramm übergeben und in dem Speicher abgespeichert. Dabei wird zweckmäßigerweise ein Vergleich zwischen der übergebenden und abgespeicherten (Einsprung-)Adresse und dem Programmzähler vorgenommen, wobei das Unterprogramm fortgesetzt wird, wenn bei dem Vergleich eine Übereinstimmung der Adressen festgestellt wurde. Das Unterprogramm wird nicht fortgesetzt, wenn bei dem Vergleich die Übereinstimmung der Adressen nicht festgestellt werden konnte.
  • Zusätzlich kann bei einem Rücksprung von dem Unterprogramm zu dem aufrufenden Programm überprüft werden, ob der Aufruf der Unterfunktion korrekt erfolgte. Insbesondere wird hierbei überprüft, ob der Funktionsaufruf zulässig war, da, wie bereits erwähnt, auch ein Sprung in die Mitte der Funktion erfolgen kann. Für diese Überprüfung kann beispielsweise die Ü berprüfung auf das Vorliegen eines festen Werts erfolgen, da der Startpunkt, d. h. die Startadresse, des Unterprogramms bekannt ist.
  • Die Erfindung schafft ferner einen Prozessor, der dazu eingerichtet ist, ein Verfahren nach einem der vorherigen Ansprüche auszuführen. Darüber hinaus schafft die Erfindung einen tragbaren Datenträger, insbesondere eine Chipkarte oder ein Chipmodul, der einen erfindungsgemäßen Prozessor aufweist.
  • Die Erfindung wird nachfolgen näher anhand der Figuren beschrieben. Es zeigen:
  • 1 ein Blockdiagramm eines tragbaren Datenträgers, der einen Prozessor nach einem Ausführungsbeispiel der Erfindung aufweist, und
  • 2 einen beispielhaften Programmablauf des erfindungsgemäßen Verfahrens.
  • In 1 ist ein tragbarer Datenträger 10 gezeigt, der beispielsweise als Chipkarte oder Chipmodul ausgebildet ist. In an sich bekannter Weise enthält der Datenträger 10 einen Halbleiterchip, auf dem ein Prozessor 12, ein Speicher 14 und eine Schnittstelle 16 zur drahtgebundenen oder drahtlosen Kommunikation ausgebildet sind. Der Speicher 14 weist mehrere unterschiedliche Bereiche auf, nämlich im vorliegenden Ausführungsbeispiel einen als RAM ausgestalteten Arbeitsspeicher 18, einen als EEPROM ausgestalteten nichtflüchtigen Speicher 20 und einen als maskenprogrammiertes ROM ausgestalteten Festwertspeicher 22.
  • Der Festwertspeicher 22 enthält wesentliche Teile des Betriebssystems des Datenträgers 10 und der von diesem Betriebssystem ausgeführten Programme. Zwei Programmabschnitte sind in 1 beispielhaft gezeigt, nämlich ein aufrufendes Programm oder Hauptprogramm 24 und ein aufgerufenes Programm oder Unterprogramm 26. Der Prozessor 12 weist einen in Form eines Prozessorregisters ausgestalteten Programmzähler 28 auf, welcher die Adresse des jeweils ausgeführten oder auszuführenden Programmbefehls angibt. Weitere Abschnitte der auszuführenden Programme können im nichtflüchtigen Speicher 20 enthalten sein. Primär befinden sich in diesem Speicher 20 jedoch ein Dateisystem, auf das die Programme zugreifen, sowie weitere von dem Betriebssystem verwaltete Daten.
  • Die Begriffe „Hauptprogramm” und „Unterprogramm” bezeichnen vorliegend lediglich die Beziehung der Programmabschnitte 24 und 26 relativ zueinander. Es versteht sich, dass das Hauptprogramm 24 seinerseits von einem übergeordneten Programmabschnitt aufgerufen werden kann, und dass das Unterprogramm 26 seinerseits weitere Unterprogramme aufrufen kann und somit für diese weiteren Unterprogramme als Hauptprogramm anzusehen ist.
  • Der Arbeitsspeicher 18 dient zur temporären Aufnahme von Werten während Berechnungsvorgängen. Insbesondere ist im Arbeitsspeicher 18 ein Stapelspeicher 30 (stack) angelegt, der unter anderem Unterprogramm-Rücksprungadressen enthält. Der aktuelle Füllungsgrad des Stapelspeichers 30 – also in unterschiedlichen Ausführungsformen entweder der jüngste Eintrag oder der erste noch freie Speicherplatz – wird durch einen Stapelzeiger 32 angegeben, der als Register des Prozessors 12 ausgestaltet ist.
  • Das erfindungsgemäße Verfahren ermöglicht sichere Programmsprünge von einem aufrufenden Programm zu einem aufrufbaren Unterprogramm, und umgekehrt, beispielsweise unter Verwendung der Mikrocontrollerbefehle JMP und CALL. Ein typischer Programmablauf ist beispielhaft nachfolgend dargestellt:
    MOV R6, #0×01
    MOV R7, #0×FF
    CALL Test_Param ; Aufruf des Unterprogramms
    CJNE R7, #0×34, WrongResult
    MOV Result, R7
    RET
    WrongResult:
    SJMP $ ; Endlosschleife
  • Wird der Programmablauf z. B. über einen Lichtangriff gestört, so wird der Unterprogrammaufruf Test_Param und die Überprüfung (CJNE) übersprungen.
  • Ein anderes typisches Unterprogramm schaut beispielsweise wie folgt aus:
    PIN_CHECK:
    MOV A, R6
    XRL A, R7
    JNZ WrongPin
    CALL PIN_IS_VALID
    RET
    WrongPin:
    MOV R7, #0×FF
    RET
  • Wird das Unterprogramm PIN_CHECK ausgeführt, so findet keine Überprüfung statt, ob der Aufruf zulässig ist. Um den Aufruf des Unterprogramms mittels des Befehls CALL oder JMP sicher zu machen, wird vor dem Programmsprung der Wert des aktuellen Programmzählers in einem Speicherbereich, z. B. dem Register, dem Stack oder einem nichtflüchtigen Speicher, gesichert. Dies kann beispielsweise wie folgt erfolgen:
    MOV R2, #0×01
    MOV R3, #0×FF
    MOV R6, #High SPRUNG_QUELLE
    MOV R5, #Low SPRUNG_QUELLE
    SPRUNG_QUELLE:
    CALL Test_Param ; Aufruf des Unterprogramms
    CJNE R7, #0×34, WrongResult
    MOV Result, R7
    RET
    WrongResult:
    SJMP $ ; Endlosschleife
  • Beim Einsprung in die Unterprogrammfunktion wird überprüft, ob der Funktionsaufruf zulässig ist. Diese Überprüfung findet mittels einer (nicht dargestellten) Tabelle statt, die beispielsweise in dem nichtflüchtigen Speicherbereich abgespeichert ist. Wird in der Tabelle festgestellt, dass die Ad resse des aufrufenden Programms vorhanden ist, so wird der Aufruf des Unterprogramms akzeptiert und die Programmabarbeitung fortgesetzt. Andernfalls wurde ein unzulässiger Sprung erkannt, woraufhin die Programmabarbeitung eingestellt wird. Ein beispielhafter Programmablauf für die Überprüfung ist nachfolgend dargestellt:
    CheckJMP_CALL_ADDR:
    MOV DPTR, #TABELLE ; Laden der TABELLEN-Adresse
    CLR A
    MOVC A, @A + DPTR ; Überprüfung ob Tabelle zum Unterpro
    MOV R0, SP ; gramm gehört
    XRL A, @R0 ; Test_Param_Start(High-Byte)
    MOV R1, A
    INC DPTR
    DEC R0
    CLR A
    MOVC A, @A + DPTR
    XRL A, @R0; ; Test_Param_Start(Low-Byte)
    XRL A, R1
    JNZ NO_TABLE_FOUND
    Check_Entry: ; Überprüfung der Sprungquelle
    INC DPTR
    CLR A
    MOVC A, @A + DPTR
    XRL A, R6 ; Sprungquelle (High-Byte)
    MOV R1, A
    INC DPTR
    CLR A
    MOVC A, @A + DPTR
    XRL A, R5 ; Sprungquelle (Low-Byte)
    XRL A, R1
    JNZ NO_TABLE_FOUND ; kein gültiger Eintrag gefunden
    RET
    NO_TABLE_FOUND:
    SJMP $
  • Eine weitere Überprüfung besteht darin, dass für den Eintrag der Sprungquelle eine feste RAM-/NVM-Adresse zugeordnet wird. In dieser steht, wenn keine Adresse hinterlegt ist, beispielsweise der Wert 0×55AA. Soll nun die Adresse des aufrufenden Programms (Sprungquelle) abgespeichert werden, wird zunächst überprüft, ob der vordefinierte Wert 0×55AA in diesem Speicher liegt. Ist dies nicht der Fall, wurde eine fehlerhafte Programmausführung durchgeführt und der Programmablauf abgebrochen oder eine Fehlerbehandlungsroutine durchgeführt. Nach erfolgreicher Überprüfung der Adresse des aufrufenden Programms im aufgerufenen Unterprogramm wird die Adresse des aufrufenden Programms in die RAM-/NVM-Adresse geschrieben. Dabei können anstatt der Adressen des Programmzählers auch Checksummen zur Überprüfung verwendet werden. Diese Checksummen können aus Codebereichen (z. B. Opcode-Fetch) des Unterprogramms bzw. des Aufrufers gebildet werden.
  • In einer anderen Ausgestaltung ist es zweckmäßig, wenn für jedes aufzurufende Unterprogramm eine Tabelle erstellt wird, die die Rücksprungadressen zu der bzw. den aufrufenden Hauptprogrammen enthält. Wird nun ein Unterprogramm aufgerufen, wird zunächst überprüft, ob die Rücksprungadresse in dem Stapelspeicher für den jeweiligen CALL vorhanden ist. Ist dies der Fall, so wird das Unterprogramm durchlaufen. Andernfalls wird der Programmablauf gesperrt oder eine Fehlermeldung ausgegeben. Vor dem Rücksprung aus dem aufgerufenen Unterprogramm wird zweckmäßigerweise nochmals überprüft, ob die Rücksprungadresse auf dem Stapelspeicher mit der Adresse des aufrufenden Programms übereinstimmt. Diese zweite Überprüfung ist zweckmäßig, da es auch möglich ist, über einen Lichtangriff mitten in ein ausgeführtes Unterprogramm einzuspringen und dieses teilweise auszuführen.
  • Alternativ zu der Tabelle mit den Rücksprungadressen kann auch ein Verfahren eingesetzt werden, bei dem die Adresse des aufrufenden Programms beim Aufruf mit übergeben wird. Die Adresse für die Startadresse des aufgerufenen Unterprogramms kann z. B. auf dem Stapelspeicher abgespeichert werden. Beim Einsprung in das Unterprogramm wird zunächst die abgespeicherte Einsprungadresse mit dem aktuellen Wert des Programmzählers (Programmcounter PC) verglichen. Ist diese Adresse korrekt, wird das Programm fortgesetzt. Andernfalls wird das Programm beendet bzw. eine Fehlermeldung ausgegeben oder ein NME ausgelöst.
  • Auch hier kann bei einem Rücksprung zuerst nochmals eine Überprüfung durchgeführt werden, ob der Funktionsaufruf zulässig war. Dies wird vorzugsweise deshalb durchgeführt, da, wie bereits erwähnt, auch ein Sprung in die Mitte des Unterprogramms erfolgen kann. Für diese Überprüfung kann auf einen festen Wert abgeprüft werden, da der Startpunkt des Unterprogramms bekannt ist.
  • In 2 ist der schematische Ablauf des erfindungsgemäßen Verfahrens zur Überwachung der bestimmungsgemäßen Ausführung eines Programms durch einen Prozessor dargestellt. Gemäß einem Schritt S1 wird eine Tabelle angelegt, in der einem Unterprogramm (oder einer aufrufbaren Zieladresse) Adressen eines aufrufenden Programms oder einer aufrufenden Adresse zugeordnet und gespeichert werden. Gemäß Schritt S2 erfolgt vor dem Sprung in das Unterprogramm eine Überprüfung, ob das aufrufende Programm dem Unterprogramm zugeordnet ist. In Schritt S3 wird überprüft, ob die Zuordnung korrekt ist. Ist dies der Fall, so wird in Schritt S4 das Unterprogramm ausgeführt. Ist die Zuordnung falsch, so wird gemäß Schritt S5 eine Fehlerbehandlungsroutine aufgerufen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • - DE 10252347 A1 [0004]
    • - WO 98/32072 A1 [0005]
    • - EP 1507185 A1 [0006]

Claims (13)

  1. Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Programms durch einen Prozessor (10), der auf einen Speicher (30) zugreift, bei dem – in dem Speicher (30) eine Tabelle vorgesehen ist oder angelegt wird, in welcher Adressen aufrufender Programme oder Identifikatoren aufrufender Programme oder Identifikatoren aufrufender Adressen gespeichert werden, die einem aufrufbaren Unterprogramm (26) oder einer aufrufbaren Zieladresse zugeordnet sind; – vor dem Sprung in das Unterprogramm (26) mittels der Tabelle geprüft wird, ob das aufrufende Programm (24) oder die aufrufende Adresse in der Tabelle dem Unterprogramm (26) oder der aufrufbaren Zieladresse zugeordnet ist; – wenn die Zuordnung korrekt ist, das Unterprogramm (26) ausgeführt wird; und – wenn die Zuordnung nicht besteht, eine Fehlerbehandlungsroutine aufgerufen wird.
  2. Verfahren nach Anspruch 1, bei dem in der Tabelle das Unterprogramm (26) oder die aufrufbare Zieladresse als überprüfbarer Tabellenname gespeichert ist oder wird.
  3. Verfahren nach Anspruch 1 oder 2, bei dem der Stand des Programmzählers (28) oder eine Checksumme eines Programmcodes des aufrufenden Programms (24) in der Tabelle gespeichert ist oder wird.
  4. Verfahren nach einem der vorherigen Ansprüche, bei dem dem Eintrag des aufrufenden Programms (24) oder der aufrufenden Adresse eine vorgegebene Adresse innerhalb der Tabelle zugeordnet ist, in der ein vorgegebener Wert gespeichert ist, wenn keine Adresse des aufrufenden Programms (24) innerhalb der Adresse der Tabelle eingespeichert ist.
  5. Verfahren nach Anspruch 4, bei dem vor dem Abspeichern der Adresse des aufrufenden Programms (24) überprüft wird, ob der vorgegebene Wert in der Speicheradresse der Tabelle enthalten ist, wobei im positiven Fall die Adresse des aufrufenden Programms (24) in die Speicheradresse der Tabelle eingeschrieben wird und im negativen Fall auf eine fehlerhafte Programmausführung geschlossen wird.
  6. Verfahren nach einem der vorherigen Ansprüche, bei dem die Tabelle für jedes aufrufende Unterprogramm eine Rücksprungadresse zu dem aufrufenden Programm (24) umfasst.
  7. Verfahren nach Anspruch 6, bei dem überprüft wird, ob die Rücksprungadresse in dem Speicher (30), insbesondere einem Stapelspeicher, gespeichert ist.
  8. Verfahren nach Anspruch 6 oder 7, bei dem vor dem Rücksprung in das aufrufende Programm (24) überprüft wird, ob die Rücksprungadresse in dem Speicher (30) mit der im Programmablauf des Unterprogramms (26) aufgerufenen Rücksprungadresse übereinstimmt.
  9. Verfahren nach Anspruch 6, bei dem bei einem Aufruf eines Unterprogramms durch das aufrufende Programm (24) die Adresse des auf rufenden Programms (24) beim Aufruf dem Unterprogramm (26) übergeben und in dem Speicher abgespeichert wird.
  10. Verfahren nach Anspruch 9, bei dem ein Vergleich zwischen der übergebenen und abgespeicherten (Einsprung-)Adresse und dem Programmzähler (28) vorgenommen wird, wobei das Unterprogramm (26) fortgesetzt wird, wenn bei dem Vergleich eine Übereinstimmung der Adressen festgestellt wurde und wobei das Unterprogramm (26) nicht fortgesetzt wird, wenn bei dem Vergleich die Übereinstimmung der Adressen nicht festgestellt werden konnte.
  11. Verfahren nach Anspruch 9 oder 10, bei dem bei einem Rücksprung von dem Unterprogramm (26) zu dem aufrufenden Programm (24) überprüft wird, ob der Aufruf der Unterfunktion korrekt erfolgte.
  12. Prozessor (12), der dazu eingerichtet ist, ein Verfahren nach einem der Ansprüche 1 bis 11 auszuführen.
  13. Tragbarer Datenträger (10), insbesondere Chipkarte oder Chipmodul, der einen Prozessor nach Anspruch 12 aufweist.
DE102009005764A 2009-01-23 2009-01-23 Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Unterprogramms Ceased DE102009005764A1 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE102009005764A DE102009005764A1 (de) 2009-01-23 2009-01-23 Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Unterprogramms

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102009005764A DE102009005764A1 (de) 2009-01-23 2009-01-23 Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Unterprogramms

Publications (1)

Publication Number Publication Date
DE102009005764A1 true DE102009005764A1 (de) 2010-07-29

Family

ID=42282518

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102009005764A Ceased DE102009005764A1 (de) 2009-01-23 2009-01-23 Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Unterprogramms

Country Status (1)

Country Link
DE (1) DE102009005764A1 (de)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998032072A1 (de) 1997-01-15 1998-07-23 Siemens Aktiengesellschaft Verfahren zur überwachung der bestimmungsgemässen ausführung von softwareprogrammen
DE10252347A1 (de) 2002-11-11 2004-05-19 Giesecke & Devrient Gmbh Überwachte Unterprogrammausführung
EP1507185A1 (de) 2003-08-11 2005-02-16 Axalto S.A. Verfahren und Vorrichtung zum Schutz gegen nicht autorisierten Zugang zu einem sicheren Programm

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998032072A1 (de) 1997-01-15 1998-07-23 Siemens Aktiengesellschaft Verfahren zur überwachung der bestimmungsgemässen ausführung von softwareprogrammen
DE10252347A1 (de) 2002-11-11 2004-05-19 Giesecke & Devrient Gmbh Überwachte Unterprogrammausführung
EP1507185A1 (de) 2003-08-11 2005-02-16 Axalto S.A. Verfahren und Vorrichtung zum Schutz gegen nicht autorisierten Zugang zu einem sicheren Programm

Similar Documents

Publication Publication Date Title
EP2318920B1 (de) Steuergerät für ein fahrzeug und verfahren für eine datenaktualisierung für ein steuergerät für ein fahrzeug
EP2188755B1 (de) Verfahren und vorrichtung zur sicherung eines programms gegen eine kontrollflussmanipulation und gegen einen fehlerhaften programmablauf
DE102010037457B4 (de) Verfahren zur Datenverarbeitung zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zum Erzeugen von Programm-Code, Datenverarbeitungsanordnungen zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Datenverarbeitungsanordnungen zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
WO1998032072A1 (de) Verfahren zur überwachung der bestimmungsgemässen ausführung von softwareprogrammen
DE102012212343A1 (de) Verteilter Kompilierungsprozess mit Befehlssignaturunterstützung
DE10159901A1 (de) Mikrocomputer mit eingebautem programmierbarem, nichtflüchtigem Speicher
DE102012218363A1 (de) Verfahren zur Steuerung eines getrennten Ablaufs von verknüpften Programmblöcken und Steuergerät
EP1037140B1 (de) Verfahren und Vorrichtung zur Absicherung bei Veränderung des Speicherinhalts von Steuergeräten
DE10340411B4 (de) Vorrichtung und Verfahren zur sicheren Ausführung eines Programms
DE102009005764A1 (de) Verfahren zur Überwachung der bestimmungsgemäßen Ausführung eines Unterprogramms
DE10064025A1 (de) Verfahren mit einem bedingten deterministischen Rücksetzvektor für einen Mikroprozessor
EP1892639B1 (de) Sichere Programmcodeausführung
DE102004046288A1 (de) Verfahren zur Abarbeitung eines Computerprogramms auf einem Computersystem
DE10252347A1 (de) Überwachte Unterprogrammausführung
DE102016116221A1 (de) Verfahren und Einrichtung zur Überwachung der Ausführung eines Programmcodes
EP1577734A2 (de) Verfahren zum sicheren Betrieb eines tragbaren Datenträgers
DE10229817B4 (de) Verfahren und Vorrichtung zum Ablegen eines Computerprogramms in einen Programmspeicher eines Steuergeräts
DE102007041873A1 (de) Installieren eines Patch in einem Smartcard-Modul
DE102012010102A1 (de) Verfahren und Vorrichtung zur Datenverarbeitung
DE102004006308B4 (de) Verfahren zum Verändern von Programmcode eines tragbaren Datenträgers mittels Patchdaten
DE10110050A1 (de) Verfahren zur Absicherung sicherheitskritischer Programmteile vor versehentlicher Ausführung und eine Speichereinrichtung zur Durchführung dieses Verfahrens
DE102007059798B3 (de) Verfahren zur Verschlüsselung von ausführbarem Programmcode, insbesondere als Schutz gegen unautorisierte Vervielfältigung, Manipulation und unautorisierten Betrieb
DE102020209137A1 (de) Verfahren und Vorrichtung zum Betreiben eines Fuzzing-Testens eines Programmcodes
DE102009005449B4 (de) Prozessor, der zur Überwachung des Kontrollflusses Befehlen zugeordnete Eigen- und Folgekennungen auswertet
EP3217280A1 (de) Patch verfahren, insbesondere bei methoden-aufruf

Legal Events

Date Code Title Description
OR8 Request for search as to paragraph 43 lit. 1 sentence 1 patent law
8105 Search report available
R012 Request for examination validly filed
R081 Change of applicant/patentee

Owner name: GIESECKE+DEVRIENT MOBILE SECURITY GMBH, DE

Free format text: FORMER OWNER: GIESECKE & DEVRIENT GMBH, 81677 MUENCHEN, DE

R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final