Het overgaan van C en C++ naar Java en C# om software minder foutgevoelig te maken, is niet de oplossing voor de risico’s die door softwarefouten ontstaan. Programmeurs moeten zich bewust worden van de risico’s.
Softwareprogrammeurs maken te veel fouten. Standaardfouten in de C++-methode liggen aan de wortel van de meeste beveiligingsproblemen. Dat ontwikkelaars zich niet bewust zijn van de problemen, is vooral te wijten aan hiaten in het onderwijsprogramma. Dit zegt Erik Poll, universitair docent softwarebeveiliging aan de Radbouduniversiteit in Nijmegen deze week op de pagina’s Loopbaan in Computable.
Geen keus
“Het is goed om te zien dat Erik Poll de noodklok luidt over de veiligheidsrisico’s van programmatuur die in C of C++ is ontwikkeld”, zegt Arie van Deursen, hoogleraar software engineering aan de Technische Universiteit van Delft. Toch is de oplossing die Poll schetst, namelijk het overgaan op Java en C#, te kort door de bocht, “want ook in deze talen is het mogelijk om (per ongeluk) een lek in de beveiliging te programmeren”, vult collega Leon Moonen, universitair docent aan de TU Delft aan. “Het echte probleem is dat er lang niet altijd een keus is om op een andere programmeertaal over te gaan. Het meeste programmeerwerk wordt gedaan door bestaande systemen aan te passen. De omvang van deze systemen loopt in de honderden miljarden regels code. Hiervan is 10 procent in C geschreven en nog eens 10 procent in C++”, aldus Van Deursen. “Om de veiligheidsproblemen die hierdoor ontstaan aan te pakken, is het noodzakelijk onderzoek te doen naar programma-analysetechnieken die de programmeur helpen bij het vinden van veiligheidsrisico’s, zoals bijvoorbeeld de door Poll genoemde bufferoverflows. Dit onderzoek staat nog in de kinderschoenen, maar is veelbelovend”, zegt Moonen. In Delft wordt op dit moment een dergelijk onderzoek uitgerold.
Vanuit de hacker bezien
Ook Kees Hemerik, hoofd van de groep Software Construction aan de Technische Universiteit Eindhoven, herkent het probleem dat Poll schetst. “Veel beveiligingsproblemen vinden hun oorzaak in het gebruik van de talen C en C++. Die komen pas goed aan het licht wanneer software in netwerktoepassingen wordt gebruikt. Het voorstel om dan maar allemaal in Java of C# te programmeren biedt echter maar weinig soelaas. Deze talen bieden wel meer mogelijkheden voor beveiliging en verificatie, maar ze zijn nog steeds erg complex en omvangrijk.” Hemerik bestrijdt dat er in het universitair onderwijs te weinig aandacht wordt besteed aan softwarebeveiliging. “Een mooi voorbeeld is het college ‘Hacker’s Hut’, dat bij ons door professor Andries Brouwer wordt gegeven. In dit college wordt beveiliging vanuit het gezichtspunt van de hacker beschouwd.”
Reacties van lezers
Het gebruik van de Standard Template Library kan ook al veel problemen i.v.m. geheugenallocaties oplossen en het versnelt het programmeren aanzienlijk.
Jan Boonen
Hoe vaak worden deze misplaatste vergelijkingen niet gemaakt? Een vergelijking tussen C, C++ en Java is alleen zinnig als er iets te vergelijken valt! De taal C is een programmeertaal, terwijl Java een ontwikkelplatform is. Het is hetzelfde om een boekhouder achter zijn geschreven boekhouding te vergelijken met een niet-boekhouder achter een pc met het beste boekhoudprogramma. Je moet wel weten wat je aan het doen bent. En gek misschien, maar ik vertrouw meer op die papieren boekhouder.
Harm Frielink
Het is wel wat naïef om te denken dat alle beveiligingsproblemen zijn opgelost wanneer je C# of Java gaat gebruiken. Maar inderdaad: beide platforms bieden veel meer ondersteuning op het gebied van beveiliging. Als je C++ niet hoeft te gebruiken, dan vooral niet doen. Door Bjarne Stroustrup’s starre opstelling is het inmiddels een stoffig taaltje, waar niet veel ontwikkeling meer in zit. Overigens: C# is niet twee maal zo langzaam als C++. Het scheelt in veel gevallen slechts enkele procenten.
Wim Bokkers
Mijn inziens is het probleem dat kwaadwillenden steeds vaker via de applicatielaag inbreken en dat programmeurs in het verleden kwetsbaarheden hebben verwaarloosd. Slordigheid zou ik hen niet willen verwijten aangezien veiligheid nooit hoog op de prioriteitenlijst heeft gestaan. Ik denk dat de oplossing gezocht moet worden in de combinatie van bewustzijn en kennis van software-security en technologie die de programmeurs en testers in staat stelt om de code en applicaties op een effectieve en efficiënte manier te valideren op veiligheid. Fortify Software (Palo Alto, California) heeft technologie ontwikkeld om kwetsbaarheden automatisch te detecteren middels Source Code Analyse. De tool vertelt precies in welke coderegel het probleem zit. Door deze technologie krijgen developers een tool in handen waardoor de veiligheid voor hen een beheersbaar probleem wordt.
Jurgen Teulings
Het artikel geeft nogal een ongenuanceerde indruk, maar ik denk echt niet dat we NIETS meer in C of C++ moeten programmeren en dat dan ALLE beveiligingsproblemen dan vanzelf verdwijnen.
Het is wel een stuk makkelijker om veilige code te schrijven in modernere programmeertalen als Java en C# dan in C of C++.
Als je voor C of C++ kiest (of moet kiezen, want soms heb je gewoon geen keus) dan moet je je bewust zijn van de valkuilen, en weten wat je kunt doen om ze te vermijden. Hier schort het nog al aan. Veel studenten die leren programmeren in C of C++ horen nooit wat een buffer overflow is.
Het bovenstaande geldt ongeacht welke taal je gebruikt, want alle programmeertalen hebben hun security-valkuilen. Sommige talen hebben er wel meer dan anderen. Misschien is PHP binnenkort een grotere bron van ellende dan C(++) ooit was…