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.
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 [1] 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 [2], 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 [3].
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 [4] 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 [5] entnehmen. (jul [6])
URL dieses Artikels:
https://www.heise.de/-2054964
Links in diesem Artikel:
[1] https://github.com/xiw/stack/
[2] http://pdos.csail.mit.edu/papers/stack%3Asosp13.pdf
[3] http://www.kb.cert.org/vuls/id/162289
[4] https://github.com/xiw/stack/
[5] http://pdos.csail.mit.edu/papers/stack%3Asosp13.pdf
[6] mailto:jul@heise.de
Copyright © 2013 Heise Medien