Open Source im professionellen Einsatz
Linux-Magazin 04/2001

Kernel-Backdoor: Lauschangriff auf Netzwerk-Verbindungen

Big Br0ther liest mit

OpenSource gilt als das bislang beste Konzept, sich vor Sicherheitsrisiken zu schützen. Doch eine neue Backdoor im Linux-Kernel lässt die Grundfeste der Linux-Gemeinde erzittern.

570

Die Offenlegung von Software erfüllt mehrere Zwecke. Zum einen ist es externen Programmierern möglich, sich Programmierschnittstellen im Source anzusehen, auf der anderen Seite können sie wichtige Routinen selbst sichten, um die Stabilität und Sicherheit zu beurteilen. Schwachstellen kann prinzipiell jeder beheben - alle nötigen Informationen liegen vor. Das Ergebnis wird meist in Form eines Patches veröffentlicht.

Solche kursieren zunächst auf der Kernel-Mailingliste linux-kernel@vger.kernel.org, um Stabilitäts- oder Sicherheitsprobleme und Hintertüren auszuschließen. Teilweise werden die Patches anschließend untersucht, um häufige Fehler wie Pufferüberläufe auszuschließen und Angreifern keinen neuen Ansatzpunkt zu liefern.

Das Hauptproblem ist, dass niemand mehr einen Überblick über den Kernel 2.4 mit seinen rund 3,5 Millionen Codezeilen hat. Schon mehrfach haben unvollständige oder fehlerhafte Patches Eingang in den offiziellen Kernel gefunden.

Es folgen dann weitere Patches, wie im Beispiel des CD-ROM-Treibers ( drivers/cdrom ) des Kernel 2.2.18, für den zu Spitzenzeiten neun Major- und Minor-Patches binnen eines Monats veröffentlicht wurden - die meisten davon waren Bugfixes vorheriger Bugfixes.

An Überblick mangelt es indes nicht nur bei den Kernel-Maintainern, wie man am Beispiel von Borland InterBase sehen kann: Dort wurde erst zwölf Monate nach Offenlegung eine vor neun Jahren eingebaute Hintertür gefunden ( http://www.cert.org/advisories/CA-2001-01.html ).

Listing 3: Kernel-Exploit

01  #include <unistd.h>
02  #define N NULL
03  #ifndef i32
04  #define i32 int
05  #endif
06  #define pp +(((i32)N)+1)
07  #define mm -pp
08  #define mp mm pp
09  #define pm pp mm
10  i32 Buffer[] = {(66)mm, 112, (114)pm, 105, 108, (((((35)mm)mm)mm)pm)};
11  int main (void)
12  {
13    while(((((i32) N)mp)pm)pp)
14    write((((i32) N)pm)mp, Buffer, sizeof(Buffer));
15   return 0;
16  }

Bandwürmer

Nach unseren Informationen hat über mehrere Patches verteilt eine Backdoor Einzug in den Kernel gehalten: Der Kernel verschickt unter bestimmten Randbedingungen alle TCP-Pakete doppelt: einmal an den tatsächlichen Empfänger, das andere Mal an eine spezielle IP-Adresse - zu unserer Überraschung völlig unbemerkt von allen Maintainern.

Böswilligen Code in mehreren Häppchen einzubauen, ist indes weder ungewöhnlich noch neu. Erst Ende Januar hatte der amerikanische PayTV-Sender DirecTV in einer spektakulären Aktion sein im Herbst 2000 begonnenes Werk vollendet und reihenweise TV-Piraten abgeschossen ( http://www.heise.de/news-ticker/data/nij-26.01.01-001/ ).

Früh übt sich...

Der Grundstein für die Kernel-Backdoor wurde bereits Anfang 1997 gelegt. Der offizielle Patch von Kernel 2.0.30 auf 2.0.31 nahm umfangreiche Änderungen an der Datei net/ipv4/ tcp_output.c vor, in der unter anderem eine Konstante eingefügt wurde:

skb2->daddr = 3492773153;

Hierbei handelt es sich um eine IP-Adresse in der Long-Integer-Schreibweise. Sie entspricht 208.47.125.33 in herkömmlicher Notation. Nur wenige Zeilen später erfolgt der Übertrag dieser merkwürdigen Adresse in den IP-Header:

ip_rewrite_addrs (sk, skb2, dev);

Die Anweisungen versteckten sich nur wenige Zeilen vor dem Syn-Cookie-Patch, der hier erstmals experimentell eingebunden wurde. Im nächsten Update wurde die Konstante zwar wieder entfernt, doch das Neuschreiben des IP-Headers blieb.

Der Patch auf den Kernel 2.0.34 brachte weitere verdächtige Zeilen. Auf einen am 31.03.1998 gemeldeten Fehler im TCP-Stack veröffentlichte knapp 24 Stunden später die Amerikanerin April Lirpa einen Bugfix. Nach kurzer Zeit fand er in fast unveränderter Form Eingang in den nächsten Kernel. Einen Auszug finden Sie in Listing 1.

Wenig später wird dann tatsächlich die erneute Übertragung eines bereits bestätigten TCP-Pakets ausgelöst - wie die Autorin bereits im Patch anmerkt. Dies geschieht, wenn das TCP-Acknowledge-Timeout weit herunter gesetzt wird.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus