Howard Fuhs
Howard Fuhs
Howard Fuhs
IT-Sicherheitsberater
IT-Sicherheitsberater
IT-Sicherheitsberater

Verschlüsselungsgeneratoren

für Computerviren

Teil 2

Copyright (C) 04/1995 by Howard Fuhs


Inhalt:

    Einleitung

    Heuristische Methode

    Entschlüsselung

    Prüfsummen

    Zusammenfassung der Entdeckungsmethoden

    Einbindung einer Mutation Engine

    Funktionsweise einer Mutation Engine

    Polymorphe Verschlüsselungsroutinen

    Junk Code Generator

    Arten polymorpher Entschlüsselungsroutinen

    Copyright-Hinweis
 


Einleitung

Nachdem im ersten Teil die bereits existierenden Generatoren beschrieben wurden, möchte ich nun auf verschiedene technische Aspekte von polymorphen Viren und polymorphen Generatoren eingehen.

Die Erfindung von polymorphen Viren diente einzig und alleine dem Zweck, die Entdeckung mit herkömmlichen Mitteln (String-Scanner) unmöglich zu machen oder zumindest in erheblichem Maße zu erschweren. Es mußten also neue Entdeckungstechniken entwickelt oder auch ältere Techniken wiederentdeckt werden, um ein zuverlässiges Auffinden von mutierenden Viren gewährleisten zu können.


Heuristische Methode

Die heuristische Methode geht von der Tatsache aus, daß der Virus immer eine gewisse Programmstruktur beinhalten muß, egal wie sehr er verschlüsselt oder verändert wurde. Diese Tatsache trifft vor allen Dingen auf die Entschlüsselungsroutine zu, die den Virus bei jedem Aufruf auf das Neue entschlüsseln muß, bevor sein Code funktionsfähig ausführbar ist. Bei der heuristischen Suche wird nun in einer ausführbaren Datei gezielt nach solchen, für einen mutierenden Virus typischen Programmstrukturen gesucht. Es ist mit dieser Methode möglich, die Wahrscheinlichkeit, mit der eine Datei infiziert ist zu bestimmen. Ab einer gewissen Wahrscheinlichkeit wird dann die Datei von dem Antiviren-Programm als verdächtig oder infiziert gemeldet. Da die heuristische Technik in einem gewissen Maße nur auf der Annahme von Wahrscheinlichkeiten beruht, ist hier die Wahrscheinlichkeit eines falschen Virenalarmes auch relativ hoch. Die Wahrscheinlichkeit eines falschen Alarms steigt mit den Mutationsmöglichkeiten für die ein polymorpher Generator programmiert wurde. Je höher die Anzahl der möglichen Mutationen desto allgemeiner muß der Ver- /Entschlüsselungscode gehalten sein und desto höher ist die Wahrscheinlichkeit den gleichen Programmcode in einer nicht infizierten Datei zu finden.

Eine rein heuristische Suche sollte deshalb nur von Fachpersonal durchgeführt werden und nicht von einem einfachen Anwender ohne entsprechendes Fachwissen über Computerviren.

Ein weiters Problem stellen sogenannte HLL-Viren dar, da sie heuristisch nicht erkannt werden können. HLL-Viren (HLL = High Level Language) sind in einer Hochsprache programmiert und weisen daher nach dem kompilieren keinerlei virenverdächtige Programmstruktur auf, die eine heuristische Suchmethode analysieren könnte. HLL-Viren sind relativ selten, da sie für einen Computervirus recht groß sind und gemessen an ihrer Größe mit nur wenigen Funktionen auskommen müssen.

Es ist nicht möglich, mit einer einzigen heuristischen Suchroutine alle mutierenden Viren respektive die polymorphen Verschlüsselungsgeneratoren zu entdecken. Für jeden polymorphen Verschlüsselungsgenerator muß eine eigene heuristische Suchroutine programmiert werden, die auf die jeweiligen Besonderheiten des Generators achtet. Dies setzt eine sehr genaue und umfangreiche Analyse des Verschlüsselungsgenerators voraus. Wird bei der Analyse etwas übersehen, so kann dies in der Praxis bedeuten, daß der polymorphe Generator unter bestimmten Voraussetzungen einen Virus auf eine Art und Weise mutieren läßt, welcher dann von der heuristischen Routine doch nicht entdeckt werden kann. Bei der Bewertung der Entdeckungsleistung von Antiviren-Programmen ist es deshalb nicht damit getan, einige wenige polymorphe Viren suchen zu lassen. Hier ist es vielmehr notwendig, mitunter mehrere tausend funktionsfähige Mutationen von demselben polymorphen Generator zu generieren, um sich ein Bild über die Verläßlichkeit der Entdeckungsleistung eines Produktes machen zu können.


Entschlüsselung

Bei dieser Methode versucht das Antiviren-Programm zuerst festzustellen, ob die zu überprüfende Datei Anzeichen einer Verschlüsselung aufweist. Sollte dies der Fall sein, wird mit generischen Entschlüsselungsalgorithmen versucht, die Verschlüsselung aufzuheben und der darunter zum Vorschein kommende Programmcode wird mit Scan-Strings auf Viren hin untersucht. Da nicht jede Mutation Engine auch mit generischen Algorithmen entschlüsselt werden kann, muß dem Programmierer des Antiviren-Programms sehr oft der polymorphe Virus zur genauen Analyse vorliegen. Weiterhin kann diese Methode nicht zukünftige Viren entdecken, die mit dem gleichen polymorphen Generator ausgestattet sind.


Prüfsummen

Prüfsummenprogramme berechnen nach bestimmten Algorithmen eine Prüfsumme von einer Datei und speichern diese in einer Datenbank ab. Wird das Checksummenprogramm das nächste Mal aufgerufen, so berechnet es wieder für alle Dateien die Prüfsummen und vergleicht diese Werte mit den in der Datenbank abgelegten Ergebnissen. Ist in einer Datei auch nur ein Bit verändert worden, so stimmen die berechnete Prüfsumme mit der gespeicherten nicht mehr überein. Dadurch entdeckt ein solches Programm praktisch jede noch so kleine Änderung in einem System oder einer Datei. Es ist also egal, ob es sich um einen normalen Virus handelt oder um einen Virus, der mit einem polymorphen Generator ausgestattet ist. Die Änderung der Wirtsdatei wird auf alle Fälle entdeckt.

Die Nachteile eines Prüfsummenprogramms liegen in der Tatsache, daß das Programm zwar Veränderungen in Dateien entdecken kann, aber sehr oft nicht in der Lage ist zu unterscheiden, ob diese Veränderung durch einen Virus hervorgerufen wurde oder ob es eine Eigenschaft der ausführbaren Datei ist, seinen Code selbstständig zu ändern. Weiterhin kann ein Checksummenprogramm einen Virus oder eine Virusvariante nicht identifizieren. Um diese Nachteile abzumildern, müßte praktisch eine Mischung aus allen Entdeckungstechniken in einem Programm vereint werden.

Prüfsummenprogramme bieten ebenfalls einen Angriffspunkt für Stealth-Viren, Retro-Viren und Fast-Infector-Viren. Wenn ein Stealth-Virus im Speicher vorhanden ist, wird das Checksummenprogramm keine Veränderung in Dateien feststellen können, da sich der Stealth-Virus vor dem Berechnen der Summe aus der infizierten Datei entfernt und nach dem Berechnen wieder die Wirtsdatei infiziert. Das Prüfsummenprogramm geht also bei der Prüfsummenberechnung von falschen Daten aus. Sollte der Stealth-Virus auch noch Fast-Infector-Eigenschaften haben, so werden mit einem einzigen Durchlauf des Programms alle ausführbaren Dateien auf einen Schlag infiziert. Sollte die Datenbankdatei, in der alle Prüfsummenwerte abgespeichert sind, sich auf der Festplatte befinden, so kann diese Datei von einem Retro-Virus angegriffen werden. Ein solcher Retro-Virus kann dann entweder die Datenbankdatei so verändern, daß infizierte Dateien dem Prüfsummenprogramm nicht auffallen oder die Datenbankdatei löschen, damit das Checksummenprogramm eine neue Datenbankdatei anlegen muß.


Zusammenfassung der Entdeckungsmethoden

Egal welche Methode zum Aufspüren von polymorphen Viren verwendet wird, jede hat in der praktischen Anwendung ihre Vorzüge und Nachteile.

Unabhängig davon wie funktionssicher und gewissenhaft eine heuristische Suchroutine programmiert wurde, es kann nie ganz die Wahrscheinlichkeit von falschen Alarmen ausgeschlossen werden. Doch die heuristische Suche bietet dem Anwender auch Vorteile. Wurde ein polymorpher Verschlüsselungsgenerator sorgfältig analysiert, kann man davon ausgehen, daß die heuristische Suche in der Lage ist, alle Viren zu entdecken, die mit diesem polymorphen Generator ausgestattet wurden.

Bei der entschlüsselnden Methode ist es sehr unwahrscheinlich, das falsche Alarme vorkommen, dafür kann die entschlüsselnde Methode aber auch nur die polymorphen Viren entdecken, die sorfältig analysiert und in die Entschlüsselungsroutine intergriert wurden. Weiterhin ist es mit der entschlüsselnden Methode möglich, die exakte Variante des Virus zu identifizieren. Dies ist bei der heuristischen Suche nicht möglich.

Mit Prüfsummenprogrammen können polymorphe Viren ohne Probleme entdeckt werden, solange der Virus keine Stealth-Techniken verwendet, um sich vor solchen Maßnahmen zu schützen. Prüfsummenprogramme können auch unbekannte, bisher noch nicht analysierte Viren entdecken.


Einbindung einer Mutation Engine

Am Beispiel der MutaGen Engine soll gezeigt werden, wie die Einbindung in einen Computervirus funktioniert. MutaGen ist relativ einfach in der Anwendung, da es nur einige wenige Parameter benötigt. Um MutaGen verwenden zu können, muß am Anfang des Viruscodes folgende Zeile eingetragen werden:
 

Folgende Parameter benötigt MutaGen:
 

Nachdem MutaGen seine Arbeit beendet hat, enthält CX die Länge des verschlüsselten Moduls mit Entschlüsselungscode und DS:DX zeigt auf den verschlüsselten Code.


Funktionsweise einer Mutation Engine

Um einen Computervirus optimal vor Entdeckung zu schützen, muß eine polymorphe Routine mehrere Funktionen beinhalten.
 

Werden die Bedingungen unter Punkt 2 und 3 nicht eingehalten, wäre es technisch möglich den Virus mit einem String-Scanner zu finden.

Ein Virus mit polymorpher Routine sieht im Funktionsprinzip wie folgt aus:

Abb. 1: Computervirus mit polymorpher Routine

Der verschlüsselte Viruscode enthält ebenfalls die polymorphe Routine.

In der folgenden Abbildung wird das Funktionsprinzip einer infizierten Datei sichtbar.

Abb. 2: Infizierte Datei

Wird diese infizierte Datei jetzt aufgerufen, passiert folgendes:

Der am Anfang der Datei stehende Jump-Befehl verzweigt sofort zur Entschlüsselungsroutine, die ausgeführt wird und den Computervirus mitsamt der polymorphen Routine entschlüsselt. Nach der Entschlüsselung kann der Viruscode abgearbeitet werden. Nachdem der Viruscode abgearbeitet wurde, erfolgt ein zweiter Jump-Befehl zum eigentlichen Dateianfang der infizierten Wirtsdatei und führt diese aus.

Eine ähnliche Vorgehensweise wird bei der Infizierung einer Datei angewendet. Der Virus schreibt an den Anfang der zu infizierenden Wirtsdatei einen Jump-Befehl zum Dateiende. Als nächstes wird die polymorphe Routine beauftragt, eine Verschlüsselungsroutine mit Schlüssel zu generieren. Dann wird eine Kopie des Virus mitsamt der polymorphen Routine angefertigt und mit der bereits generierten Verschlüsselungsroutine verschlüsselt. Jetzt wird eine passende Entschlüsselungsroutine generiert und an das Ende der zu infizierenden Wirtsdatei angehängt. An diese Entschlüsselungsroutine wird wiederum der verschlüsselte Virencode mitsamt einem Jump-Befehl auf den Dateianfang der Wirtsdatei angehängt.

Das hier beschriebene Verfahren ist vereinfacht dargestellt und kann von einer polymorphen Routine zur anderen unterschiedlich sein!


Polymorphe Verschlüsselungsroutinen

Polymorphe Verschlüsselungsroutinen verschlüsseln den Viruscode unter Anwendung von einem oder mehreren Verschlüsselungsalgorithmen. Ziel dabei ist es nicht nur den Virus vor Entdeckung zu schützen, sondern auch mit so wenig wie möglich Programmcode soviel wie möglich an verschiedenen Verschlüsselungen erzeugen zu können. Für die Generierung unterschiedlicher Verschlüsselungen werden bestimmte Variablen benötigt. Als Variablen für die Generierung einer Mutation können Datum, Uhrzeit, Dateigröße oder auch andere Werte dienen. Dies kann aber auch zur Folge haben, daß sich ein Virus unter bestimmten Umständen nicht weiter verbreiten kann, da die zur Verfügung gestellten Werte nicht in der Verschlüsselungsroutine verwendet werden können.


Junk Code Generator

Die Verschlüsselung des Virencodes reicht nicht aus, um einen Computervirus für String-Scanner unsichtbar zu machen. Das schwächste Glied in der Funktionskette eines polymorphen Virus ist die Entschlüsselungsroutine. Während der verschlüsselte Viruscode nicht ausführbar ist, muß der Programmcode dieser Routine ausführbar sein und kann damit nicht ebenfalls verschlüsselt werden. Bleibt aber eine Entschlüsselungsroutine immer gleich, so kann ein String-Scanner mit einer bestimmten Bytefolge sehr zuverlässig nach diesem Code suchen und damit den Computervirus ebenfalls entdecken. Um diese Routine zu tarnen, wird sie mit Befehlen versehen, die keine Wirkung haben, wie z.B. NOP oder MOV BX:BX, aber das Erscheinungsbild dieses Programmabschnitts bei jeder Kopie so nachhaltig verändern, daß sie mit einfachen String-Scannern nicht mehr entdeckt werden kann. Damit diese Befehle immer an unterschiedlicher Stelle der Entschlüsselungsroutine stehen, ist in einer guten polymorphen Routine ebenfalls ein sogenannter Junk Code Generator eingebaut, um ausführbaren Code von Kopie zu Kopie nachhaltig zu verändern, ohne die Funktion der Routine zu beeinträchtigen. Ein solcher Junk Code Generator ist ein Zufallsgenerator, der eine bestimmte Menge an Befehlen an zufälligen Stellen innerhalb der Entschlüsselungsroutine placiert. Außer dem Junk Code Generator gibt es noch andere Möglichkeiten, die Verschlüsselungsroutine vor Entdeckung zu schützen.


Arten polymorpher Entschlüsselungsroutinen

Abhängig davon wie eine polymorpher Routine programmiert wurde, kann sie mehr oder weniger komplizierte Entschlüsselungsroutinen erzeugen.

Die einfachste Art ist die Verwendung einer bestimmten Anzahl immer gleichbleibender Entschlüsselungsroutinen. Diese Methode ist nicht sehr effizient, da man einem String-Scanner nur die Bytefolgen der einzelnen Routinen eingeben muß, um den Virus zuverlässig aufzuspüren.

Die nächste Stufe wäre eine Entschlüsselungsroutine, die immer die gleichen Befehle verwendet, diese aber  ständig andere Prozessorregister belegen usw.

Eine weitere Möglichkeit ist das zufällige Verschieben von austauschbarem Entschlüsselungscode in andere Bereiche der Entschlüsselungsroutine. Dies geht aber nur mit Programmcode, bei dem es egal ist, an welcher Stelle er in diesem Programmabschnitt steht.

Die sicherste Möglichkeit besteht aus der Verwendung mehrerer der hier beschriebenen Methoden.


Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Autors unzulässig und strafbar.

Copyright (C) 04/1995 by Howard Fuhs

 

Fuhs Security Consultants
 
Alle Rechte
vorbehalten!

 
 Realisation:
Frank Ziemann
Home Impressum


WebCam
24h WorldTimer PCI DSS Publikationen Digital Publishing EN English
Thema 00
Hier finden Sie Information über Dinge, von denen wir jetzt noch nichts verraten wollen.
Fallbeispiele
Fallbeispiele aus der alltäglichen Datenunsicherheitspraxis.
Neues
Aktuelle Neuigkeiten und Medieninformationen.
Service
Sichern Sie Ihr Unternehmen durch unsere Dienstleistungen und Serviceangebote ab.
Fallbeispiele
Die neue 24h WorldTimer Uhrenserie mit standardisierter astronomischer Zeitangabe nach ISO 8601 für 24-Stunden-Umgebungen
PCI DSS
Dienstleistungen und Serviceangebote rund um den Payment Card Industry Data Security Standard
Publikationen
Fachartikel und Buchmanuskripte von Howard Fuhs.
Digital Publishing
Publikationen von Howard Fuhs auf CD-ROM.
EN English pages
Please find here our English pages for international visitors.
      E-Mail
Sie erreichen uns
per E-Mail unter
  info@fuhs.de
    Realisation
EDV-Beratung
Frank Ziemann
www.fz-net.com
Themen  
Themen
Papers Satellite Hacking
Fachartikel deutsch
Präsentationen
Fachartikel englisch
Bücher von Howard Fuhs
Buchrezensionen
Medienberichte
Datensicherheitsinfos
Sicherheitsinfos
Computerviren und ihre Vermeidung
Information Security Bulletin
Bilder PCBRL
Bilder DCF77
Jokes
Fachartikel deutsch
Deutsche Fachartikel von Howard Fuhs.
Präsentationen
Präsentationen von Howard Fuhs.
Fachartikel englisch
Englische Fachartikel von Howard Fuhs.
Sicherheitsinformationen
Sicherheitsinformationen auch aus Quellen des Computeruntergrunds.
Computerviren und ihre ...
Buchmanuskript von Howard Fuhs über Computerviren, erstmals veröffentlicht 1993.
Jokes
Einfach nur Witze.
Bücher von Howard Fuhs
Buchveröffentlichungen von Howard Fuhs.
Howard Fuhs in den Medien
Medienbericherstattung über Howard Fuhs.
Datensicherheitsinformationen
Allgemeine Datensicherheitsinformationen von Howard Fuhs.
Bilder PCBRL
Technische Bilder von Howard Fuhs für das Printed Circuit Board Research Lab.
Information Security Bulletin
Deutsche Ausgaben des Information Security Bulletin von CHI-Publishing Ltd., UK.
Papers Satellite Hacking
Englische Texte zum Vortrag Satellite Monitoring, Satellite Hacking and Satellite Security
DCF77 Funkuhr
Vintage Gallery - Bilder einer DCF77 Funkuhr von 1972
Buchrezensionen
Howard Fuhs bespricht Fachbücher