Login
Newsletter
Werbung

Mi, 27. November 2013, 10:48

Software::Wissenschaft

MIT-Forscher entdecken Sicherheitslücken in C- und C++-Software

Forscher am MIT haben Sicherheitslücken in C- und C++-Software entdeckt, die durch von Compilern optimierten Code entstehen.

Null-Pointer-Check im Kernel entfernt

MIT

Null-Pointer-Check im Kernel entfernt

Das Papier der Forscher (PDF) untersucht die Optimierungsalgorithmen in gängigen Compilern für C-/C++-Code und beschreibt einen am MIT entwickelten statischen Source-Code-Checker, den sie STACK genannt haben und der solche Sicherheitslücken aufdeckt.

Compiler wie GCC oder Clang versuchen, Code zu optimieren, den sie als zweideutig ansehen oder der zu undefinierbarem Verhalten führen könnte. Ungünstigerweise ist das oft auch, wie die Forscher am MIT herausfanden, Code, der sicherheitsrelevante Checks durchführt. So wurden in den Beispielen, die die Autoren des Papiers anführen, Null-Pointer- und Pointer-Overflow-Checks entfernt, was in verwundbarem Code resultierte.

GCC-Optimierung Pointer-Overflow

MIT

GCC-Optimierung Pointer-Overflow

Für ihre Tests untersuchten die Forscher insgesamt zwölf verschiedene Compiler für C-/C++-Code. Versionen von GCC aus mehr als zehn Jahren, dazu zwei Versionen von Clang, wurden zusätzlich auf die Weiterentwicklung von Code-Optimierungen hin untersucht. Angefangen mit GCC 2.95.3 aus dem Jahr 2001 bis hin zu einem aktuellen GCC 4.8.1 wurden insgesamt vier Versionen auf ihre diesbezüglichen Fähigkeiten untersucht. Dazu kamen Clang 1.0 aus dem Jahr 2009 und ein aktuelles Clang 3.3 aus 2013.

Dabei stellten sie fest, dass Code-Optimierung nicht neu ist - bereits GCC 2.95.3 entfernte x + 100 < x - aber in zunehmendem Maße in die Compiler implementiert wird. So ist GCC 4.x aggressiver beim Entfernen von »instabilem Code«, wie ihn die Forscher bezeichnen, als GCC 2.x.

Weiterhin wird instabiler Code auch im Standard-Optimierungslevel für Release-Builds -gemeinhin -O2 - entfernt. Selbst Projekte wie PostgreSQL, die das Level auf die niedrigste Stufe -OO setzen, sind vor Optimierungen nicht gänzlich sicher. Moderne Versionen der Compiler, die neue Algorithmen wie beispielsweise »Value Range Analysis« in GCC 4.x einsetzen, suchen bereits in Bibliotheksfunktionen nach Möglichkeiten der Optimierung. Insgesamt erwarten die Forscher durch die von ihnen untersuchten Optimierungsmöglichkeiten eine Zunahme von Fehlern in C- und C++-Code.

Der von dem MIT-Team entwickelte Code-Checker STACK entdeckte 32 Fehler im Kernel, fünf in Python und neun in PostgreSQL. Der Einsatz von STACK gegen das Debian-Paketarchiv entdeckte insgesamt 8575 C/C++-Pakete und in 3471 davon zumindest ein Beispiel von instabilem Code. Das sind 40 Prozent aller Pakete mit C-/C++-Code in Debians Archiv.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung