Derfor kan gamer-pc’er knække dårligt opbevarede kodeord som pindebrænde

Kraften i moderne grafikkort gør det til en leg at gætte kodeord – hvis de ikke er opbevaret ordentligt.

Hvis dit kodeord er ‘kodeord123’, så bør du nok udskifte det, da det er for let at gætte for en hacker.

Men ét er at gætte kodeord på en hjemmeside – her er hackeren trods alt begrænset i antallet af forsøg og ikke mindst af svartiden efter et gæt.

Noget helt andet er, hvis en hacker får direkte adgang til den bagvedliggende database, hvor alle brugeres kodeord ligger opbevaret.

Her er der i udgangspunktet få begrænsninger i forhold til svartider og antallet af forsøg – og grafikkortet i en moderne gamer-pc kan have rigeligt med kræfter til i kombination med specialiseret software at præstere alle de gæt, der skal til.

»Det er efterhånden ved at være 10 år siden, man begyndte at bruge grafikkort til tunge beregninger. Nu er det blevet relativt stort,« forklarer professor Brian Vinter fra Niels Bohr Institutet, hvor han blandt andet forsker i supercomputere og multikerne-arkitekturer.

Og med den slags værktøjer på hylderne i enhver computerbutik er der for alvor noget på spil, når hackere får adgang til databaser med kodeord – som det for eksempel kom frem i december 2016, da internetvirksomheden Yahoo meddelte, at den havde opdaget et datalæk af over en milliard brugerkonti, som havde fundet sted i forbindelse med et hackerangreb tilbage i august 2013.

Yahoo havde nemlig opbevaret en del brugeres kodeord på en måde, som gør det muligt for hackere med det rigtige værktøj at finde frem til brugeres kodeord.

Brute force

Der er flere måder at knække kodeord på. En af dem er at forsøge med alle tænkelige kombinationer af tegn, en teknik, der kaldes brute force.

Denne teknik kan anvendes i kombination med et ordbogsangreb, hvor en liste med ord bliver afprøvet og forsøgt kombineret med eksempelvis en talrække. For eksempel kodeord1, kodeord2 og så fremdeles.

Men for at forstå, hvad kodeordsknækning har med datalæk og grafikkort at gøre, skal vi lige en tur omkring, hvordan kodeord kan være opbevaret i en database bag et website.

I forbindelse med offentliggørelsen af datalækket meddelte Yahoo, at de stjålne brugeroplysninger ‘kan have inkluderet’ navne, mail-adresser, telefonnumre, fødselsdatoer og – mest relevant for denne historie – hashede kodeord i MD5-format.

Hashede vil sige, at kodeordet – vi kan tage ‘giraf1’ som eksempel – har været kørt gennem en algoritme kaldet en kryptografisk hashfunktion. Sådan en funktion bevirker, at der ikke står ‘giraf1’ i Yahoos bagvedliggende systemer, men eksempelvis ‘965f93806ce72bed00589b1b5667b1f6’. Funktionen virker i udgangspunktet kun den ene vej. Altså kan ‘965f93806ce72bed00589b1b5667b1f6’ via funktionen ikke tilbageføres til ‘giraf1’.

Hver gang brugeren logger ind, bliver det indtastede kodeord kørt gennem hash-algoritmen. Og hvis ellers det rigtige kodeord bliver indtastet, så matcher den resulterende hashværdi den allerede lagrede værdi i databasen, hvorefter brugeren får adgang.

Funktion med svagheder

MD5 er navnet på en specifik kryptografisk hash-funktion af ældre dato. Ud over at indeholde flere kendte sikkerhedsmæssige svagheder så har MD5 samme egenskab som flere andre kryptografiske hashfunktioner: Algoritmen er hurtig.

Men dermed er det også relativt hurtigt for en angriber at proppe alle tænkelige værdier ind i algoritmen, eksempelvis ‘giraf1’, for så at se, om outputtet matcher en af de lagrede hash-værdier i oplysningerne fra et datalæk. Altså et brute force-angreb.

Og det er her, den særlige arkitektur i processorerne på grafikkort kommer ind i billedet. Disse processorer, kaldet GPU’er (Graphics Processing Unit), adskiller sig nemlig fra den almindelige CPU (Central Processing Unit), der også befinder sig i en computer.

Brian Vinter fortæller, at processoren på et grafikkort kan indeholde op til 4.000 kerner. Til sammenligning indeholder CPU’en i en almindelig computer eksempelvis fire kerner.

»Det vil sige, at den i princippet kan lave 4.000 beregninger ad gangen. Kernerne kan regne på forskellige tal, men ellers skal de gøre præcis det samme,« siger han.

I den forbindelse er der forskel på, hvad de enkelte transistorer på den fysiske hardware foretager sig i henholdsvis en GPU og en CPU.

»Næsten alle transistorer på en almindelig CPU regner på, hvad der skal ske næste gang, hvilke data der blev læst sidst, og så videre. Altså en hel masse bogføring, hvor selve beregningen måske kun udgør 1 pct. af CPU’en. På grafikkortet bliver de fleste transistorer brugt til faktisk at regne med,« fortæller Brian Vinter.

GPU-opbygningen er velegnet til at tegne eksempelvis et 3D-billede i et computerspil, hvor den samme beregning skal gentages mange gange i forhold til forskellige input-værdier. På samme vis kan GPU’en effektivt knække kodeord, fordi det er den samme beregning – eksempelvis MD5-funktionen – der skal foretages på forskellige input i form af kodeordsgæt.

Simplificeret fortalt: ‘giraf2’? Nej. ‘giraf9’? Nej. ‘giraf1’? Ja!

GPU’en kan så blot foretage mange gæt i sekundet.

Andre algoritmer er bedre

Brian Vinter påpeger, at det er muligt at lagre sine kodeord, så de ikke umiddelbart kan brute forces.

»Har man et virkelig følsomt system med få brugere og få logins, så kan man med fordel bruge en decideret krypteringsmodel i stedet,« siger han.

Sikrere algoritmer end MD5 kræver flere CPU-ressourcer, men det kan til gengæld også gøre det så langsomt for en angriber at forsøge at knække et kodeord, at det i praksis ikke lader sig gøre.

Yahoo har i øvrigt oplyst, at virksomheden i tiden omkring hackerangrebet i august 2013, der menes at have resulteret i datalækket, var lige ved at opgradere fra MD5 til den sikrere BCrypt-algoritme i forhold til lagring af kodeord.

Denne artikel stammer fra avisen Ingeniøren, fredag.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (5)
Daniel Gertsen

Hvordan mon en salt påvirker dette?
Så er det jo ikke længere en "vanilla" MD5 hashing der er tale om.

Eksempelvis en salt der sætter ordet "salt_3000_" foran password ved hashingen.
Kodeordet "giraf1" vil normalt MD5 hashes til "965f93806ce72bed00589b1b5667b1f6"
Men "salt_3000_giraf1" hashes til "a155981be7f22d80d9d39325c8463ee4" - altså ikke det samme.

Men det er kun serveren der ved hvad salt'en er.
Dvs. brugeren indtaster stadig bare "giraf1" i password feltet, så tilføjer serveren selv salt'en til den indtastede værdi inden hash-værdien genereres og tjekkes mod hash-værdien i databasen.

Eller har jeg misforstået situationen?

Log ind eller Opret konto for at kommentere
Pressemeddelelser

Welcome to the Cloud Integration Enablement Day (Bring your own laptop)

On this track, we will give you the chance to become a "Cloud First" data integration specialist.
15. nov 2017

Silicom i Søborg har fået stærk vind i sejlene…

Silicom Denmark arbejder med cutting-edge teknologier og er helt fremme hvad angår FPGA teknologien, som har eksisteret i over 20 år.
22. sep 2017

Conference: How AI and Machine Learning can accelerate your business growth

Can Artificial Intelligence (AI) and Machine Learning bring actual value to your business? Will it supercharge growth? How do other businesses leverage AI and Machine Learning?
13. sep 2017