Heartbleed

Deze week is bekend geworden dat in OpenSSL een gevaarlijke fout zit. De fout, die de bijnaam Heartbleed heeft, maakt het mogelijk om data die uitgewisseld wordt tussen twee machines uit te lezen. In het bijzonder is het mogelijk om aanlog gegevens, zoals gebruikersnaam en wachtwoord, van gebruikers uit te lezen. Omdat OpenSSL op bijna 2/3e van de internet machines gebruikt wordt, is de mogelijke impact zeer groot. En, omdat de aanlog gegevens van een willekeurige gebruiker uitgelezen kunnen worden, met aan zekerheid grenzende waarschijnlijkheid ben jij, lezer, ook geraakt. Direct of indirect.

Wat is (Open)SSL?

Computers op het internet praten met elkaar. Dat maakt het mogelijk dat jij websites kan zien, e-mail kan versturen en ontvangen,  films kan kijken via internet en eigenlijk dat communicatie met andere computers voor wat dan ook mogelijk is. Standaard worden de gegevens in klare tekst overgezonden. De techniek stuurt namelijk gewoon de gegevens die jij wil versturen over, en bemoeit zich verder nergens mee. Of het nou een e-mail is, of een webpagina, of wat dan ook. Het is de ontvangende computer die iets met de gegevens moet doen. En dus aan de inhoud van de overgestuurde gegevens bepaalt of er een webpagina wordt gevraagd, een e-mail verstuurt, of iets anders. Dat houdt in dat als jij een e-mail verstuurt, deze verstuurd wordt, zoals jouw e-mail programma dat aanbiedt aan het netwerk. In de standaard instellingen van de meeste e-mail programma’s klare tekst. Precies zoals jij die hebt ingetypt.

Iemand die nu de communicatie kan onderscheppen, kan de hele communicatie, inclusief de e-mail, uitlezen. Als jij wachtwoorden overstuurt, bijvoorbeeld voor het aanloggen op een website, worden die, standaard, als klare tekst overgestuurd. Diezelfde snoodaard die jouw e-mailtje kan lezen, kan dan ook jouw gebruikersnaam en wachtwoord uitlezen. En dat is eigenlijk iets, zelfs als jij niks te verbergen hebt, wat jij niet wil. Hier is wat op gevonden; verstuur de gegevens versleuteld, en niet als klare tekst.

SSL, en haar opvolger TLS, doen precies dat. Zij versleutelen de data die over het internet gaan, en ontsleutelen de versleutelde data die van internet komt. De data zijn nu door iemand die de data onderschept, niet meer te lezen.

De meest bekende toepassing van SSL, is https. Dat is als jij naar een website gaat die de verbinding beveiligt (https, die s staat voor secure)  zichtbaar door het slotje voor de URL in jouw browser.

OpenSSL is de open source versie van SSL, en in vrij algemeen gebruik op het internet. Bedrijven als Google, Yahoo of Etsy maken er gebruik van.

Bloedend Hart, Heartbleed

De meeste verbindingen op het internet komen tot stand in het client-server model. Dat betekent dat als een computer bijvoorbeeld e-mail gaat ophalen bij de e-mail provider, dan is de ophalende computer de client -meestal jouw computer- en de computer waar e-mail van opgehaald wordt is de server. Jij bekijkt nu dit blog via een browser, de client. De blog staat bij mij, en stuurt de inhoud van de blog naar jou, de computer die bij mij staat is de server. De term server komt van de activiteit die de server doet, hij serveert de gegevens uit.

Kort door de bocht, kan men via internet op twee manieren een verbinding leggen. De eerste, stateful, is de standaard manier. Een verbinding wordt gelegd, en blijft net zo lang bestaan, tot hij door een van beide computers verbroken wordt. Hier geldt geen tijdslimiet. De tweede, stateless, legt verbinding, vraagt data op, laat data over dezelfde verbinding terugsturen en verbreekt de verbinding als dat is gebeurd. Dit erg kort door de bocht, het werkelijke mechanisme is complexer, maar deze uitleg volstaat hier.

Zelfs in een stateful verbinding, jij weet wel die verbinding die blijft bestaan tot een van de betrokken computers hem verbreekt, kan de verbinding verbroken worden zonder dat een van de beide computers daar opdracht toe geeft. Dit kan gebeuren omdat ergens in de verbinding iets fout gaat, of bijvoorbeeld omdat de verbinding zolang geen data heeft vervoerd, dat de verbinding daarom wordt verbroken uit het OS van een van de computers; time-out. het is dus verstandig om, als er enige tijd geen data over de lijn gaat, te testen of de verbinding nog bestaat, en zo te voorkomen dat er een time-out ontstaat. Dit is een mechanisme dat bekend staat als de heartbeat.

Als de communicatie verloopt via een verbinding die versleuteld is met TLS, dan ziet de heartbeat er bijzonder uit. De client stuurt een heartbeat naar de server.  In de heartbeat staat willekeurige data, die versleuteld over de lijn gaat. De server ontsleutelt die data, versleutelt hem weer, en stuurt die terug naar de client. De client ontsleutelt de data, en die ontsleutelde data moet exacte dezelfde zijn als de data die de client bij de heartbeat verstuurde. De server moet de data ontsleutelen, want de versleuteling van client naar server is anders dan de versleuteling van server naar client. Zou de server de data uit de heartbeat niet ontsleutelen, maar gewoon terug sturen, dan merkt de client op dat op, en concludeert dat verbinding verbroken is, of in ieder geval niet meer vertrouwd.

Voor het ontsleutelen houdt de software van OpenSSL, die ook TLS spreekt, de data in het geheugen. Zo ook bij de data van de heartbeat. Door een foutje in de software van OpenSSL, kan er nu iets bijzonders gebeuren. Het antwoord wat de server op de heartbeat geeft, kan extra data bevatten. Namelijk data die in het geheugen van de server precies naast de data van de heartbeat ligt. En die data kan van alles zijn wat OpenSSL recent heeft ontsleuteld, zoals de gebruikersnaam en het wachtwoord van iemand totaal anders dan jij. Omdat die data vervolgens wordt teruggestuurd als antwoord op de heartbeat, krijgt de client ineens de mogelijkheid om vertrouwelijke data te lezen. En net zoals jij de gegevens van een ander toegestuurd kan krijgen, kan iemand anders ook jouw gegevens toegestuurd krijgen. Als die ander kwaadwillend is, kan die daarmee ongewenste zaken doen, met in dit voorbeeld jouw account bij die server.

Naast het onbedoeld sturen van vertrouwelijke data, is er een bijkomend probleem. Omdat de server de heartbeat als een normale activiteit ziet, wordt er niets van deze activiteit gelogd. Niet de data uit de originele heartbeat, en niet de data die toegestuurd wordt. Laat staan dat er gelogd wordt naar wie dat gestuurd wordt. De natte droom van iedere digitale inbreker, gegevens krijgen, zonder een spoor na te laten.

En dan is er nog een klein detail, deze fout bestal pas sinds december 2011, dat is bijna twee en een half jaar.

Wat nu?

Zoals boven staat aangegeven, kunnen er, buiten jouw weten om, gevoelige gegevens, zoals wachtwoorden, van jou lekken. Het slechte nieuws is dat jij pas ontdekt dat die gegevens gelekt zijn, als iemand er misbruik van maakt. Waarbij ook nog geldt, dat als er geen misbruik van gemaakt wordt, of is, dat niet betekent dat de gegevens niet gelekt zijn. Gelukkig ben jij verstandig, en heb jij voor alle accounts, Twitter, Facebook of Google een ander wachtwoord. Toch?

Hoe dan ook, als jij gebruik maakt van een van de sites die in een artikel in Mashable als kwetsbaar worden aangemerkt, zal jij jouw wachtwoorden moeten wijzigen. Doe dat pas als de site de bug heeft verwijderd, gepatched is. Tot die tijd, is die site kwetsbaar, en kan jouw gegevens lekken. Ook jouw nieuwe gegevens.

En als jij dan toch wachtwoorden gaat wijzigen, zorg er dan voor dat jij voor ieder account een uniek wachtwoord gebruikt. Maar dat deed jij al natuurlijk.

Voor meer info heartbleed:

Google
Heartbleed.com

Geef een reactie