Deze week kun je niet om het nieuws heen dat er een "bug"gevonden is in OpenSSL, open source software die je kunt inzetten om bijvoorbeeld je website van HTTPS te voorzien. Ik ben in de materie gedoken en die was verrassend toegankelijk. Nu ik de ins en outs ken wil ik wat met je delen, iets dat verder gaat dan de beveiligingsgat zelf.
Geen bug
Af en toe lees je dat het een bug is, dit is niet waar. Want de software deed gewoon zijn werk goed, er zat alleen een gat in de beveiliging. Eén van de eerste principes van veilige software is dat je de input van gebruikers niet vertrouwd. Als een functie vraagt "Geef mijn order informatie over Order X" dan zou je software eerst moeten checken of de order wel van die gebruiker is. Dit ging er mis in OpenSSL. De gebruiker gaf zijn "hartslag" naar de server, maar door bewust over de grootte van de hartslag informatie te liegen, gaf de server een stukje van wat er in zijn geheugen stond terug, ook als deze data niet over de hartslag informatie van de huidige gebruiker ging.
C en Open Source
De kracht van Open Source is vaak dat het gratis te gebruiken is, dat de broncode voor iedereen in te zien is en dat mensen deze code zelf mogen wijzigen voor eigen gebruik, of de gemeenschap kunnen helpen door de code te verbeteren. Dit is een mooi principe en kom ik zo nog op terug.
OpenSSL is een stuk software die je inzet om je site te beveiligen en waar robuustheid en veiligheid dus van enorm belang is. OpenSSL wordt door zeer veel grote bedrijven gebruikt om hun websites te beveiligen, niet alleen Google en Yahoo gebruiken het, maar ook zelfs banken. OpenSSL is echter geschreven in C. Dat is een computertaal die heel veel gebruikt wordt, redelijk snel op te pikken is en die vrij dicht op het hart van een computer zit nadat de software "gecompileerd" is. Hoe dichter bij het hart hoe sneller de code kan worden uitgevoerd en daar zit meteen ook een groot nadeel qua veiligheid. C is een taal die direct naar het geheugen van een computer schrijft en daaruit ook nagenoeg onbeperkt kan lezen. Software geschreven in C die op een server gebruikt word is een veiligheidsrisico in zichzelf. Als je de software niet goed geschreven is kan deze dus data uit het geheugen van de server geven die niets met de werking van de software zelf te maken heeft. In het geheugen van de server staan wachtwoorden van gebruikers, maar bijvoorbeeld ook het veiligheidscertificaat die gaat over de versleuteling van gebruikersdata. Wie dit certificaat en de juiste sleutel heeft zal dus de data van gebruikers kunnen lezen alsof deze niet versleuteld is. Met andere woorden: Als je het geheugen van een server kunt lezen op afstand kan deze server niet meer als veilig worden beschouwd. Ook alle geheimen die langs deze server zijn gegaan moeten gezien worden als "geopenbaard" en daarmee snap je waarom het OpenSSL gat zo heftig is.
Schaal
Nu moet ik een nuance aanbrengen die je bijna nergens leest: Zoals het lijkt wordt er namelijk niet een willekeurig stukje geheugen van de server teruggegeven naar de kwaadwillende gebruiker, maar het stukje geheugen wat gebruikt werd in de buurt van de "hartslag". Wellicht is het onvoorspelbaar wat daarin geschreven stond, maar het moet nog blijken na testen of hiermee uiteindelijk het volledige geheugen van een server was uit te lezen, of dat de geheugenstroom vooral te maken heeft met data die te maken heeft met de werking van OpenSSL. Het is dus niet zeker of een server wel al zijn geheimen prijsgeeft door dit lek.
Maar even terug naar de taal C. Deze is dus niet geschreven met veiligheid in het achterhoofd. Het is dan ook zeer moeilijk om inherent veilige software te schrijven in C. Dat OpenSSL zo populair is en breed wordt toegepast is een indicatie van onachtzaamheid. Ik denk dat veel bedrijven zich niet bewust waren van dit risico.
Wat is er nu zo schokkend aan dit veiligheidsgat? Dat banken en bedrijven als Google OpenSSL zo breed hebben toegepast, vooral voor Google staat deze software aan de basis van de veiligheid van diens producten en had gewoon goed en continu getest moeten worden. Goede unit testing had deze onvolkomenheid er namelijk direct uitgehaald.
Google, maar ook banken hebben meerdere security officieren. Als je de architectuur van je IT landschap bekijkt moet OpenSSL eruit gekomen zijn als belangrijk onderdeel in de beveiliging. De NSA had zijn huiswerk wel goed gedaan. De NSA zoekt steeds naar gaten van software en deze software heeft zonder twijfel de revue gepasseerd aldaar omdat het geschreven is in C en wereldwijd gebruikt is.
Tot slot
Als het nu een echt obscuur geval was en zeer vergezocht, dan had ik dit niet geschreven, maar dit gat is groter dan het gat in de ozonlaag, is enorm eenvoudig te misbruiken en had nooit op zo'n schaal mogen bestaan. Als dit soort fouten mogelijk zijn, dan houdt ik mijn hart vast wat er nog in het "vat" zit. De maatregelen die bedrijven moeten nemen zijn fors. Er wordt dit weekend flink overgewerkt, maar erger nog is dat er wellicht miljarden wachtwoorden veranderd moeten worden, maar dit in de regel niet gebeurd. Dat het gat crimineel nog niet op grote schaal is uitgebuit stelt me dan nog enigszins gerust.
Even de nieuwste versie van OpenSSL installeren is niet voldoende. Ook het beveiligingscertificaat moet opnieuw worden aangevraagd en geïnstalleerd, maar ook alle wachtwoorden moeten als gelekt worden beschouwd.
Interesting times....