-
Die
vorliegende Erfindung betrifft. allgemein die Ausführung von
Programmen (Software-Codes) durch einen integrierten Mikroprozessor.
Die Erfindung betrifft näherhin
und speziell die Kontrolle der Integrität eines Programms bei seiner
Ausführung, um
zu überprüfen, dass
das Programm seit seiner Installierung nicht absichtlich oder zufällig verändert wurde.
Derartige Änderungen
können
von Informatikviren herrühren
oder von Piraterieversuchen, die insbesondere in der Injektion von
Fehlern in die Ausführung
von Programmen bestehen.
-
Ein
Angriff mittels Injektion von Fehlern, beispielsweise als Fehllenkung
bezeichnet, kann darin bestehen, dass in der Stromspeisung des Prozessors
während
eines kurzen Zeitraums eine Störung eingeführt wird.
Ein derartiger Angriff ruft einen unbeabsichtigten Sprung in der
Sequenz der Programmausführung
hervor. Zumeist tritt ein derartiger Angriff auf, wenn das Programm
sich in einer Schleife befindet oder angehalten wurde infolge eines
Sperrbefehls nach einem Berechtigungs-Versagen, beispielsweise in
einer Anwendung, wo ein Prozessor entscheiden muss, ob eine spezielle
Operation autorisiert ist (beispielsweise im Falle von Bankkarten, Autorisation
einer Banküberweisung
nach Authentifizierung des Benutzers).
-
Ein
anderer Typ von Angriff, der die Ausführung eines Cryptographie-Algorithmus
berührt,
besteht darin, dass man den Programmzähler springen lässt, um
einen unerwarteten Sprung in der Ausführungsfrequenz hervorzurufen,
selbst wenn das Programm nicht in einer Schleife während einer
Berechtigungsprüfung
angehalten wurde. Beispielsweise können für crypto graphische, d. h. Verschlüsselungs-Algorithmen
(DAS, RSA, DES, AES usw.) die geheimen Schlüssel mittels einer Befehlssprünge hervorrufenden
Piraterie aufgedeckt werden.
-
Um
den Software-Code während
seiner Ausführung
zu schützen,
sieht man im allgemeinen eine periodische Überprüfung dieses Codes ausgehend von
einem Authentifizierungsschlüssel
vor, der in einem Speicher oder in der integrierten Schaltung gespeichert
ist, beispielsweise bei der anfänglichen Speicherung
des Programms oder seiner Installation.
-
Beispielsweise
berechnet man bei der Installation oder dem Schreiben des Programms
eine Signatur (Anwendung eines Chiffrier-Algorithmus auf wenigstens
einen Teil des Software-Codes). Diese Signatur wird sodann innerhalb
oder außerhalb
der das Programm ausführenden
integrierten Schaltung gespeichert. Bei der Ausführung des Software-Codes berechnet
das Betriebssystem sodann erneut eine Signatur auf der Grundlage
desselben Algorithmus wie dem, der bei der Erzeugung der anfänglichen
Signatur verwendet wurde. Man vergleicht sodann die laufende Signatur
mit der vorbestimmten Signatur. Eine Abweichung zwischen den beiden
Signaturen bedeutet, dass das gespeicherte Programm verändert wurde,
und ermöglicht
daher die Identifizierung eines möglichen ungewollten oder zufälligen Angriffs.
-
Ein
Beispiel eines derartigen Verfahrens zur Integritätsprüfung ist
in der Amerikanischen Patentschrift 5 442 645 beschrieben.
-
Ein
Nachteil der bekannten Lösungen
ist, dass im Falle einer Aktualisierung des Software-Codes durch
eine neuere Version es dann notwendig ist, die vorgegebene Signatur
zu aktualisieren. Eine derartige Aktualisierung kann insbesondere
bei häufiger Aktualisierung
des Systems lästig
sein.
-
Im übrigen kommen
Aktualisierungen von Programmen immer mehr über Kommunikationsnetze vom
Internet-Typ, es ist daher nicht erwünscht, die Signaturberechnungen
zu vervielfachen, die in der integrierten Schaltung auf Seiten des
Benutzers wieder aufgezeichnet werden müssen.
-
Ein
anderer Nachteil der herkömmlichen
Lösungen
ist, dass die Integritätsprüfung statisch
ist, d. h. zu Beginn des Programms wird überprüft, ob die Signatur autorisiert
ist. Demzufolge ist ein derartiges Schutzsystem in der Praxis unwirksam,
falls Fehler im Verlauf der Ausführung
des Programms injiziert werden.
-
Das
Dokument WO 0 169 356 zeigt eine Vorrichtung zur Detektion eines
Informatikvirus, bei der die Zahl von Okkurenzen (Auftreten, Vorkommen)
jedes Befehls oder jeder Befehlsgruppe während der Ausführung des
Programms im Inneren einer virtuellen Maschine gezählt wird.
-
Die
vorliegende Erfindung bezweckt die Schaffung eines Verfahrens zur
Integritätsüberprüfung eines
Programms im Verlauf der Ausführung, bei
dem die Nachteile der bekannten Lösungen vermieden oder verringert
werden.
-
Die
Erfindung bezweckt insbesondere die Schaffung einer Lösung, welche
nicht die jedesmalige Aktualisierung einer Signatur bei jeder Aktualisierung
des zu schützenden
Software-Codes erfordert.
-
Die
Erfindung bezweckt auch die Ermöglichung
einer dynamischen Überprüfung, d.
h. einer Überprüfung, welche
die Detektion der Einführung von
Fehlern im Verlauf der Ausführung
des Programms gestattet.
-
Zur
Erreichung dieser und weiterer Ziele sieht die vorliegende Erfindung
vor ein Verfahren zur Kontrolle der Ausführung eines Programms unter
Benutzung aufeinanderfolgender Operationen, wobei das Verfahren
darin besteht, dass
- – während der Ausführung des
Programms jeweils jede Operation mit einer vor-erstellten Liste verglichen
wird und für
jede in der Liste enthaltene Operation eine Zahl von Okkurenzen,
d. h. Auftritten bzw. Vorkommen dieser Operation, inkrementiert
und gespeichert wird, sowie
- – zum
Ende der Ausführung
des Programms die Zahl von Okkurenzen der laufenden Ausführung des
Programms für
jede Operation mit zuvor gespeicherten und jeder Operation zugeordneten Bereichen
von Okkurenzzahlen verglichen wird.
-
Gemäß einer
Ausführungsform
der vorliegenden Erfindung werden die genannten Bereiche von Werten
durch Analyse der möglichen
statistischen Abstände
der Okkurenzzahlen bei einer oder mehreren Ausführungen des Programms bestimmt.
-
Gemäß einer
Ausführungsform
der vorliegenden Erfindung werden die laufenden Okkurenzzahlen in
einer Tabelle gespeichert.
-
Gemäß einer
Ausführungsform
der vorliegenden Erfindung wird der Inkrementbetrag als Funktion
der Art bzw. Natur und/oder der Stellung der Operation in dem Programm
gewichtet.
-
Die
Erfindung sieht auch einen Prozessor zur Ausführung eines Programms vor,
der eine Zone zur Speicherung einer Tabelle von Okkurenzzahlen von Operationen
während
der Ausführung
eines Programms umfasst.
-
Diese
und weitere Ziele, Gegenstände, Merkmale,
Eigenschaften und Vorteile der vorliegenden Erfindung werden in
der folgenden nicht-einschränkenden
Beschreibung spezieller Ausführungsbeispiele
im einzelnen auseinandergesetzt, unter Bezugnahme auf die beigefügte Zeichnungsfigur,
welche in sehr schematischer Form eine Ausführungsform der vorliegenden
Erfindung veranschaulicht.
-
Aus
Gründen
der Klarheit und Übersichtlichkeit
sind nur die für
das Verständnis
der Erfindung notwendigen Elemente und Stufen dargestellt und im folgenden
beschrieben. Insbesondere wurden die von der Ausübung der Erfindung betroffenen
Operatoren oder Befehle nicht im einzelnen detailliert, da die Erfindung
unabhängig
vom jeweiligen Typ des Operators anwendbar ist. Des weiteren wurden sämtliche
Bestandteile, die für
die Ausführung
eines Programms, sei es mittels einer Software oder mittels einer
Maschine mit verdrahteten Logikzuständen, notwendig sind, nicht
im einzelnen detailliert, da es sich hierbei um die Anwendung herkömmlicher
Elemente handelt.
-
Ein
Merkmal der vorliegenden Erfindung ist, im Verlauf der Ausführung eines
zu überwachenden Programms
die Anzahl von Okkurenzen, d. h. des Auftretens bzw. Vorkommens
von Operatoren, Befehlen oder vorgegebenen Gruppen von Befehlen
zu kumulieren und am Ende der Ausführung des Programms zu kontrollieren,
dass die Zahlen detektierter Okkurenzen in einem Bereich zulässiger Werte
bleiben für
die Annahme, dass das eben ausgeführte Programm authentisch ist.
-
Vorzugsweise
werden die Bereiche zulässiger Änderungen
in statistischer Weise in Abhängigkeit
von dem jeweiligen Typ des betreffenden Operators, Befehls oder
der betreffenden Befehlsgruppe berechnet. Für eine derartige Bestimmung
trägt man insbesondere
der mittleren Frequenz bzw. Häufigkeit des
Auftretens einer gegebenen Operation in einem Programm Rechnung.
-
Im
folgenden wird der Ausdruck Operator oder Operation verwendet, um
die Elemente des Programms zu bezeichnen, deren Okkurenz-Zahlen (Zahlen
von Auftritten bzw. Vorkommen) gemäß der Erfindung überwacht
werden. So kann eine Operation ein Operations-Code, ein Befehl oder
eine Gruppe von Befehlen (beispielsweise der Zugriff auf eine Speicheradresse
oder auf ein Register, sei es zum Lesen oder zum Schreiben eines
Datums oder zur Ausführung
eines gespeicherten Codes) sein und allgemeiner jedes digitale Element,
das sich zur Überwachung
nach der Zahl seines Auftretens in einem Informatikprogramm eignet.
-
Gemäß einer
bevorzugten Ausführungsform wird
weiterhin eine Tabelle von Okkurenzen der zu überwachenden Operationen berechnet
und bei einer oder mehreren Ausführung(en)
des Programms (beispielsweise mit Zufallsdaten) gespeichert und hieraus
werden Statistiken abgeleitet oder, als Variante, bei der Konzeption
oder der Installation des Programms.
-
Die
beigefügte
Zeichnungsfigur veranschaulicht, in sehr schematischer Weise und
in Blockform, eine Ausführungsform
des Verfahrens gemäß der Erfindung.
Diese Figur veranschaulicht die Ausführung eines Programms, das
mit dem Verfahren der Erfindung überwacht
werden soll.
-
Beim
Start eines Programms (Block 1, START) werden bestimmte
Bestandteile bzw. Komponenten in herkömmlicher Weise initialisiert
(beispielsweise der Programmzähler).
Gemäß der Erfindung
nutzt man diese Initialisierungsstufe (Block 2, INIT(j,
Nb, ...)) zur Initialisierung einer gespeicherten Tabelle 10 von
Okkurenzen, die innerhalb oder außerhalb der das Programm ausführenden
integrierten Schaltung gespeichert ist. Diese Tabelle 10 ordnet
gemäß der Erfindung
jeweils jedem Typ TYPE von zu überwachender
Operation OPEi eine Zahl Nbi von Auftritten bzw. Okkurenzen dieser
Operation während
der Ausführung
des Programms zu.
-
Die
Okkurenzen-Tabelle und insbesondere die Typen von zu überwachenden
Operationen werden gemäß einer
Ausführungsform
zu Beginn des ausgeführten
Programms definiert. Als Abwandlung oder Alternative werden für ein gegebenes
Werkzeug (integrierte Schaltung) bestimmte Operationen, deren Okkurenz-Zahlen
unabhängig
von dem Programm, das jeweils ausgeführt wird, überwacht werden sollen, vorher
definiert.
-
In
herkömmlicher
Weise besteht die Ausführung
eines Programms in der aufeinanderfolgenden Ausführung (Block 3, EXECUTE
OPj) der verschiedenen Befehle, Operatoren
oder Gruppen von Befehlen, bis zum Ende des Programms. So kann man
diese Ausführung
durch eine Schleife symboli sieren, in welcher man jedes Mal bei
Beendigung einer Operation zur Ausführung des nächsten Operators übergeht
(Block 4, NEXTj).
-
Gemäß der Erfindung
führt man
innerhalb der Ausführungsschleife,
d. h. unmittelbar nach der Ausführung
einer Operation (Block 3), eine Funktion (Block 5,
Nbi(OPj)+1) der
Inkrementierung der Okkurenz-Zahl der laufenden Operation in der
Tabelle 10 aus.
-
Die
Durchführung
einer derartigen Funktion liegt im Bereich des fachmännischen
Könnens,
ausgehend von den in der vorliegenden Beschreibung gegebenen funktionellen
Hinweisen. Vereinfacht gesagt handelt es sich um eine einfache Identitätssuchfunktion
zwischen der laufenden Operation und einer vorerstellten Liste der
Tabelle 10, und wenn die Operation einer aus der Liste
entspricht, inkrementiert man in dieser Tabelle den Zähler der
Okkurenzen-Zahl.
-
Sobald
die Ausführung
des Programms beendet ist, d. h. wenn es keine zu behandelnde Operation
OPj mehr gibt, endet das mit der betreffenden Anwendung
verknüpfte
Programm selbst. Man führt dann
eine spezielle Funktion (Block 6, STAT Nb) gemäß einer
bevorzugten Ausführungsform
der Erfindung aus, die darin besteht, dass man aus einem vorzugsweise
nichtflüchtigen
Speicher, aus einer externen Abfrage an einen Daten-Server usw.
eine voretablierte Tabelle statistischer Okkurenzen auszieht.
-
Sodann
vergleicht man (Block 7, COMP Nb) die laufenden Okkurenz-Zahlen
der Tabelle 10 relativ mit dem Bereich zulässiger Werte
nach der statistischen Tabelle 6.
-
Wenn
die laufenden Zahlen in den zulässigen
Bereichen liegen, endet das Programm (Block 8, END) in
normaler Weise. Im gegenteiligen Fall erzeugt das Verfahren der
Erfindung eine Alarmmeldung bzw. -botschaft (Block 9, ERROR).
-
Die
Referenztabelle wird beispielsweise bei der Installation des Programms
berechnet oder bei seiner ersten Ausführung, zur Bestimmung der Anzahl
von Okkurenzen der verschiedenen für die Anwendung der Erfindung
bedeutsamen Operationen.
-
Die
Sammlung statistischer Informationen über das Auftreten der Operationen
des Programms gestattet die Überprüfung bei
späteren
Anwendungen, dass es keinen im statistischen Sinn signifikanten
Abstand zwischen den gespeicherten vorbestimmten Werten und den
laufenden Werten gibt. Wenn so auf dem betreffenden Träger eine
Aktualisierung des Programms registriert wird, besteht kein Grund
für eine Änderung
seiner statistischen Signatur. Falls es hingegen zu einem Piraterieversuch durch
Fehlerinjektion kommt oder wenn eine Einführung eines Virus die Funktion
des Programms stört, wird
die statistische Signatur verschieden, was die Detektion einer Art
von Fehlerwahrscheinlichkeit gestattet. Gemäß einer speziellen Ausführungsform
ist es dabei möglich,
nur die partiellen Statistiken betreffend den Teilen des Programms
zu speichern, die als am kritischsten oder als am wenigsten einer Änderung
unterworfen angesehen werden.
-
Gemäß einer
anderen Ausführungsform kann
man dabei eine zeitliche oder Lage- bzw. Stellungsgewichtung in
dem Programm der Okkurenz-Statistiken der Operationen anwenden in
dem Maß,
in dem, beispielsweise was die Informatikviren betrifft, man weiß, dass
diese prioritär
den Beginn des Programms modifizieren werden, mit dem Ziel, sich
als erstes zur Ausführung
zu bringen und sodann Platz für
das anfängliche
Programm zu lassen. In diesem Fall werden die verwendeten ersten
Operator-Codes einen höheren
Gewichtungskoeffizienten erhalten, um leichter einen Betrugsversuch
nachzuweisen.
-
Zur
Auswahl der Operationen, deren Okkurenz-Zahl man zu überwachen
wünscht,
kann man den Typ von Operation in Rechnung stellen, den man zu überwachen
sucht. Wenn beispielsweise das Verfahren der Erfindung speziell
zur Detektion der Anwesenheit eines Informatikvirus bestimmt ist, kann
man insbesondere die Schreiboperationen im Speicher zu überwachen
suchen, im Wissen, dass es dieser Typ von Operationen ist, den ein
Informatikvirus in privilegierter Weise bewirkt.
-
Die
Wahl der Typen von Operationen, Befehlen, Befehlsgruppen, die hinsichtlich
der Okkurenz-Zahl untersucht werden sollen, liegt im Bereich des
fachmännischen
Könnens,
in Abhängigkeit
von der Anwendung und dem betreffenden Programmtyp. Beispielsweise
kann man die Zahl von Zugriffen auf den äußeren Speicher, die Zahl von
Multiplikationen, die Zahl von Ladevorgängen von Zufallsdaten usw.
zählen.
-
Ein
Vorteil der Erfindung ist, dass im Falle einer Aktualisierung des
Programms die statistische Signatur dieselbe bleibt. Insbesondere ändern sich die
konstitutiven Operationen eines Algorithmus vom Typ DES (Data Enscription
Standard) von einer Version zu einer anderen nicht.
-
Ein
anderer Vorteil der Erfindung ist, dass die Überprüfung am Ende der Ausführung des
Programms erfolgt. So können
die Injektionen von Fehlern detektiert werden.
-
Selbstverständlich ist
die vorliegende Erfindung verschiedenen Abwandlungen und Modifikationen
zugänglich,
die sich für
den Fachmann ergeben. Insbesondere hängen die Zahl und der Typ von
Operationen von dem Programm ab, dessen Ausführung man zu überwachen
wünscht.
-
Außerdem kann
die statistisch akzeptable Toleranz für die Okkurenz-Zahlen der überwachten Operationen
in der Praxis der Festlegung eines Schwellwerts um einen vorbestimmten
Wert bei der ersten Ausführung
des Programms entsprechen. In dieser Hinsicht erkennt man, dass
der Toleranzbereich um diesen Wert herum nicht nur dazu dient, die Installation
von Aktualisierungen ohne Notwendigkeit einer Modifikation der vorregistrierten
Okkurenz-Tabelle zu ermöglichen,
sondern auch um der Tatsache Rechnung zu tragen, dass bestimmte
Operationen von einer Ausführung
der Software zu einer anderen unterschiedlich oft ausgeführt werden
können
(beispielsweise Operatoren vom Typ Anzahl von Durchgängen in
einer Schleife, die von einem Eingangsdatum abhängt, Anzahl von Erhebungen
ins Quadrat und von Multiplikationen, die vom Exponenten der modularen
Exponentenerhebung abhängt
(sogenannte ,Square-Multiply'),
oder Anzahl der Ausführungen
einer elementaren Funktion des Schreibens in einen Speicher, die
von der Größe des zu
schreibenden Datums abhängt).