Wat weten websites over u?
U bepaalt welke informatie u doorgeeft aan de websites die u bezoekt. U moet de sites niet meer informatie geven dan ze nodig hebben om de door u gewenste dienst te leveren. Als u niet verwacht dat de sites iets bij u thuis afleveren, moet u waarschijnlijk niet uw adres geven alleen omdat de site u dat vraagt. Hetzelfde geldt voor uw telefoonnummer, uw volledige naam of zelfs uw e-mailadres. Hoe minder informatie u doorgeeft aan websites, hoe minder u verliest als iemand de informatie verkoopt of toegang krijgt tot uw account.
Wachtwoorden zijn meestal het eerste obstakel op de weg naar een aanval. In latere hoofdstukken zullen we andere elementen introduceren die ook kunnen voorkomen dat aanvallers toegang krijgen tot uw accounts. Deze aanpak van ‘diepgaande verdediging’ is een gangbare praktijk in cyberbeveiliging. Het betekent dat u meerdere lagen hebt die de activa beschermen die u wilt beschermen. Als één verdedigingslaag breekt, bijvoorbeeld uw wachtwoord, betekent dat niet dat de aanvallers vrije toegang hebben tot uw informatie.
Enumeratie-aanvallen
Enumeratie-aanvallen worden gebruikt door aanvallers om geldige gebruikersnamen aan te maken als eerste stap om iemands logingegevens te verkrijgen. Dit soort aanvallen wordt vaak gebruikt bij het inloggen van gebruikers en bij 'wachtwoord vergeten'-functies. Zo kan een site in sommige gevallen onbedoeld informatie over zijn leden lekken door bij inlogpogingen verschillende berichten te geven op basis van het al dan niet bestaan van de gebruikersnaam of het e-mailadres.
In de meeste gevallen is deze informatie op zich niet schadelijk. Als iemand echter het bestaan van een account bij een dating- of escortservice kan verifiëren, kan die informatie tegen de betrokkenen worden gebruikt.
Enumeratie-aanvallen kunnen ook worden gebruikt om phishing-aanvallen beter te richten op individuen, en ze worden ook gebruikt om brute force-aanvallen gemakkelijker te maken door het aantal mogelijke doelwitten te verminderen. De definities van phishing en brute force komen zo dadelijk ter sprake.
Enumeratie-aanvallen zijn niet beperkt tot aanmeldingsformulieren. Ze kunnen ook worden gebruikt voor het resetten van wachtwoorden of het aanmaken van accounts. Zo beschermt het aanmaken van een account meestal tegen het aanmaken van dubbele accounts en laat de gebruiker die een duplicaat wil maken, weten dat er al een account bestaat met de opgegeven e-mail of gebruikersnaam.
De volgende stap in het verkrijgen van toegang tot logingegevens is het kennen van het wachtwoord. Daarover gaan we nu meer leren.
Wachtwoorden
De meeste websites die u gebruikt, identificeren u aan de hand van een combinatie van gebruikersnaam en wachtwoord. Omdat we als online gebruikers tientallen of zelfs honderden verschillende diensten moeten gebruiken, proberen we over het algemeen goed te onthouden wachtwoorden te maken. Het probleem met gemakkelijk te onthouden wachtwoorden is dat ze meestal ook gemakkelijk te raden zijn voor aanvallers. Aangezien de meest voorkomende wachtwoorden in 2020 123456, 123456789, qwerty en wachtwoord waren, is het niet moeilijk om een enorm aantal accounts te hacken door deze wachtwoorden gewoon uit te proberen met willekeurige e-mailadressen.
De meest gebruikte wachtwoorden van 2020
123456
123456789
qwerty
password
1234567
12345678
12345
iloveyou
111111
123123
De meest gebruikte voorschriften voor het instellen van wachtwoorden waren in de loop der jaren niet al te best en leerden mensen aan hoe ze slechte wachtwoorden moesten maken. Door deze slechte aanbevelingen hebben mensen wachtwoorden moeten maken die moeilijk te onthouden zijn, maar voor computers gemakkelijk te kraken.
De webcomic XKCD vat wachtwoordbeveiliging heel goed samen..
Een goed wachtwoord hoeft niet per se obscure symbolen te bevatten om veilig te zijn. Over het algemeen geldt dat hoe langer het wachtwoord is, hoe veiliger het is. Vereisten die u verplichten om symbolen, kleine letters, hoofdletters en cijfers in wachtwoorden op te nemen, houden er meestal geen rekening mee hoe moeilijk de wachtwoorden eigenlijk te kraken zijn. De eisen maken de keyspace (het aantal mogelijke wachtwoordcombinaties van een bepaalde lengte) groter, hoewel hetzelfde zou kunnen worden bereikt door een langer wachtwoord te eisen.
Laten we eens een voorbeeld bekijken:
Als de mogelijke tekenset die u kunt gebruiken voor een wachtwoord bestaat uit kleine letters in het alfabet, 26 tekens dus, en de lengte van het wachtwoord is 6 willekeurige tekens, dan zou de keyspace worden berekend als:
266= 308,915,776 mogelijke wachtwoorden.
Als het wachtwoord 8 willekeurige tekens lang is, zou de keyspace zijn:
268= 208,827,064,576 mogelijke wachtwoorden.
Zoals u kunt zien, is de keyspace automatisch groter als de lengte van het wachtwoord slechts 2 letters langer is. Laten we een ander voorbeeld nemen van extra tekens en hoofdletters toevoegen aan de mix, waardoor het aantal bruikbare tekens voor het wachtwoord verdubbelt.
526= 19,770,609,664 mogelijke wachtwoorden.
U ziet meteen dat de keyspace een stuk groter is dan waar we mee begonnen. Het komt echter niet eens in de buurt van de keyspace voor het langere wachtwoord met alleen kleine letters. Als we nu eens wat algemene symbolen toevoegen, te weten !, ', #, ¤, %, &, /, (, ) en =. Dit betekent dat het aantal beschikbare karakters nu 62 is.
626= 56,800,235,584 mogelijke wachtwoorden.
Met de toevoeging van de 10 extra karakters in de toegestane karakterset, hebben we de beschikbare keyspace bijna verviervoudigd. Tegelijkertijd hebben we het wachtwoord veel moeilijker te onthouden gemaakt. De keyspace is nog steeds een stuk kleiner dan met het voorbeeldwachtwoord van 8 karakters.
Een zuiver willekeurig wachtwoord verslaat ook andere soorten aanvallen, zoals woordenboekaanvallen. Woordenboekaanvallen maken gebruik van het feit dat gebruikers proberen memorabele wachtwoorden te maken door woorden of namen uit het woordenboek te gebruiken, of variaties daarop. De tweede editie van het 20-delige Oxford Engels Woordenboek bevat vermeldingen voor 171.476 woorden, dus als u een wachtwoord gebruikt met slechts één woord, kunt u het zien als het gebruik van een keyspace van 170.000 woorden. Vaak worden deze woorden niet gebruikt zoals ze zijn, maar worden ze gewijzigd op een manier die hun onthoudbaarheid behoudt.
Een veelgebruikte manier om woorden uit het woordenboek te verdoezelen is door substituties te gebruiken of een getal aan het woord toe te voegen om een wachtwoord te creëren. Helaas worden deze wijzigingen over het algemeen goed begrepen en ondervindt een computer geen enkele moeite om alle verwachte variaties uit te proberen. Eenvoudige vervangingen zoals het vervangen van de letter 'o' door het cijfer '0' maken het wachtwoord alleen maar moeilijker te onthouden terwijl het voor de computer er nauwelijks meer werk is. Deze eenvoudige vervangingen maken de keyspace niet wezenlijk groter. Ook het toevoegen van een nummer of het huidige jaar aan het begin of het eind van het woord doet dat niet. Software om wachtwoorden te kraken en de mensen die ze maken, kennen al deze trucs en houden er rekening mee.
Entropie
De sterkte van een wachtwoord wordt meestal niet alleen gemeten aan de hand van de ruimte van mogelijke sleutels. Entropie is een term die ook in de cyberbeveiliging wordt gebruikt: het is een manier om de veronderstelde moeilijkheidsgraad van het echte kraken van het wachtwoord te meten. Entropie wordt berekend door de wiskundige functie 'log2' van de keyspace te nemen (maakt u zich geen zorgen over de wiskunde, u hoeft dit niet te doen - maar als u het echt wilt, kunt u de formule in de meeste zoekmachines typen om het op te lossen. Probeer bijvoorbeeld eens ‘log2(26^8)’ in www.google.com).
Dus, wat betekent entropie in de praktijk? Met behulp van de entropieberekening kan de sterkte van het wachtwoord worden gemeten met deze grafiek:
< 28 bits = zeer zwak; kan familieleden buiten houden
28-35 bits = zwak; kan de meeste mensen buiten houden, vaak genoeg om met een wachtwoord in te loggen op de desktop
36-59 bits = redelijk; redelijk veilige wachtwoorden voor netwerk- en bedrijfswachtwoorden
60-127 bits = sterk; kan goed zijn voor het beschermen van financiële informatie
128+ bits = zeer sterk; vaak te veel van het goede
In het bovenstaande voorbeeld komt de entropie van de 8 willekeurige tekens (37 bits) nauwelijks in de redelijke categorie. Een wachtwoord van 15 tekens (70 bits) zou sterk zijn, maar nog steeds niet in de categorie zeer sterk. De exponentiële aard van deze berekeningen betekent dat het langer maken van een wachtwoord de moeilijkheidsgraad om het te kraken enorm kan beïnvloeden.
Entropie is weliswaar nuttig, maar geen alleszeggende maatstaf. Een wachtwoord van slechts 8 tekens kan echter nog steeds als meestal onveilig worden beschouwd - we zullen in het onderstaande gedeelte bespreken waarom.
Hoe wachtwoorden gekraakt worden
Om te begrijpen hoe wachtwoorden worden gekraakt, moeten we eerst begrijpen hoe ze worden beschermd.
Wachtwoorden worden meestal opgeslagen in een database, 'versleuteld' met iets dat een eenrichtingshash-algoritme heet. Een hash-algoritme is een versleuteling die gebruikt wordt om uw wachtwoord in platte tekst om te zetten in gecodeerde tekst. Het werkt slechts in één richting. Een tekst die gehasht is met een veilig hash-algoritme kan niet worden teruggedraaid, ook al is het algoritme bekend. De resulterende uitvoer van uw wachtwoord dat door het hash-algoritme wordt verwerkt, staat bekend als een hash. Een hash is een reeks tekens bestaande uit letters en cijfers, die de gecodeerde versie van de oorspronkelijke invoertekst voorstelt.
Laten we eens kijken naar een voorbeeld van een bekend, en nu als onveilig beschouwd, hash-algoritme: MD5. MD5. Als u met MD5 de tekst 'wachtwoord' zou hashen, zou u een gecodeerde uitvoer hash krijgen van '5f4dcc3b5aa765d61d8327deb882cf99'.
Een kleine verandering in de originele tekst zal een totaal andere gehashte waarde creëren. Dit is een andere waardevolle functie van een hash. U kunt niet schatten wat de hash zal zijn op basis van de invoer.
Bijvoorbeeld, een MD5 hash voor 'wachtwoore' is 'a826176c6495c5116189db91770e20ce', wat niet lijkt op de hash voor 'password'.
Wanneer een gebruiker inlogt, wordt zijn wachtwoord in klare tekst gehasht en de resulterende hash wordt vergeleken met de hashwaarde (gecodeerde versie van het gebruikerswachtwoord) die in de database is opgeslagen. Als ze overeenkomen, mag de gebruiker inloggen.
Hoe kunnen wachtwoorden worden gehackt met al deze bescherming: wachtwoorden in platte tekst die zijn versluierd tot onvoorspelbare code, via een onomkeerbaar algoritme? Wat maakt oudere hash-algoritmen zoals MD5 kwetsbaar?
Salting en hashing
Betekent dit dat hashing voor de meeste wachtwoorden overbodig is? Zeker niet! Het goede nieuws is dat programmeurs verschillende slimme technieken kunnen gebruiken om het moeilijk te maken de hash van een wachtwoord te vinden. Een hashfunctie wordt vaak vele malen toegepast om de tijd die nodig is om een wachtwoord te controleren te verlengen en zo brute force-aanvallen te vertragen.
Een andere manier waarop programmeurs de wachtwoorden van hun gebruikers beschermen is door een techniek te gebruiken die 'salting' wordt genoemd. Hierbij wordt een speciale waarde, 'salt’ (‘zout’) aan de zuivere tekst toegevoegd nadat de gebruiker zijn wachtwoord heeft ingevoerd, maar voordat het hashen wordt toegepast, om het gebruik van een vooraf berekende lijst van hashes (rainbow tables) te voorkomen. Wanneer een salt-waarde wordt toegepast, maakt ze dit rainbow table-bestand onbruikbaar en is het een eenvoudige manier om dit soort aanvallen onuitvoerbaar te maken.
Als we bijvoorbeeld het MD5 hash-algoritme gebruiken en een gerandomiseerd salt 'xhsr2d' toevoegen aan de zuivere tekst 'wachtwoord', dan krijgen we MD5('xhsr2dpassword'), dat is 'ebf20a6c99eccaefa0bf4d88a5bd3456'. Dit is een totaal andere uitvoer dan de originele MD5-geproduceerde hash van 'wachtwoord' hierboven, die iedere hacker kan vinden in een rainbow table op het internet. Door het wachtwoord te salten, zelfs als we een rainbow table hadden met hashes voor elk mogelijk wachtwoord met kleine letters en een maximale lengte van 10, zouden we de overeenkomst met de hash niet kunnen vinden en zouden we het gebruik van vooraf berekende hashes teniet hebben gedaan.
Wat salting in de praktijk betekent, is dat aanvallers elk wachtwoord met brute force moeten aanvallen om met succes hun gecodeerde hashes in een database te kraken.
Het kraken van wachtwoorden met brute force betekent dat de kracht van computers wordt gebruikt om programmatisch verschillende hashes te proberen totdat het wachtwoord met een passende hashwaarde is gevonden. Hashfuncties berusten op de moeilijkheidsgraad van het aanmaken van twee verschillende berichten die dezelfde hashwaarde opleveren. Dit noemen we ‘collision’. Als een hashfunctie kan worden gedwongen om dezelfde waarden te genereren voor verschillende invoergegevens, wordt hij als gebroken beschouwd.
U, als gebruiker van een online dienst, kunt er meestal niet zeker van zijn dat de ontwikkelaars de mogelijke preventieve maatregelen toepassen. Dit betekent dat u ervan uit moet gaan dat rainbow tables tegen uw wachtwoorden kunnen worden gebruikt. In de praktijk betekent dit dat u de voorkeur moet geven aan langere wachtwoorden, omdat deze het gebruik van de meeste rainbow tables onpraktisch maken. Denk maar aan het voorbeeld hierboven- door 7 karakters aan uw wachtwoord toe te voegen, kunt u het leven van een hacker een stuk moeilijker maken!