Die aktuellen Nachrichten lassen kaum einen Zweifel: Rootkits verursachen Probleme für Microsofts Betriebssysteme. Auch für das kommende – sicherheitstechnisch aufgerüstete – Windows Vista demonstrieren namhafte Experten bereits erste Rootkits, um den Fortbestand des Problems zu verdeutlichen [1].
Schadenfreude ist hier aber fehl am Platz: Auch Unix- und Linux-Systeme werden seit vielen Jahren von Rootkits geplagt. Wie aber sieht ein solcher Schädling überhaupt aus und wie gelangt er auf den Rechner?
Im Grunde handelt es sich bei einem Rootkit um eine Art Baukasten für den Einbruch in Rechnersysteme. Die Schritte der Einbrecher ähneln sich bei allen Attacken; vereinfacht dargestellt, sehen sie so aus:
Während die Punkte 1 bis 4 sehr individuell vom Zielsystem abhängen, gleichen sich die Schritte 5 bis 7 bei allen Einbrüchen. Ob diese über einen FTP-Server oder ein erratenes Kennwort erfolgen, spielt für die Installation einer Hintertür keine Rolle. Die Aufgabe des Rootkits besteht darin, die Schritte 5 bis 7 zu vereinfachen und teilweise zu automatisieren.
Ein Rootkit dient dabei nicht als Einbruchswerkzeug, sondern hilft dem Angreifer nach getaner Arbeit, unentdeckt zu bleiben und weiter das System zu nutzen.
Über die Jahre entwickelten Hacker verschiedene Arten von Rootkits für Linux. Die erste Generation arbeitet dateibasiert und tauscht lediglich einzelne Dateien aus, um Hintertüren einzubauen. Ein neuer Inetd-Superserver stellt dann einen Telnet-Server bereit, der an einem zusätzlichen Port lauscht. Befehle wie chfn verwandeln einen normalen Benutzer bei der Eingabe eines bestimmten Kennwortes in einen Root-Benutzer.
Um die Installation vor zusätzlichen Programmen wie Sniffern und Log-Dateien zu verbergen, tauschen diese Rootkits auch Kommandos wie ls, find, ps und top aus. Die neuen Befehle zeigen die Dateien und Prozesse des Einbrechers nicht an. Einer der bekanntesten Vertreter dieser Gattung heißt Linux-Rootkit-5 (LRK5). Interessierte Leser finden dieses und weitere vorgestellte Rootkits ohne Probleme im Internet (siehe Kasten "Rootkits")
Rootkits
Als unerschöpfliche Quelle für alle Arten von Werkzeugen rund um Sicherheit dient das Packetstorm-Archiv (Abbildung 1). Unter http://www.packetstormsecurity.org finden Sie sowohl Rootkits, Exploits als auch Werkzeuge zu deren Erkennung. Dieser Webserver archiviert das LRK5, Knark, KIS und Suckit neben vielen anderen Varianten.
Werkzeuge gegen diese Rootkits gab es recht schnell. Das bekannteste heißt Tripwire (Stolperdraht). Es schützt vor solchen Angriffen, indem es zu Beginn eine Datenbank mit den Prüfsummen der auf dem System befindlichen Dateien anlegt. Dann prüft Tripwire regelmäßig die Integrität der Dateien anhand der Datenbank. Es bietet guten Schutz vor dateibasierten Rootkits (Abbildung 2), ist allerdings aufwändig zu installieren.
Die zweite Rootkit-Generation verfolgt einen anderen Ansatz. Statt Systemdateien auszutauschen, um Dateien und Prozesse zu verstecken, modifizieren diese Rootkits den Linux-Kernel, sodass dieser bestimmte Prozesse und Dateien und auch Netzwerkverbindungen nicht mehr anzeigt. Ein Austausch der Befehle ls oder ps erübrigt sich und Tripwire erkennt den Eindringling nicht mehr.
Diese Rootkits arbeiten als Kernel-Module, man nennt sie auch LKM-Rootkits. LKM steht für Loadable Kernel Module (ladbares Kernel-Modul). Das erste weit verbreitete Rootkit dieser Art ist Knark. Um eine Hintertür einzubauen, muss ein Angreifer gewöhnlich entweder eine zusätzliche Anwendung installieren oder eine vorhandene austauschen. Diesen Austausch erkennt Tripwire aber womöglich. Hierfür bietet Knark eine zusätzliche Lösung.
Angenommen, der Angreifer möchte den Secure-Shell-Server gegen eine modifizierte Variante austauschen, die ihm automatisch Root-Rechte verleiht. In diesem Fall installiert er seine modifizierte Shell zusätzlich zur originalen Shell auf dem System. Anschließend weist er den Kernel an, den modifizierten SSH-Server zu verbergen und bei einem nur lesenden Zugriff auf den SSH-Server die originale unveränderte Datei auszuliefern. Führt der Nutzer den SSH-Server hingegen aus, kommt die vom Angreifer modifizierte Datei zum Zuge. Tripwire liest die originale Datei ja lediglich und stellt daher keinen Austausch fest.
Um sich vor diesen LKM-basierten Rootkits zu schützen, verwenden viele Administratoren keine modularen, sondern monolithische Kernel. Sie kompilieren alle benötigten Treiber fest in den Kernel ein. Will ein Angreifer dann einen Treiber austauschen oder installieren, muss er den Kernel erneut kompilieren.
Die dritte Generation von Rootkits umgeht auch diese Hürde. Sie ermöglicht es dem Angreifer, den monolithischen Kernel zu kompromittieren. Diese Fähigkeit beruht auf der Tatsache, dass der Benutzer root Schreibzugriff auf den gesamten Arbeitsspeicher und damit auch auf den Kernel-Code besitzt. Das erste Rootkit dieser Art war 2001 KIS (Kernel Intrusion System). Dieses musste der Angreifer noch speziell für den Kernel auf dem Opfersystem anpassen. Moderne Rootkits (etwa Suckit) kompromittieren indes fast jeden beliebigen Kernel. Die Rootkits enthalten Code, um sich selbst in den Kernel-Speicher zu laden, und brauchen die Unterstützung des Kernels nicht mehr. Ein monolithischer Kernel schützt hier also nicht.
Leider gibt es keine einfache Möglichkeit, sich vor dieser Generation von Rootkits zu schützen. Drei Ansätze kommen in Frage:
Scheuen Sie den Aufwand, den AppArmor oder SELinux erfordern, und hegen Sie zugleich den Verdacht, dass Sie ein Rootkit an Bord haben, suchen Sie mit verschiedenen Werkzeugen nach dem Schädling.
Neben Hausmitteln wie ls, netstat, lsof stehen Ihnen auch einige Spezialwerkzeuge zur Verfügung, denn mit den Hausmitteln kommen Sie häufig nicht weit. Versteckt ein Kernel-Rootkit einen offenen Port, zeigen netstat und lsof diesen nicht mehr an. Die Suche bleibt vergebens. Das bekannteste Spezialwerkzeug heißt chkrootkit, ein vergleichbares Tool nennt sich rkhunter. Die Programme suchen nach Anzeichen bereits veröffentlichter und analysierter Rootkits. Leider kennen fähige Einbrecher auch diese Werkzeuge und passen den Code des Rootkits entsprechend an. Daher suchen chkrootkit und rkhunter auch nach weiteren generischen Merkmalen eines installierten Rootkits. Speziell bei Kernel-Rootkits haben die Helfer häufig Erfolg.
Sie spielen die Werkzeuge recht einfach und mit Root-Rechten auf Ihr System. Als Nutzer von Ubuntu oder Suse Linux installieren Sie die Software auch direkt über den jeweiligen Paketmanager, erhalten dann aber nicht unbedingt die neueste Version.
Alternativ laden Sie eine aktuelle Version von Chkrootkit [6] als tar.gz-Archiv von der Webseite herunter. Entpacken Sie das Archiv, übersetzen Sie das Programm mit make und rufen Sie anschließend mit Root-Rechten ./chkrootkit auf. Geben Sie dem Aufruf die Option -q mit, spuckt Chkrootkit nur Warnungen aus.
Rkhunter [7] entpacken Sie ebenfalls und installieren es – als Root – über den Aufruf ./installer.sh. Der Befehl rkhunter startet das Tool, mit der Option --quiet gibt es nur Warnungen aus. Die Abbildungen 3 und 4 zeigen jeweils die Ausgaben der Befehle unter Fedora Core 6.
Die Ergebnisse zeigen, dass die Werkzeuge durchaus Probleme mit der Analyse haben. So stuft Chkrootkit einige Dateien und Prozesse zu Unrecht als verdächtig ein; Rkhunter verfügt noch nicht über aktualisierte MD5-Prüfsummen, um die Dateien der Distribution zu verifizieren. Speziell bei Chkrootkit müssen Sie selbst tätig werden, um Prozesse und Dateien zu analysieren, wozu Sie jedoch entsprechendes Hintergrundwissen brauchen. Bei Rkhunter besteht weniger Handlungsbedarf. Unterstützt Rkhunter Ihre Distribution, dient es als recht ordentliches Mittel, um Ihren Rechner zu überprüfen, und erfordert nur wenig manuelle Korrekturen.
Besser fahren Sie generell, wenn Sie einen Einbruch verhindern und so die Installation eines Rootkits ausschließen. Spielen Sie also alle Updates zeitnah ein und schalten Sie nicht benötigte Dienste ab. Jeder zusätzliche erreichbare Dienst auf einem System stellt ein mögliches Sicherheitsrisiko dar.
Diese Vorsichtsmaßnahmen schützen Sie allerdings nicht vor Angreifern, die bislang unbekannte Sicherheitslücken ausnutzen. Hier helfen – richtig konfiguriert – Werkzeuge wie AppArmor, LIDS oder SELinux.
Der Autor
Ralf Spenneberg arbeitet als freier Unix/Linux-Trainer und Autor. Er veröffentlichte die Bücher "Intrusion Detection für Linux-Server" und "VPN mit Linux", entwickelte Kursunterlagen und bietet Inhouse-Schulungen an.
Glossar
Rootkit
Eine Sammlung von Programmen, die es einem Einbrecher erleichtern, seine Spuren im System zu verwischen und Hintertüren einzubauen, ohne dass Sie es merken.
Inetd-Superserver
startet unter Linux Netzwerkdienste. Trifft eine Anfrage an einem bestimmten Netzwerk-Port ein, reicht Inetd sie an den zuständigen Dienst weiter.
LKM
Loadable Kernel Module. Üblicherweise besteht der Linux-Kernel aus Modulen. Das ermöglicht es, zur Laufzeit die benötigten Treiber auszuwählen und nachzuladen. Auf diese Weise unterstützt auch ein kleiner Kernel eine Vielzahl von Treibern, denn er lädt nicht benötigte Treiber einfach nicht.
AppArmor
Während SELinux und LIDS das gesamte System überwachen, kontrolliert AppArmor nur wenige exponierte Applikationen. Es verhindert den Einbruch in ein System, indem es zum Beispiel dem Webserver untersagt, eine Shell zu starten. Der Einbrecher kann so keine Befehle mehr auf dem System ausführen. Hat er aber einen Weg auf den Rechner gefunden, bietet AppArmor keinen Schutz mehr. Das Laden von Modulen oder das Schreiben in den Kernel-Speicher überwacht AppArmor indes nicht.
LIDS
Das Linux Intrusion Detection System. Das Werkzeug erlaubt es Ihnen, dem Benutzer Root sämtliche Rechte zu entziehen und diese fein granuliert auf die entsprechenden Dienste zu verteilen. Normalerweise müssen Sie den Webserver mit Root-Rechten starten, damit er den Port 80 nutzt. Alle Ports unter 1024 heißen privilegierte Ports und stehen nur Root zur Verfügung. LIDS entzieht dem Nutzer Root das Recht für Port 80 und übergibt es dem Binärprogramm /usr/sbin/httpd. Dies funktioniert auch mit allen anderen Root-Privilegien. Ein Einbrecher darf dann selbst mit Root-Rechten keinerlei administrative Aktionen auf dem System ausführen. Es ist ihm nicht erlaubt, Module zu laden und in den Kernel-Speicher zu schreiben.
SELinux
Security Enhanced Linux. Diese Linux-Erweiterung bestimmt mit einer sehr fein granulierten Richtlinie, welcher Prozess auf welche Dateien wie zugreifen darf. Sie behandelt dabei alle Benutzer und Dateien zunächst gleich. Auch Root erhält keine Sonderbefugnisse. Die Richtlinie legt fest, wer wie auf welche Datei zugreifen darf und verbietet das Laden von Modulen oder das Schreiben in den Kernel-Speicher.
[1] Vista-Rootkit-Demo: http://www.blackhat.com/html/bh-usa-06/bh-usa-06-speakers.html#Rutkowska
[2] Marc André Selig, "Private Feuerwände", LinuxUser 05/2002, S. 30, http://www.linux-user.de/ausgabe/2002/05/030-firewall/firewall-4.html
[3] Ralf Spenneberg: "Linux Firewalls mit Iptables & Co.", Addison-Wesley 2006
[4] Ralf Spenneberg: "SELinux und AppArmor", Addison-Wesley 2007
[5] Ralf Spenneberg: "Intrusion Detection und Prevention mit Snort & Co.", Addison Wesley 2005
[6] Chkrootkit: http://www.chkrootkit.org
[7] Rkhunter: http://rkhunter.sf.net