Instabilen C-/C++-Code mit STACK finden

Forscher des Massachusetts Institute of Technology haben den im Compiler stattfindenden Optimierungsprozess von C- und C++-Code untersucht und mit STACK eine Möglichkeit zum Auffinden von instabil gewordenen Code entwickelt.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 2 Min.
Von
  • Julia Schmidt

Forscher des Massachusetts Institute of Technology haben sich mit der Auswirkung von im Compiler stattfindenden Optimierungsprozessen auf die Stabilität des bearbeiteten Codes beschäftigt. Kern ihrer Beobachtungen waren hierbei Abschnitte in C- und C++-Code, die in der Optimierung entfernt wurden, da sie dem Standard nach undefiniertes Verhalten enthielten. Da es sich bei einigen dieser Fragmente aber um Sicherheitsprüfungen handelt, kann es so zu Schwachstellen kommen, weshalb das Forscherteam mit STACK ein Projekt zur statischen Prüfung solcher Fälle entwickelt hat.

Die im Rahmen ihrer Arbeit betrachtete Klasse von Softwarefehlern bezeichnen die Wissenschaftler als Optimization-Unstable Code und konnten sie unter anderem im Linux-Kernel und Python nachweisen. Compiler nutzen dem Standard nach undefiniertes Verhalten zum Beispiel zur Optimierung, indem sie davon ausgehen, dass ein Programm nie ein solches Verhalten auslöst. In einer Veröffentlichung, die das Problem beschreibt, wird ein Test auf Zeigerüberlauf als Beispiel angeführt. Da der Standard aussagt, dass ein solcher Überlauf undefiniert ist, geht der Compiler GCC beispielsweise davon aus, dass der Test immer negativ ausfällt und entfernt die Überprüfung, was das Programm angreifbar machen kann.

Um dieses Problem zu umgehen, entwickelten die Forscher ein Modell zum Auffinden von instabilen Code, dass sie in Form des statischen Prüfers STACK implementierten, der nun auf GitHub zur Verfügung steht. Das Modell legt genaue Bedingungen fest, unter denen ein Codefragment undefiniertes Verhalten auslösen kann. Mit einem Constraint-Löser bestimmt die Implementierung dann, ob sich die entsprechende Stelle unter Beachtung der Bedingungen vereinfachen lässt.

Das Projekt soll dabei helfen, instabilen Code in Anwendungen aufzufinden und eventuell dazu dienen, den Entscheidungsprozess im Compiler zu verbessern. Weitere Informationen zur genauen Funktionsweise von STACK sowie den Untersuchungen zur Codeoptimierung lassen sich der entsprechenden Ausarbeitung entnehmen. (jul)