Open Source im professionellen Einsatz
Linux-Magazin 01/2017

Dirty Cow: Lokaler Angreifer kann Dateien überschreiben

Cowboygeschichten

Ein gefährlicher Bug lauerte vergessen fast ein Jahrzehnt im Linux-Kernel, nachdem ein erster Versuch, ihn zu patchen, nicht erfolgreich war. Jetzt ist er endlich bereinigt.

451

Ein Race-Condition-Problem [1] im Linux-Kernel hat zur Folge, dass ein lokaler Angreifer die Daten eines anderen Anwenders überschreiben kann. Solche Race-Condition-Fehler können immer dann auftreten, wenn der Ablauf einer Programmoperation vom zeitlichen Verhalten weiterer Einzeloperationen abhängt. Besonders gefürchtet sind Wettlauf-Bugs bei parallelen Algorithmen, die Threading benutzen.

Das Interessante an dieser nun (wieder-)entdeckten Schwachstelle ist, dass sie schon sehr lange im Kernel vorhanden ist, ohne dass sie bisher aufgefallen wäre. Genauer gesagt befindet sich der Fehler schon seit der Version 2.6.22 im Kernel, das heißt seit mehr als neun Jahren. Linus Torvalds selbst hatte ihn schon damals korrigiert. Allerdings war dieser Fix nicht sauber implementiert, sodass dennoch weiterhin Attacken aufgrund des Problems möglich waren.

Ursache der Schwachstelle ist ein Race-Condition-Fehler im Speicher-Subsystem des Kernels. Dort kann die Race Condition in der »get_user_pages()« -Funktion beim Schreiben auftreten und einem Angreifer unberechtigt Schreibzugriffe erlauben. Das Problem tritt in Copy-on-Write-Situationen (CoW) auf, weshalb der Fehler Dirty Cow heißt.

Copy-on-Write ist ein Optimierungsverfahren, das eine Datenkopie erst dann anfertigt, wenn ein anderer Prozess die Daten modifiziert. Das reduziert die Zahl an Operationen bei mehreren Prozessen. Genau hiermit hat die »get_user_pages()« -Funktion Probleme.

Außer der eigentlichen Git-Commit-Nachricht von Linus Torvalds ist über den Fehler wenig bekannt. In seinem neuen Patch hat er ein neues Flag im Kernel eingeführt, das die Race Condition nun korrigiert und die Attacke unterbindet. Das eigentliche Risiko dieses Fehlers besteht darin, dass er es einem lokalen Angreifer ermöglicht, den Inhalt von Dateien beliebig zu manipulieren. Allerdings ist dies lediglich in aktuelleren Kernelversionen möglich.

Der Angreifer kann aufgrund der Sicherheitslücke alle Rechte-basierten Schutzmechanismen umgehen. Besonders brisant ist auch, dass schon seit geraumer Zeit ein einfach anzuwendender Exploit im Umlauf ist, der sich unter [2] herunterladen lässt. Das Beispiel in Listing 1 zeigt, wie dieser Exploit auf betroffenen Systemen anzuwenden ist: Der Inhalt der Datei »foo« wird hierbei durch den Exploit von einem lokalen Angreifer überschrieben.

Listing 1

Exploit

01 $ sudo -s
02 # echo this is not a test > foo
03 # chmod 0404 foo ; exit
04 $ ls -lah foo -r----r-- 1 root root 19 Oct 20 15:23 foo
05 $ gcc -lpthread dirtyc0w.c -o dirtyc0w
06 $ ./dirtyc0w foo m00000000000000000 mmap 56123000 madvise 0 procselfmem 1800000000
07 $ cat foo m00000000000000000

Dies ist nur ein harmloses Beispiel. Allerdings lässt sich die gleiche Methode auch auf beliebige Konfigurationsdateien des Systems anwenden, wodurch ein Angreifer erheblichen Schaden anrichten kann. Mittlerweile wurde dieser Exploit auch für Android-Systeme angepasst [3], um Smartphones via USB zu rooten. Die Dirty-Cow-Schwachstelle ist in den Kernelversionen 4.4.26, 4.7.9 und 4.8.3 bereits korrigiert.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 1 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

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

Deutschland

Ähnliche Artikel

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.