November 6, 2017

Online accountbeheer is niet zo simpel als het lijkt, of toch?

Online accountbeheer is niet zo simpel als het lijkt, of toch?

Nog al te vaak leeft de perceptie dat website security en een goede user experience niet hand in hand kunnen gaan. Het klopt dat bepaalde beveiligingsmaatregelen de gebruikservaring beïnvloeden en dus zullen er altijd gevallen zijn waarbij je een afweging moet maken ten voordele van het een of het ander. Maar wanneer je er doordacht en pragmatisch mee omspringt, zijn de 2 goed te verenigen. In de praktijk wil dit echter niet altijd lukken. Enkele dagen geleden besloot ik mijn Telenet wachtwoord nog eens te resetten en dit deed me toch weer mijn wenkbrauwen fronsen.

Wachtwoord reset, hoe het niet moet

Laten we de verschillende stappen van het wachtwoord reset proces van Telenet eens van dichterbij bekijken.

Nadat je je e-mailadres hebt ingegeven, krijg je op het scherm een wachtwoord te zien dat Telenet voor je gemaakt heeft.

Ik heb al vaker gezien dat websites die bij reset een nieuw wachtwoord genereren dit dan via e-mail versturen, maar ik kan me niet herinneren dat ik ooit gezien heb dat het nieuwe wachtwoord op een webpagina wordt getoond. De reden weet ik niet, het beste dat ik kan verzinnen is dat ze op deze manier willen voorkomen dat er een wachtwoord in tekstvorm in iemand zijn mailbox zit.

Vanuit usability perspectief is dit hoe dan ook slecht. Je moet nu het wachtwoord op het klembord kopiëren om daarna manueel opnieuw in te loggen. Als je dit vergeet te doen en je sluit de pagina af heb je niet langer toegang tot je account (je oude wachtwoord is al vervangen door het nieuwe wachtwoord op dat moment) en zit er niets anders op dan opnieuw een reset te doen.

Aangezien er geen verificatie door de eigenaar van het e-mailadres vereist is alvorens Telenet het nieuwe wachtwoord aanmaakt, vroeg ik me af of ik iemand anders zijn wachtwoord kon wijzigen. Dit is niet mogelijk, Telenet laat een reset enkel toe indien je via je eigen modem verbonden bent.

Dit is een voorbeeld van hoe je door één probleem op te lossen een ander creëert. Niemand anders kan je wachtwoord resetten, maar zelf kan dit enkel als je thuis bent. Wat als je bijvoorbeeld op vakantie dringend in je Telenet account moet inloggen en je wachtwoord niet meer weet?

Nadat de reset is doorgevoerd ontvang je onderstaande e-mail ter bevestiging. Behalve advies waar je overal je nieuwe wachtwoord moet ingeven, geven ze ook een security tip.

Zoals ik Telenet ook via Twitter heb laten weten is deze tip slecht advies.

Maak nooit wachtwoorden voor je gebruikers aan

Een van de fundamentele problemen met de wachtwoord reset implementatie van Telenet — en vele andere websites — is dat ze een wachtwoord voor hun gebruikers aanmaken. Wanneer je dit doet ontstaan volgende problemen:

  1. De gebruiker kan op dat moment niet meer met zijn oude wachtwoord inloggen op zijn account. Dit impliceert ook dat je tijdelijk de toegang tot je account kwijt bent als iemand anders een wachtwoord reset uitvoert voor jouw account. Dit is exact de reden waarom telenet een extra controle heeft toegevoegd; enkel indien je verbonden bent met jouw modem kan je de reset uitvoeren.
  2. Je moet er voor zorgen dat het nieuwe wachtwoord tot bij de gebruiker geraakt. Telenet “lost dit op” door het wachtwoord op het scherm te tonen. Bij andere websites wordt dit wachtwoord via e-mail gestuurd. Dit is onveilig omdat e-mail verkeer (en dus het wachtwoord) kan onderschept worden en een mailbox in de meeste gevallen geen veilig opslagmedium is.

Hoe implementeer je een gebruiksvriendelijke en veilige wachtwoord reset?

Als je de verantwoordelijkheid voor het nieuwe wachtwoord aan te maken — zoals het hoort — bij de gebruiker legt, los je beide problemen op. Wanneer een gebruiker zijn wachtwoord wil resetten, stuur je een e-mail met een reset link. Via deze link kan hij zelf een nieuw wachtwoord kiezen.

Deze link is een URL specifiek voor deze instantie van het reset proces. De URL moet over HTTPS geladen worden en het path ziet er bijvoorbeeld als volgt uit: “Reset/?id=ace3823415cd38c962cb9e54a1ae533c”. De token “ace3823415cd38c962cb9e54a1ae533c” moet willekeurig zijn zodat deze niet geraden kan worden. Bovendien mag de token slechts beperkte tijd geldig zijn en moet hij nadat de reset is uitgevoerd, verwijderd worden. Dit zorgt er voor dat het window of opportunity voor aanvallers zeer klein is.

Deze token wordt opgeslagen samen met de ID van de user die de reset uitvoert en het tijdstip waarop de token gegenereerd werd. Wanneer de gebruiker de reset link inlaadt, controleert de pagina of de token bestaat. Indien dit het geval is, is de identiteit van de gebruiker bevestigd en mag het wachtwoord gewijzigd worden. Door deze implementatie kan de gebruiker van op iedere locatie zijn wachtwoord resetten en toch kan de website verifieren dat hij gerechtigd is om dit te doen.

Wachtwoord wijzigen

Als je een wachtwoord reset uitvoert, genereert Telenet een wachtwoord van 8 karakters bestaande uit cijfers, kleine- en hoofdletters, bijvoorbeeld “6bQL3A3x”. Hoewel Telenet je niet verplicht om dit wachtwoord bij de eerste login te wijzigen, is het een goed idee om dat toch te doen.

De keuze van je wachtwoord kan je best niet overlaten aan een (mogelijk verouderde) website want dan krijg je vaak dit soort — om het met Telenet zijn eigen woorden te zeggen — “matige” wachtwoorden.

Wachtwoord “6bQL3A3x” is matig volgens Telenet.

Merk op dat ook hier weer hetzelfde slechte advies wordt gegeven: “Extra veilig: verander je wachtwoord regelmatig”. De andere tips die ze op de reset pagina geven zijn achterhaald. Voor de mensen die hier meer over willen weten, lees zeker dit artikel eens. De huidige best practices zijn om geen mix van speciale karakters, hoofdletters en kleine letters te verplichten. De reden is dat mensen steeds vervallen in slechte gewoontes als ze aan deze wachtwoord vereisten moeten voldoen.

Je mag eender welk advies op de wachtwoord reset pagina zetten, toch krijg je wachtwoorden zoals $Password1234. Het enige wat mensen zien is dat de wachtwoordsterkte indicator zegt dat hun wachtwoord “heel sterk” is. Dit is exact de reden waarom je dergelijke indicatoren best niet gebruikt.

Als je mensen vrij laat kiezen — met als enige beperking een minimum lengte (lees zeker dit artikel eens over lengte vs. complexiteit) — maar je weigert wachtwoorden die gelekt zijn op het internet, dan dwing je af dat gebruikers veel sterkere wachtwoorden moeten kiezen. Hier vind je een verzameling van meer dan 320 millioen gelekte wachtwoorden die je hiervoor kan gebruiken.

Persoonlijk gebruik ik een password manager. Dit is een tool waarin je al je wachtwoorden kan opslaan. En deze kan je helpen om willekeurige, sterke en unieke wachtwoorden te genereren.

Een 64 karakter lang wachtwoord mag voor sommigen misschien absurd lang lijken. Maar aangezien ik het zelf niet moet onthouden — dat doet mijn passwoord manager voor mij — kies ik een zo lang en dus zo sterk mogelijk wachtwoord. Een website die wachtwoorden op een veilige manier, dus gehasht opslaat, heeft bovendien geen enkele reden om een wachtwoord in de lengte te beperken. De gehashte waarde heeft ongeacht de lengte van het wachtwoord altijd dezelfde vaste lengte. Op het eerste zich lijkt Telenet dit wel goed te doen, mijn nieuw wachtwoord wordt probleemloos aanvaard.

Tot ik opnieuw probeer in te loggen. Dan krijg ik dit:

Na een beetje experimenteren kwam ik er achter dat ze enkel de eerste 40 karakters van het wachtwoord opslaan in de database. Meteen een verklaring waarom ik niet kon inloggen met mijn wachtwoord. Zoals je in onderstaande conversatie ziet, heb ik Telenet meer dan 1 jaar geleden van deze inconsistentie tussen back-end en front-end op de hoogte gebracht. Deze bug is ondertussen nog steeds niet opgelost. Indien je voor welke reden dan ook wachtwoorden beperkt in de lengte — en laten we hopen dat dit in het geval van Telenet niet is omdat de wachtwoorden onveilig in de database zitten — zorg dan tenminste dat je dit ook client-side valideert.

Account beveiliging

Telenet biedt niet de mogelijkheid om two-factor authentication (2FA) — dit wil zeggen dat je behalve je wachtwoord ook (bijvoorbeeld) een code moet ingeven — voor je account te activeren. Het voordeel van 2FA is dat zelfs indien je account gehackt is, de hackers slechts toegang krijgen als ze ook deze code kunnen achterhalen.

Een extra laag van bescherming die voor online accounts zoals die van Telenet eigenlijk noodzakelijk is. Je gebruikt je Telenet account om op verschillende applicaties in te loggen, online je persoonlijke gegevens (naam, adres, telefoonnummers, modem instellingen,…) te beheren en om je aan te melden in je mailbox. Je e-mail account is een kritische account die, behalve veel persoonlijke informatie, ook vaak registratie- en wachtwoord reset e-mails van andere online accounts bevat.

De afwezigheid van 2FA is een belangrijke reden waarom ik mijn Telenet e-mailadres niet gebruik om me op andere websites te registreren.

Besluit

Ik heb deze post niet geschreven om Telenet met de vinger te wijzen. Maar hun gebruikersbeheer implementatie heeft een aantal tekortkomingen op het gebied van usability en security. Doe zelf eens de test op verschillende websites en je zal merken dat een aantal van de beschreven problemen vaak terugkomen. Door deze problemen te identificeren en alternatieven aan te reiken, hoop ik dat niet alleen Telenet, maar iedereen die gebruikersbeheer implementeert, er kritischer naar zal kijken om het verder te verbeteren.