In mei 2015 heb ik gekeken naar het gebruik van TLS-certificaten (voorheen SSL-certificaten) en de configuratie van de webserver van de commerciële Nederlandse banken. De aanleiding was een onderzoek van de bekende Australische security professional Troy Hunt met als titel ‘Do you really want bank grade security?'. Meteen na het verschijnen van Hunt’s artikel heb ik dezelfde test uitgevoerd voor de commerciële Nederlandse banken.
Hunt begon zijn artikel met de opmerking dat er in beveiligingsland en in de politiek daaromheen vaak wordt gesproken over ‘bank-grade’ security, dat zou het Nirvana van beveiliging zijn. Hij nam de proef op de som en voerde een eenvoudige test uit, door gebruik makend van openbaar beschikbare informatie te controleren of de websites van banken voldoende zijn beveiligd. Hij deed dat door de ‘TLS’-beveiliging van de websites te testen. Oftewel: wat is de waarde van het groene slotje of de groene balk in de browser waar we volgens verschillende awareness campagnes op moeten letten?
Hunt schrok van het resultaat van zijn test. Van de 21 Australische banken behaalden er slechts vijf een positieve score. De rest scoorde matig tot slecht. Er bestonden diverse kwetsbaarheden op verschillende servers. Er waren zelfs websites van banken kwetsbaar voor Poodle-aanvallen. Die kwetsbaarheid zou echt niet mogen bestaan, omdat bij een aanval op die kwetsbaarheid klantinformatie achterhaald zou kunnen worden. Hunt constateerde dat het begrip ‘Bank-Grade security’ misschien niet de lading heeft die we ervan verwachtten.
De (relatieve) waarde van TLS-certificaten
De kwaliteit van een certificaat is natuurlijk niet alles bepalend voor het beoordelen van het niveau van beveiliging: Een website kan betrekkelijk veilig zijn in geval van een matige TLS-configuratie, maar het geeft wel aan of een website met zorg beheerd wordt. Dat staat of valt natuurlijk met de mate waarin je een uitgever van certificaten kunt vertrouwen, maar die vraag is buiten de scope van dit artikel.
Een certificaat van een website heeft eigenlijk twee belangrijke functies:
* Een betrouwbaar certificaat geeft aan dat de server waar het certificaat op staat, echt van de organisatie is van wie het certificaat is. Als iemand surft naar ‘websitevanbank.nl’ en ziet dat het certificaat van die website ook is afgegeven voor ‘websitevanbank.nl’ en hoort bij ‘bank’, dan geeft dat aan dat hij bij de goede website is aanbeland en dat de bezoeker daar dus veilig kan rondkijken.
* Het certificaat bevat ook een digitale sleutel, die door de browser wordt gebruikt om het verkeer van en naar die webserver te authenticeren en daarna te versleutelen. Alleen de webserver van de bank kan dankzij het feit dat de browser de sleutel van de bank gebruikt, dat verkeer lezen. Het verkeer is in beginsel ook niet af te luisteren. Daarmee wordt dan het wachtwoord voor die site, maar ook alles wat de gebruiker leest of wijzigt, onzichtbaar voor criminelen.
Het certificaat is een krachtig instrument om de beveiligingsfuncties uit te voeren, maar dan moet de cryptografische mogelijkheid van de webserver wel goed geconfigureerd en beheerd worden. De afgelopen jaren zijn er nogal wat kwetsbaarheden met betrekking tot TLS naar buiten gekomen, waardoor de beveiliging op deze punten afneemt of zelfs niets meer betekent. De Poodle-, Heartbleed-, Beast- en Drown-kwetsbaarheden hebben ruimschoots het nieuws gehaald en cryptografische algoritmes als SHA1 en RC4 en protocollen als SSLv3 zijn ook al onbetrouwbaar gebleken. Als een website daar niet op is berekend, dan is het niveau van beveiliging niet wat wij ons voorstellen bij ‘bank-grade’.
Digitnotar-casus
Dat een veilig certificaat van levensbelang kan zijn, blijkt uit de Diginotar-casus. Hackers hadden een website van Google in Iran nagemaakt en daar een vervalst certificaat van Google op geplaatst. Dat certificaat hadden ze vervalst doordat ze na een inbraak bij Diginotar zelf certificaten konden maken. Valse certificaten, maar die waren door de gebruikers van die nepsite niet te herkennen, het leek of de mensen Google webmail gebruikten. Criminelen konden alle mail meelezen. En het schijnt dat dit critici van de Iraanse overheid (die wellicht achter de hack zat) het leven heeft gekost.
Troy Hunt voerde de scan uit met behulp van de Qualys SSLlabs website. Deze website controleert een groot aantal beveiligingsinstellingen van de webservers en de aanwezige certificaten. Het enige wat je op de site van SSLlabs hoeft te doen is de url van een website in te voeren. De uitkomst van de test is een waarde in de reeks ‘A+’ tot ‘F-‘ en een aantal detailbevindingen die de uitkomst verklaren. De waarde A+ betekent een hoog niveau van beheer en beveiliging van het certificaat en de bijbehorende configuratie. Een waarde F betekent dat het certificaat en de configuratie feitelijk onbetrouwbaar is en dat de bezoeker van de site geen enkele garantie heeft dat hij op de goede site zit en dat niemand kan meekijken. Van de 21 Australische banken behaalden er tijdens de test van Hunt 5 een A-score, 12 scoorden een B, er was één C en 3 maal een D.
Nederlandse situatie
Meteen na het verschijnen van Troy Hunt’s artikel heb ik dezelfde test uitgevoerd voor de commerciële Nederlandse banken. Het resultaat was gelukkig aanzienlijk beter dan in Australië. Geen D’s en zelfs een drietal A+ scores.
Mijn bevindingen werden door de banken goed opgepakt. Een paar weken later heb ik die test opnieuw uitgevoerd en toen bleek dat er vrijwel alleen A’s op de lijst stonden, de stand was verbeterd en er waren bijvoorbeeld twee banken van B naar een A- gegaan. Dat laat zien dat banken wel degelijk snel kunnen aanpassen aan de gevonden problemen zoals SSLv3 en RC4 lekken. Al moesten ze blijkbaar wel eerst op de kwetsbaarheden worden gewezen…
In aanvulling op de test van Hunt heb ik nog twee tests uitgevoerd, namelijk of de site kwetsbaar is voor Heartbleed (gelukkig nergens) en of het certificaat een EV-certificaat is, oftewel een certificaat dat is verstrekt aan de eigenaar van de site, waarbij de eigenaar zich persoonlijk heeft moeten legitimeren bij de verstrekker van het certificaat.
Daarnaast heb ik ook een andere test uitgevoerd, waarbij ik gebruik maakte van de resultaten van een test op de site internet.nl. Deze site is een initiatief van het Platform Internetstandaarden en biedt ook een aantal tests aan om te beoordelen of een site wel toekomst-klaar is. Bij die test wordt niet alleen naar de beveiliging van het certificaat gekeken, maar wordt ook beoordeeld of de site gebruik maakt van DNSsec en of de website klaar is voor het gebruik van IPv6. Een percentage geeft aan in hoeverre een site voldoende toekomstvast is ingericht. De waarde van deze score is discutabel: de TLS kwaliteit, DNSsec en IPv6 gereedheid en wegen allemaal ongeveer even zwaar. Maar de score levert wel interessant onderscheid op.
1 jaar later, de update
Inmiddels is het juni 2016, ruim een jaar later en tijd voor een update. Ik heb dezelfde tests als in 2015 opnieuw uitgevoerd. En het resultaat is uiterst positief: in Nederland hebben we geen commerciële banken meer met lagere scores dan A-. Het zou me niet verbazen als dat een wereldprimeur is. We hebben zeven banken met een A+, de A- is gezakt naar vier banken en de scores B en C zijn niet meer aanwezig..
Bovendien zien we nog wat meer vooruitgang: er zijn al websites van banken op weg om ook IPv6 te ondersteunen en er zijn ook al banken die DNSsec gebruiken. Wat we eigenlijk alleen nog niet zien is Dane: een moderne techniek om domeinnamen in DNS met een certificaat te beveiligen.
Conclusie
Aandacht helpt. We weten dat de uitgevoerde tests alleen niet aangeven of een site veilig is, maar een goede score geeft wel aan dat er aandacht voor beveiliging is en dat er professionals aan het werk zijn bij de geteste banken. De banken in ons land hanteren een aanzienlijk hoog niveau van beheer en beveiliging van de certificaten. Het groene slotje en de groene balk in de browser betekenen voor banksites in ons land meer dan in andere landen.
IPv6 en DNSsec staan nog in de beginfase en dat zie je aan de beperkte ondersteuning. Een aantal banken ondersteunt het gedeeltelijk waardoor het totaalcijfer voor toekomstvastheid lager is. Andere opties, zoals Public Key Pinning en security Headers, staan nog in de kinderschoenen en die worden daarom niet meegenomen in de score.
Een betrouwbaar certificaat wil niet zeggen dat de website betrouwbaar is. De test geeft niets aan over de mate van beveiliging van de webapplicatie (wordt er bijvoorbeeld wel voldaan aan eisen van veilig programmeren?), of de mate van technische beveiliging van firewalls of anti-malware beveiliging. De test controleert uitsluitend de mate van beheer en beveiliging van het TLS-certificaat. Alleen een integraal beveiligingsonderzoek kan daarover uitsluitsel geven, maar dat is een verantwoordelijkheid van de eigenaren van de websites zelf en van de toezichthouder.
Wil je zelf je eigen site eens controleren? Gebruik dan de ssltest bij SSLlabs. Op https://www.internet.nl kun je niet alleen het niveau van de TLS-configuratie van je site controleren, maar kun je bijvoorbeeld ook zien of je e-mailserver op orde is.
Door: André Koot, security, IAM lead consultant en cyberexpert bij Nixu Corporation