Tjek selv styrken af dine kodeord med Hashcat

Hashcat er et open source-program, der med eksempelvis GPU-kraft kan udstille blandt andet svage kodeord og MD5.

Hashcat er navnet på et stykke alsidigt open source-software, der med nærmest foruroligende lethed kan knække dårligt opbevarede kodeord samt afsløre kodeord, der ikke er stærke nok.

Som bekendt skal kodeord helst ikke lagres i klartekst, hvorfor de ofte er blevet kørt gennem en eller anden form for kryptografisk hash-funktion. Herefter kan kodeordet stadig verificeres ved login ved at køre det gennem samme funktion, men kodeordet kan ikke længere uden videre tilbageføres til deres klartekst-form.

Hashcat bliver markedsført som værende til 'password recovery'. Men programmet kan naturligvis også bruges af hackere til knække nappede kodeords-data med, ligesom HashCat kan tjekke styrken på kodeord, og den måde disse bliver opbevarede på.

Det vil i denne sammenhæng sige at undgå korte kodeord, kodeord der optræder i en ordliste og ikke mindst kodeord, der er opbevarede via - til dette formål - håbløse algoritmer som MD5. Og i takt med at hardwaren i gamer grafikkort bliver kraftigere, er kravene til styrken af både kodeord og algoritmer hen over årene gradvist skruet i vejret.

Følgende eksempler giver måske en idé om, hvorfor dårlige algoritmer og svage kodeord ikke er godt i forhold til at begrænse konsekvenserne af et datalæk eller truslen fra insider-hacking.

For en god ordens skyld, skal det siges, at eksemplerne er ganske basale, og Hashcat kan langt mere, end det her demonstreres.

Simpel kodeords-knækning eksemplificeret

Hashcat er tilgængelig fra hashcat.net som både binære- og kildekode-filer.

På et Ubuntu-system med et - i denne sammenhæng - ikke videre prangende Nvidia GTX 970-grafikkort med 4 GB RAM, kan Hashcat anvendes som følger:

Download programmet og pak det ud med 7z.

7z x hashcat-3.30.7z

Mangler du en 7z-udpakker, kan en sådan installeres med:

sudo apt install p7zip-full

Fra mappen /hashcat-3.30 er programmet klar til at køre med diverse parametre. På et 64-bit linux-system er det hashcat64.bin, der skal køres. I samme mappe ligger også tilsvarende exe-filer til Windows.

Til test-formål tager vi afsæt i følgende kombination af kodeord og MD5-hashværdier:

kanin1:ad708ddd827fdf3695db9fae6a334f0b
sirene4:23aee64c56a40cc4710d5eeb531c33e9
pingvin2:86944c972cce0b04b310ab3bc7926f7f
giraf1:965f93806ce72bed00589b1b5667b1f6
tekande2:156614d01df999fcbb26167eeaed93a6

MD5 er usikker og skal generelt ikke bruges til at skjule de oprindelige kodeord med, desuden er ovenstående kodeord i sig selv usikre. Selvom der er er tale om svage kodeord, så er det nok ikke helt urealistisk, at flere brugere kan finde på at anvende kodeord i stil med ovenstående.

Uden iøvrigt at drage nogen sammenligning til sikkerheden i NemID, så overholder ovenstående kodeord i udgangspunktet kravene til NemID-kodeord, der blandt andet skal være på mellem 6 og 40 tegn og skal indeholde både bogstaver og tal. Krav til kodeord spiller en rolle i forhold til konfigureringen af Hashcat. Det vender vi tilbage til om lidt.

En af de parametre, som Hashcat tager som input, er typen af hash-algoritme, programmet skal tygge på. Her ved vi, der er tale om MD5-kodeord.

Vi laver en separat fil med hash-værdierne alene kaldet md5hash.txt, som kan repræsentere et udsnit af det datasæt, en hacker får fat i i forbindelse med et angreb.

Af listen på hashcat.net over understøttede algoritmer - og det er en del - fremgår det, at usaltet MD5 kaldes med -m 0.

Derudover fortæller vi Hashcat, at vi i dette tilfælde gerne vil udføre et brute force-angreb, altså teste alle tænkelige kombinationer (med nogle forbehold) op mod MD5-algoritmen. Det foregår ved at sætte -a 3.

For at snævre feltet af muligheder lidt ind, så bruger vi nogle forudsætninger i forhold til, hvordan kodeordene nok ser ud. Ofte vil der som bekendt være krav til, hvordan kodeord skal se ud. Tal, bogstaver, store bogstaver, specialtegn etc.

Hashcat har i den forbindelse adskillige og alsidige muligheder for at definere regler, så krav til udformningen af kodeord kan udnyttes i forbindelse med et angreb.

Med afsæt i reglerne for NemID-kodeord, så ved vi, at kodeordet er på minimum seks tegn.

Følgende parametre fortæller Hashcat, at der skal forsøges at gætte kodeord på minimum seks tegn og opefter.

--increment-min 6 --increment

Vi ved også, at der skal være et tal involveret. Det fremgår desuden på NemID-siden med kodeordsregler, at der ikke skeles til, om der bliver brugt store eller små bogstaver, ligesom æ, ø og å ikke må bruges i forbindelse med kodeord.

Hashcat indeholder mulighed for at definere en maske, som kodeords-gættelegen følger.

Eksempelvis betyder ?l alle små bogstaver fra a-z, mens ?d betyder alle tal fra 0-9.

Med Hashcat er det desuden muligt at definere sine egne masker (fra 1 - 4), som eksempelvis kan bestå af en kombination af de prædefinerede masker.

I vores tilfælde definerer vi en hjemmegjort maske, der ser på små bogstaver fra a-z og tal fra 0-9. Ifølge NemID-reglerne, så bliver der alligevel ikke skelet til, om der bliver brugt små og store bogstaver. Desuden skulle der jo være mindst et tal også, som vi satser på, står til sidst i kodeordet. Vi gætter desuden på, at brugeren ikke har kastet et af de tilladte specialtegn ind også.

En hjemmestrikket maske til Hashcat kunne i den forbindelse se således ud:

-1 ?d?l

Og ved at sætte ?1 ind på forskellige pladser, der hver især repræsenterer et tegn i kodeordet, kunne en maske, der går op til otte tegn se således ud:

?1?1?1?1?1?1?1?1

Så ved at køre følgende, starter Hashcat med alle kombinationer i henhold til ovenstående maske på seks tegn, hvorefter programmet bevæger sig op til og med otte tegn:

./hashcat64.bin -m 0 -a 3 --increment-min 6 --increment md5hash.txt -1 ?l?d ?1?1?1?1?1?1?1?1

En noget varmere GPU og næsten 2 minutter senere er alle fem MD5-hashværdier omsat til kodeord i klartekst.

MD5 er altså en dårlig idé, særligt i kombination med korte kodeord, der i sig selv er en dårlig idé i forhold til et brute force-angreb.

Ovenstående angreb ville også fungere, selvom kodeordene var saltede. Altså kombineret med tilfældige input.

Salt-værdien fremstår i udgangspunktet i klartekst og har alene til formål at beskytte mod angreb via tabeller med forudberegnede hash-værdier. De kaldes Rainbow Tables, og hvad den slags angreb angår, så er MD5 dækket godt ind (forstået som hamrende sårbar) i forhold til kodeord på op til otte tegn.

Typen af kodeord

Et stort problem i vores eksempel er dog typen af kodeord, hvor heller ikke en bedre algoritme til at hashe kodeordene med vil kunne stille meget op. Ordene optræder nemlig i frit tilgængelige ordlister, som overflødiggør størstedelen af regnearbejdet forbundet med et brute force-angreb.

Hashcat understøtter i den forbindelse også prædefinerede ordlister som input. Og ovenikøbet i kombination med en maske, hvilket i vores tilfælde er heldigt, da alle ordene jo indeholder et tal.

Vi ved naturligvis ikke inden angrebet, hvor tallet befinder sig, eller hvor mange tal der er, men vi gætter på, at brugerne for nemhedens skyld har indsat et tal til sidst.

Parameteren -a 6 fortæller Hashcat, at vi gerne vil udføre et kombineret ordliste og brute force-angreb, mens danish.txt er vores liste med input-ord.

./hashcat64.bin -m 0 -a 6 md5hash.txt danish.txt ?d

Omkring to sekunder senere har Hashcat fundet frem til kodeordene bag fire ud af de fem hash-værdier.

Kodeordet, som Hashcat ikke umiddelbart fandt var tekande2. Hashcat kan i den forbindelse sættes op til at kombinere ordene fra ordlister, hvor både te og kande optræder, og ad den vej også knække den slags kodeord.

Længere kodeord

Generelt er det en god idé med længere kodeord, der ikke bare kan findes i en ordbog. Lange kodeord kan dog have den ulempe, at de kan være svære for mennesker at huske.

Flere Version2-læsere ihukommer formentlig en ofte delt udgave af internet-tegneserien XKCD, der pointerer, at en længere sammensætning af tilfældige ord kan bruges til at lave et kodeord (kaldet en passphrase), som kan være svært for en computer at gætte, men nemt for et menneske at huske.

Validiteten af denne pointe bliver med afsæt i Hashcat-eksempler diskuteret i dette blog-indlæg fra cybersikkerheds-virksomheden Netmux.

Virksomheden anfører i indlægget, at mens kombinationen af fire tilfældige ord i sig selv kan være god nok til at lave sikre kodeord på 12 tegn og opefter, så er det en forudsætning, at de ikke er hashet via svage algoritmer som MD5.

I blogindlægget demonstreres det således, hvordan ordlister kan kombineres til at knække længere sammensatte kodeord.

Derudover har forskere fra det amerikanske Carnegie Mellon University tidligere peget på (PDF), at XKCD-metoden med passphrases sammenssat af tilfældige ord også kan være vanskelig at huske, ligesom der kan opstå fejl i forbindelse med indtastningen.

Med kodeordshusker-software, der genererer kodeord sammensat af mere eller mindre tilfældige tegn, er angreb via ordlister ikke længere gangbare.

Spørgsmålet i den sammenhæng, er så, om brugeren stoler på softwaren, der genererer og husker kodeord.

Version2-blogger med forstand på sikkerhed Poul-Henning Kamp har tidligere tilkendegivet over for Version2, at han har svært ved at se, hvordan man kan stole på den slags programmer. Han anvender således sit eget program til formålet.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk

Følg forløbet

Kommentarer (8)

Mikkel AB

Alle der her artikler omhandler at knække usaltede MD5 passwords, men er anvendelsen af MD5 virkelig stadig så udbredt når sikkerhedsproblemet har været kendt længe (siden slut 90´erne?)?

Hovedregelen ved ethvert behov for kryptering, bør dog også efter min mening være den gode gamle "Dont roll your own crypto" smøre.

Edit: Så lige diskussionen på den anden artikel

Thomas Nielsen

Spørgsmålet i den sammenhæng, er så, om brugeren stoler på softwaren, der genererer og husker kodeord.

...og software som tester dem. Man kan sætte sig ned og dissekere koden og forvisse sig om at den er hvad den udgiver sig for, monitorere trafikken på sit netværk og prøve at søge efter anmeldelser og kommentarer om produktet. Det er alt sammen fint og godt. Det jeg er lidt bekymret for, er at kodeords-testere bliver almindeligt brugte i stedet for sund fornuft. For, det er jo temmelig nærliggende for en lumsk person, at skrive en kodeords-tester og bruge den til at høste kodeord.

Problemet er ikke de gode og brugbare produkter, men den præcedens de skaber og dermed i praksis hjælper de mindre legitime produkter der måtte udnytte den mindre kyndige bruger.

Klavs Klavsen

mht. at 4 random ord ikke er nok, så skriver de dog:

Simple modifications to this password like numbers or special characters in the middle would have made this password beyond our reach

Så hvis man f.ex. har et kodeord a la:
3hunde&1katvednavnEmil (det kan de fleste vist godt huske :)

Så er det ikke mulighed med GPU cracking (endnu).. man skal svjv. over ~20 tegns grænsen og ikke bare lowercase'e ord fra en ordbog (selvf.).

Man kan også lave en regel for sig selv, som at alle e'ere bliver erstattet af 3 eller at man smider # foran tal osv.

Hvis så vi bare kunne få hashcat til at være standarden og KUN tvinge folk til passwordskift, når hvis hashcat havde knækket kodeordet på brugeren - så var jeg glad :)

istedet for de tvungne 3-måneders passwordskift :(

Axel Nielsen

Hvis man benytter nogle regler man nemt kan huske og en sætning der relaterer til noget man ligeledes nemt kan huske, kan man relativt nemt lave lange og gode passwords, f.eks.:

Det er let at tælle til hundrede

D'Leth@ttaelletil100-rede

Det er svært at tælle til en million

D'$vaert@ttaelletilen1e6

Selv den slags regler vil dog kunne afsløres hvis datagrundlaget (hackede passworddatabaser og f.eks. også denne diskussion) er stort nok. Big data er som jeg ser det en udfordring for password-huskeregler.

Esben Bjerre

Det spiller ikke rigtig nogen rolle hvilken algoritme der er brugt hvis et password findes i en wordlist eller kan bruteforces, så er det kun computerkraft og tid der er en faktor.
Man kan selvfølgelig gøre arbejdet med at hashe arbitrært langsom ved at tilføje x antal iterations, men der skal jo findes en balance så man ikke knækker sin egen server når den skal hashe et password.

Log ind eller opret en konto for at skrive kommentarer

Pressemeddelelser

Affecto Denmark reaches highest Microsoft Partner level

Affecto Denmark, a leading provider of data-driven solutions, has reached the highest level in the Microsoft partner ecosystem: Managed Partner.
22. jun 2017

Innovate your business with Affecto's IoT Explorer Kit

Are you unsure if Internet of Things fits your business strategy?
31. maj 2017

Big Data Lake Summit: Fast and Trusted Insights

If you want to outpace, outsmart and outperform your competition in a digital world, you need trusted data that can be turned into actionable business insights at speed.
24. apr 2017