Programmeringsbrøler gør det let at knække kodeord fra Ashley Madison

Dating-siden Ashley Madison brugte stærk kryptering til lagring af kodeord, men 15 millioner kodeord blev også gemt med den usikre MD5-hashfunktion.

Det var ellers lyspunktet i hackerangrebet mod den kontroversielle dating-side Ashley Madison, at udviklerne havde anvendt en stærk bcrypt-kryptering, som i praksis burde gøre det urealistisk at knække brugernes kodeord ved hjælp af brute force-teknikker. Men så kom den forældede MD5-hashfunktion på banen, skriver Ars Technica.

Hackerne fik fat i 100 gigabyte data fra Ashley Madison, heriblandt de bcrypt-krypterede kodeord for 36 millioner brugere i databasen. Den anvendte variant bcrypt-12 regnes for at være særdeles robust, fordi det tager meget lang tid at køre et gæt igennem funktionen.

Men i samme database lå endnu en værdi for cirka 15 millioner af brugerne. Den viste sig af være en MD5-hashværdi, som var udregnet ud fra kodeordet i klartekst og brugernavnet.

Det er uklart, hvad denne ekstra værdi er blevet brugt til, men navnet $loginkey kunne antyde, at den blev brugt til en hurtig login for brugerne.

Problemet er, at MD5-hashfunktionen har været regnet for usikker siden årtusindskiftet og kan rutinemæssigt brydes med brute force-angreb, hvor man forsøger sig med forskellige kombinationer af kodeord.

MD5 havde ikke nødvendigvis været et problem, hvis udviklerne hos Ashley Madison ikke havde begået en fejl. MD5-værdien udregnes på to måder i koden. I begge tilfælde sættes brugernavnet sammen med kodeordet i klartekst adskilt af to koloner. I den ene variant tilføjet et 'salt' i form af en ekstra tekststreng. Den sammensatte tekststreng køres gennem MD5-algoritmen og giver en hashværdi.

Når MD5-værdien skal knækkes, så er outputtet kendt, brugernavnet er kendt, og saltet er kendt. Derfor skal man blot tilføje et gæt på kodeordet, køre det gennem MD5-funktionen og sammenligne med det kendte output. Hvis de to er ens, så har man gættet kodeordet.

I dette tilfælde havde udviklerne hos Ashley Madison også ændret alle bogstaver til små bogstaver, inden det kørte gennem MD5-algoritmen, så i de tilfælde, hvor kodeordet indeholder ét eller flere store tegn, skal man forsøge sig med varianter med store og små bogstaver for at gætte det endelige kodeord ved at køre det gennem bcrypt-funktionen.

Ars Technica påpeger, at Ashley Madison kunne have undgået problemet, hvis udviklerne først havde kørt kodeordet gennem bcrypt og anvendt resultatet sammen med brugernavnet i MD5-funktionen.

I så fald havde et brute force-angreb mod MD5-værdien blot resulteret i output-værdien fra bcrypt, hvorefter hackeren ville være tilbage til udgangspunktet med at skulle knække bcrypt.

Svagheden i Ashley Madisons design er afdækket af en gruppe, der kalder sig CynoSure Prime. De har foreløbig knækket 11 millioner ud af de 15 millioner kodeord, som er lagret med MD5. De har dog valgt ikke at offentliggøre kodeordene, men kun at fortælle om deres metode.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (16)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Thomas Søndergaard

Problemet er, at MD5-hashfunktionen har været regnet for usikker siden årtusindskiftet og kan rutinemæssigt brydes med brute force-angreb, hvor man forsøger sig med forskellige kombinationer af kodeord.

Nej, problemet er værre endnu. Lige som forfatteren af artiklen her så vidste udviklerne hos Ashley Madison ikke at MD5 algoritmen er aldeles uegnet til password hashing. En password hashing algoritme skal være beregningsmæssig dyr for at gøre brute force angreb uattraktive og det har aldrig været en parameter for MD5 algoritmens design - tværtimod.

MD5 må ikke blandes sammen med md5crypt, som er skrevet af vores egen PHK. md5crypt er beregnet til password hashing, men er ikke længere beregningstung nok og blev EOL'et for nogle år siden.

  • 5
  • 0
Thue Kristensen

Help præcist så skal man til at gemme passwords bruge en key stretching algoritme, og ikke en hash-funktion. Nogle key streching algoritmer er hash-funktioner, men ikke alle hash-funktioner er key stretching-algoritmer.

md5 er et eksempel på en hash-funktion som ikke er en key stretching-algoritme. Problemet ville have været helt det samme hvis sha256 var blevet brugt i stedet for md5.

  • 1
  • 0
Bent Jensen

Når i 2 ved så meget om det, kan i så forklare hvad man skal gøre, eller henvise til det., Så os uviden tåber der kun nogen sjælden sætter os ned og og laver lidt opsætning af server og andet. Og måske der for ikke følger så meget med,. Ved hvad vi skal gøre og ikke gøre ?

  • 2
  • 0
Niels Dybdahl

Er det virkeligt let at knække MD5? Er der nogen som tør påtage sig at knække en MD5 værdi, hvis jeg oplyser et brugernavn og en saltværdi? Eller er det for svært?
Her er en MD5 værdi: d8a57f9ec00946c10ef7009bb61358b8
Brugernavnet er nielsdybdahl og saltet er %&/tt. Hvad er passwordet?

  • 1
  • 0
Thue Kristensen

Er det virkeligt let at knække MD5? Er der nogen som tør påtage sig at knække en MD5 værdi, hvis jeg oplyser et brugernavn og en saltværdi? Eller er det for svært?

Man kan ikke endnu i rimelig tid finde preimage for vilkårlige MD5-summer. Så hvis dit password er en fuldstændigt tilfældigt valgt streng, så kan man stadig ikke finde preimage for den.

Men passwords er ikke tilfældigt udvalgte strenge. De hackerne har gjort er at de har en liste på (lad os sige) den million mest almindelige passwords, og har så testet MD5-summerne for dem for hver password de vil cracke. Siden MD5 er designet til at være utrolig hurtig at udregne, da det ikke er en key stretching algoritme, så kan man med en GPU checke 200 millioner hashes per sekund.

  • 1
  • 0
Niels Dybdahl

Der er ellers kun omkring 42 bit information i det password jeg har valgt. Så det er kun 4 billioner kombinationer der skal testes og som "eksperterne" ovenfor påpeger er en MD5 værdi billig at beregne.
Nå men for at gøre det rigtigt let, så kan jeg fortælle at passwordet er navnet på en dansk by, med et par bogstaver byttet om, et par bogstaver erstattet af et ciffer og et specialtegn og så et helt uvedkommende bogstav. Så kan det vist ikke blive lettere.

  • 0
  • 0
Niels Dybdahl

Man kan ikke endnu i rimelig tid finde preimage for vilkårlige MD5-summer. Så hvis dit password er en fuldstændigt tilfældigt valgt streng, så kan man stadig ikke finde preimage for den.

Det er jo bla derfor man kombinerer det med et tilfældigt valgt salt. Det fremgår dog ikke af artiklen hvorfor saltet var kendt af hackerne. Normalt er saltet ukendt for udenforstående og det gør det væsentligt sværere at knække MD5.

  • 0
  • 0
Thue Kristensen

Det fremgår dog ikke af artiklen hvorfor saltet var kendt af hackerne. Normalt er saltet ukendt for udenforstående og det gør det væsentligt sværere at knække MD5.

Saltet er som regel gemt i databasen sammen med passwordet. Jeg går ud fra at det også var tilfældet for Ashley Madison. Ideen med et salt er ikke at det er hemmeligt.

Se også kommentaren om pepper her: https://security.stackexchange.com/questions/17421/how-to-store-salt . Men kildekoden blev jo også lækket, så et eventuelt pepper ville også være blevet lækket.

  • 1
  • 0
Geo Jensen

Her rammer du meget præcist, Niels. Jeg har selv tænkt samme tanke. Personligt tror jeg at "man" vil have os til at tro på at der bruges brute force, når det i virkeligheden bare er noget så simpelt som en key-logger. Der forgår en masse astroturfing omkring IT-sikkerhed, netop for at skjule deres faktiske metoder. Der lytter, med garanti, en eller flere astroturfere med på denne tråd, så jeg ser frem til er svar på spørgsmålet, hvad er der rigtige PASSWORD?

  • 1
  • 0
Niklas Hegnelt

Hej Niels.

Hvis man ikke kender rækkefølgen af username, salt og password, så bliver brute force tiden noget længere (faktor 6), da der, som du påpeger, er 6 forskellige permutationer.
Det bliver det selvfølgelig ikke umuligt af, men i det konkrete tilfælde er rækkefølgen jo velkendt, så det ville helt klart spare lidt tid, hvis du frigav denne information ;-).

  • 0
  • 0
Anders Palm

Der er ellers kun omkring 42 bit information i det password jeg har valgt

Hej Niels

Hvordan kommer du frem til det? Dit password består vel af et helt antal bytes?

Går vi ud fra at du mener at tallene kun behøver repræsenteres ved deres numeriske værdi kan vi selvfølgelig klare os med mindre end 1 byte for at repræsentere dem, men lad os forvente at du har omkring 5-7 characters i dit password.

5 charaters med store/små bogstaver, tal og en begrænset række tegn kan i dette tilfælde bruteforces (gennemsøgning af hele løsningsrummet) på omkring 5 minutter med en pæn CPU alene. 7 characters: omkring 20 dage.

I og med at vi ikke har fået rækkefølgen (der ellers var givet i artiklen), skal de ovennævnte estimater som det rigtig er givet tidligere ganges med 6.

Men husk at en af pointerne i artiklen netop var at der var en fast struktur, hvis vi antager at vi ikke kunne vide at dit brugernavn også indgik, skulle vi ud og løse et rum på 20+ karakterer, og så er vi ude i universets levetid-målestok

  • 1
  • 0
Log ind eller Opret konto for at kommentere