Development

Software-ontwikkeling
code opruimen

Case: veiligere software door een zo klein mogelijke codebase

Zo houdt eduVPN zijn codebase zo klein mogelijk.

6 mei 2022

Zo houdt eduVPN zijn codebase zo klein mogelijk.

Hoe complexer en groter software wordt, hoe groter ook de kans op beveiligingsproblemen wordt, zei computerwetenschapper Gary McGraw in 2004 in een paper. De makers van eduVPN besloten om die reden zo min mogelijk code te gebruiken en de architectuur zo eenvoudig mogelijk te houden. Maar dat brengt weer eigen uitdagingen met zich mee.

EduVPN wordt inmiddels door ruim 100 organisaties wereldwijd gebruikt, maar begon in 2014 als kleinschalige VPN-dienst voor studenten en medewerkers, die integreert met federatieve authenticatie als SURFconext. In datzelfde jaar werd een ernstige kwetsbaarheid ontdekt in de library OpenSSL, waarmee veilige verbindingen opgezet worden. “Dat was een trigger”, vertelt Rogier Spoor, productmanager bij SURF en co-founder van eduVPN. OpenSSL werd vooral door veel websites gebruikt, maar ook door diverse VPN-diensten. “Dat was zo’n belangrijke onderliggende technologie, dat het een enorme shock was.”

Uiteindelijk bleek dat OpenSSL veel te complex was, waardoor er kwetsbaarheden in geslopen waren. “Zelfs al audit je dat, dan los je dat niet op. Een auditor weet dan ook niet hoe hij dat aan moet vliegen. Dus mede door dat en mede door een developer van ons die goed was opgevoed, zeiden wij: we doen alles zo clean en simpel mogelijk.”

Dat is echter gemakkelijker gezegd dan gedaan. Naarmate de tijd verstrijkt wordt software gemakkelijk groter en complexer, bijvoorbeeld omdat er nieuwe functionaliteiten toegevoegd moeten worden. “Zelfs al heb je bijna alles in eigen hand, dan nog zie je dat functionaliteiten bijna alleen maar gestapeld worden. Dat wordt steeds complexer”, verklaart Spoor. Eén van de oorzaken is dat functionaliteiten vaak zo snel mogelijk geïmplementeerd moeten worden. Bovendien is het nog maar de vraag of de maker van een project na een paar maanden nog weet hoe de architectuur in elkaar steekt. “Ze willen je met een specifieke feature in zo min mogelijk tijd helpen. Dus wordt er niet gekeken naar wat er eventueel weggehaald kan worden. Zo wordt software complexer. We hebben van nature een run on features.”

Constant evalueren

Ook eduVPN kreeg over de jaren heen diverse nieuwe functionaliteiten. Dat de codebase toch klein gehouden kon worden, heeft te maken met een groot voordeel dat het project heeft: de serverkant –de kwetsbare kant van VPN-software– is volledig in handen van SURF. “We kijken met enige regelmaat naar welke features er gebruikt worden en welke libraries we gebruiken. En dan vragen we ons af: kan dat niet eenvoudiger? Of anders? Zijn er nieuwe manieren waarop dit kan? Kan er iets geschrapt worden? Past de basisarchitectuur nog wel? We evalueren dus regelmatig. Eigenlijk ontwerpen we de architectuur steeds weer opnieuw, of we lopen er ieder geval weer doorheen”, legt Spoor uit.

Inmiddels zit eduVPN dan ook al op zijn derde grote architectuurwijziging. Diverse features en API’s zijn sinds die eerste versie geschrapt. “Initieel dachten we dat apps bepaalde API’s nodig hadden, maar in de praktijk zagen we dat ze niet gebruikt werden. We hadden bijvoorbeeld tweestapsverificatie, inclusief de enrolment van de tweede factor [zoals een code die verstuurd wordt en ingevoerd moet worden, red.], in het product zitten. Maar in de praktijk zagen we dat dit niet zo goed werkte. En dit product integreert met enterprise identity-zaken, dus het is logischer om die tweede laag daar uit te laten voeren. Daarom hebben we de tweestapsverificatie daarheen verplaatst en het er bij ons uitgegooid. Dat maakt het geheel ook weer eenvoudiger.”

Daarnaast wordt er kritisch gekeken naar de gebruikte libraries. “De gemiddelde developer gaat als je om een feature vraagt naar libraries zoeken. Als het gemaakt kan worden door een paar libraries te combineren, dan ben je zo klaar. Maar dat doen wij dus niet. We willen het gebruik van libraries juist enorm beperken.”

Als er wel een library gebruikt wordt in eduVPN, dan moet deze net als de rest van de codebase zo eenvoudig en klein mogelijk zijn. “We willen geen grote libraries met allerlei overbodige dingen, maar zoeken naar functionaliteiten met zo weinig mogelijk dependencies en zo min mogelijk externe code. Dus als we een project zien dat met weinig code werkt en goed beheerd lijkt te zijn, dan hebben we liever die dan een bekende library met heel veel dingen. We kijken heel gericht: wat hebben we nodig en hoe kunnen we dat zo simpel mogelijk doen?”

Grenzen aan ambities

Een groot nadeel van deze aanpak is wel dat het veel meer tijd kost. De code en architectuur wordt immers bij iedere aanpassing aan het project opnieuw geëvalueerd. Dit is dus een constant proces. Bovendien wordt er veel meer zelf gebouwd dan bij diverse andere projecten, juist omdat er niet al te veel libraries gebruikt worden.

“Maar we denken dat je dit op de lange termijn weer terugverdient. Als je ziet hoeveel beveiligingsproblemen er langskomen, dan lijkt dat een stijgende lijn te zijn. En als jij een product ontwikkelt dat steeds complexer wordt, dan wordt het onderhoud steeds duurder. Er komt nu een wetgeving aan die ondersteuning van software en apparaten verplicht. Ik weet vrij zeker dat organisaties daardoor gaan doodbloeden aan de securityproblemen van de toekomst. Als je verplicht ondersteuning moet blijven leveren, dan ga je er niet meer mee wegkomen om die complexiteit te laten stijgen.”

Een andere uitdaging is dat het team achter eduVPN de client side niet in eigen beheer heeft. “Het draait uiteindelijk op Android of iOS. Daar zit je met build-structuren die nodig zijn om je app te ontwikkelen en die zijn complex. Je bent zo afhankelijk van wat Apple en Google doen met hun producten. Onder water worden er allerlei dingen van derde partijen geactiveerd en samengevoegd. Daar controle over krijgen is echt te lastig. Als je daar veel anders of in eigen beheer wil doen, dan kost dat zoveel moeite dat het niet uit kan”, legt Spoor uit. “De serverkant is dan nog relatief simpel. Dat draait op Linux en het aantal dependencies is daar behapbaar.”

Oproep: controleer je code

Hoe ambitieus de plannen van het team van eduVPN ook klinken, ze blijken tot nu toe wel succesvol: in de afgelopen jaren is eduVPN qua code alleen maar kleiner geworden. “Dat hadden we niet verwacht. Ik ken geen ander project waar dat zo is”, vertelt Spoor trots.

Toch ziet Spoor wel kansen voor andere projecten. Want ook voor andere software geldt over het algemeen: hoe minder complex ze zijn, hoe veiliger ze zijn. “We doen vooral de oproep om kritisch naar je eigen producten te kijken. Evalueer de code en kijk wat eruit kan.”

Regelmatige audits

Binnen eduVPN worden natuurlijk meer maatregelen genomen om de software zo veilig mogelijk te houden. “We laten ook regelmatig audits uitvoeren. En we proberen steeds te wisselen van partij die dat doet. Iedere auditor heeft zijn eigen aanpak”, legt Spoor uit. De audit-rapporten zijn in te zien voor afnemers van eduVPN.

Verder wordt er een vulnerability scanner gebruikt om te controleren of de dienst in de praktijk goed is ingericht.

Omdat eduVPN zo goed werkt, is het internationaal uitgerold. Sinds een paar jaar wordt eduVPN mede gerund door GÉANT, het samenwerkingsverband van Europese nationale onderzoek- en onderwijsnetwerken (NREN's).

MAGAZINE AG CONNECT

Dit artikel is ook gepubliceerd in het magazine van AG Connect (april 2022). Wil je alle artikelen uit dit nummer lezen, zie dan de inhoudsopgave.

Reactie toevoegen
De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.