Etiketter:

Hur säkert är ditt lösenord?

Varje dag uppstår nya läckor av lösenord ute på Internet, vissa som inte kommer till känna. LinkedIns tidigare läcka från maj 2016 på 164 miljoner konton är ett bra exempel av många. Som tur är lagras sällan lösenorden i klartext hos webbsidorna men även det förekommer. Vad är det rimliga sättet att förhålla sig till dessa läckor och kännedomen om att det kommer fler?

Hur lagras lösenord på Internet?

I regel lagras lösenorden inte i klartext utan lagras via kryptografiska hash-funktioner. Notera att dessa hash-funktioner inte är en kryptering då dom inte kan dekrypteras. Det finns ingen nyckel. Även om du känner till den exakta metoden för hash-algoritmen så kan du inte backa bandet när du väl kört igenom din sträng genom den.

Exempel på kryptografiska hash-algoritmer är MD5, SHA1, SHA256, SHA512, NTLM. NTLM är den algoritm som används för att lagra lösenord i Windows nätverk.

Nedan följer ett exempel på orden password, password1 och password2 genom en SHA256 algoritm.

Input Output (SHA256)
password 5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8
password1 0B14D501A594442A01C6859541BCB3E8164D183D32937B851835442F69D5C94E
passWord A6F63A5FB10B3BBA180A79F2FC565B1DB2101040CE71EA80692D671857FE2117

Som du säkert lägger märke till så blir det med minsta förändring i tecken helt olika utgående värden. Men samma sträng genererar alltid samma utgående värde! Detta gör det väldigt praktiskt för lagring av lösenord utan att ha dom i klartext. Webbsidan du loggar in på behöver endast jämföra hashen av det lösenord du ange just nu med hashen webbsidan har lagrat i sin användar-databas. Om det är ett likamedtecken mellan dom två hasharna så får du din användarsession.

Hur får man då ut lösenord från en hash?

Grunden är att man testar tills att man genererar samma hash-värde. Detta är omöjligt för en människa… men inte för en dator. Det är också nästan alltid en fråga om vad man gör för antaganden kring hur lösenordet kan vara utformat.

Låt säga du har fått en tabell med användarnamn och lösenordet i hashat format och du nu vill veta vilket lösenord hash-värdet representera. Det är nu dags att kolla på olika tekniker man kan använda för att lyckas med detta.

Username Password (SHA256)
sven.svensson 3FA21E9B5F5D71162F9404AF96A5F01D5E18B92E4CAC077CE9DAF62027D43357
erik.eriksson A075D17F3D453073853F813838C15B8023B8C487038436354FE599C3942E1F95
hemligen.sven 3FA21E9B5F5D71162F9404AF96A5F01D5E18B92E4CAC077CE9DAF62027D43357

Bruteforce attack

Denna metod är oftast den mest tidsödande och används bara vid ett antagande om ett visst antal tecken och beroende på vilken datoprestanda man har att tillgå. Man beräknar helt enkelt alla möjliga hashvärden genom en viss teckenuppsättning och längd.

a, aa, aaa, aaa, aaaa, aaaaa, aaaaaa, aaaaaaa, aaaaaaaa…
tkdmaaab, tkdmaaac, tkdmaaad, tkdmaaae…

Man fortsätter tills att man genererat samma hashvärde och därmed vet vilken sträng som genererade det värdet. Det blir helt enkelt en fråga om tid och hastighet.

Antalet möjliga kombinationer att testa kan lätt bli astronomiska tal. Men hastigheten med en vanlig speldator i hemmet kan uppgå till tiotals miljarder försök i sekunden beroende på hash-algoritm. Detta gör att det bör vara helt uteslutet att använda lösenord på 9 tecken eller lägre.

Dictionary attack

På grund av alla lösenordsläckage har nu det kommit många listor på tidigare använda lösenord i klartext. En av dessa innehåller 64 miljoner tidigare använda lösenord. I kombinationer med dessa listor kan man exempelvis använda listor på namn och ordböcker i olika språk.

Genom att generera hash-värden från orden i en sådan lista så har man möjlighet att snabbt testa om någon av dom genererade matchar hashen du försöker knäcka. Antalet lösenordsförsök i sekunden är långsammare än ”bruteforce” men vi kan anta en hastighet på minst en miljard ord i sekunden.

Till detta använder man regler för att vända och vrida på varje ord man testar för att även få till varianter då någon byter ut tecken eller lägger till siffror i sitt lösenord. En av dessa regler ”dive.rule” som följer med verktyget Hashcat skapar 99000 varianter av ordet password.

Säkert1, Säkert2……. Säkert9485
sÄk3rt1, sÄk3rt2……. sÄk3rt9986

Ibland består lösenorden av kombinerade ord och till detta använder man vad som kallas ”combinator attack” där man kombinerar varje ord från olika eller samma ordlistor. Detta blir mycket tidsödande när antalet ord att kombinera ökar. Och ska man dessutom använda regler som ska vrida på varje ord så blir det ännu svårare.

Table-Lookup attack / Rainbow Table

Det finns stora grupper av människor som har som hobby att förberäkna hash-värden för olika algoritmer och skapa stora databaser där man kan göra uppslag på hash-värden. Dessa databaser blir snabbt väldigt stora och därför skapas dom i regel med en metod för kallas ”Rainbox Table” för att minska databasens storlek. Dessa databaser skapas främst för NTLM-hashar och angriper Windows-lösenord på upp till 10 tecken beroende på teckenuppsättning.

Vissa av hasharna skrivna i denna artikel kan du till exempel Googla och få vilken text dom representerar. Det finns även webbsidor som publicerar webbtjänster där du kan göra dessa uppslag.

Saltade hashar

Webbsidor som lagrar lösenorden rätt där ute nöjer sig dock inte med att bara köra lösenordet genom en hash-algoritm. Dom använder vad som kallas en ”salt” tillsammans med lösenordet genom hash-algoritmen för att undvika att man kan förgenerera tabeller för just deras hashar. Saltet kan exempelvis vara ett stort slumpat tal som lagras i tabellen med mitt användarnamn och lösenord. Vid lösenordsläckage läcker oftast även detta salt men det omöjliggör fortfarande användningen av förberäknande uppslagstabeller.

Hur ska jag då utforma mitt lösenord?

Förutom att ditt lösenord inte bör likna någon annans lösenord i hela världen så finns det några tips.

Aldrig använda samma lösenord

Då du aldrig med säkerhet vet hur ditt lösenord lagras om det någonsin blir publikt är det alltid säkrast att alltid använda olika lösenord. Då minskar du i förväg den skada som troligen kommer att ske.

Slumpa lösenordet till webb-shopen du sällan beställer ifrån och strunta i att spara det. Lita på lösenordsåterställningen.

Längd effektivare än komplexitet

Med lite matte visar sig det ganska snabbt vilken effekt teckenlängen har framför komplexitet. Varje extra tecken blir en till exponent. Dessutom är lösenordet oftast enklare och snabbare att skriva om det minskar i komplexitet.

Nedan följer ett exempel på användning av 68 möjliga tecken i ett lösenord för att visa effekten av längden på lösenordet. (Svenska stora och små bokstäver och siffor)

Längd Antalet möjliga kombinationer Tid med 40 miljarder försök i sekunden
6 98 867 482 624 2,47 sek
7 6722 988 818 432 168 sek
8 457163 239 653 376 3h 10 min
9 3,1E+16 Nästan 9 dygn
10 2,1E+18 ~ 612 dygn
11 1,4E+20 ~ 114 år
12 9,7E+21 ~ 7749 år
13 6,6E+23 ~ 0,5 miljoner år…
14 4,5E+25 ~ 35,8 miljoner år…
15 3,0E+27 ~ 2,4 miljarder år…

Kombinera flera ord

Följande kända tecknade serie poängterar något roligt med hur vi tidigare har lärt oss att utforma lösenorden:

hur du utformar ett säkert lösenord

Bildkälla: xkcd

 

Men denna serie tar faktiskt inte hänsyn till att tekniken att sätta ihop olika ord har förbättrats. Därför ska helst något av orden inte förekomma i samma ordlista som dom andra orden. Att felstava orden är också effektivt för att förhindra dessa tekniker. Specialtecken har givetvis god effekt. Välj udda ord. Kan du flera språk så kombinera ord från dessa för att stärka ditt lösenord.

Nedan följer ett räkneexempel på om du skulle sätta samman ord från dom hundratusen vanligaste orden. Detta exempel tar endast hänsyn till användning av gemener. Minsta avvikelse hade gjort försöken förgäves i detta exempel.

Antal ord sammansatta från 100000 Antalet möjliga kombinationer av ord Tid med 10 miljard försök i sekunden
2 10 000 000 000 1 sek
3 1E+15 27h
4 1E+20 317 år

Kom ihåg att knäcka lösenord bygger på antaganden om hur du utformat det. Du kan lätt lura dessa antaganden:

  • Använd Multifaktorautentisering (MFA) där du kan!

Idag erbjuder Microsoft, Google, Facebook, LinkedIn kostnadsfri MFA till privata konton.

  • Använd en lösenordshanterare med MFA

Det finns många olika tjänster och produkter och vi på Hi5 levererar lösningar med ManageEngine Password Manager Pro som fungerar som ett lösenordsvalv för hela företaget.

Lösenordspolicy för Windows-nätverk

För att nå krav teckenlängder över 14 tecken måste ni börja använda ”Fine-grained Password Policies” eller ”Password Settings Object (PSO)” istället för den klassiska lösenordspolicyn i Group Policys.

För att göra det lättare för användare så släpp kravet på komplexitet och visa dom hur enkelt det istället kan bli med sammansättning av ord. Detta blir enklare och bättre.

Att byta lösenord regelbundet är fortfarande relevant i Windows nätverk då NTLM-hashen kan användas för inloggning utan att knäcka den. Är den stulen så gäller den till nästa gång lösenordet byts. Men kom ihåg att minsta teckenändring i lösenordet ändrade hela hashen till oigenkännlig från den förra! Därför kanske det inte är så dum idé att tillåta användarna att kanske bara ändra en siffra mellan sin lösenordsbyten för att göra lösenordshanteringen lite enklare. Be dom istället att använda en stark grund i sitt Windows-lösenord och aldrig använda den grunden i lösenord till andra system eller tjänster.

Skribent

Image

Markus Ullin

Systemkonsult

Skicka epost