Wachtwoordbeveiliging voor dummies
Gepubliceerd: Dinsdag 8 december 2009
Auteur: Paul Venezia
Je zou denken dat de meeste webapplicaties onderhand doorhebben waar het om gaat bij de beveiliging van wachtwoorden. Je weet wel: sterke wachtwoorden, versleuteld opslaan, dat soort dingen. Helaas.
Neem dit voorbeeld, dat ik heb gekopieerd van een klantenportal van een bedrijf in financiële services.
The password may not contain any of the following characters: ", ~,!, @, #, $, %, ^, &, *, (,), +, =, \, |, {, }, [,], <, >, ?, blank or tab.
Die spatie en tab kan ik snappen, maar waarom mag ik in hemelsnaam al die andere karakters niet gebruiken!? Welke beveiligingspolicy verbiedt dat? Wie verzint zoiets?
Maar dat is niet alles. Deze site dwingt je ook nog eens om elke twee maanden je wachtwoord te vervangen, en nieuwe wachtwoorden mogen niet hetzelfde zijn als de vorige 10 wachtwoorden. Jammer genoeg gebruiken de meeste mensen hetzelfde wachtwoord op allerlei sites, dus deze policy heeft inderdaad bestaansrecht. Maar in dit geval gaat het om een hypotheek informatiesite, waarop ik niets kan veranderen. Het enige kwaadaardige dat ik er kan doen, is het betalen van mijn hypotheek. Natuurlijk log ik maar een paar keer per jaar in, dus moet ik elke keer weer mijn wachtwoord veranderen. Weer een nieuw wachtwoord dat ik nergens anders gebruik, omdat het te zwak is. Daarna moet ik het onthouden, neerschrijven, of het opslaan in mijn browser. Meestal moet ik dus door de wachtwoord recovery-mallemolen.
En dan is het verontrustend om te zien hoe die recovery op zulke sites werkt. In minstens de helft van de gevallen krijg ik een onversleuteld mailtje met mijn wachtwoord, gewoon in platte tekst. Dat betekent dat die sites de wachtwoorden ook in platte tekst bewaren in hun database. Die databases worden weer ergens gebackupt en waarschijnlijk kunnen ze zo worden gelezen door een groot aantal beheerders en misschien wel door iedereen die een backup tape mee kan snaaien. Dat is vragen om problemen!
Het oplossen van deze problemen is kinderlijk eenvoudig: versleutel de wachtwoorden en vergelijk de sleutels. Dat lijkt me nogal wiedes. MD5 sleutels kunnen worden gekraakt, dus gebruik iets anders, maar sla de wachtwoorden in ieder geval niet op in platte tekst. Het is te idioot voor woorden dat ik het nog moet zeggen! Het onderhouden van een database met wachtwoorden in platte tekst is een gigantisch risico; niemand anders dan de gebruiker hoeft dat wachtwoord te weten. Als die het vergeten is, stuur hem een willekeurig gegenereerd wachtwoord en dwing hem het te veranderen bij zijn volgende login. Zo moeilijk is dat toch niet!
Ik heb ook sites gezien, met de meest vreselijke code, waarbij de wachtwoorden in platte tekst worden ingebed in de sessie, of als cookie. Hoe is het mogelijk iemand dit een goed idee vindt? Toen ik wat werk deed aan een website en bezig was met het onderzoeken van een bug in cookie-interacties, kwam ik een van mijn eigen wachtwoorden tegen in de cookielijst van mijn browser, natuurlijk in platte tekst. Bij elk verzoek werd het verzonden naar een onversleutelde site.
Daar was ik goed ziek van. Maar op een of andere manier is dat nog niet zo slecht als het embedden van SQL queries in een href. (En als je de rest van de dag wat ongemakkelijk wilt lachen, bekijk dan de rest van The Daily WTF)
De UNIX-veteraan in mij denkt graag dat het niet altijd zo is geweest. Het was in vroeger tijden niet eens mogelijk om zulke slechte code te schrijven en uit te voeren. Alles moest zo schoon en beknopt mogelijk blijven. Tegenwoordig kan iedereen die in staat is een puntkomma te typen blijkbaar als coder voor goed beveiligde financiële websites aan de slag gaan. Aan zulke code vertrouw je vervolgens je identiteit en misschien wel je rekeningnummer toe als je op een loginknop drukt. Geen wonder dat het stelen van identiteiten zo makkelijk is!
Bron: Techworld
