CaVer: Neue Technik findet Schwachstellen in C++-Code

US-Wissenschaftler haben ein Verfahren entwickelt, das fehlerhafte Typumwandlungen in C++-Programmen zur Laufzeit identifiziert. Es hat bereits mehrere inzwischen behobene Schwachstellen in der GNU-libstd++ und in Firefox aufgespürt.

In Pocket speichern vorlesen Druckansicht 109 Kommentare lesen
Code mit 1 und 0
Lesezeit: 2 Min.
Von
  • Christian Kirsch

Für ein neues Verfahren zum Aufspüren von Schwachstellen in C++-Programmen haben vier Mitarbeiter des Georgia Institute of Technology College of Computing den von Facebook mit 100.000 US-Dollar dotierten Internet Defense Prize erhalten. Ihr Software CaVer findet zur Laufzeit fehlerhafte Typumwandlungen (casts), die etwa das Überschreiben von Speicherbereichen erlauben können.

CaVer klinkt sich in die freie Compiler-Infrastruktur LLVM ein und wird beim Übersetzen und Linken des zu untersuchenden Codes per Flag aktiviert. Es überprüft dann zur Laufzeit Casts, bei denen static_cast den Typ eines Objekts auf den einer Kind-Klasse ändert (downcast). Das Ziel-Objekt kann nämlich Attribute enthalten, die es in der Eltern-Klasse nicht gibt, für die aber wegen des fehlerhaften Downcast kein Speicherplatz alloziiert wurde. Im Pwn2Own-Wettbewerb 2013 erlaubte ein solcher Fehler (CVE-2013-0912) den Ausbruch aus der Sandbox von Googles Browser Chrome.

Statt static_cast, das die Cast-Operation zur Übersetzungszeit prüft, könnten Entwickler dynamic_cast verwenden: Es kontrolliert die Vererbungshierarchie zur Laufzeit und verweigert fehlerhafte Downcasts. Die Prüfung ist jedoch zeitaufwendig, weshalb zum Beispiel Mozilla dynamic_cast in Firefox-Code verbietet.

CaVer führt die Laufzeitprüfung aus, ohne dass Änderungen am Quellcode erforderlich sind. Ausprobiert haben die Forscher ihr Produkt mit den freien Browsern Chrome und Firefox. In letzterem fanden sie zwei Schwachstellen, in der von Chrome benutzten libstd++ des GNU-Projekts neun weitere. Alle sind bereits geschlossen.

Ein mit CaVer übersetzter Chrome-Browser läuft nach Angaben der Wissenschaftler rund 7 Prozent langsamer, Firefox über 64 Prozent langsamer. In Googles Browser prüfte es dabei rund 150.000 Cast-Operationen, bei Firefox waren es über 1 Million. Bei der Untersuchung soll CaVer wesentlich gründlicher vorgehen (PDF-Dokument) als ein vergleichbares älteres Projekt von Google.

Bislang läuft CaVer nur auf Linux, weil es spezielle Eigenschaften dessen Binärformats ELF ausnutzt. Das Prinzip der Code-Verfolgung soll jedoch auch auf andere Plattformen übertragbar sein. Die Software soll "bald" als Open Source zur Verfügung gestellt werden, teilte die Universität auf Nachfrage mit. (ck)