Computerviren

Der Natur in die Karten geschaut: Die Bezeichnung “Viren” stammt aus der Biologie. Zum tristen Alltag der unwillkommenen Besucher gehört es, unschuldige Zellen zu überfallen. Dafür besitzen Sie eine dünne Proteinhülle mit einem Nukleinsäurefaden. Dieser DNS-Strang enthält die Erbinformation des Virus, sein Programm. Bei den Bakteriophagen, die zu den höchstentwickelten Virenarten gehören, bohrt ein geschickt konstruierter Viruskörper ein Loch in die Hülle einer Opferzelle und injiziert seine DNS hinein.

Die Wirtszelle kann nur selten die eigenen Erbinformationen von den fremden unterscheiden. So befolgt sie sklavisch die in der Viren-DNS enthaltenen Anweisungen, und die sind eindeutig: Stelle exakte Kopien der viralen DNS-Stränge her und baue aus strukturalen Proteinen neue Körper für diese Viren-DNS auf.

Die infizierte Zelle produziert daraufhin eine wahre Armee von Viren. Am Ende eines Zyklus platzt die befallene Zelle wegen Überfüllung und entlässt Heerscharen von Viren in die Umgebung. Die Wirtszelle stirbt, und die von ihr produzierten Erreger dagegen starten einen neuen Kreislauf.

Im PC läuft das Spiel des Lebens fast genauso ab: Die Programme in Ihrem PC sind nichts weiter als Anweisungen, jedes ein Papierstapel, auf dessen Seiten Befehle für den Prozessor stehen. Die CPU arbeitet die Programme Seite für Seite ab, wartet auf Eingaben oder springt zu anderen Seiten im Stapel, um deren Befehle auszuführen.

Computerviren erweitern diese Stapel mit neuen Seiten, Ersatz-Anweisungen. Da Programme und CPU sich ihrer selbst nicht bewusst sind, führen sie stur aus, was auf den neuen Seiten steht: Wie man neue Viren herstellt.

Ein so geändertes Programm gilt als “infiziert”. Es kann möglicherweise (nicht immer) noch alles tun, wozu es ursprünglich gedacht war, aber es tut eben auch zusätzliche Dinge und gilt deswegen als gestört. Je nach Infektion ist es sogar beschädigt, weil der Virus ein paar den alten Seiten wegschmiss, um Platz für seine eigenen Seiten zu schaffen – dann stürzt das Programm unerwartet ab.

Virus-Aufbau

Körper, Sprengkopf, Zünder

Viren unterscheiden sich von anderen Programmanomalien (Würmer, Trojaner) vor allem dadurch, dass sie nicht für sich selbst existieren können. Stets benötigen sie ein Wirtsprogramm, die sie befallen können. Sie bestehen grob gesprochen aus vier Teilen:

  • Aktivierung: Der Virus muss die Kontrolle über das System erlangen, also mindestens einmal pro Neustart aufgerufen werden. Der Code des Virus-Aufrufs kann sich an einer ganz anderen Stelle befinden als der Viruskörper selbst.
  • Vermehrung: Die Fortpflanzungs-Komponente des Virus hält Ausschau nach Programmen, die als Opfer in Frage kommen. Sind passende Wirte entdeckt, infiziert es sie, wobei es bestimmte Regeln einhält, um optimal zu arbeiten.
  • Wirkung: Die Nutzlast, im Virenforscher-Slang oft “Payload” genannt, ist eine harmlose oder gefährliche Wirkung. Sie wird über einen Auslöser (“Trigger”) aktiviert, der prüft, ob definierte Bedingungen vorliegen.
  • Tarnung: Eine Tarn-Komponente sorgt dafür, dass der Virus von Anwendern und Antivirenprogrammen nicht entdeckt wird.

Ein unschuldiges, gesundes Programm sieht ungefähr so aus:

Anfang
Anweisung 1
Anweisung 2
Anweisung 3
Ende

Dieses Opferlamm wird nun durch den Wunschzettel der Viren-Macher erweitert: Der Virus soll aktiviert werden, sobald sein Wirt aktiviert wird; er soll Dateien erkennen, die er problemlos infizieren kann; er soll sich dann in diese Dateien hineinkopieren und sich vermehren; die Kopie soll dabei identisch sein, damit sie weiterhin funktioniert; der Virus soll sich dabei verstecken oder wenigstens nicht auffallen; er zusätzlich zu bestimmten Zeitpunkten eine Wirkung haben.

Das sieht dann grob so aus:

Anfang
Virus-Anfang (Aktivierung)
Virus-Tarnung
Virus-Vermehrung
Virus-Wirkung
Virus-Ende
Alter Anfang
Anweisung 1
Anweisung 2
Anweisung 3
Altes Ende

Sie sehen: Viren sind kein Hexenwerk! ;-)

Tarnung

Einige Viren verändern ihre Gestalt, nehmen also ständig eine andere Form an. Deswegen heißen sie “polymorphe” Viren (von poly=viel, und morph=form). Sie bedienen sich hierzu verschiedener Methoden, die im Buch genauer erläutert sind… z.B.:

Scripte, die sich unkenntlich machen

Die webnahe Programmiersprache Perl eignet sich prima, um die Stealth-Technik Polymorphie bei Quelltextviren zu veranschaulichen. Wie bei der Programmiersprache C gibt es nämlich auch bei Perl Wettbewerbe in sogenanntem “Obfuscated Code”. Dabei sind die Coder bemüht, Programme so umzuschreiben, dass sie überhaupt nicht mehr als solche zu erkennen sind, aber dennoch einwandfrei funktionieren.

Das folgende Programm (ja, wirklich, es ist ein Programm!) hat mir der grossartige Perl-Entwickler Jörn Reder zur Verfügung gestellt:

sub i($){print$_[0]}*j=*ENV;sub w($){sleep$_[0]}sub _($){i"$p$c > ",w1,$_=$_[0],tr;i-za-h,;a-hi-z;,i$_,w,i"\n"}$|=1;$f='HO';($c=$j{ PWD}) =~ s/$j {$f." ME"} /~/;$p"$j{USER}\@$j{HOSTNAME}:";_"kl",$c ='~',_"zu,"."-zn,*",_"#,epg,lw,gwc,mfmkcbm, cvsvwev,uiqt,kwvbmvb?",i"$p$c > ";w 99

Eine perfekte Tarnung. Dieses (harmlose!) Programm simuliert (sagt der Entwickler) die Eingabe einiger fataler Shell-Befehle, die allerdings nicht durchgeführt werden, und gibt den folgenden Hinweis aus:

why do you execute unknown mail content?

Wie man sich leicht vorstellen kann, müssen Antivirenscanner, die in obigem Perl-Programm den potentiell destruktiven Code finden wollen, sich ziemlich anstrengen! Bei Makroviren und Scriptviren findet derzeit das gleiche Spiel statt…

Sind Viren heute noch ein Problem?

Es geht so, eher nein. Die meisten der Dinge, die wir heute “Viren” nennen und die von “Virenscannern” gejagt werden, sind in Wirklichkeit Trojaner und Würmer. Aber mit den Viren hat vor dem Netzwerkzeitalter alles angefangen.