So funktionieren Viren-Scanner
Das Geheimnis der Abwehr von Computerviren
Marc Ruef <marc.ruef@computec.ch>
computec.ch
Version 1.0 [15. Februar 2003]
Alle Rechte vorbehalten - Kopieren erlaubt

Viren-Scanner sind eines der wichtigsten Mittel zum Schutz des eigenen Rechners. Seit vielen Jahren sollen diese Sicherheitslösungen dafür sorgen, dass bösartige Computerviren ihrem destruktiven Dasein nicht fröhnen können. Mehr oder weniger erfolgreich gehen die verschiedenen Antiviren-Programmen dieser immer wichtigeren Aufgabe nach. Für viele Benutzer ist die Funktionsweise ihrer Antiviren-Lösung jedoch genauso schleierhaft, wie der Aufbau eines Computervirus selbst. In diesem Artikel werden Sie in die Geheimnisse dieser Materie eingeweiht. Durch dieses neu erworbene, aufgefrischte oder gestärkte Wissen, können Sie sich besser gegen unerwünschte Übergriffe schützen.

Schon in meiner Kindheit begann ich mich mit Computern zu beschäftigen. Zu dieser Zeit, als das Internet bei der breiten Masse noch gänzlich unbekannt war, galten Computerviren als das ultimative Übel der noch jungen Informationsgesellschaft. Ich meiner Naivität war ich der Meinung, dass Computerviren grundsätzlich biologische Viren seien, die lediglich die Hardware eines Rechners anfallen und zerstören würden. Als ich mich dann ein bisschen intensiver mit dem Thema beschäftigte, stellte ich schnell fest, dass meine Annahme komplett falsch war. Computerviren sind Programme, die sich wie biologische Viren zu verhalten pflegen. Dazu gehört in erster Linie das Replizieren von sich selbst, wodurch die eigentliche Verbreitung stattfindet. Eine im Grunde eher beiläufige Funktionalität von Viren ist die Zerstörungsroutine. Diese, nicht zwangsweise ein Teil eines Computervirus, führt in einer bestimmten Situation sein destruktives Vorhaben aus. Das kann das Löschen von Dateien, das Manipulieren von Dokumenten oder das Formatieren von Datenträgern sein.

Dem Geheimnis der Computerviren bin ich soweit auf die Spur gekommen. Nachdem ich mich darin geübt habe, einige dieser Programme selber zu programmieren, stellte sich mir plötzlich die Frage, wie man sich vor ihnen überhaupt schützen könnte. Meine ersten Experimente mit Antiviren-Software trugen nicht die erhofften Früchte. Zwar wurden meine Test-Viren zum Grossteil erkannt, aber ich verstand nicht, wie dies vonstatten ging. Zu wenig Transparenz boten die jeweiligen Antiviren-Lösungen, die damals noch auf DOS basierten.

Abbildung 1: H+BEDV AntiVir Personal Edition für Windows

Abbildung 1: H+BEDV AntiVir Personal Edition für Windows

Meine Idee war sodann, eine eigene Antiviren-Lösung zu entwickeln. Ich stellte mir dies wie ein Schachspiel gegen mich selber vor: Als erstes Programmierte ich einen Virus, um danach einen entsprechenden Antivirus zu erstellen. Für mich lag es auf der Hand, wie dies funktionieren sollte. Der folgende Algorithmus stellt die beiden Schritte dar:

  1. [Virus identifizieren] In einem ersten Schritt sollte der Computervirus eindeutig identifiziert werden. Dies muss zu 100 % korrekt sein, damit nicht fälschlicherweise andere Programme oder gar Teile des Betriebssystems bekämpft werden würden. Wurde ein Virus erkannt, wird zu Schritt zwei gegangen. Falls kein Virus gefunden wurde, wird weiterhin nach einem solchen gesucht.
  2. [Virus entfernen] Im zweiten Schritt findet das Entfernen des Computervirus statt. Diese sollte restlos durchgeführt werden, so dass keine Überbleibsel mehr vorhanden sind, die etwa auch im Nachhinein Schaden anrichten könnten. Ist dieser Schritt durchlaufen, wird wieder zur Stufe 1 zurückgekehrt und nach weiteren Schädlingen Ausschau gehalten.
Eindeutiges Identifizieren von Computerviren

Eine erste Hürde, die es zu nehmen galt, ist das Identifizieren des potentiellen Computervirus. Dieser Schritt 1 muss unbedingt sehr zuverlässig erfolgen, denn Fehler könnten sich im zweiten Schritt sehr negativ auf das System auswirken. Doch, wie lassen sich nun solcherlei Schädlinge eindeutig erkennen? Bei meinen eigenen Viren habe ich stets ein eindeutiges Merkmal verwedet, das dem jeweiligen Virus überhaupt seine Individualität gab. Dies waren zum Beispiel kurze Textmitteilungen, die nach einem bestimmten Ereignis ausgegeben wurden. Quasi eine Schadens-Routine, die keinen Schaden anzurichten pflegte. Oder dann habe ich mich oder den Namen des Computervirus irgendwo im Programmcode verewigt. Es war sodann ein leichtes, meine eigenen Viren zu erkennen. Hierzu musste ich lediglich nach den mir bekannten Wortketten (z.B. „Marc Ruef“ oder „Dies ist ein Virus!“) Ausschau halten. Sämtliche Daten auf der Harddisk sollten danach durchsucht werden.

Doch nicht nur ich entwickelte Computerviren mit charakteristischen Merkmalen. Die meisten Viren sind durch eindeutige Zeichenketten erkennbar. Nehmen wir ein Beispiel aus der Neuzeit. Der Wurm ILOVEYOU, der sich selber über Microsoft Outlook verbreitete, erhielt seinen Namen durch die von ihm in den E-Mails gewählte Betreffzeile. Sämtliche Schreiben, die im Subjekt die Worte „I LOVE YOU“ enthielten, waren potentielle Träger des gleichnamigen Virus. Sodann musste man sich lediglich vor dem Öffnen und Weiterverschicken dieser Mails hüten, um vor den Übergriffen verschont zu bleiben. Ein anderes klassisches Beispiel ist der Stoned-Virus. Dieser Boot-Virus gibt nach der Erstinfektion einer Festplatte die Meldung „Your PC is now Stoned!“ auf dem Bildschirm aus. Die Antiviren-Software musste also nur nach Programmen suchen, die diese verräterische Zeichenkette beinhalteten. Diese Technologie wird als Pattern-Matching bezeichnet.

Fehlerhafte Meldungen verhindern
Meine erste Implementierung einer Antiviren-Software war nicht sonderlich effizient. Nehmen wir nocheinmal den Stoned-Virus, um dies zu verdeutlichen. Dieser nistet sich wie gesagt nach dem Ausführen in den Bootsektor des lokalen Datenträgers ein. Die Betonung liegt auf dem Nomen „Ausführen“. Es handelt sich bei einem Computervirus meistens um ein Programm oder ein Stück Code, das interpretiert werden will. So stellt sich nun die Frage, ob denn wirklich jede Datei auf potentiellen Viren-Code untersucht werden soll.

Macht es Sinn, in einer Datei namens BRIEF.TXT nach der Zeichenkette des Stoned-Virus zu suchen? Wohl kaum, denn die Infektionsgefahr ist bei dieser Datei praktisch gleich null. Wie uns die Dateierweiterung TXT verrät, handelt es sich um ein Text-Dokument, das nicht ausgeführt werden kann. In den meisten Fällen handelt es sich gar um eine ASCII-Datei, die noch nicht einmal gross von den Texteditoren interpretiert werden muss. Ihnen sind solche sicher schon im Zusammenhang mit den Programmen edit.com oder notepad.exe begegnet.

Unsere Antiviren-Software erweitern wir nun um eine zusätzliche Regel: Von nun an sollen nur potentielle Viren-Dateien nach potentiell schädlichem Code durchsucht werden. Vor Jahren waren dies sämtliche ausführbaren Binärdateien, wie EXE und COM. Im Zeitalter von Windows kamen neue Virenträger hinzu. So können auch in DLL-Programmbibliotheken, SCR-Bildschirmschonern, Word- (DOC) und Excel-Dokumenten (XLS) schädlicher Programmcode enthalten sein. Es kommen also stets neue Dateitypen hinzu, die auch untersucht werden müssen. Es ist nur eine Frage der Zeit, bis sich der erste Virus die Möglichkeiten von Adobe PDF- oder Macromedia Flash-Dateien (SWF) zunutze macht. Dieses Mehr des Durchsuchens zusätzlicher Angriffspunkte geht zwangsweise auf die Performance der entsprechenden Lösungen.

Abbildung 2: Die Dateierweiterungen zu Gunsten der Performance festlegen

Abbildung 2: Die Dateierweiterungen zu Gunsten der Performance festlegen

Wir haben gesehen, dass das Einschränken der Dateitypen bei der Suche nach Computerviren enorme Performance-Vorteile zu versprechen in der Lage ist. Doch dadurch können auch fehlerhafte Positivmeldungen (engl. False positives) verhindert werden. Durchsuchen wir sämtliche Dateitypen nach der typischen Stoned-Virus-Zeichenkette, könnte auch in unserem E-Mail namens TEST.EML der harmlose Satz „Your PC is now Stoned!“ fälschlicherweise als Indiz für den Stoned-Virus identifiziert werden. Unsere Antiviren-Lösung würde uns quasi verbieten, den besagten Satz in einem Brief oder Mail zu verwenden. Stets würde Alarm ausgelöst werden, da dahinter der Stoned-Virus vermutet wird.

Doch wo ein Vorteil ist, findet sich meistens auch immer ein Nachteil. In diesem Fall besteht er darin, dass Computerviren durch das Verändern der Namenserweiterung durch die Antiviren-Systeme geschmuggelt werden können. Wer vermutet schon in der Datei JOKE.TXT einen bösartigen Mailvirus? Auch unsere Antiviren-Software wird die Datei als ASCII-Text abtun und ignorieren. Ist es nun aber möglich, dass der Mail-Virus aus dieser Text-Datei ausbrechen kann? Nein, im Grunde nicht. Dazu wäre eine Modifikation des Dateinamens bzw. –typs erforderlich. (1) Das Umbenennen von JOKE.TXT in JOKE.EML würde sodann durch die Antiviren-Software erkannt, (2) die Suche nach bösartigem Programmcode eingeleitet, (3) der Mailvirus identifiziert und (4) entsprechende Gegenmassnahmen umgesetzt werden.

Die Viren-Datenbank

Eine mühsame, langwierige und kontinuierliche Arbeit für Entwickler von Antiviren-Lösungen ist das Aktualisieren der Viren-Datenbank. Nur durch das Einführen individueller Merkmale können neuartige Computerviren erkannt werden. Hierzu gilt es die jüngst gefundenen Schädlinge zu analysieren. Klassische Varianten dieser Viren – zum Beispiel die ersten Assembler-Viren - liegen meistens nur in kompiliertem Code vor. Es ist also eine Untersuchung mit der Hilfe von Disassemblern und Hex-Editoren nötig. Nur dadurch lässt sich die Funktionsweise des Virus herausfinden und seine eindeutigen Merkmale identifizieren. Diese Arbeit erfordert sehr viel Fachwissen über Computer, Betriebssysteme, Programmiersprachen und Assembler. Nur sehr wenige Leute sind in der Lage, dies erfolgreich und effizient durchzuführen.

Die Viren der neuesten Generation basieren zum Grossteil auf simplen Skript-Sprachen, wie zum Beispiel Visual Basic for Applications von Microsoft (VBA). Diese Programme werden nicht mehr kompiliert, sodern während der Laufzeit interpretiert. Der Vorteil hiervon ist, dass die Software stets im Quelltext der Skript-Sprache vorliegt. Eine Analyse ist daher mit blossem Auge, vielleicht mit dem Miteinbeziehen eines Text-Editors, möglich. Jeder Office-Benutzer mit überdurchschnittlichen Kenntnissen ist sodann in der Lage das bösartige Skript zu verstehen.

Doch dies ist auch ein Vorteil für die Programmierer von Computerviren. Sie können sich so neue Ideen von bestehenden Schädlingen suchen oder diese modifizieren. Dadurch können erweiterte Schadensroutinen eingefügt oder die eindeutigen Erkennungsmerkmale verändert werden.

Das Pattern-Matching ist vom Umfang der Viren-Datenbank abhängig. Dies ist ein grosser Nachteil, (1) denn Computerviren müssen zuerst als solche erkannt werden, (2) um sie danach in der Viren-Datenbank zu vermerken. (3) Zusätzliche Zeit geht verloren, bis diese neue Patterns durch die Antiviren-Software aktualisiert werden konnte.

Während dieses dreistufigen Zeitfensters ist es dem Virus möglich, nach Belieben zu wüten. Die letzten Jahre haben jedoch gezeigt, wie schnell die Hersteller von Antiviren-Systemen zu reagieren in der Lage sind. Nach einem grossflächigen Ausbruchs einer Computervirus (z.B. Melissa) können innerhalb von 24 Stunden die ersten Pattern-Updates bezogen werden. Doch in 24 Stunden kann viel passieren und eine menge Schaden angerichtet werden. Mitunter ein gefundenes Fressen für die Medien.

Abbildung 3: Automatisiertes Update der Pattern-Datenbank über das Internet

Abbildung 3: Automatisiertes Update der Pattern-Datenbank über das Internet

Das Aktualisieren der Viren-Datenbanken wird bei modernen Antiviren-Lösungen durch Automatisierung vereinfacht. So lassen die meisten Applikationen das Herunterladen der neuesten Viren-Pattern zu einem gegebenen Zeitpunkt zu. Es ist zu empfehlen, über Nacht jeweils die Viren-Datenbank zu aktualisieren. Dabei wird meistens eine HTTP- oder FTP-Verbindung zum Datenbank-Server des Antiviren-Herstellers hergestellt und die gewünschten Informationen heruntergeladen. Dies sind oft sehr kleine Datenmengen, die da ausgetauscht werden.

Heuristische Suche
Viele Viren-Programmierer verändern altbekannte Schädlinge, um sich die mühsame Arbeit, die eine Eigenentwicklung mit sich bringt, zu sparen. Dabei werden eventuell neue Schadensroutinen eingefügt oder verräterische Zeichenketten modifiziert. Der Mechanismus des pattern matching versagt sodann seinen Dienst, denn der Virus kann nicht mehr am altbekannten Merkmal erkannt werden. Dies ist vor allem im Zeitalter der Skript-Viren und Hexeditoren ein Nachteil für die Antiviren-Entwickler. Es scheint beinahe utopisch, sämtliche Viren und deren Varianten in der Datenbank aufzulisten. Zudem geht dies auch immer auf die Performance, da nun nach noch mehr Indizien gesucht werden muss.

Eine Alternative oder Ergänzung zum klassischen pattern matching ist durch die heuristische Suche gegeben. Hierbei werden nicht bestimmte Zeichenketten, sondern verdächtige Programmabfolgen gesucht. Der Vorteil hiervon ist klar, denn von nun an ist nicht mehr die Aktualität der Viren-Datenbank für den Erfolg der Software ausschlaggebend. Es können somit auch neuartige Computerviren erkannt werden, die noch gar nicht öffentlich bekannt sind.

Abbildung 4: Die heuristische Suche

Abbildung 4: Die heuristische Suche

Aber auch hier gibt es Nachteile. Dieser ist primär in den Performance-Einbussen, die diese Technik mit sich bringt. So hat die Antiviren-Software sämtliche Kernel-Aufrufe zu analysieren und in Notfällen einzugreifen. Dies ist natürlich ein Mehraufwand für die Software, das Betriebssystem und den Prozessor.
Am effizientesten ist die Kombination zwischen pattern matching und der heuristischen Suche. So können sehr einfach altbekannte Computerviren erkannt werden (pattern matching) und neuer bösartige Programmcode identifiziert werden (Heuristik). Die meisten modernen Antiviren-Lösungen bieten beide Methoden an.

Fazit

Antiviren-Software ist etwas ganz spezielles, das nicht mit herkömmlicher Software vergleichbar ist. Durch verschiedene Methoden werden Computerviren erkannt und entfernt. Jede dieser Methoden hat ihre Vor- und Nachteile. So ist es zu empfehlen, jeweils beide Techniken einzusetzen, um ein Höchstmass an Effizienz zu erreichen. Die Heuristik ist in der Lage neuartige und unbekannte Viren zu erkennen, was leider sehr auf Kosten der Performance geht. Beim Pattern-Matching werden nach verräterischen Zeichenketten Ausschau gehalten, die in der Viren-Datenbank vermerkt sind. Eine Aktualisierung der Viren-Datenbank ist bei modernen Lösungen dank einer Automatisierung sehr einfach.

Mit einigen kleinen Tricks lassen sich die Performance-Einbussen, die zwangsweise ein Teil der Antiviren-Lösung sind, minimieren. So empfiehlt sich auf zeitkritischen Systemen das pattern matching lediglich auf potentielle Viren-Dateien anzuwenden (z.B. binäre Programmdateien, Office-Dokumente und E-Mails).