Report: Viren unter Linux

11.04.2001 von Oliver Müller
In der Linux-Community hält sich unbeirrbar die Meinung, Linux könne nicht Opfer von Viren werden. Das System sei ja technisch überlegen und hundertprozentig sicher. Auch wenn es keiner hören will: Die Realität sieht anders aus.

Viren unter Linux haben sich vom belächelten Kinderschreck zur ernsten Gefahr entwickelt. Das zunehmende Auftreten von Viren, Trojanern und Würmern unter dem freien Unix kann schon bald als Epidemie bezeichnet werden. Leider herrscht unter den Linux-Jüngern genauso viel Aufgeschlossenheit wie bei den Pestärzten im Mittelalter. Wie die drei chinesischen Affen schalten sie auf stumm, taub und blind, sobald der zum Überwesen hochstilisierte Pinguin mit den digitalen Krankheitserregern in Verbindung gebracht wird.

Dieser Beitrag soll mit folgenden Missverständnissen aufräumen:

Auf die Funktionsprinzipien der Viren geht dieser Beitrag allerdings nur soweit ein, wie es für das Erläutern der einzelnen Punkte wichtig ist. Wer hier eine Anleitung zum Bau von Viren in HowTo-Manier erwartet, wird enttäuscht werden.

Warum die Viren auf sich warten ließen

Linux existiert nun schon zehn Jahre. Da stellt sich natürlich die berechtigte Frage, warum sich erst jetzt Viren als Gefahr für dieses System erweisen. Bei Systemen wie DOS oder Windows haben sich die ersten Viren schon nach wesentlich kürzerer Zeit eingefunden.

Die Antwort auf diese Frage ist sehr simpel: DOS und Windows waren mit einem Schlag auf dem Desktop-PC präsent. Eine Vielzahl von Anwendern konnte damit auf einen Streich erreicht werden. Linux hingegen führt auch heute noch auf dem Schreibtisch ein Schattendasein. Es hat bislang seinen Platz primär im Server-Bereich erobert. Die Anwenderanzahl spielt für Virenprogrammierer aber eine entscheidende Rolle.

Ebenso wie es eine Hacker- beziehungsweise Cracker-Szene gibt, so existiert auch ein Underground für Virenschöpfer. Innerhalb dieser Szenen existieren einzelne Gruppen, die sich auf die Fahnen geschrieben haben: "Welt pass' auf! Wir schreiben die besten Viren!" In diesen Gruppen wird reger Austausch über neue Programmiermethoden und Know-how betrieben, fachliche Probleme werden diskutiert und sogar Dokumentation und Anleitungen zum Virenbau verteilt.

Diese Gruppen sind einem Ehrencodex verpflichtet. Als Qualitätsmerkmal eines Virus gilt die Anzahl der infizierten Rechner und der angerichtete Schaden. Beides schafft Aufmerksamkeit und damit Status in der eigenen Gruppe und dem gesamten Underground.

Nun ist die Chance, einen gigantischen Schaden auf einem Windows-System anzurichten, das auf neunzig Prozent alles Arbeitsplatzstationen läuft, wesentlich größer als bei Linux, das gerade einmal vier Prozent Marktanteil im Desktop-Bereich hat.

Hausgemachtes Problem?

Doch drängt sich die Frage auf: Warum wird Linux bei einem Marktanteil von vier Prozent schon jetzt befallen? Das hat im Wesentlichen zwei Gründe.

Zum einen fordert eine im Aufwind befindliche Plattform wie Linux den Sportsgeist eines Virenprogrammierers heraus. Unter Windows kann schon fast jeder einen Virus programmieren, und wenn er nicht programmieren kann, verwendet er einen der vielen Virenbaukästen der Szene. Unter Linux ist noch Expertenwissen notwendig, um einen Virus ins Leben zu rufen. Virenbaukästen gibt es nicht und Anleitungen a la "how to build a virus" sind rar.

Zum anderen ist die Linux-Community selbst schuld. Kaum gingen die ersten Systeme durch Viren in die Knie, die auf Outlook abgestimmt waren, hagelte es schon die ersten Statements, dass so etwas unter Linux nicht möglich sei. Wohlweislich: Es wurde nicht gesagt, der Love-Letter kann Linux nicht befallen, da hier kein VB-Script existiert. Stattdessen wurde mit vollem Mund verlautbart, unter Linux ist so etwas überhaupt kein Thema. Fataler Fehler!

Virenprogrammierer reagieren teilweise wie trotzige Kinder. Wer sie provoziert, erreicht genau das Gegenteil. Durch diese Stellungnahmen aus der Linux-Gemeinde fühlten sich die Schädlingserzeuger natürlich herausgefordert. Nichts schafft nämlich so viel Gurustatus im Underground, wie das Unmögliche möglich zu machen: "Viren unter Linux sind nicht möglich? Beweisen wir doch das Gegenteil. BSD rulez!"

Binary-Viren sind unmöglich? - Falsch!

Wer sich schon einmal die Anatomie eines EXE-Virus unter DOS angesehen hat, ist von seiner Einfachheit erstaunt. Ein Virus erzeugt ein neues Programmsegment mit seinem Sabotage-Code, hängt sich an das Ende der EXE an und führt sich selbst beim Start des Programms aus. Anschließend patcht er fleißig im Speicher umher, um sich im Speicher festzusetzen und beispielsweise den DOS-Funktionen-Interrupt 21h zu infizieren. Über diesen Interrupt 21h sorgt er dann auch für seine weitere Verbreitung.

Unter Linux müssen diese beiden Schritte - Infektion und Verbreitung - ebenfalls gelöst werden. Entgegen dauerhafter Falschinformationen können ELF-Binaries ähnlich wie EXE-Dateien infiziert werden. Das Anhängen von weiteren Programmsegmenten ist kein Problem. Im Gegenteil: Viren können sich sogar in "Füllinformationen" von ELF-Segmenten einnisten, so dass teilweise gar kein separates - und leicht zu identifizierendes - Segment notwendig ist. Lediglich der unter DOS so beliebte, sich selbst im Speicher modifizierende Code, ist unter Linux nicht möglich. Doch diese Probleme lassen sich auch anders lösen.

Die Infektion durch Patchen von Binaries im Dateisystem ist also kein Problem unter Linux. Die Vermehrung hingegen auf den ersten Blick schon eher. Wie soll sich ein Linux-Virus aus einem ELF-Programm in eine zentrale Systemfunktion ähnlich dem DOS-Funktionen-Interrupt einhängen? Das ist zwar schwierig aber auch nicht unmöglich.

Hierzu ist es nötig, die Kernel-Binaries zu patchen. Ein etwas umfangreiches Unterfangen, da kaum ein Kernel dem anderen gleicht. Je nach verwendetem Compiler, Einstellungen zur Optimierung und Kernelversion sieht das Binary des Kernels anders aus. Prinzipiell ist dieses Problem aber lösbar.

Verbreitung per Daemon

Für die Verbreitung von Viren ist es aber gar nicht notwendig, wie beim alten DOS vorzugehen! Die Lösung heißt: Daemons und Libraries. Wenn ein Virus einen Daemon, wie zum Beispiel sendmail, infizieren kann, muss er sich über seine Verbreitung keine Gedanken mehr machen. Daemons bieten außerdem ein wahres Paradies für spätere Hacker-Attacken. Hier wären die X11-Displaymanager, wie xdm, kdm oder gdm, aber auch syslogd selbst zu nennen. Wozu Passwörter cracken, wenn sie beim Eintippen im Klartext erkannt werden können.

Außerdem ist es möglich, dass der Virus direkt die Binaries im Dateisystem infiziert. Sollte es ihm außerdem gelingen, Libraries, wie etwa die C-Library, zu infizieren, sitzt er ohnehin in jedem dynamisch gelinkten Programm.

Spätestens seitdem Win32/linux.Winux sein Unwesen parallel unter Windows und Linux treibt, ist klar: Unter Linux können ELF-Programme infiziert werden. Es darf hier jedoch nicht vergessen werden, dass dieser Virus höchst wahrscheinlich noch ein "proof of concept" ist. Er soll also zeigen, dass es prinzipiell geht.

Noch ist das Zukunftsmusik, da kein Virus nach diesem Prinzip wirklich relevant geworden ist. Es ist jedoch erschreckend, dass sich in der Szene bereits "Prototypen" solcher Viren und konkrete Anleitungen mit Beispielen finden.

E-Mail-Viren sind unmöglich? - Falsch!

Würmer unter Linux sind keine Fiktion mehr. Einige Wellen verursachte in der Fachpresse der Ramen Worm, der Red Hat Linux befiehl. Der Wurm nutzt Sicherheitslücken in rpc.statd und wu-ftpd aus. Einmal im System angelangt, sendet er E-Mails an zwei webbasierte Mail-Accounts und startet die Suche nach neuen Opfern. Bei der Suche nach weiteren Rechnern, die infiziert werden können, reduziert er die Internet-Bandbreite des infizierten Systems enorm. Darin liegt auch sein hauptsächlicher Schaden.

Der seit Ende Februar vornehmlich in USA aufgetretene Wurm Lion ist hier schon etwas gefährlicher. Er ersetzt verschiedene Systemdienste, um seine Verbreitung zu sichern und seine Existenz zu verschleiern. Sehr problematisch ist, dass er login ebenfalls ersetzt. Damit werden Passwörter ausspioniert und diverse Hintertüren eingerichtet.

Von E-Mail-Viren in der Manier von "I LOVE YOU" und "Anna Kournikowa" wurde Linux bislang noch verschont. Doch: E-Mail-Viren sind nicht nur auf Outlook Express und Windows beschränkt. Wer kmail, Netscape oder auch Mozilla genauer unter die Lupe nimmt, wird dort das selbe Prinzip wie bei Outlook Express vorfinden. Auf eine Anlage geklickt, wird diese automatisch geöffnet. Dies öffnet Viren & Co. Tür und Tor.

Wer sich schon einmal mit der Makrosprache StarBasic von StarOffice befasst hat, wird sich gefragt haben: Wo ist der Unterschied zu VBA von MS Office? - Kein allzu großer! Auch hier können Markoviren programmiert werden.

Linux ist überlegen sicher? - Falsch!

Die Meinung "Linux ist sicher, weil Linux Linux ist" ist weit verbreitet an der philosophisch geprägten Front zwischen Windows- und Linux-Anhängern. Tatsächlich ist Linux ein System, das sehr auf Sicherheit getrimmt werden kann. Patches sind schnell verfügbar und mit dem entsprechenden Know-how sogar selbst programmierbar. Doch das bedarf eines gewissen Aufwands.

Würmer wie der "Ramen Worm" und "Lion" zeigen, dass auch Linux Sicherheitslücken hat und diese gezielt ausgenutzt werden können. Patches sind zwar schnell verfügbar, aber bis dahin verursachen Sabotage-Programme erst einmal Schaden.

Leider sind Systeme wie OpenBSD, die schon bei der Programmierung auf Sicherheit getrimmt werden, die Ausnahme. Bei der Programmierung von Linux wurde auf Sicherheitsaspekte ebenso wenig oder genauso viel Wert gelegt, wie bei Windows, UNIX oder DOS. Programmierer sind eben nur in den seltensten Fällen Sicherheitsexperten. Und jede Eventualität können sie schon gar nicht voraussehen.

Abgesehen von Konfigurationsfehlern gibt es genügend andere Angriffspunkte. Eine beliebte Möglichkeit zum Angriff auf ein Unix-System ist der Buffer Overflow. Häufig achten Programmierer nicht darauf, dass bestimmte Pufferlängen nicht überschritten werden können (wu-ftpd und sendmail lassen grüßen).

Angriffspunkt Buffer Overflow

Angenommen zur Aufnahme des eingegebenen Benutzernamens für einen Netzwerkdienst wird ein Puffer von 100 Bytes eingerichtet. Werden nun mehr als 100 Bytes an das Programm geschickt und es achtet nicht darauf, kommt es zu einem Buffer Overflow. Der zuständige Daemon, zum Beispiel sendmail, stürtzt darauf hin ab. Ein klassischer "Denial of Service"-Angriff (DoS).

Was hat das mit Viren zu tun? - Daemons wie sendmail werden als "root" ausgeführt. Statt den Puffer mit unsinnigen Daten (zum Beispiel 1000-mal X) überlaufen zu lassen, kann der Hacker auch ein "Ei" ins System legen. Dabei ist ein feindseliges Assembler-Programm in die Zeichenkette, die den Buffer Overflow auslöst, eingebettet. Sowie das Programm abstürzt, tritt dieses Programm in Aktion und manipuliert das System so, dass eine Shell mit root-Privilegien gestartet wird. Der Angreifer kann so auf das System als "root" zugreifen.

Dieser Mechanismus ist natürlich für Virenprogrammierer wie für Hacker gleichermaßen interessant. root-Rechte sind für einen Virus Gold wert. Für ELF-Binaries sind sie die Grundvoraussetzung, um andere Dateien im System zu patchen und so zu infizieren.

Doch gerade das egg/sendmail-Beispiel zeigt noch etwas anderes. Die Grenze zwischen Hacker- und Virenangriff ist hier fließend. Es genügt in diesem Fall voll und ganz eine E-Mail zu empfangen, um das System zu infizieren. Der Anwender muss nicht auf etwas klicken, um den Virus ins System zu bringen. Es reicht vollkommen aus, dass er seine E-Mails abruft.

Fazit: Die Gefahr ist real!

Zweifelsohne ist die Viren-Gefahr auch für Linux vorhanden. Sollte Linux weiter an Popularität gewinnen und auch im Desktop-Bereich nennenswerte Marktanteile erobern, wird es um die Artenvielfalt von Linux-Viren nicht schlecht bestellt sein. Da hilft dann auch die Scheuklappentechnik mit Sätzen wie "Hacker sabotieren kein Hacker-System" nichts mehr.

Die Linux-Distributoren wären gut damit beraten, die Virengefahr ernst zu nehmen. Wer sich als Sicherheitsexperte die Techniken zum automatischen Update via Internet einmal näher ansieht, wird vor Schrecken schaudern. Die Update-Mechanismen laden Viren und Trojaner ja förmlich ein. Die Authentifizierung des Server ist dürftig, Zertifizierungen der Server wäre angebracht.

Auch den contrib-Verzeichnissen sollte nicht unbedingt getraut werden. Zu bedenken ist, dass die darin enthaltenen Packages von anderen Benutzern hochgeladen wurden. Wer weiß schon, wer das war?

Für Linux müssen inzwischen die gleichen Grundsätze wie für Windows gelten:

Linux ist genauso anfällig wie andere Systeme. Jetzt heißt es endlich aufwachen. Nur eine erkannte Gefahr ist eine gebannte Gefahr! (mha)