SSL veilig of niet? Dion Bosschieter Dit is een onderzoeksrapport dat antwoord geeft op de vraag: ‘Kan een gebruiker er zeker van zijn dat SSL veilig is?’
I T o p i a D i o n B o s s c h i e t e r 2 3 -‐ 0 4 -‐ 2 0 1 2
Inhoudsopgave Samenvatting ................................................................................................................................................... 3 Verklarende woordenlijst ........................................................................................................................... 4 Inleiding ............................................................................................................................................................ 5 H1: Wat is SSL .................................................................................................................................................. 6 Begin HTTPS .......................................................................................................................................................................... 6 Stuur certificaat met public key .................................................................................................................................... 6 Versleutelde sessie key ....................................................................................................................................................... 6 H2: Wat maakt SSL veilig ............................................................................................................................. 8 H3: Wat maakt SSL onveilig ..................................................................................................................... 11 H4: Gebruikersonderzoek ........................................................................................................................ 12 Vragen .................................................................................................................................................................................... 12 Antwoorden ......................................................................................................................................................................... 12 Gebruikers onderzoek conclusie ................................................................................................................................. 13 H5: Conclusie ................................................................................................................................................ 14 Bronnenlijst .................................................................................................................................................. 15
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
2
Samenvatting Dit is een kleine samenvatting van het gehele onderzoeksrapport. SSL is een protocol die er voor zorgt dat de data die verstuurd word over het internet versleuteld word, met als doel dat andere partijen deze data niet kunnen lezen. Eigenlijk denkt iedereen dat SSL veilig, waarom zouden we het anders gebruiken? Het probleem is echter dat SSL toen het bedacht was een zeer sterk protocol was, maar nu echt een stuk minder veilig is dan de meeste mensen denken. Er is namelijk een probleem met het genereren van SSL certificaten. Het is zo dat elke organisatie die SSL certificaten kunnen genereren dit kunnen doen voor de hele wereld, deze organisatie kunnen een SSL certificaat genereren voor bijvoorbeeld Google Mail en dit word vervolgens ook nog geaccepteerd door de internet browser. Het is al eerder gebeurd dat deze organisaties gehackt waren en dat de SSL certificaten die gegenereerd werden gebruikt werden voor mail.google.com en mail.yahoo.com zodat de aanvallers mail data kunnen onderscheppen en lezen. De conclusie is ook dat SSL niet veilig is. Maar als je meer in detail wilt weten waarom dit zo is, raad ik u aan het onderzoeksrapport te lezen.
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
3
Verklarende woordenlijst SSL = Secure Socket Layer, het is een laag bovenop de applicatie laag die ervoor dat de data in de applicatie laag versleuteld wordt. Met de lagen bedoel ik natuurlijk de lagen van het OSI model. OSI Model = Het OSI-‐model is een gestandaardiseerd middel om te beschrijven hoe data verstuurd wordt over een netwerk.
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
4
Inleiding Dit document is een onderzoeksrapport waarin ik antwoord geef op de vraag ‘Kan een gebruiker er zeker van zijn dat SSL veilig is?’. SSL is een protocol die er voor zorgt dat de data die verstuurd word over het internet versleuteld word, met als doel dat andere partijen deze data niet kunnen lezen. Ik heb voor het onderwerp SSL gekozen omdat ik erg geïnteresseerd ben in beveiliging. Dit document is voor mijn collega’s maar ook eindgebruikers die graag een antwoord op deze vraag zien. Een gedeelte van dit onderzoeksrapport is besteed aan fieldresearch toch heb ik bijna al de informatie die ik verkregen heb te danken aan mijn deskresearch. Ik zal dit document beginnen door uit te leggen wat SSL is en hoe dit werkt, wanneer het ontstaan, enzovoort. In hoofdstuk vier bespreek ik mijn field research. Hierna zal ik een goed onderbouwd antwoord geven op deelvragen die ik heb opgesteld en uiteindelijk zal ik een conclusie geven die weer antwoord geeft op mijn hoofdvraag ‘Kan een gebruiker er zeker van zijn dat SSL veilig is?’.
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
5
In de komende hoofdstukken geef ik antwoord op de volgende deelvragen: • Wat is SSL? • Wat maakt SSL veilig? • Wat maakt SSL onveilig? In de conclusie geef ik vervolgens antwoord op de hoofdvraag die luidt: Kan een gebruiker er zeker van zijn dat SSL veilig is?
H1: Wat is SSL
SSL word in vele communicatie protocollen gebruikt, ik ga het protocol SSL uitleggen door middel tekening die ik gemaakt heb die beschrijft hoe een webbrowser( een programma die een beveiligde website bezoekt ) een beveiligde verbinding opent naar een webserver.
SSL Handshake Process
Begin HTTPS Stuur certificaat met public key Versleutelde Sessie Key Data versleuteld met de “Sessie Key”
Figuur 1.
Hieronder een beschrijving die het diagram van figuur 1 stap voor stap door neemt:
Begin HTTPS Het begint allemaal door middel van de webbrowser die een pagina ophaalt van een server, waarna de server bijvoorbeeld zegt: ik wil dat je HTTPS gebruikt in plaats van HTTP, vervolgens doet de webbrowser dit.
Stuur certificaat met public key De webbrowser stuurt een HELLO commando en krijgt vervolgens de gegevens van de server terug, hij krijgt een ssl certificaat terug.
Versleutelde sessie key De client maakt een tijdelijk wachtwoord en stuurt deze vervolgens versleuteld met het ssl certificaat op. Omdat de code versleuteld is met het certificaat kan het nu alleen nog uitgepakt worden door middel van de wachtwoord die alleen de server weet. Nadat de server de versleutelde data uitgepakt heeft weet hij het sessie wachtwoord.
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
6
Nu kunnen zowel de server als de client data naar elkaar versturen die beveiligd zijn met het sessie wachtwoord. Bron: Axel Boldt (2003). RSA (algorithm), internet. Geraadpleegd op 20 februari 2012, http://en.wikipedia.org/wiki/RSA_(algorithm)
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
7
H2: Wat maakt SSL veilig Hierboven heb ik het gehad over de algemene versleuteling van webverkeer en hoe deze wordt opgezet, maar waarom is SSL nou zo veilig en waarom kan iemand die jouw data wil niet gewoon de code gebruiken die wordt verzonden om de versleutelde data uit te pakken. Dat ga ik hieronder proberen uit te leggen. Priemgetallen Priemgetallen zijn de reden waarom SSL zo veilig is. Priemgetallen zijn bijzondere getallen, getallen die alleen door zichzelf en 1 deelbaar zijn. Ik ga uitleggen wat priemgetallen doen in SSL met behulp van Fig1. Het proces wat ik ga uitleggen lijkt in grote lijnen op de wiskunde die gebruikt word in SSL, zie het als Alice die een bericht probeert te versturen naar Bob. Fig1:
Stel we hebben Alice en Bob, dan genereerdt Alice een 2 gedeelde waardes g en p. Alice kiest voor p de priem 23 en voor g kiezen we 5, ook kiest alice de private key(alleen gekend door haar en word niet gedeeld) 6 voor de variabele a. Vervolgens genereerd Alice haar publieke code door middel van de formule A = g^a mod p. 5ˆ6 mod 23 = 8. Alice stuurt alle publieke nummers op naar Bob die vervolgens zijn gedeelte kan uitvoeren. Bob hoeft alleen zijn private key te generen omdat de rest al gegeven is, hij kiest voor b 15 en genereerd zijn publieke code doormiddel van de formule B= g^b mod p. 5^15 mod 23 = 19. Bob stuurt nu zijn publieke code naar Alice. Uiteindelijk kunnen nu zowel Alice als Bob samen op de zelfde key uitkomen doormiddel van de andere zijn Publieke code. Alice voert de volgende formule uit: B^a mod p; 19^6 mod 23 = 2. Bob voert de volgende formule uit: A^b mod p; 8^15 mod 23 = 2. Beide komen ze uit op het cijfer 2, dit “gezamelijke wachtwoord” kan vervolgens gebruikt worden om data te versleutelen. Dit cijfer kon je alleen bereken als je één van de private keys wist. Als je dit wou gaan breken dan moest je elk cijfer proberen, dat kan nu nog omdat we kleine cijfers
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
8
gebruiken maar in SSL word er gebruikt gemaakt van hele grote getallen waarmee een berekening zelfs lang duurt, een voorbeeld van zo’n groot getal is te zien in Fig2. 25195908475657893494027183240048398571429282126204032027777137 83604366202070759555626401852588078440691829064124951508218929 85591491761845028084891200728449926873928072877767359714183472 70261896375014971824691165077613379859095700097330459748808428 40179742910064245869181719511874612151517265463228221686998754 91824224336372590851418654620435767984233871847744479207399342 36584823824281198163815010674810451660377306056201619676256133 84414360383390441495263443219011465754445417842402092461651572 33507787077498171257724679629263863563732899121548314381678998 85040445364023527381951378636564391212010397122822120720357 Dit nummer is 2048 bit groot Ik heb een programma gemaakt die het process doorloopt van het maken van een private key en een public key en vervolgens 1 byte versleuteldt die hierna weer uitgepakt kan worden. #include <math.h> #include <stdio.h> #include <stdlib.h> #include
int main(int argc, char **argv) { long prime1 = 3;//7331 long prime2 = 11;//31337 long p = prime1; long q = prime2; long e = 3;//65537 long message = 9; long n = p*q; long m = (p-‐1)*(q-‐1); long d = m / e; d+=(d+1); d = m -‐ d; long long c = pow(message,e); c = c % n; long long dc = pow(c,d); dc = dc % n; printf("p: %li\n", p); printf("q: %li\n", q); printf("e: %li\n", e); printf("n: %li\n", n);
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
9
}
printf("m: %li\n", m); printf("d: %li\n", d); printf("\nmessage:\t%li\n", message); printf("cyphertext:\t%lli\n", c); printf("decyphertext:\t%lli\n", dc); return 0;
De uitkomst van deze code is: p: 3 q: 11 e: 3 n: 33 m: 20 d: 7 message: 9 cyphertext: 3 decyphertext: 9 Ik zal de code niet helemaal gaan uitleggen maar het komt erop neer dat de code nummers heeft die van te voren zijn ingevoerd en vervolgens de rest van de code genereerd en vervolgens tekst vercijferdt met de public key en deze weer uitleest met de private key. Ik heb het bovenstaande programma zelf geschreven omdat ik echt wou weten hoe de berekeningen nou werkte. Bron: Thijs Bot (2006). Diffie-‐Hellman-‐sleuteluitwisselingsprotocol, internet. Geraadpleegd op 1 maart 2012, http://nl.wikipedia.org/wiki/Diffie-‐Hellman-‐sleuteluitwisselingsprotocol
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
10
H3: Wat maakt SSL onveilig De certificaten die nodig zijn bij SSL kunnen worden gekocht bij organisaties die hiervoor gecertificeerd zijn. SSL is opgebouwd uit heel veel verschillende organisaties over de hele wereld die allemaal certificaten kunnen produceren. Het probleem met SSL is dat elke organisatie een certificaat kan aanmaken en ‘signen’ voor elk domein op de hele wereld. Dit betekent dat bijvoorbeeld een Certificate Authority in China een certificaat kan genereren voor het domain mail.google.com en deze wordt vervolgens door de browser als legitiem gezien omdat de Certificate Authority die het ssl certificaat gemaakt heeft bestaat en gecertificeerd is. Een overheid als China kan vervolgens dit gegenereerde certificaat gebruiken om verkeer tussen mail.google.com en de eindgebruiker te lezen. Ditzelfde geldt voor de andere 650 Certificate Authority’s op de hele wereld. De mensen van “Electronic Frontier Foundation” hebben een map gemaakt van alle Certificate Authority’s en die is te vinden op onderstaande link: https://www.eff.org/observatory Het geen wat hierboven beschreven is kan ook door hackers gebruikt worden. Dit betekent dat als een Certificate Authority gehackt zou worden, dat de hacker/hackers certificaten kunnen genereren en gebruiken om data te onderscheppen, terwijl de verbinding dan op de gebruiker zijn computer als ‘veilig’ wordt beschouwd. Dit is al een keer gebeurd, het is gebeurd met Comodo (Grootste Certificate Authority in de wereld) en het is gebeurd met Diginotar (Nederlands bedrijf). In beide gevallen waren er certificaten gegenereerd om websites zoals mail.google.com en mail.yahoo.com hun mail te onderscheppen, het kan nu zelfs zo zijn dat er veel Certificate Authority’s gehackt zijn zonder dat we het weten. Dit betekent eigenlijk dat je niet meer zeker kan zijn of de verbinding die je ziet als je zit te internetten daadwerkelijk veilig is of niet. Dit betekent dat het systeem met Certificate Authority’s niet meer werkt en dat er teveel bedrijven zijn die nu certificaten kunnen maken. Bron: Moxie Marlin Spike (2009). SSLStrip, internet. Geraadpleegd op 2 maart 2012, http://www.thoughtcrime.org/about.html
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
11
H4: Gebruikersonderzoek Ik heb om te controleren of gebruikers een beetje verstand hebben van dit systeem een aantal gebruikers een paar vragen gesteld over SSL. Ik heb eindgebruikers geïnterviewd die zaten te internetten bij de bibliotheek te Purmerend.
Vragen • • • •
Weet u hoe een beveiligde web verbinding werkt? Denkt u dat SSL veilig is? Gelooft u dat uw gegevens te lezen zijn? Hoe kunt uw informatie over de beveiligde verbinding vinden?
Antwoorden Peter Vraag Antwoord Weet u hoe een beveiligde web verbinding Nee werkt? Denkt u dat SSL veilig is? Ja, anders zouden we het niet gebruiken vandaag de dag Gelooft u dat uw gegevens te lezen zijn? Nee Hoe kunt uw informatie over de beveiligde Dat weet ik niet verbinding vinden? Giorgio Vraag Antwoord Weet u hoe een beveiligde web verbinding Ja werkt? Denkt u dat SSL veilig is? Ja Gelooft u dat uw gegevens te lezen zijn? Ja, als je genoeg machine kracht heb dan kan je me gegevens wel lezen ja Hoe kunt uw informatie over de beveiligde Via dat SSL icoontje naast de URL bar verbinding vinden? Niels Vraag Antwoord Weet u hoe een beveiligde web verbinding Nee werkt? Denkt u dat SSL veilig is? Ja Gelooft u dat uw gegevens te lezen zijn? Nee Hoe kunt uw informatie over de beveiligde Dat weet ik niet verbinding vinden?
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
12
Ben Vraag Weet u hoe een beveiligde web verbinding werkt? Denkt u dat SSL veilig is? Gelooft u dat uw gegevens te lezen zijn? Hoe kunt uw informatie over de beveiligde verbinding vinden?
Antwoord Nee Ja Nee Via dat icoontje naast de URL balk
Gebruikers onderzoek conclusie Na de kleine vragenronde valt er te achterhalen dat eigenlijk de meeste gebruikers er vanuit gaan dat SSL veilig is en dat mensen denken dat hun gegevens niet gelezen kunnen worden als de verbinding met SSL beveiligd is. Het is zelfs zo dat sommige gebruikers niet eens weten hoe zo’n beveiligde verbinding werkt, die gaan er maar vanuit dat het veilig is. Ik vind dat het de taak is van Netwerkbeheerders en SNE’rs om gebruikers een cursus of alleen informatie te geven over dit soort zaken, een soort van ‘awareness‘ te creëren bij gebruikers.
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
13
H5: Conclusie Mijn conclusie is dat een gebruiker er NIET zeker van kan zijn dat SSL veilig is. Dit is omdat de gebruiker niet zeker kan zijn dat het SSL certificaat dat hij ziet geldig is, hij kan er niet zeker van zijn dat de verbinding niet wordt afgeluisterd of dat de server van de Certificate Authority gehackt is. Een oplossing voor dit probleem zou kunnen zijn om al de Certificate Authorities uit de browsers te halen en een systeem te gebruiken waarin de browser eerst het certificaat ophaalt en vervolgens aan een bekende server die de browser vertrouwt vraagt wat voor certificaat hij krijgt voor de server. Nadat de certificaten zijn opgehaald checkt de client(browser) of de twee opgehaalde certificaten gelijk zijn. Zijn ze gelijk dan is het certificaat correct, zijn ze niet gelijk dan is het certificaat niet correct een moet de browser een certificaat error geven. Hierdoor wordt het hele Certificate Authority Systeem ook niet meer gebruikt. Waar je wel weer tegen aan loopt is dat je iemand (1 server) moet vertrouwen en je moet er dus zeker van zijn dat deze server niet gehackt wordt, anders zit je weer met hetzelfde probleem.
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
14
Bronnenlijst Moxie Marlin Spike (2009). SSLStrip, internet. Geraadpleegd op 2 maart 2012, http://www.thoughtcrime.org/about.html T. Dierks, C. Allen (1999). The TLS Protocol, internet. Geraadpleegd op 12 februari 2012, http://www.ietf.org/rfc/rfc2246.txt Nuno Tavares (2005). Diffie–Hellman key exchange, internet. Geraadpleegd op 1 maart 2012, http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange Thijs Bot (2006). Diffie-‐Hellman-‐sleuteluitwisselingsprotocol, internet. Geraadpleegd op 1 maart 2012, http://nl.wikipedia.org/wiki/Diffie-‐Hellman-‐sleuteluitwisselingsprotocol Axel Boldt (2003). RSA (algorithm), internet. Geraadpleegd op 20 februari 2012, http://en.wikipedia.org/wiki/RSA_(algorithm) Jens Kruse Andersen (2008). RSA numbers, internet. Geraadpleegd op 21 februari 2012, http://en.wikipedia.org/wiki/RSA_numbers Filip Sneppe (2004). OSI model, internet. Geraadpleegd op 21 maart 2012, http://nl.wikipedia.org/wiki/OSI-‐model
Onderzoeksrapport: SSL; Dion Bosschieter; ITopia
15