-
Hintergrund der Erfindung
-
Technisches Gebiet
-
Die vorliegende Erfindung bezieht sich im Allgemeinen darauf, bösartige Software zu vermeiden, und im Besonderen auf ein Verfahren, um bösartige Software an der Ausführung innerhalb eines Rechnersystems zu hindern.
-
Beschreibung verwandter Technik
-
Bösartige Softwares, wie zum Beispiel Computerviren, können auf viele Arten auf ein Rechnersystem gelangen. Zum Beispiel können sie über eine Platte auf ein Rechnersystem gelangen, die in das Rechnersystem eingelegt wird, oder sie können über eine E-Mail in das Rechnersystem gelangen, die von einem Benutzer des Rechnersystems geöffnet wird. Bösartige Software kann Probleme am Rechnersystem verursachen, wenn sie innerhalb des Rechnersystems ausgeführt wird. Zum Beispiel kann die Computersicherheit gefährdet werden, oder Dateien innerhalb des Rechnersystems können zerstört werden.
-
Bestimmte Arten bösartiger Software können leicht mit Hilfe von einfachen Entdeckungsverfahren festgestellt werden, wie zum Beispiel nach einer Suchzeichenfolge zu scannen. Jedoch kann diese Art von Entdeckungsverfahren auch leicht durch das Umwandeln von bösartigem Code mittels Kompression oder Verschlüsselung untergraben werden, wodurch Scanfilter umgangen werden. Ein anderer Ansatz dazu, bösartige Software festzustellen, ist es ein Programm auszuführen in dem versucht wird, bösartige Aktionen während dieser Programmausführung abzufangen. Dieses Verfahren, das als Behavior Blocking bekannt ist, weist eine Reihe von Nachteilen auf. Trotz des Versuchs, bösartige Aktionen abzufangen, kann das Programm dennoch Schaden am Rechnersystem verursachen. Weiterhin kann der Mechanismus des Behavior Blocking bei der Durchführung der Bestimmung zu einer Blockierung typischerweise kein vollständiges Protokoll von Aktionen darstellen. Daher kann der Mechanismus des Behavior Blocking Blockierungsentscheidungen treffen, die nicht optimal sind, dies bedeutet, dass harmlose Programme geblockt werden können, während es schädlichen Programmen erlaubt werden kann abzulaufen.
-
Noch ein anderer Ansatz dazu, bösartige Software festzustellen, ist es, verdächtigen Code innerhalb einer isolierten Umgebung eines Rechnersystems zu emulieren, so dass das Rechnersystem vor bösartigen Aktionen des verdächtigen Codes geschützt ist. Ein Nachteil der Emulation ist, dass sie, während sie Teile des Rechnersystems vor Virenangriffen schützen kann, selbst nicht geschützt ist. Außerdem können Daten infiziert werden, was zu einer Lücke in der isolierten Umgebung führen kann.
-
Die Druckschrift
US 2005 / 0 071 664 A1 beschreibt ein Verfahren zur Verschlüsselung von Anwendungen, wobei eine Permutation über eine Menge von Anweisungen innerhalb eines Anwendungsprogramms ausgeführt wird, um vor jeder tatsächlichen Ausführung des Anwendungsprogramms eine permutierte Folge von Anweisungen zu erzielen. Weiter wird eine Permutationsfolgenummer der permutierten Folge von Anweisungen in einer permutierten Anweisungszeigertabelle gespeichert und die permutierte Folge von Anweisungen in einem Ausführungsmodell ausgeführt, welches dazu in der Lage ist, die permutierte Folge von Anweisungen in einen tatsächlichen Maschinencode eines Prozessors zu übersetzen entsprechend der Permutationsfolgenummer der permutierten Folge von Anweisungen, welche in der Anweisungszeigertabelle gespeichert ist.
-
Die Druckschrift
US 2005 / 0 071 653 A1 beschreibt ein Verfahren zur Verschlüsselung von Anwendungen, wobei eine Permutation über einer Menge oder über einer Untermenge von Anweisungen innerhalb eines Anwendungsprogramms ausgeführt wird, um vor jeder tatsächlichen Ausführung des Anwendungsprogramms eine permutierte Folge von Anweisungen zu erzielen. Die permutierte Folge von Anweisungen wird weiter in einem Ausführungsmodul ausgeführt, welches dazu in der Lage ist die permutierte Folge von Anweisungen in einen tatsächlichen Maschinencode eines Prozessors zu übersetzen.
-
Die Druckschrift
US 2005 / 0 188 171 A1 beschreibt ein Verfahren, um bösartige Software an der Ausführung innerhalb eines Rechnersystems zu hindern. Dabei wird eine Permutation auf einer Menge von Anweisungen innerhalb eines Anwendungsprogramms ausgeführt, um vor jeder tatsächlichen Ausführung des Anwendungsprogramms eine permutierte Folge von Anweisungen zu erzielen, wobei die Permutation auf Basis von gespeicherten Tabellen erfolgt. Weiter ist ein Ausführungsmodul vorgesehen, welches dazu in der Lage ist die permutierte Folge von Anweisungen in einen tatsächlichen Maschinencode eines Prozessors zu übersetzen.
-
Es wäre folglich wünschenswert, ein verbessertes Verfahren zur Verfügung zu stellen, um die Ausführung bösartiger Software innerhalb eines Rechnersystems zu verhindern.
-
Zusammenfassung der Erfindung
-
Entsprechend einer bevorzugten Ausführungsform der vorliegenden Erfindung wird eine Permutation über eine Untermenge von Anweisungen innerhalb eines Anwendungsprogramms ausgeführt, um vor jeder tatsächlichen Ausführung eines Anwendungsprogramms auf einem Rechnersystem eine permutierte Folge von Anweisungen zu erzeugen. Eine Permutationsfolgenummer der permutierten Folge von Anweisungen wird in einer permutierten Anweisungszeigertabelle gespeichert. Die permutierte Folge von Anweisungen wird in einem Ausführungsmodul ausgeführt, das dazu in der Lage ist, entsprechend der Permutationsfolgenummer der permutierten Folge von in der permutierten Anweisungszeigertabelle gespeicherten Anweisungen die permutierte Folge von Anweisungen in einen tatsächlichen Maschinencode eines Prozessors innerhalb des Rechnersystems zu übersetzen.
-
Alle Merkmale und Vorzüge der vorliegenden Erfindung werden aus der folgenden detaillierten schriftlichen Beschreibung offensichtlich.
-
Figurenliste
-
Sowohl die Erfindung selbst, wie auch eine bevorzugte Art der Anwendung, weitere Ziele und deren Vorzüge werden am besten unter Bezugnahme auf die folgende detaillierte Beschreibung einer veranschaulichenden Ausführungsform verstanden, wenn sie in Verbindung mit den begleitenden Zeichnungen gelesen werden, in denen:
- 1 eine konzeptionelle Ansicht eines Verfahrens zeigt, um bösartige Software entsprechend einer bevorzugten Ausführungsform der vorliegenden Erfindung an der Ausführung innerhalb eines Rechnersystems zu hindern;
- 2 ein Blockdiagramm einer EDV-Umgebung zeigt, in die eine bevorzugte Ausführungsform der vorliegenden Erfindung integriert ist; und
- 3a bis 3d eine Folge beschreiben, in welcher Anweisungen entsprechend einer bevorzugten Ausführungsform der vorliegenden Erfindung permutiert werden.
-
Detaillierte Beschreibung einer bevorzugten Ausführungsform
-
Typischerweise gibt es mehrere Ebenen von Befehlssätzen innerhalb eines Rechnersystems. Die erste (unterste) Ebene sind die Anweisungen auf Maschinenebene und die zweite Ebene umfasst die binären Schnittstellenanweisungen der Betriebssystemanwendung. Auf dieser zweiten Ebene hat das Betriebssystem einige der Anweisungen auf Maschinenebene abstrahiert, damit diese leichter verstanden werden können. Die dritte Ebene ist die der Anweisungen auf Makroebene, auf der eine Anwendung die Steuerung des Rechnersystems weiter abstrahiert hat, um es zu ermöglichen, dass die Programmierung erleichtert wird.
-
Da viele Verfahren dem Schutz der zweiten und dritten Ebene von Anweisungen gewidmet worden sind, wird die vorliegende Erfindung einzig auf den Schutz der ersten Ebene von Anweisungen ausgerichtet, besonders da dies die Ebene ist, die von vielen Computerviren verwendet wird.
-
Allgemein gesprochen ist es unwahrscheinlich, wenn nicht unmöglich, ein Programm auf Maschinenebene zu schreiben, das innerhalb eines Rechnersystems ausgeführt werden kann, ohne den Befehlssatz eines Prozessors innerhalb des Computersystems auf Maschinenebene zu kennen. Außerdem erfordert eine Installation von Software auf einem Rechnersystem, dass die Software den Befehlssatz des Rechnersystems zuerst versteht, auf dem sie installiert wird. Entsprechend einer bevorzugten Ausführungsform der vorliegenden Erfindung wird daher ein Anwendungsprogramm anfangs in einen Satz aus kreuzkompiliertem Code des Anwendungsprogramms umgewandelt, und der Satz des kreuzkompilierten Codes des Anwendungsprogramms wird dann innerhalb eines Ausführungsmoduls ausgeführt, das dazu in der Lage ist, den Satz des kreuzkompilierten Codes des Anwendungsprogramms zu erkennen.
-
Sich jetzt auf die Zeichnungen und im Besonderen auf 1 beziehend, wird eine konzeptionelle Sicht auf eine Verfahren dafür beschrieben, bösartige Software an der Ausführung innerhalb eines Rechnersystems entsprechend einer bevorzugten Ausführungsform der vorliegenden Erfindung zu hindern. Wie gezeigt, umfasst ein Rechnersystem 10 ein Umsetzungsmodul 11 und ein Ausführungsmodul 12. Jedes Anwendungsprogramm, das innerhalb des Rechnersystems 10 ausgeführt werden soll, muss einen Installationsprozess durchlaufen. Während des Installationsprozesses kann ein Benutzer des Rechnersystems 10 entscheiden, ob ein Anwendungsprogramm innerhalb des Rechnersystems 10 installiert werden soll oder nicht. Wenn der Benutzer entscheidet, dass das Anwendungsprogramm innerhalb des Rechnersystems 10 installiert werden soll, wird das Anwendungsprogramm dann an das Umsetzungsmodul 11 gesandt, in dem das Anwendungsprogramm in einen Satz aus kreuzkompiliertem Code des Anwendungsprogramms umgewandelt wird. Der Satz aus kreuzkompiliertem Code des Anwendungsprogramms kann anschließend innerhalb des Ausführungsmoduls 12 ausgeführt.werden, das dazu in der Lage ist, den Satz des kreuzkompilierten Codes des Anwendungsprogramms zu erkennen und in den tatsächlichen Maschinencode des Prozessors zu übersetzen.
-
Ohne den Installationsprozess zu durchlaufen, ist ein Anwendungsprogramm nicht dazu in der Lage, von dem Ausführungsmodul 12 ausgeführt zu werden. Wie zum Beispiel an einem unzulässigen Weg 15 gezeigt wird, kann ein Virenprogramm, selbst wenn sich das Virenprogramm ohne die Entdeckung eines Benutzers und ohne das Wissen des Benutzers in das Rechnersystem 10 eingeschlichen hat, immer noch nicht durch das Ausführungsmodul 12 ausgeführt werden, weil das Virenprogramm den Installationsprozess nicht durchlaufen hat. Auf diese Weise ist das Rechnersystem 10 sicher vor dem potentiellen Schaden, der vom Virenprogramm hätte verursacht werden können.
-
In der Praxis sollten das Umsetzungsmodul 11 und das Ausführungsmodul 12 von einander isoliert sein. In der Tat sollte das Ausführungsmodul 12 daran gehindert werden, Code aus irgendeiner Quelle außer dem Umsetzungsmodul 11 zu akzeptieren.
-
Mit Bezugnahme jetzt auf 2, wird ein Blockdiagramm einer EDV-Umgebung beschrieben, in die eine bevorzugte Ausführungsform der vorliegenden Erfindung integriert ist. Wie dargestellt umfasst ein Rechnersystem 20 eine Hardwareanordnung 21, einen virtuellen Maschinenmanager (VMM) oder Hypervisor 22 und virtuelle Maschinen 23a bis 23b. Die virtuellen Maschinen 23a und 23b befinden sich vorzugsweise in separaten Partitionen so dass jede Ausführung innerhalb der virtuellen Maschine 23a isoliert von der virtuellen Maschine 23b abläuft, oder umgekehrt. Der VMM 22 steuert die gesamte Kommunikation zwischen den virtuellen Maschinen 23a und 23b. Außerdem kann der VMM 22 direkt mit der Hardwareanordnung 21 kommunizieren. Die Hardwareanordnung 21 umfasst solche bekannten Anordnungen wie Prozessoren, Register, Datenspeicherverwaltungseinheiten, Datenspeichervorrichtungen, Ein-/Ausgabevorrichtungen usw.
-
Ein Betriebssystem und mehrere Anwendungsprogramme können gleichzeitig innerhalb jeder von den virtuellen Maschinen 23a bis 23b ausgeführt werden. Zum Beispiel werden ein Betriebssystem 24 und ein Anwendungsprogramm 25 innerhalb der virtuellen Maschine 23a ausgeführt, während ein Betriebssystem 26 und ein Anwendungsprogramm 27 innerhalb der virtuellen Maschine 23b ausgeführt werden.
-
Obwohl es nicht erforderlich ist, kann das Betriebssystem 24 unterschiedlich sein zu dem Betriebssystem 26. Zum Beispiel kann Betriebssystem 24 ein Open Source Linux Betriebssystem sein, während das Betriebssystem 25 ein Windows® Betriebssystem sein kann, das von der Microsoft Corporation hergestellt wird. Auf ähnliche Weise kann der durch die virtuelle Maschine 23a emulierte, zugrunde liegende Prozessor ebenfalls ein anderer sein als der von der virtuellen Maschine 23b emulierte, zugrunde liegende Prozessor. Zum Beispiel kann der durch die virtuelle Maschine 23a emulierte zugrunde liegende Prozessor ein Pentium® Prozessor sein, hergestellt durch die Intel Corporation, während der durch die virtuelle Maschine 23b emulierte zugrunde liegende Prozessor ein PowerPC® Prozessor sein kann, der von der International Business Machines Corporation hergestellt wird.
-
Jede der virtuellen Maschinen 23a bis 23b, die ihr Betriebssystem und zugehörige Anwendungsprogramme umfasst, läuft auf Benutzerebene ab. Wenn der VMM 22 die direkte Ausführung verwendet, wird der VMM 22 auf einen so genannten Benutzermodus (das heißt mit reduzierten Berechtigungen) eingestellt, so dass keine von den virtuellen Maschinen 23a bis 23b direkt auf die verschiedenen privilegierten Register zugreifen kann, die den Betrieb der Hardwareanordnung 21 steuern. Vielmehr werden alle privilegierten Anweisungen im VMM 22 abgefangen.
-
In 2 wird gezeigt, dass die virtuelle Maschine 23a einen Kreuzcompiler 28 für die Ausführung des initialen Kreuzkompilierens von Anwendungsprogrammen umfasst. Außerdem wird gezeigt, dass die virtuelle Maschine 23b ein Ausführungsmodul 29 für das Ausführen des kreuzkompilierten Codes der Anwendungsprogramme umfasst. Das Kreuzkompilieren wird vorzugsweise mit Hilfe eines Permutationsalgorithmus ausgeführt und die Ergebnisse werden in einer permutierten Anweisungszeigertabelle 30 gespeichert. Die permutierte Anweisungszeigertabelle 30 umfasst mehrere Einträge von Permutationsfolgen. Jede der Permutationsfolgen steht in Beziehung mit einem Satz von kreuzkompiliertem Code eines Anwendungsprogramms. Es ist wahrscheinlich, dass alle der Permutationsfolgen innerhalb der permutierten Anweisungszeigertabelle 30 unterschiedlich zu einander sind, obwohl es nicht erforderlich ist, dass sie unterschiedlich zu einander sind. In 2 wird die permutierte Anweisungszeigertabelle 30 als innerhalb des VMM 22 angeordnet dargestellt; die permutierte Anweisungszeigertabelle 30 kann jedoch auch innerhalb der virtuellen Maschine 23a angeordnet werden, vorausgesetzt, dass auf sie auch von der virtuellen Maschine 23b zugegriffen werden kann.
-
Ein beispielhaftes Verfahren dafür, Permutationen auszuführen, ist wie folgt. Zuerst wird zum Zweck der Permutation eine Untermenge von Anweisungen n aus einer Gruppe von Anweisungen ausgewählt. Nicht alle Anweisungspermutationen wären gleichermaßen nützlich. Zum Beispiel wären Permutationen von Identitätsanweisungen von überhaupt keinem Nutzen. Daher sollten bestimmte Maschinenanweisungen (wie eine JUMP Anweisung) als kritische Anweisungen identifiziert werden, um sicherzustellen, dass alle kritischen Anweisungen permutiert werden.
-
Es gibt mehrere Wege, Permutationen zu erzeugen. Ein Verfahren ist, eine Hashfunktion oder eine auf Verschlüsselung basierte Funktion zu verwenden, so dass jede Anweisung in einem Datensegment eine andere Abbildung aufweist, das heißt H(A1), H(A2), ..., H(Ai), wobei H die auf einem Hash basierte Funktion ist und A eine Anweisung ist. Das Problem dabei, eine Hashfunktion oder eine auf Verschlüsselung basierte Funktion zu verwenden ist, dass von einem allgemeinen Standpunkt der Kompilierung gleiche Anweisungen verschiedene hashed Ergebnisse aufweisen können. Zum Beispiel können Anweisung A5 und Anweisung A9 dieselbe Anweisung sein, aber H(A5) muss nicht unbedingt gleich mit H(A9) sein.
-
Ein anderes Verfahren nutzt eine andere Abbildungsfunktion P(A), wobei P die Permutation ist und A eine Anweisung ist, wodurch P1(A), P2(A), ..., Pn(A) erzeugt werden. Dieses Verfahren erzeugt ein besser voraussagbares Ergebnis der Kreuzkompilierung, da P1(J), wobei J die vorgegebene Anweisung ist, das ganz Gleiche sein sollte, unabhängig davon, wo es in Codesegmenten erscheint.
-
Eine Permutationsfolge diktiert die Art, wie die Untermenge von Anweisungen n permutiert oder umgewandelt werden soll. Jede Permutationsfolge kann als ein Eintrag betrachtet werden, der mehrfache Slots umfasst und jeder Slot muss mit einer Anweisungszahl gefüllt werden. Um eine r-te Permutationsfolge zu erzeugen, wird anfangs eine Zufallszahl zwischen 0 und n! - 1 ausgewählt. Wenn zum Beispiel die Untermenge von Anweisungen n, die permutiert werden muss, 5 ist (das bedeutet, dass es 5! = 120 Permutationsfolgen gibt), kann eine Zufallszahl 101 zwischen 0 und 5! - 1 als die 101-ste Permutationsfolge ausgewählt werden.
-
Die Position Pos des Slots der ersten Anweisungszahl wird durch den Teiler aus der gewählten Zufallszahl r geteilt durch (n - 1)! wie folgt gekennzeichnet:
-
Der Rest der Division ersetzt die gewählte Zufallszahl r für die Bestimmung der Position Pos des Slots für die anschließende Anweisungszahl, bis alle der Slots mit Anweisungszahlen geüllt sind. Für jede Bestimmung wird n im Nenner (n - 1)! um eins vermindert.
-
Auf diese Weise ist für die gewählte Zufallszahl 101 die Position des Slots der ersten Anweisungszahl 101 / (5 - 1)! = 4, wie in 3a gezeigt. Der Rest von 101 / (5 - 1)! ist 5 und die Position des Slots der zweiten Anweisungszahl ist 5 / (4 - 1)! = 0 wie in 3b gezeigt. Der Rest von 5 / (4 - 1)! ist 5 und die Position des Slots der dritten Anweisungszahl ist 5 / (3 - 1)! = 2, wie in 3c gezeigt. Der Rest von 5 / (3 - 1)! ist 1 und die Position des Slots der vierten Anweisungszahl ist 1 / (2 - 1)! = 1, wie in 3d gezeigt. Die fünfte Anweisungszahl geht in die verbleibende offene Position des Slots.
-
Die Permutationsfolge „25431“ wird dann als ein Eintrag für die 101-ste Permutationsfolge in die permutierte Anweisungszeigertabelle 30 (gemäß 2) eingetragen. Ein Anwendungsprogramm kann entsprechend der 101-sten Permutationsfolge über den Kreuzcompiler 28 (gemäß 2) in einen Satz aus kreuzkompiliertem Code permutiert werden. Während der Ausführung kann der Satz des kreuzkompilierten Codes über das Ausführungsmodul 29 (gemäß 2) entsprechend der 101-sten in der permutierten Anweisungszeigertabelle 30 gespeicherten Permutationsfolge ausgeführt werden.
-
Wenn zum Beispiel die fünf Anweisungen, die ausgewählt worden sind, damit sie permutiert werden, ADD, SUBTRACT, JUMP, BRANCH und STORE sind, dann wird jeder dieser Anweisungen eine entsprechende Anweisungszahl zugewiesen, das heißt Anweisung Nummer 1 = ADD, Anweisung Nummer 2 = SUBTRACT, Anweisung Nummer 3 = JUMP, Anweisung Nummer 4 = BRANCH und Anweisung Nummer 5 = STORE. Wenn die 101-ste Permutationsfolge verwendet wird, um das Kreuzkompilieren eines Anwendungsprogramms innerhalb des Kreuzcompilers 28 gemäß 2 auszuführen, wird jedes Auftreten der oben erwähnten fünf Anweisungen innerhalb des Anwendungsprogramms entsprechend der Permutationsfolge „25431“ umgewandelt. Mit anderen Worten wird jede ADD Anweisung innerhalb des Anwendungsprogramms in eine SUBTRACT Anweisung umgewandelt, jede SUBTRACT Anweisung innerhalb des Anwendungsprogramms wird in eine STORE Anweisung umgewandelt, jede JUMP Anweisung innerhalb des Anwendungsprogramms wird in eine BRANCH Anweisung umgewandelt, jede BRANCH Anweisung innerhalb des Anwendungsprogramms wird in eine JUMP Anweisung umgewandelt, und jede STORE Anweisung innerhalb des Anwendungsprogramms wird in eine ADD Anweisung umgewandelt. Eine Umkehrung der oben ausgeführten Umsetzung wird innerhalb des Ausführungsmoduls 29 gemäß 2 während der Ausführung des kreuzkompilierten Codes des Anwendungsprogramms ausgeführt.
-
Die Permutation kann entweder auf eine statische oder eine dynamische Weise ausgeführt werden. Wenn die Permutation auf eine statische Weise ausgeführt wird, dann kann eine Gruppe von Rechnersystemen eingestellt werden, dieselbe Permutationsfolge zu verwenden. Solche eine Praxis wäre für einen IT-Manager leichter, da für eine Kreuzkompilierung von jedem der Anwendungsprogramme nur erforderlich wäre, dass diese einmal während der Installation ausgeführt wird.
-
Wenn die Permutation auf eine dynamische Weise ausgeführt wird, gibt es mehrere Wahlmöglichkeiten. Ein Satz von Permutationsfolgen kann periodisch geändert werden. Das Kreuzkompilieren für diese Permutationen kann einmal ausgeführt werden und dann, jedes Mal wenn ein Rechnersystem gebootet wird, kann dieses einen anderen Satz von kreuzkompilierten Programmen ausführen, basierend auf der Permutationsfolge, die gegenwärtig in Verwendung ist. Weiterhin kann sich die Permutationsfolge jedes Mal zufällig ändern, wenn das Rechnersystem bootet. In einem solchen Fall würde das Kreuzkompilieren „fliegend“ durch einen Kreuzcompiler ausgeführt werden müssen, der auf dem Rechnersystem abläuft.
-
Außerdem kann die Permutationsfolge auch für jedes Anwendungsprogramm geändert werden, und dies kann durch verschiedene Verfahren erreicht werden. Die einfachste Implementierung ist es, den VMM den Signaturhash von einer Anwendung als Schlüssel für einen Datenstromverschlüsselungsalgorithmus verwenden zu lassen und dadurch einen eindeutigen Befehlssatz für dieses Anwendungsprogramm zu erzeugen. Jedes veränderte Anwendungsprogramm (wie zum Beispiel verändert in einem Hauptdatenspeicher auf Grund eines Virus, der einen Pufferüberlauf verursacht) beginnt, einen anderen Befehlssatz zu erzeugen.
-
Alternativ kann der VMM jedes Mal eine Zufallszahl erzeugen, wenn ein Anwendungsprogramm geladen wird, und die Codesegmente des Anwendungsprogramms werden durch eine Datenstromverschlüsselung oder Hash Maschine geleitet (da es nicht reversibel sein muss), um die Kreuzkompilierung zu ändern. Dieses Verfahren liefert einem zusätzlichen Grad der Sicherheit dadurch, dass die Funktion Pn(A) eine konstante Funktion P(A) wird und unvorhersagbar bleibt.
-
Wie beschrieben worden ist, stellt die vorliegende Erfindung ein Verfahren zur Verfügung, um bösartige Software an der Ausführung innerhalb eines Rechnersystems zu hindern. Wenn der VMM eine mit dem Hash jeder permutierten Anwendung in Beziehung stehende Permutation vorhält, die ausgeführt werden soll, dann schlägt sogar ein Samplingangriff (bei dem ein Teil einer permutierte Anwendung irgendwie von einem Angreifer beschafft wird und die Permutation bestimmt wird, auf einen Virus angewandt und dann versandt wird, um eine Infizierung auszuführen) fehl.
-
Es ist auch wichtig zu bemerken, dass, obwohl die vorliegende Erfindung im Kontext eines vollständig funktionierenden Rechnersystems beschrieben worden ist, jene, die in der Technik ausgebildet sind, anerkennen werden, dass die Mechanismen der vorliegenden Erfindung dazu in der Lage sind, in einer Vielfalt von Formen als ein Programmprodukt verteilt zu werden, und dass die vorliegende Erfindung gleich zutreffend ist ohne Rücksicht auf die bestimmte Art des Signal tragenden Mediums, das verwendet wird, um die Verteilung tatsächlich auszuführen. Beispiele für Signal tragende Medien umfassen, ohne Beschränkung, beschreibbare Datenträger wie zum Beispiel Disketten oder Compact Discs und Datenübertragungsmedien, wie zum Beispiel analoge oder digitale Datenübertragungsverbindungen.
-
Während die Erfindung besonders in Bezug auf eine bevorzugte Ausführungsform gezeigt und beschrieben worden ist, wird es von jenen, die in der Technik ausgebildet sind, verstanden werden, dass verschiedene Änderungen in Form und Detail gemacht werden können, ohne vom Geist und dem Schutzumfang der Erfindung abzuweichen.