Technieuws

Software kwetsbaar door overijverige compiler en vage specificatie

Pieter Edelman
Leestijd: 1 minuut

Het MIT presenteert volgende week op het ACM Symposium on Operating Systems and Principles een aanpak voor het detecteren van een relatief nieuwe klasse bugs, genaamd optimalisatie-instabiele code. Deze bugs kunnen ontstaan wanneer de specificatie van de programmeertaal het gedrag van een stuk code niet duidelijk vastlegt en de compiler aanneemt dat deze weg kan. Bijvoorbeeld een check op een wrap around wanneer een lengte van een buffer bij een pointer wordt opgeteld kan weggeoptimaliseerd raken als de compiler aanneemt dat dit nooit voorkomt; de C-specificatie is op dat punt onduidelijk.

De MIT-onderzoekers hebben een model opgesteld van de omstandigheden wanneer ongedefinieerd gedrag voorkomt. Met behulp van de LLVM-compilerarchitectuur hebben ze dit model in een statische checker gegoten, genaamd Stack. Die hebben ze losgelaten op 8575 opensource paketten in C of C++. Daarmee vonden ze 3471 pakketten die ten minste één optimalisatiebug bevatten. Onder meer de Linux-kernel, de Chrome-browser en de Python-interpreter bleken gevoelig. Bovendien toonden de onderzoekers bij een aantal paketten aan dat deze bugs uit te buiten zijn door kwaadwillenden.

De MIT-checker is onder een opensource licentie beschikbaar gemaakt. De onderzoekers hopen ontwikkelaars hiermee te helpen om hun software te verbeteren. ’Maar we hopen ook dat ontwikkelaars van compilers hun optimalisatiestrategieën voor instabiele code zullen heroverwegen‘, schrijven ze in hun paper. ’En tot slot hopen we dat onze publicatie taalontwerpers aanmoedigt voorzichtig om te gaan met ongedefinieerd gedrag in hun specificaties.‘

This article is exclusively available to premium members of Bits&Chips. Already a premium member? Please log in. Not yet a premium member? Become one and enjoy all the benefits.

Login

Related content