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. En hash-funktion er en funktion, der kan bruges til at mappe vilkårlige datastørrelser til data med en fast størrelse. Værdierne, som en hash-funktion returnerer, refereres blandt andet til som hash-værdier eller digests. Hash-funktioner bruges ofte i data-strukturer kaldet en hash-tabel til hurtigt at slå data op med. Kryptografiske hash-funktioner gør det på den ene side nemt at verificere, hvorvidt input-data - eksempelvis et kodeord - optræder i form af en given hash-værdi, og samtidig er kryptografiske hash-funktioner i udgangspunktet skruet bevidst sammen, så det er svært at gendanne det oprindelige input alene med kendskab til hash-værdien. Kilde: blandt andet WikipediaHash-funktion
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.

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.
Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.
Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.
Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.