Abstract |
Einleitung und Motivation
Computersysteme mit einer im Internet erreichbaren IP-Adresse werden
häufig täglich nach Sicherheitslücken gescannt beziehungsweise direkt
angegriffen. Blickt man auf die Sicherheitswarnungen von
Softwareherstellern sowie der Computer Emergency Response Teams
(CERTs), so wird schnell klar, dass viele verbreitete Programmpakete
von Programmierfehlern betroffen sind beziehungsweise in der
Vergangenheit betroffen waren. Sehr beliebt ist bei Einbrüchen in
Rechnersysteme das Ausnutzen von Buffer-Overflow und Format-String
Schwachstellen. Sobald ein Angreifer Zugriff auf das fremde System
erlangt hat, installiert er häufig ein sogenanntes Rootkit. Diese
spezielle Software erlaubt es dem Angreifer, seine eigenen Spuren zu
verwischen und dauerhaften Zugang zu dem kompromittierten Server zu
erhalten. Einmal aktiviert, verhindern Rootkits mehr oder weniger
wirkungsvoll ihre Entdeckung und Entfernung. Ein Rootkit ermöglicht es
einem Angreifer nicht, den erstmaligen root- Zugang zu erhalten. Es
dient vielmehr dazu, einen bereits gehackten root-Zugang für
zukünftige Aktivitäten zu sichern. Um den ungehinderten root-Zugang
zum betroffenen System zu einem späteren Zeitpunkt sicher zu stellen,
ist es notwendig, eigene Dienste zu installieren, die unabhängig von
der ursprünglich ausgenutzten Sicherheitslücke einen direkten Zugang
zum System erlauben. Dazu installiert der Einbrecher oft eine
veränderte (trojanisierte) Versionen eines Standarddienstes.
Verschiedene Typen von Rootkits
Grundsätzlich lassen sich Rootkits in zwei Arten unterteilen,
dateibasierte und kernelbasierte. Erstere ersetzen im kompromittierten
System Dateien und Programme durch ihre eigenen Versionen, um das
System zu manipulieren und ihre Existenz zu verschleiern. Unter Linux
sehr verbreitete Rootkits dieser Gattung waren zum Beispiel die
Linux-Rootkits lrk3, lrk4, lrk5 beziehungsweise das t0rnkit.
Kernelbasierte Rootkits modifizieren den Kernel entweder im Speicher
und / oder auf der Platte. Durch den Umstand, dass sie im Kernel und
nicht im normalen Benutzermodus laufen, haben sie alle nötigen
Privilegien, um ohne Einschränkungen auf das komplette System
zuzugreifen. Die ersten kernelbasierten Rootkits modifizierten den
Kernel über das Laden eines oder mehrerer Module. Verbreitete
Vertreter unter Linux sind zum Beispiel Knark (für Kernel 2.2) und
Adore (für Kernel 2.2 und 2.4).
Auf der DefCon 9 wurde 2001 mit dem Kernel Intrusion System (KIS) zum
ersten Mal ein kernelbasiertes Rootkit vorgestellt, dass den Kernel
direkt im Speicher über /dev/kmem verändern kann. 2002 tauchte mit
SucKIT ein weiterer Vertreter dieses neuen Typus auf.
Erkennen und Entfernen von Rootkits
Sehr oft lassen sich Rootkits durch einen Vergleich des Ergebnisses
eines Portscans von außen mit der lokalen Ausgabe der offenen Ports
über netstat erkennen. Normalerweise verschleiert ein Rootkit nach
innen seine Anwesenheit dadurch, dass es einen nach außen geöffneten
Kommunikationsport nicht anzeigt. Gibt es also Differenzen zwischen
den beiden Listen, so kann dies als erster Hinweis auf ein vorhandenes
Rootkit dienen. Weitere Schritte zum Aufspüren von Rootkits kann die
Liste an in den Kernel geladenen Modulen oder der Vergleich der
Systemsprungtabelle mit einer sauberen System.map sein. Falls eine
Signatur des Rootkits bekannt ist, kann nach dieser im Speicher
gesucht werden. Da viele Rootkits ihre Prozesse, und damit bestimmte
PIDs, verstecken, kann mit einem Hilfsprogramm versucht werden,
nacheinander alle PIDs zu belegen. Sollten hierbei Fehler auftreten,
ist dies ein weiterer Hinweis auf das eventuelle Vorhandensein eines
Rootkits. Zur automatisierten Erkennung von Rootkits findet man im
Internet unter anderem die Projekte 'chkrootkit' und 'Saint Jude'.
Hat man das Rootkit erst mal gefunden und identifiziert, kann man es
sehr häufig leicht entfernen oder zumindest deaktivieren. Danach
sollte man das System am besten komplett neu aufsetzen. Ist dies nicht
möglich, muss man alle trojanisierten Programme durch ihre Originale
ersetzen und eventuell vorhandene versteckte Verzeichnisse löschen. Es
bleibt dann nur noch herauszufinden, welche Sicherheitslücke sich der
Einbrecher zunutze gemacht hat, und diese ebenfalls zu schließen.
|