-
Technisches Gebiet
-
Die Offenbarung betrifft allgemein das Gebiet der Informationssicherheit und insbesondere ein System und ein Computerprogrammprodukt zum Bewahren und nachfolgenden Wiederherstellen eines Zustands eines Programmemulators einer Antivirus-Anwendung.
-
Hintergrund
-
Der Code moderner Software, einschließlich Schadprogramme, bildet einen komplexen Satz von Instruktionen für Sprünge, Aufrufe, Loops und andere Operationen. Es ist zu beachten, dass die auszuführenden Dateien immer komplexer werden, da Programmiersprachen auf hoher Ebene an Beliebtheit zunehmen und auch die Computer-Hardware und Betriebssysteme komplexer sind. Das betrifft sowohl vertrauenswürdige Programme als auch bösartige. Bösartige Programme können mehrere charakteristische Aktionen durchführen, wie das Stehlen von Passwörtern und anderen vertraulichen Nutzerdaten, das Hinzufügen eines Computers zu einem Botnetz, um DDoS-Angriffe durchzuführen oder Spam-Mail zu verschicken, das Blockieren der richtigen Operationen des Systems zu Erpressungszwecken und andere bösartige Aktionen, die von dem Benutzer nicht gewollt sind und das Computersystem des Benutzers schädigen.
-
Einer der Wege, potentiell schädliche Programme zu untersuchen, sind Antivirus-Anwendungen, die einen Programm-Emulator verwenden können, um das Verhalten der Programme zu analysieren. Es gibt verschiedene Emulationsverfahren. Eines davon ist eine Programmimitation des Prozessors, des Speichers und anderer Einrichtungen durch Erstellen virtueller Kopien der Verzeichnisse des Prozessors, des Speichers und des Instruktionssatzes des Prozessors. Somit werden die Programminstruktionen nicht auf dem echten Prozessor, sondern auf seiner virtuellen Kopie ausgeführt, und die Aufrufe der API-Funktionen des Systems werden emuliert, und das emulierte Ergebnis der Arbeit der Funktion wird als Reaktion gesendet.
-
Es ist zu beachten, dass der Prozess der Initialisierung eines Emulators sehr ressourcenintensiv sein kann. Die Initialisierung des Emulators sollte nicht nur das Erstellen einer virtuellen Kopie der notwendigen Hardware (Prozessor, Arbeitsspeicher) umfassen, sondern auch virtuelle Kopien mehrerer Schlüsselkomponenten des Betriebssystems (OS), bei denen die Emulation der Ausführung der Anwendung auftritt. Als Schlüsselkomponenten des OS können zum Beispiel der Kern des Betriebssystems genannt werden, der für dessen notwendige Betriebsmechanismen verantwortlich ist, wie das Verarbeiten von Unterbrechungen und Ausnahmen, Kerntreiber, Speichermanager und so weiter. Für ein richtiges „Nachahmen” (Emulieren) des arbeitenden Betriebssystems muss der Vorgang seines Ladens wiederholt werden, wenngleich in relativ vereinfachter Form.
-
1 zeigt den Vorgang des Ladens des Windows-Betriebssystems. In Schritt 101 kann der Windows Boot-Manager geladen werden, der dafür verantwortlich ist, das installierte OS Windows zu finden und das Auswählen des Ladens eines gefundenen OS zu ermöglichen. Als Nächstes kann in Schritt 102 das Laden der grundlegenden Treiber erfolgen, die beispielsweise dafür verantwortlich sind, ein Arbeiten mit der Festplattenpartition zu ermöglichen, auf der das ausgewählte OS installiert ist (d. h. der Dateisystemtreiber wird geladen). Als Nächstes kann der notwendige Teil des OS-Kerns von der Platte ausgelesen werden und in Schritt 103 in den Speicher geladen werden, beispielsweise Ntoskrnl.exe und hal.dll, und das Register, der Speichermanager, der Objektmanager usw. werden initialisiert. In Schritt 104 wird der Session-Manager (smss.exe) geladen, der für das Laden der Systemvariablen, des Win32-Subsystems und das weitere Laden von winlogon.exe in Schritt 105 verantwortlich ist. Nachdem der Benutzer erfolgreich die Authentifizierung in Schritt 106 durchgeführt hat, werden die Anwendungen und Dienste mit Autostart-Registerschlüssel geladen, und dann ist das OS vollständig bereit, mit dem Benutzer zu interagieren, und erwartet das Starten von Anwendungen und die Eingabe von Daten.
-
Für den Emulationsprozess ist es nicht notwendig, das Laden des Betriebssystems vollständig zu emulieren. Beispielsweise können die Schritte 101 und 102 weggelassen werden, womit nur die Schritte 103 und 104 in vereinfachter Form bleiben. Das heißt, es reicht aus, die wichtigste Funktionalität für das korrekte Funktionieren des OS zu emulieren, die für die Anwendungs-Emulation erforderlich ist. Für Win32-Anwendungen ist es notwendig, das Starten von smss.exe mit anschließendem Starten von csrss.exe zu emulieren, was das Windows-Subsystem initialisiert und das Erstellen von Prozessen und Threads ermöglicht. Da die Emulation einer potenziell schädlichen Anwendung das Erstellen einer detaillierteren Betriebsumgebung erfordert (wie die Emulation anderer Prozesse oder Dienste), ist es auch erforderlich, das Starten von winlogon.exe mit anschließendem „Starten” von Prozessen wie explorer.exe und services.exe zu emulieren, wobei es möglich ist, das Starten von svchost-Prozessen aus Letzterem zu emulieren. Der Begriff „Starten” bedeutet in diesem Fall das Nachbilden derselben Prozesse in dem Emulator, die auftreten, wenn die Prozesse mit dem echten OS erstellt werden, allerdings in stark vereinfachter Form. Ein solcher Ansatz ermöglicht die Nachbildung des echten OS in ausreichendem Grad, um praktisch jede Anwendung zu starten, die für die Arbeit in dem gegebenen OS vorgesehen ist. Für potenziell schädliche Anwendungen ist eine solche Detailgenauigkeit bei der Nachbildung der Umgebung ebenfalls erforderlich, sowohl um mögliche Anti-Emulations-Tricks zu umgehen, die das tatsächliche Prüfen auf das Vorhandensein der gestarteten Dienste, der Werte von Systemvariablen und anderer in dem echten OS vorhandenen Elemente umfassen kann, als auch um die bösartige Funktion zu implementieren, die auf bestimmte Anwendungen gerichtet sein kann. Als Beispiele genannt seien der Prozess explorer.exe, der oft Ziel von Angriffen ist, die Webbrowser-Prozesse, die entsprechend ausgenutzt werden können, usw.
-
Somit erfordert das Problem der Erstellung einer entsprechenden Umgebung für die Emulation einer potenziell schädlichen Anwendung eine möglichst detaillierte Nachbildung des echten OS und der darin gestarteten Anwendungen. Der Prozess der Initialisierung einer solchen Umgebung kann viel Zeit und Ressourcen fordern (das Starten des Emulationsprozesses, das Laden aller für die Initialisierung solcher virtuellen Strukturen notwendigen Daten wie Dateisystem, Register usw. von der Festplatte in den Speicher), was die Zeit für die eigentliche Emulation des Anwendungs-Codes verkürzt.
-
Gegenwärtig gibt es Ansätze zum Bewahren des Zustands einer emulierten Umgebung. Beispielsweise unterstützt der Emulator QEMU die Erstellung von Abbildungen, einschließlich derjenigen, die die Notwendigkeit der Durchführung des Prozesses des Ladens des OS ausschließen. Jedoch wird die Abbildung nur auf Anfrage des Benutzers auf der Platte festgehalten und unterstützt keine Struktur zum Bewahren einer Reihe aufgezeichneter Abbildungen. Dieser Ansatz entspricht vollständig dem Betriebsmodus eines Managers einer virtuellen Maschine.
-
Jedoch umfassen die bekannten Ansätze nicht die automatische Erstellung von Abbildungen eines emulierten Systems oder des Ausführungszustands einer emulierten Anwendung, was es ermöglichen würde, jede mögliche Abzweigung der Ausführung des Programmcodes nachzuverfolgen. Vom Standpunkt der Analyse bösartiger Programme wäre ein solcher Ansatz in der Lage, Anti-Emulations-Tricks zu umgehen.
-
Die Schöpfer von Schadprogrammen verwenden verschiedene Tricks, um eine Emulation des Programmcodes zu vereiteln, die auf Beschränkungen bezüglich des Emulationsprozesses und dem Implementieren eines Emulators in Antivirus-Lösungen beruhen können. Der Emulator erstellt eine virtuelle Kopie des Prozessors, der Computerkomponenten und des Betriebssystems (OS) nur in begrenztem Ausmaß mit eingeschränkten Fähigkeiten, da die volle Nachbildung aller Fähigkeiten der API-Funktionen eines solchen Prozessors oder Systems aus mehreren Gründen nicht möglich ist: die immense Arbeit für eine solche Entwicklung, das Vorhandensein undokumentierter Funktionen, der starke Leistungsabfall, wenn ein solcher Emulator arbeitet. Daher können die Schöpfer von Schadprogrammen auf die folgenden Ansätze zurückgreifen, um den Fall einer Ausführung in einer emulierten Umgebung zu erfassen:
- • Das Aufrufen einer undokumentierten oder selten genutzten API-Funktion.
- • Die Ausführung mehrerer Instruktionen des Zentralprozessors mit nachfolgender Überprüfung beispielsweise mehrerer gesetzter Flaggen. Wenn die Emulation der Prozessorbefehle nicht präzise genug ist, können mehrere Flaggen Werte haben, die sich von denen unterscheiden, die bei einer Ausführung durch den echten Prozessor gesetzt würden.
- • Das Überprüfen der korrekten Ausführung einer API-Funktion. Das Überprüfen kann sehr kompliziert sein und eine Analyse der Fehlercodes beinhalten, die während eines inkorrekten Aufrufs oder einer Überprüfung der Werte des Prozessor-Registers erhalten werden.
- • Die Suche nach bestimmten Bytes im Speicher. Beispielsweise eine Byte-für-Byte-Suche nach dem Dateikopf MZ im Speicher nach dem Laden von kernel32.dll beim Starten des Prozesses. In dem OS Vista 64 wird eine 64-kb-Ausrichtung für kernel32.dll verwendet, und der Bereich zwischen dem Dateikopf und dem ersten Abschnitt wird in dem Adressfeld des Prozesses nicht abgebildet. Wenn ein Zugriff darauf versucht wird, tritt eine Ausnahme auf. Wenn die Ausnahme nicht registriert wurde, wird das Standard-Ausnahme-Steuerungsprogramm des OS aufgerufen, und dies beendet den Prozess.
-
Die
US 2013/0110490 A1 lehrt eine Simulationsumgebung, die Prozessorsparfunktionen in einem simulierten Prozessorkern verifiziert. Die Simulationsumgebung führt eine erste Simulation für einen simulierten Prozessorkern aus. Während der Simulation erzeugt die Simulationsumgebung eine Simulationsmodell-Dump-Datei. Zu einem späteren Zeitpunkt führt die Simulationsumgebung eine zweite Simulation für den simulierten Prozessorkern durch. Die Simulationsumgebung speichert den Status des simulierten Prozessorkerns. Anschließend ersetzt die Simulationsumgebung den Zustand des simulierten Prozessorkerns durch Laden der zuvor erzeugten Dump-Datei und stellt den Status des simulierten Prozessorkerns so ein, dass ein prozessorschonender Code ausgeführt wird, und nimmt die zweite Simulation wieder auf.
-
Kurze Beschreibung
-
Offenbart werden ein System und ein Computerprogrammprodukt zum Bewahren und anschließenden Wiederherstellen des Zustands eines Programmemulators gemäß den unabhängigen Ansprüchen 1 und 5.
-
Ein beispielartiges System zum Emulieren einer Datei in einem Computersystem kann einen Hardwareprozessor umfassen, der für Folgendes konfiguriert ist: Laden einer Datei in einen Emulator des Computersystems; Bestimmen, ob eine Emulation zum ersten Mal durchgeführt wird oder nicht; wenn die Emulation zum ersten Mal durchgeführt wird, Laden einer Initialabbildung des Emulatorzustands in den Emulator; Emulieren der Datei unter Verwendung der geladenen Initialabbildung des Emulatorzustands; Erstellen und Speichern einer oder mehrerer neuer Abbildungen des Emulatorzustands beim Auftreten einer oder mehrerer vorher bestimmter Bedingungen während der Emulation der Datei; wenn die Emulation nicht zum ersten Mal durchgeführt wird, Identifizieren einer oder mehrerer neuer Abbildungen des Emulatorzustands, die während der Initialemulation der Datei erstellt werden; Laden der einen oder der mehreren identifizierten Abbildungen des Emulatorzustands in den Emulator; und Wiederaufnehmen des Emulierens der Datei unter Verwendung der einen oder der mehreren neuen Abbildungen des Emulatorzustands.
-
Ein beispielartiges Computerprogrammprodukt, das auf einem nichtflüchtigen computerlesbaren Speichermedium gespeichert ist, kann computerausführbare Instruktionen zum Emulieren einer Datei in einem Computersystem umfassen, wobei die Instruktionen für Folgendes vorgesehen sind: Laden einer Datei in einen Emulator des Computersystems; Bestimmen, ob eine Emulation zum ersten Mal durchgeführt wird oder nicht; wenn die Emulation zum ersten Mal durchgeführt wird, Laden eines Initialbilds des Emulatorzustands in den Emulator; Emulieren der Datei unter Verwendung der geladenen Initialabbildung des Emulatorzustands; Erstellen und Speichern einer oder mehrerer neuer Abbildungen des Emulatorzustands beim Auftreten einer oder mehrerer vorher bestimmter Bedingungen während der Emulation der Datei; wenn die Emulation nicht zum ersten Mal durchgeführt wird, Identifizieren einer oder mehrerer neuer Abbildungen des Emulatorzustands, die während der Initialemulation der Datei erstellt werden; Laden der einen oder der mehreren identifizierten Abbildungen des Emulatorzustands in den Emulator; und Wiederaufnehmen des Emulierens der Datei unter Verwendung der einen oder der mehreren neuen Abbildungen des Emulatorzustands.
-
Ein entsprechendes Verfahren zum Emulieren einer Datei in einem Computersystem kann Folgendes umfassen: Laden einer Datei in einen Emulator des Computersystems; Bestimmen, ob eine Emulation zum ersten Mal durchgeführt wird oder nicht; wenn die Emulation zum ersten Mal durchgeführt wird, Laden einer Initialabbildung des Emulatorzustands in den Emulator; Emulieren der Datei unter Verwendung der geladenen Initialabbildung des Emulatorzustands; Erstellen und Speichern einer oder mehrerer neuer Abbildungen des Emulatorzustands beim Auftreten einer oder mehrerer vorher bestimmter Bedingungen während der Emulation der Datei; wenn die Emulation nicht zum ersten Mal durchgeführt wird, Identifizieren einer oder mehrerer neuer Abbildungen des Emulatorzustands, die während der Initialemulation der Datei erstellt werden; Laden der einen oder der mehreren identifizierten Abbildungen des Emulatorzustands in den Emulator; und Wiederaufnehmen des Emulierens der Datei unter Verwendung der einen oder der mehreren neuen Abbildungen des Emulatorzustands.
-
Ein technisches Ergebnis des offenbarten Systems und Computerprogramms zum Bewahren eines Emulatorzustands ist eine Verkürzung der Zeit für die Emulation einer Datei durch Laden der notwendigen Abbildungen des Emulatorzustands. Ein weiteres technisches Ergebnis ist eine Umgehung von Anti-Emulations-Tricks während der Emulation einer Datei durch das Laden der notwendigen Abbildungen des Zustands des Emulators, um die Emulation im Fall einer unrichtigen Beendigung der Emulation einer Datei fortzusetzen. Noch ein weiteres technisches Ergebnis ist die Entdeckung ungesteuerter Ausnahmen, die zu der Beendigung der Emulation führen, durch das Laden der notwendigen Abbildungen des Zustands des Emulators, um die Emulation im Fall einer unrichtigen Beendigung der Emulation einer Datei aufgrund einer ungesteuerten Ausnahme fortzusetzen.
-
Die oben stehende vereinfachte kurze Beschreibung beispielartiger Aspekte dient der Herstellung eines grundsätzlichen Verständnisses der Erfindung. Diese kurze Beschreibung ist keine umfassende Übersicht aller in Betracht gezogener Aspekte und soll weder entscheidende oder kritische Elemente aller Aspekte identifizieren noch den Schutzbereich einiger oder aller Aspekte der Erfindung umreißen. Ihr einziger Zweck liegt darin, einen oder mehrere Aspekte in vereinfachter Form als Einführung zu der nachfolgenden ausführlicheren Beschreibung der Erfindung darzustellen. Um dies zu erreichen, umfassen der eine oder die mehreren Aspekte der Erfindung die Merkmale, die in den Schutzansprüchen beschrieben und besonders hervorgehoben sind.
-
Kurze Beschreibung der Zeichnungen
-
Die beigefügten Zeichnungen, die Teil dieser Beschreibung sind, stellen einen oder mehrere beispielartige Aspekte der Erfindung dar und dienen zusammen mit der ausführlichen Beschreibung zur Erläuterung ihrer Prinzipien und Ausführungsformen.
-
1 zeigt den Prozess des Ladens des Windows-Betriebssystems.
-
2 ist ein Flussdiagramm, das ein entsprechendes Verfahren zum Emulieren einer Datei zeigt.
-
3 ist ein beispielartiges Baumdigramm des Speicherns der Abbildungen des Emulatorzustands.
-
4 stellt beispielartige Abbildungen des Zustands des Emulators in Abhängigkeit von den geladenen Prozessen dar.
-
5 ist ein Diagramm eines beispielartigen Systems zum Emulieren einer Datei.
-
6 ist ein Diagramm, das ein beispielartiges Mehrzweckcomputersystem darstellt, in dem die hier offenbarten Systeme und Verfahren zum Emulieren einer Datei implementiert sind.
-
Ausführliche Beschreibung
-
Beispielartige Aspekte sind hier im Kontext eines Systems und eines Computerprogrammprodukts zum Emulieren einer Datei in einem Computersystem beschrieben. Dem Durchschnittsfachmann wird klar sein, dass die folgende Beschreibung rein illustrativ und in keiner Weise einschränkend gemeint ist. Weitere Aspekte werden dem Fachmann ohne weiteres klar werden, der von dieser Offenbarung profitiert. Im Folgenden wird detailliert auf Ausführungsformen der beispielartigen Aspekte eingegangen, wie in den beigefügten Zeichnungen dargestellt. Dieselben Bezugszeichen werden, soweit möglich, in den Zeichnungen und in der folgenden Beschreibung verwendet, um dieselben oder gleichartige Gegenstände zu bezeichnen.
-
2 ist ein Flussdiagramm, das ein entsprechendes Verfahren zum Emulieren einer Datei in einem Computersystem darstellt. In Schritt 201 kann der Start der Dateiemulation erfolgen. Es kann mehrere Varianten dafür geben, wann es notwendig ist, eine Datei zu emulieren:
- • Die Datei ist unbekannt und muss emuliert werden, um ihre mögliche Bösartigkeit zu bestimmen;
- • die Emulation ist notwendig, um alle möglichen Fehlercodes zu bestimmen, wenn die Emulation beispielsweise eines Anwendungs-Installers läuft;
- • die Emulation ist notwendig, um die Funktionalität der Anwendung daraufhin zu untersuchen, wann es notwendig ist, zu bestimmen, wie die System-Aufrufe verwendet werden, die Liste der erforderlichen Drittbibliotheken usw..
-
In Schritt 202 kann bestimmt werden, ob die Emulation zum ersten Mal läuft oder nicht. Wenn die Emulation zum ersten Mal auftritt, dann kann in Schritt 203 eine Originalabbildung des Emulatorzustands erstellt werden, die die minimale erforderliche OS-Funktion umfasst, wie im Kontext von 1 oben beschrieben. Zusätzlich zu der Initialisierung der OS-Funktion kann ein Modul zum Erfassen des bösartigen Codes, des Zustands des virtuellen Dateisystems, des virtuellen Registers und des Baums virtueller Objekte in den Emulator geladen werden. Unterschiedliche Abbildungen des Zustands des Emulators können auch die in dem Speicher geladenen Prozesse (wie Prozesse wichtiger Dienste), offene Steuerungsprogramme von Ressourcen (wie Dateien) und Prozesse mit Threads, die Code ausführen (wie eine auszuführende Datei, die emuliert wird) umfassen. Dementsprechend bildet die Abbildung eine Kopie aller aufgezählten Objekte im Speicher, die für eine Speicherung im Betriebsspeicher zu bevorzugen ist, um die Vorgänge für die Speicherung und Wiederherstellung zu beschleunigen.
-
Wenn die Emulation nicht zum ersten Mal durchgeführt wird (wenn beispielsweise die Emulation einer anderen Datei vorher durchgeführt wurde), dann kann in Schritt 204 die erforderliche Abbildung des Emulatorzustands bestimmt werden, die für eine nachfolgende Emulation der Datei in Schritt 205 in den Emulator geladen wird. Das Bestimmen der erforderlichen Abbildung des Emulatorzustands wird unten beschrieben.
-
Wenn die Emulation in Schritt 206 ausgeführt wird, kann bestimmt werden, ob die notwendigen Bedingungen zur Erstellung neuer Abbildungen des Emulatorzustands erfüllt sind. Als Beispiel für solche Bedingungen können die folgenden Ereignisse genannt werden:
- • Abzweigungen in dem Code (bedingte Sprünge).
- • Bestimmen der Verwendung eines potenziellen Anti-Emulations-Tricks durch Signatur (wie das Aufrufen von selten verwendeten API-Funktionen mit nachfolgender Überprüfung des Ergebnisses ihrer Ausführung).
- • Emulation einer bestimmten Zahl von Instruktionen.
- • Periodische Erstellung von Abbildungen in vorher bestimmten Zeitintervallen.
-
Als Nächstes kann in Schritt 207 bestimmt werden, ob die Emulation erfolgreich beendet wurde oder nicht. Ein erfolgreiches Ergebnis kann in Schritt 208 entweder die Entdeckung schädlichen Verhaltens während der Emulation der ausgeführten Datei oder eine Beendigung nach Ablauf der Zeit (oder nachdem eine bestimmte Zahl von Instruktionen ausgeführt wurde) beinhalten. Eine unrichtige Beendigung des Emulationsprozesses kann eine zu schnelle Beendigung des emulierten Prozesses (mögliches Auslösen eines der Anti-Emulations-Tricks), das Fehlen der erforderlichen Bibliotheken oder eine ungesteuerte Ausnahme, die zu einer Beendigung des Prozesses führt (dies kann mit Fehlern in dem Programmcode in Verbindung stehen) beinhalten. Bei unrichtiger Beendigung des Emulationsprozesses kann in Schritt 209 die notwendige Abbildung gewählt werden, um die Emulation fortzusetzen (dies ist detaillierter im Kontext von 3 beschrieben). In Schritt 210 kann die notwendige Abbildung in den Emulator geladen werden, und die Emulation kann in Schritt 211 wiederaufgenommen werden, was zu Schritt 206 zurückführt. Somit kann ein solcher Ansatz eine richtige Beendigung der Emulation sogar für diejenigen auszuführenden Dateien ermöglichen, deren Emulation unrichtig beendet worden wäre, wenn Standard-Emulations-Verfahren verwendet worden wären.
-
3 zeigt ein beispielartiges Baumdiagramm der Speicherung der Abbildungen des Emulatorzustands. Eine solche Baumstruktur kann Abbildungen des Emulatorzustands in Abhängigkeit von einer der folgenden Bedingungen speichern:
- • Laden einer Abbildung der auszuführenden Datei, die emuliert werden muss, in den Speicher. Die Rückkehr zu einer solchen Abbildung lässt die Emulation der auszuführenden Datei sozusagen „bei null” wieder anfangen.
- • Laden des erforderlichen Prozesses wie Internet Explorer in den Speicher. Die Verwendung dieser Abbildung ermöglicht eine Emulation möglicher bösartiger Dateien, die das Vorhandensein eines gestarteten Internet Explorer-Prozesses (in dessen Adressfeld ein bösartiger Code geschrieben und später ausgeführt werden kann) für ihre Ausführung erfordert.
- • Das Auftreten bestimmter Aktionen während der Emulation des Codes der auszuführenden Datei. Während der Emulation können bedingte Sprünge auftreten, die Teil der Prüfungen auf Anti-Emulations-Tricks sein können (wenn beispielweise bestimmte Prüfungen erfolglos durchgeführt werden, beendet das emulierte Programm einfach seine Ausführung).
-
Beispielsweise können Abbildungen des Emulatorzustands auf folgende Art gespeichert werden. Abbildung Nr. 1 kann die originale Windows-Abbildung sein, die den Zustand des Systems unmittelbar nach dem Laden umfasst. Bedingung Nr. 1 kann das Laden der auszuführenden Datei in den Emulator sein, die auf Vorhandensein von bösartigem Code emuliert werden muss. Somit unterscheidet sich Abbildung Nr. 2 von Abbildung Nr. 1 dadurch, dass der emulierte Prozess bereits in den Speicher geladen wurde. Dementsprechend bestimmt die Bedingung für die Erstellung einer Abbildung auch den Unterschied zwischen den Abbildungen (wobei Informationen über die Zahl der emulierten Instruktionen, die aufgerufenen Funktionen, die Änderung der Ressourcenbeschreibungen und so weiter berücksichtigt werden). Anschließend führt die Erfüllung neuer Bedingungen zur Erstellung neuer Abbildungen. Beispielsweise ist eine Abzweigung in dem Code Bedingung Nr. 3 und kann zu der Erstellung von Abbildung Nr. 4 führen, die dem Zustand des Emulators vor der Ausführung des bedingten Sprungs in dem Code entspricht. Bedingung Nr. 4 kann ein Auslösen der Antivirus-Signatur sein, die die mögliche Verwendung von Anti-Emulations-Tricks anzeigt, was zu der Erstellung von Abbildung Nr. 5 führt. Wenn die Emulation der auszuführenden Datei in Schritt 207 unrichtig beendet wird, ermöglicht anschließend eine Bewegung entlang der Baumstruktur bewahrter Emulatorabbildungen das Laden der Abbildung des Emulatorzustands vor der unrichtigen Beendigung des Emulationsprozesses. Bei der Bewegung entlang einem solchen Baum, um eine Abbildung zu finden, geht man erst zu der Abbildung, die den Zustand des Emulators vor der unrichtigen Beendigung des Emulationsprozesses beschreibt. Wenn der Emulationsprozess wieder unrichtig beendet wird, ist es möglich, die Änderung in der Abbildung des Emulatorzustands eine Ebene höher zu laden (d. h. eine noch frühere Version des Emulatorzustands), bis man zu dem Zustand gelangt, als die emulierte Datei in den Emulator geladen wurde. Wenn die Bedingungen für die Erstellung der Abbildungen zum Beispiel einen bedingten Sprung umfassten, dann wird der Sprung beim Laden der Abbildung bei der entsprechenden Bedingung auf die andere Code-Abzweigung erfolgen. Ein Beispiel für eine Änderung des Zustands des Emulators kann sein:
- • Springen zu dem anderen Code-Zweig bei einem bedingten Sprung;
- • Ändern des Status von Resourcensteuerungsprogrammen (wie Dateien). In diesem Fall kann erzwungen werden, dass offene Dateien oder Verbindungen ungeschlossen bleiben.
- • Rückgängigmachen zuvor vorgenommener Änderungen. Ein Beispiel kann das Löschen des Datenübertragungspuffers oder das Ändern des Registerpfads sein.
- • Ändern des Rückgabewerts einer ausgeführten Funktion. Wenn beispielsweise die Ausführung einer Funktion als Ergebnis der Emulation einen Wert FALSCH rückmeldet, kann erzwungen werden, dass der Wert zu WAHR wird.
-
Es ist zu beachten, dass das Speichern von Abbildungen des Emulatorzustands am stärksten bevorzugt im Betriebsspeicher ist, um die Prozesse des Speicherns und Wiederherstellens der geladenen Abbildungen zu beschleunigen. Die Größe einer Abbildung kann von mehreren zehn Megabyte (geladenes OS) bis mehreren hundert Megabytes oder sogar Gigabytes variieren, abhängig von den geladenen Prozessen. Zur Einsparung von Betriebsspeicher können einige der Abbildungen auf einer Platte gehalten werden, oder es kann nur die Differenz (diff) zwischen Abbildungen verwendet werden, die minimal sein kann, wenn die Bedingungen zur Erzeugung der Abbildungen während der Emulation relativ oft auftreten.
-
4 stellt beispielartige Abbildungen des Emulatorzustands in Abhängigkeit von den geladenen Prozessen dar. Beispielsweise kann das geladene Betriebssystem OS als Abbildung Nr. 1 verwendet werden, und die folgenden Abbildungen enthalten unterschiedliche geladene Prozesse wie Java, .NET, Explorer, Outlook und andere solcher Prozesse. Die Abbildungen können auch bestimmte Sätze gestarteter Prozesse enthalten, die für eine erfolgreiche Emulation bestimmter Dateien benötigt werden können, die eine Reihe von Abhängigkeiten haben. Beispielsweise erfordert die Emulation einer unbekannten Datei den virtuellen Java-Maschinenprozess, bei dem der bösartige Code (Exploit) geladen wird, und anschließend eine Schwachstelle (die möglicherweise unbekannt ist) ausgenutzt wird, während Windows-Netzwerkdienste für die nachfolgende Ausführung der bösartigen Funktion benötigt werden können.
-
5 ist ein Diagramm eines beispielartigen Systems zum Emulieren einer Datei. Wenn es notwendig ist, eine unbekannte Datei 501 zu emulieren, kann der Emulator 503 verwendet werden, der die notwendige Abbildung mittels des Abbildungs-Ladungsmoduls 502 in den Emulator laden kann. Das Modul 502 kann die erforderliche Abbildung in der Datenbank der Abbildungen 504 auf der Grundlage der Kriterien bestimmen, die im Kontext von 3 beschrieben sind. Gleichzeitig kann der Emulator 503 auf der Grundlage einer der Bedingungen, die die Erstellung von Abbildungen erforderlich machen (wie oben diskutiert), eine Anforderung an das Abbildungs-Erstellungmodul 505 senden, eine Abbildung zu erstellen. Das Modul 505 kann eine Baumstruktur der Abbildungen des Emulatorzustands behalten, wobei die Übergänge von bestimmten Knoten des Baums zu anderen Knoten auf den angegebenen Bedingungen beruhen. Die Datenbank 504 selbst kann im Betriebsspeicher des Computers gehalten werden.
-
Die Verwendung des Systems von 5 ermöglicht die Lösung mehrerer Probleme:
- • Beschleunigen des Ladens des Emulatorzustands, wenn auszuführende Dateien emuliert werden, da das Laden der Abbildung ein Kopiervorgang im Betriebsspeicher ist;
- • Bestimmen möglicher Fehlercodes bei der nachfolgenden Ausführung der Anwendung (wie beim Starten eines Installers);
- • Umgehen möglicher Anti-Emulations-Tricks, um eine bösartige Funktion zu identifizieren.
-
6 ist ein Diagramm, das ein beispielartiges Mehrzweck-Computersytem 5 darstellt, in dem das hier offenbarte System zum Emulieren einer Datei implementiert ist. Das Computersystem 5 kann – ohne darauf beschränkt zu sein – Folgendes umfassen: Einen Personal Computer, ein Notebook, einen Tablet-Computer, ein Smartphone, einen Netzwerkserver, einen Router oder eine andere Art Verarbeitungsgerät. Wie gezeigt kann das Computersystem 5 einen oder mehrere Hardware-Prozessoren 15, Speicher 20, ein oder mehrere Festplattenlaufwerke 30, ein oder mehrere optische Laufwerke 35, eine oder mehrere serielle Schnittstellen 40, eine Grafikkarte 45, eine Audiokarte 50 und Netzwerkkarte(n) 55 umfassen, die von einem Systembus 10 verbunden werden. Der Systembus 10 kann eine beliebige von verschiedenen Busstrukturarten sein, einschließlich eines Speicherbusses oder eines Speicher-Controllers, eines Peripheriebusses und eines lokalen Busses, wobei eine beliebige einer Vielzahl von bekannten Busarchitekturen verwendet wird. Der Prozessor 15 kann einen oder mehrere Intel®Core 2 Quad 2,33 GHz-Prozessoren oder eine andere Art Mikroprozessor aufweisen.
-
Der Systemspeicher 20 kann einen permanenten Speicher (ROM) 21 und einen Arbeitsspeicher (RAM) 23 umfassen. Der Speicher 20 kann als DRAM (dynamisches RAM), EPROM, EEPROM, Flash- oder andere Art der Speicherarchitektur ausgeführt sein. Das ROM 21 speichert ein Eingabe-/Ausgabesystem (BIOS) 22, das die Grundroutinen enthält, die helfen, Informationen zwischen den Modulen des Computersystems 5 zu übertragen, beispielsweise beim Hochfahren. Das RAM 23 speichert das Betriebssystem 24 (OS), wie Windows®7 Professional oder eine andere Art von Betriebssystem, das für das Management und die Koordination der Vorgänge und die Zuweisung und das Teilen der Hardware-Ressourcen in dem Computersystem 5 verantwortlich ist. Der Speicher 20 speichert auch Anwendungen und Programme 25. Der Speicher 20 speichert auch verschiedene Laufzeitdaten 26, die von den Programmen 25 verwendet werden.
-
Das Computersystem 5 kann weiterhin ein oder mehrere Festplattenlaufwerke 30, wie SATA HDD, sowie ein oder mehrere optische Laufwerke 35 zum Lesen oder Schreiben auf einer entfernbaren optischen Platte wie einer CD-ROM, DVD-ROM oder anderen optischen Medien aufweisen. Die Laufwerke 30 und 35 und ihre angeschlossenen computerlesbaren Medien bieten eine nichtflüchtige Speicherung computerlesbarer Instruktionen, Datenstrukturen, Anwendungen und Programmodulen/Subroutinen, die hier offenbarte Algorithmen und Verfahren ausführen. Obgleich das beispielartige Computersystem 5 magnetische und optische Platten verwendet, wird dem Fachmann klar sein, dass andere Arten computerlesbarer Medien, die Daten speichern können, die einem Computersystem 5 zugänglich sind, wie Magnetcassetten, Flash-Speicherkarten, digitale Videodisks, RAMs, ROMS, EPROMs und andere Speicherarten ebenfalls in alternativen Aspekten des Computersystems 5 verwendet werden können.
-
Das Computersystem 5 umfasst weiterhin eine Vielzahl serieller Schnittstellen 40 wie einen universellen seriellen Bus (USB) zur Verbindung einer oder mehrerer Dateneingabeeinrichtungen 75, wie eine Tastatur, eine Maus, ein Touchpad und andere. Serielle Schnittstellen 40 können auch verwendet werden, um eine oder mehrere Datenausgabeeinrichtungen 80 zu verbinden, wie einen Drucker, einen Scanner und andere, sowie ein oder mehrere andere Peripheriegeräte 85 wie externe Datenspeichereinrichtungen und Ähnliches. Das System 5 kann auch eine Grafikkarte 45 wie nVidia®GeForce®GT 240M oder eine andere Videokarte umfassen, um eine Schnittstelle mit einer Anzeige 60 oder einer anderen Videowiedergabeeinrichtung wie einer Touchscreen-Anzeige zu bilden. Das System 5 kann auch eine Audiokarte 50 umfassen, um Ton über interne oder externe Lautsprecher 65 zu reproduzieren. Zusätzlich kann das System 5 eine oder mehrere Netzwerkkarten 55 umfassen, wie Ethernet, WiFi, GSM, Bluetooth, oder eine andere drahtgebundene, drahtlose oder Mobilfunknetz-Schnittstelle, um das Computersystem 5 mit einem Netzwerk 70 wie dem Internet zu verbinden.
-
In verschiedenen Aspekten können die hier beschriebenen Systeme und Verfahren in Hardware, Software, Firmware oder einer beliebigen Kombination daraus ausführt werden. Wenn sie in Software ausführt werden, können die Verfahren als eine oder mehrere Instruktionen oder als Code auf einem nichtflüchtigen computerlesbaren Medium gespeichert werden. Das computerlesbare Medium umfasst Datenspeicherung.
-
Beispielhalber und nicht im einschränkenden Sinn kann dieses computerlesbare Medium RAM, ROM, EEPROM, CD-ROM, Flash-Speicher oder andere Arten eines elektrischen, magnetischen oder optischen Speichermediums oder eines beliebigen anderen Mediums umfassen, das verwendet werden kann, um einen gewünschten Programmcode in Form von Instruktionen oder Datenstrukturen zu tragen oder zu speichern, und auf das durch einen Prozessor eines Mehrzweckcomputers zugegriffen werden kann.
-
In verschiedenen Aspekten sind die Systeme und Verfahren in dieser Offenbarung als Module beschrieben. Der Begriff „Modul”, wie er hier verwendet wird, bezeichnet ein real existierendes Gerät, eine real existierende Komponente oder eine Anordnung von Komponenten, die unter Verwendung von Hardware ausgeführt wird, beispielsweise durch einen anwendungsspezifischen integrierten Schaltkreis (ASIC) oder ein Field Programmable Gate Array (FPGA), oder als eine Kombination aus Hardware und Software wie beispielsweise durch ein Mikroprozessorsystem und einen Satz von Instruktionen zur Implementierung der Funktionalität des Moduls, die (während sie ausgeführt werden) das Mikroprozessorsystem in ein Spezialgerät umwandeln. Ein Modul kann auch als Kombination der beiden implementiert werden, wobei bestimmte Funktionen allein durch Hardware ermöglicht werden und andere Funktionen durch eine Kombination aus Hardware und Software ermöglicht werden. Bei bestimmten Ausführungsformen kann wenigstens ein Teil des Moduls und in anderen Fällen das gesamte Modul in dem Prozessor eines Mehrzweckcomputers (wie dem oben für 6 im Einzelnen beschriebenen) ausgeführt werden. Dementsprechend kann jedes Modul in einer Vielzahl geeigneter Konfigurationen verwirklicht werden und sollte nicht auf eine spezielle, hier beispielartig dargestellte Ausführungsform begrenzt werden.
-
Der Klarheit halber sind hier nicht alle Routinemerkmale der Aspekte offenbart. Es ist klar, dass bei der Entwicklung jeder tatsächlichen Ausführungsform der Erfindung zahlreiche ausführungsformspezifische Entscheidungen getroffen werden müssen, um die spezifischen Ziele des Entwicklers zu erreichen, und dass diese spezifischen Ziele bei verschiedenen Ausführungsformen und verschiedenen Entwicklern unterschiedlich sind. Es ist klar, dass ein solcher Entwicklungsaufwand komplex und zeitaufwändig sein kann, er ist aber dennoch eine Routineentwicklungsaufgabe für den Durchschnittsfachmann, der von dieser Offenbarung profitiert.
-
Weiterhin ist zu beachten, dass die hier verwendete Phraseologie oder Terminologie der Beschreibung dient und nicht einschränkend zu verstehen ist, so dass die Terminologie oder Phraseologie dieser Beschreibung vom Fachmann vor dem Hintergrund der Lehren und der Anleitung, die hierin ausgeführt sind, im Zusammenhang mit dem Wissen des Fachmanns auf dem einschlägigen Gebiet/den einschlägigen Gebieten auszulegen ist. Weiterhin ist nicht beabsichtigt, dass einem Begriff in der Beschreibung oder den Ansprüchen eine ungewöhnliche oder spezielle Bedeutung zugeschrieben werden soll, sofern dies nicht ausdrücklich vermerkt ist.
-
Die unterschiedlichen, hier offenbarten Aspekte schließen gegenwärtige und zukünftige bekannte Äquivalente der hier beispielartig genannten bekannten Module ein. Während Aspekte und Anwendungen gezeigt und beschrieben wurden, wird dem Fachmann, der von dieser Offenbarung profitiert, klar sein, dass viele weitere Modifikationen zu den oben erwähnten möglich sind, ohne von den hier offenbarten erfinderischen Konzepten abzuweichen.
-
Das erfindungsgemäße System zum Bewahren und anschließenden Wiederherstellen eines Zustands eines Programmemulators einer Antivirus-Anwendung kann durch die folgenden Verfahren angewandt werden:
- a) Verfahren zum Emulieren einer Datei (501) in einem Computersystem (5) zur Erfassung von Schadprogrammen, wobei das Verfahren umfasst:
Laden der Datei (501) in einen Emulator (503) des Computersystems (5);
Bestimmen, ob eine Emulation zum ersten Mal durchgeführt wird oder nicht;
wenn die Emulation zum ersten Mal durchgeführt wird, Emulieren der Datei (501) unter Verwendung einer Initialabbildung des Emulatorzustands;
während der Emulation der Datei (501): Erstellen und Speichern einer oder mehrerer neuer Abbildungen des Emulatorzustands in einer Baum-Datenstruktur bei Auftreten einer oder mehrerer vorher definierter Bedingungen, die aus der Ausführung der Emulation resultieren, und Laden eines Zustands eines virtuellen Dateisystems und eines virtuellen Registers in den Emulator (503), bevor bösartige Codes in dem Computersystem (5) erfasst werden;
wenn die Emulation nicht zum ersten Mal durchgeführt wird,
Identifizieren einer oder mehrerer neuer Abbildungen des Emulatorzustands, der während der Initialemulation der Datei (501) erstellt wurde; und
Laden der einen oder mehreren identifizierten Abbildungen des Emulatorzustands, der zum Emulieren der Datei (501) verwendet werden soll, in den Emulator (503);
Bestimmen, ob die Initialemulation der Datei (501) beim Auftreten eines Anti-Emulations-Tricks richtig oder unrichtig beendet wurde;
wenn die Emulation beim Auftreten eines Anti-Emulations-Tricks unrichtig beendet wurde,
Navigieren entlang der Baum-Datenstruktur, um eine oder mehrere neue Abbildungen des Emulatorzustands zu identifizieren, die mit dem Emulatorzustand vor der unrichtigen Beendigung in Verbindung stehen; und
Wiederaufnehmen des Emulierens der Datei (501) unter Verwendung der identifizierten einen oder mehreren neuen Abbildungen des Emulatorzustands; und
wenn die Emulation richtig beendet wurde, kein Wiederaufnehmen des Emulierens der Datei (501).
- b) Verfahren nach Absatz a), wobei die vorher definierten Bedingungen eines oder mehrere aus Folgendem umfassen: Ein Auftreten von Abzweigungen in einem Code der emulierten Datei (501), Erfassung eines Anti-Emulations-Tricks, Emulation einer vorher bestimmten Zahl von Instruktionen und ein vorher bestimmtes Zeitintervall.
- c) Verfahren nach Absatz a), wobei die Emulation richtig bei wenigstens einem aus Folgendem beendet wird: Erfassung eines schädlichen Verhaltens der emulierten Datei (501), Emulation der Datei (501) für einen vorher bestimmten Zeitraum und Emulation einer vorher bestimmten Zahl von Instruktionen.
- d) Verfahren nach Absatz a), wobei die Emulation unrichtig bei wenigstens einem aus Folgendem beendet wird: Auftreten eines Anti-Emulations-Tricks, Fehlen einer erforderlichen Bibliothek und Auftreten einer ungesteuerten Ausnahme, die zur Beendigung des Prozesses führt.
-
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
-
- US 2013/0110490 A1 [0011]