LibreSSL. De doorstart van OpenSSL
- January 21, 2015
- 0
Op 7 april was er groot nieuws. Tot voor kort had de gemiddelde internet gebruiker er nog nooit van gehoord, maar nu wist iedereen het: er zit een lek in OpenSSL. De bug in de cryptografie software, met de naam “Heartblead” zorgde ervoor dat elke systeembeheerder in de hoogste staat van paraatheid werd gesteld. Bovendien leidde de bug tot een verhit debat over de betrouwbaarheid van open source software. De ontwikkelaars van OpenBSD besloten daarop om aan LibreSSL te beginnen. OpenSSL was volgens OpenBSD beyond repair . Douwe Kiela
In de dagen na de publieke bekendmaking van Heartbleed door een Fins cybersecurity bedrijf werd duidelijk dat Google er al drie weken van op de hoogte was en dat het (onder het mom van Don’t be evil, vermoedelijk) een aantal grote internetbedrijven op de hoogte had gesteld. Daardoor viel de chaos enigszins mee, al werd Heartbleed in de media als “catastrofaal” omschreven en werd er zelfs gerept van “de grootste bug in de geschiedenis van het commerciële internet”. Er ontstond vooral consternatie over hoe het mogelijk was dat zo’n kritiek onderdeel van de internet infrastructuur zo’n grote bug kon bevatten.
Kwade tongen beweerden dat het allemaal kwam omdat OpenSSL open source software is. Onzin natuurlijk, maar natuurlijk niet al te best voor de reputatie van open source software. Er bestaat een misconceptie dat open source software, omdat het open en transparant is, ook automatisch veilig is. Studies wijzen uit dat open source over het algemeen inderdaad minder bugs bevat dan gesloten software, maar open en transparante code moet wel worden nagekeken. De Heartbleed bug heeft sinds 2011 in OpenSSL gezeten. Robin Seggelmann, destijds PhD-student en één van de bedenkers van de zogenaamde “Heartbeat” uitbreiding, schreef de code en liet deze nakijken door een core teamlid van OpenSSL. Die merkte het foutje (slechts één regel) echter niet op en zo geschiedde. Heartbeat ondersteuning (en daarmee kwetsbaarheid voor de Heartbleed bug) stond vanaf 2012 standaard aan in elke OpenSSL installatie.
Steve Marquess, president van de OpenSSL Software Foundation, het orgaan dat zich bezighoudt met de ontwikkeling van OpenSSL, reageerde scherp op de kritiek: “Ik kijk naar jullie, Fortune 1000 bedrijven”, schrijft hij. “De bedrijven die OpenSSL gebruiken in jullie firewall/applicatie/cloud/financiële/beveiligingsproducten, die jullie voor winst verkopen. Degenen die nooit hebben bijgedragen aan de open source gemeenschap, die jullie OpenSSL heeft gegeven”. Over Heartbleed schrijft Marquess: “het raadsel is niet hoe het kan dat een paar overwerkte vrijwilligers de bug over het hoofd hebben gezien. Het raadsel is waarom het niet vaker is gebeurd”. Naar het schijnt heeft OpenSSL geworsteld met gebrek aan zowel financiële bijdragen als code contributies.
De afgelopen tijd is er echter veel duidelijk geworden over wat een rommeltje het eigenlijk is bij de organisatie. Er wordt enorm verouderde hardware en software ondersteund, waardoor ontwikkelaars zich in allerlei bochten hebben moeten wringen om de software werkend te houden. Zo is er bijvoorbeeld nog ondersteuning voor VMS en 16-bit Windows versies. Daarnaast is OpenSSL geschreven in wat we min of meer als een idiolect van de C programmeertaal zouden kunnen beschouwen. Allerlei standaard C functies hebben OpenSSL equivalenten, die niet altijd op dezelfde manier functioneren. Waar de libc strdup() functie bijvoorbeeld geen NULL accepteert, doet OpenSSL_strdup() dat wel. De software zit vol met bizarre code, die een goede C programmeur het schaamrood op de kaken zouden bezorgen. Dat is natuurlijk vragen om problemen.
Daarnaast is niet alleen de code slecht, maar is de documentatie zo mogelijk nog slechter. Manual pages, die de code van jaren oud zouden moeten beschrijven, zijn nog lege “templates”. Ze zijn gewoon nooit geschreven! Ontwikkelaars zijn meer bezig geweest met het toevoegen van nieuwe functionaliteiten (zoals de Heartbeat uitbreiding) zonder dat ze zich bezig hielden met het onderhouden van de bestaande code. In de bug tracker zitten bugs van vier jaar oud die nooit zijn opgelost, maar wel degelijk tot grote problemen kunnen leiden. Met andere woorden: het project is op z’n zachtst gezegd nogal houtje-touwtje voor één van de belangrijkste stukken infrastructuur van het internet. En zelfs met weinig financiële middelen is daar eigenlijk geen excuus voor.
Theo de Raadt, grote roerganger van OpenBSD, vatte het als volgt samen: “OpenSSL is not developed by a responsible team”. Na de consternatie over Heartbleed besloten de OpenBSD ontwikkelaars dan ook niet om OpenSSL te repareren, maar om een hele eigen kopie (een fork) te beginnen. Het repareren van de bestaande code was simpelweg niet te doen. Heartbleed was niet eens de hoofdreden achter het opstarten van LibreSSL, zoals de nieuwe fork is gaan heten. De manier waarop OpenSSL met geheugen omgaat, met een eigen malloc-wrapper die je tijdens runtime kunt vervangen (!), die niet te debuggen valt met standaard tools zoals valgrind en met een schimmige ‘debug’ optie die er toe leidt dat het complete geheugen onversleuteld naar logbestanden wordt weggeschreven, waren de echte druppel.
LibreSSL is inmiddels een tijdje onderweg en er zijn al aardig wat wapenfeiten: ondersteuning voor oude compilers (zoals Visual C 1.52) en oude besturingssystemen (waaronder Ebcdic, DOS, MacOS Classic, Win16 en VMS) is verwijderd, net als Heartbeat zelf. Alle geheugenfuncties zijn vervangen door de standaard C functies en er zijn een hoop bugs gevonden en opgelost. Tekenend detail: ten tijde van schrijven zijn er bugs uit de OpenSSL bug tracker die wél al in LibreSSL zijn opgelost, maar nog niet in OpenSSL zelf. In de eerste week zijn maar liefst 90.000 regels code verwijderd! Op de website www.opensslrampage.org houden de developers een vermakelijk blog bij van allerlei rariteiten die ze in de code zijn tegengekomen.
Op de charmante website van het project (“scientifically designed to annoy web hipsters”, met Comic Sans als font) staat dat LibreSSL gepland staat om met OpenBSD 5.6 te worden meegeleverd. Daarna zal er, zodra daar genoeg geld voor gedoneerd wordt, werk van worden gemaakt om LibreSSL ook voor andere platformen beschikbaar te maken. De Linux Foundation is al benaderd. De kans bestaat dat LibreSSL, zodra het gereed is, het stokje van OpenSSL overneemt als standaard SSL implementatie.
OpenBSD heeft een historie met dit soort “vijandige overnames”. Toen bleek dat de Secure SHell (SSH) implementaties zo lek als een mandje waren, schreven ze OpenSSH, tegenwoordig de ijzersterke standaard open source SSH implementatie. Het project staat er om bekend enorm rigoureus met code om te gaan, met teams van programmeurs die niets anders doen dan bestaande code nakijken. Er ligt een gigantische nadruk op leesbare, goed geschreven en goed gedocumenteerde code. Op zich geen slecht idee voor software, die bijvoorbeeld bijna al ons creditcardverkeer versleutelt, zou je zeggen!
Sinds de bekendmaking van Heartbleed zijn er nog verschillende andere bugs in OpenSSL (en onder andere ook in GnuTLS, een variant geschreven door GNU) gevonden. Eén van die bugs is een “man-in-the-middle attack”, die ernstige gevolgen kan hebben. Het lijkt er op dat de OpenBSD ontwikkelaars gelijk hadden dat OpenSSL eigenlijk niet meer te redden valt. We gaan zien of LibreSSL succesvol gaat worden als alternatief. Wat we in ieder geval wel zeker weten: bij OpenBSD is de code ten minste in goede handen.