Wat er écht gebeurt als je wachtwoord uitlekt

Gepubliceerd op door David Carrero

Wie te horen krijgt dat zijn wachtwoord is uitgelekt, ziet het als een eenmalig ongeluk: een dienst had een slechte dag, het stond in de krant, je hebt het gewijzigd en klaar. Niets is klaar. De dag van het lek is het einde van niets: het is de eerste dag van een lopende band die jaren zal draaien, en waarin jij nooit bij naam voorkomt. Het is de moeite waard het hele verhaal te vertellen, want bijna niemand ziet het.

Stap één: iemand haalt de database eruit

Het begin heeft niets spectaculairs. Iemand vindt een SQL-injectie, een opengelaten back-up, een beheerderspaneel met de standaardinloggegevens. En neemt een tabel mee.

Die tabel bevat, met een beetje geluk, jouw e-mailadres en een hash van je wachtwoord. Met wat minder geluk bevat hij je e-mailadres en je wachtwoord. In platte tekst. Precies zoals je het hebt getypt.

2009 tweeëndertig miljoen wachtwoorden in platte tekst

In december 2009 werd RockYou, een bedrijf dat widgets voor sociale netwerken maakte, getroffen door een SQL-injectie. Er verdwenen zo’n 32 miljoen wachtwoorden, en er viel geen hash te kraken: ze stonden er in platte tekst in.

Voor RockYou was het een ramp, voor alle anderen een cadeau. Voor het eerst bestond er een enorm corpus echte wachtwoorden, opgeschreven door mensen die niet wisten dat iemand ze zou lezen. Geen onderzoek: het ding zelf.

Het bestand werd rockyou.txt, en het is nog altijd het standaardwoordenboek waarmee aanvallen worden uitgeprobeerd. De waarde ervan zit hem er niet in dat jouw wachtwoord erin staat: hij zit hem erin dat het bevat hoe mensen wachtwoorden verzinnen. Een naam en een jaartal, het woord en 123, het uitroepteken erachter. RockYou lekte geen 32 miljoen geheimen. Het lekte het patroon. En een patroon verloopt niet.

Stap twee: wat te kraken valt, wordt gekraakt — zonder enige haast

Hier laat je intuïtie je in de steek. Wie op het inlogscherm van een dienst je wachtwoord probeert te raden, wordt afgeknepen: drie pogingen, een CAPTCHA, een blokkade. Tegen een server is raden traag en luidruchtig.

Tegen een bestand met hashes dat al op je eigen schijf staat, is er geen server. Er is niemand aan de andere kant die nee zegt. Het gaat lokaal, met GPU’s, zonder limiet op het aantal pogingen en met alle tijd van de wereld. Heeft de dienst slecht gehasht — snel algoritme, geen salt — dan is het verschil met platte tekst er een van gemak, niet van veiligheid.

En er wordt niet lukraak geprobeerd: eerst rockyou.txt, daarna regels die daaruit zijn afgeleid. Vervang de a door @. Zet er een jaartal achter. Elk trucje dat jij zo vernuftig vond, staat al ruim tien jaar in een configuratiebestand.

Daar komt een deel van de dump uit als leesbare wachtwoorden. De rest — het lange, het willekeurige, wat in geen enkel woordenboek staat — blijft ruis. Dat is de lijn die de wachtwoordchecker trekt: hij geeft je geen standje, hij vertelt je aan welke kant je valt.

Stap drie: het wordt gekruist, en dáár word je geld waard

Eén losse dump is weinig waard. Waardevol is de aggregatie: tien lekken van verschillende sites nemen, ze op e-mailadres kruisen en de paren e-mail:wachtwoord overhouden die al leesbaar zijn. Het resultaat heet een combolist, en dat is niemands database meer. Het is een lijst met mensen.

2013 de inventaris komt naar buiten

In december 2013 startte Troy Hunt met Have I Been Pwned: een openbare database van e-mailadressen die in datalekken zijn opgedoken, zodat iedereen kon vragen of hij erin stond. Het idee erachter is simpel en ongemakkelijk: als de aanvallers de inventaris toch al hebben, beschermt het niemand om hem voor de slachtoffers achter te houden. Jaren later kwam Pwned Passwords, dat hetzelfde doet met wachtwoorden en het mogelijk maakt ze op te zoeken zonder ze te versturen: je stuurt een fragment van de hash en de server geeft een reeks kandidaten terug, zonder te weten welke de jouwe was.

2017 NIST stopt met symbolen vragen en begint om lijsten te vragen

Toen NIST SP 800-63B publiceerde, ging bijna de hele formulierorthodoxie overboord, en kwam er een eis voor in de plaats die weinigen hadden zien aankomen: bij het instellen van een wachtwoord moet het systeem het vergelijken met een lijst van bekende gecompromitteerde waarden en het weigeren als het erin voorkomt.

Dat is een verandering van theorie, niet van detail. De vraag is niet langer of je wachtwoord er sterk uitziet, maar of het al gepubliceerd is. Daarom doet de generator het enige redelijke: hem halen uit een plek waar hij nog nooit is geweest.

2019 het lek dat zelf al een opwarmertje van andere lekken was

In januari 2019 circuleerde een pakket dat beroemd werd als Collection #1. Hunt analyseerde het en telde wat erin zat: zo’n 773 miljoen unieke e-mailadressen en zo’n 21 miljoen unieke wachtwoorden in platte tekst, samengeraapt uit duizenden bronnen.

Het belangrijkste was niet de omvang. Het was waar het vandaan kwam: het was grotendeels opgewarmde kost uit eerdere lekken, al gekraakt en in een handzaam formaat gezet — al vond Hunt er ook materiaal in dat tot dan toe niet bij hem bekend was. Het product was niet de inbraak. Het was de inventaris. En zo’n inventaris heeft maar één toepassing.

Credential stuffing: jij wordt niet aangevallen

Niemand valt jóu aan. Dat is het deel dat het lastigst te verteren is.

Niemand gaat zitten nadenken over jouw account. Iemand pakt een combolist van honderden miljoenen regels, stopt die in een tool die ze afvuurt op het inlogformulier van een bank of een mailprovider, verdeelt de pogingen over veel IP-adressen om de blokkades niet te wekken, en wacht af. De overgrote meerderheid mislukt. Maakt niet uit: ze kosten vrijwel niets.

Dat is credential stuffing, en dat is niet raden. Dat is controleren. Het wachtwoord hebben ze al; het enige wat ze uitzoeken is waar je het nog meer hebt neergezet.

Je wachtwoord van dat ene forum was niet belangrijk. Dat forum ook niet. Belangrijk is dat dezelfde reeks tekens je mailbox opent, en je mailbox opent al het andere via “wachtwoord vergeten”. De erfzonde is niet dat het zwak was: het is dat het hetzelfde was. Een wachtwoord van dertig tekens, willekeurig en perfect, hergebruikt op twee sites, is precies zo goed als de slechtste van die twee. En jij bepaalt niet hoe de slechtste van die twee hasht.

Wat hieruit volgt

  • Het uitgelekte wachtwoord veranderen is niet genoeg als je het herhaald hebt. Het dringende is niet de site die in het nieuws kwam. Dat zijn de andere.
  • Eén wachtwoord per site, en eentje dat je met plezier vergeet. Als je al je wachtwoorden kunt onthouden, heb je er veel te weinig of zijn ze heel slecht.
  • De tweede factor breekt de ketting. Credential stuffing probeert e-mail:wachtwoord. Als dat niet genoeg is om binnen te komen, is de inventaris niets meer waard.

Je uitgelekte wachtwoord is niet in handen van een vijand. Het staat op een regel in een bestand, tussen honderden miljoenen andere, en wacht tot het iemand de moeite waard lijkt om het op nóg een site te proberen. En het enige wat bepaalt of dat lukt, heb jij jaren geleden beslist, toen je hetzelfde woord voor de tweede keer intypte.


Bronnen: het RockYou-lek (december 2009) en het latere gebruik van rockyou.txt als aanvalswoordenboek · Have I Been Pwned en Pwned Passwords, van Troy Hunt · NIST SP 800-63B, over het controleren van wachtwoorden tegen lijsten van gecompromitteerde waarden · de analyse van Troy Hunt over Collection #1 (januari 2019) en de cijfers die hij publiceerde · de definitie van credential stuffing van OWASP.

← Terug naar de blog