Lösenordsknäckning 101
Lär dig knäcka lösenord som en hacker.
Introduktion
Lösenordsknäckning låter komplicerat men i detta blogginlägg kommer jag visa att det är relativt lätt. Vi börjar med grunderna och ett exempel, sedan avslutar vi med en kluring till läsaren och mer information för de som är intresserade.
Lösenordsknäckning 101
Lösenordsknäckning, password cracking på engelska, är en teknik som används för att gissa sig till ett lösenord för en lösenordshash. En lösenordshash är en textsträng med blandade bokstäver som representerar ett lösenord. I exemplet nedan visas tre lösenord och deras respektive hash.
- eld –
1a96e26c8cd1bbd6c01ed90fad5911e1 - vatten –
42c1628a00ff421fc3d85ca680e8af27 - jord –
166142193e8e53cfaf4c9290ec64f1c5
Ofta sparar applikationer, exempelvis din email, ditt lösenord i formatet av en hash. Om ditt lösenord är ”eld” sparar alltså applikationen din hash ”1a96e26c8cd1bbd6c01ed90fad5911e1”. Vid lösenordsknäckning vet vi hashen men inte lösenordet. För att ta reda på lösenordet testar vi flera lösenord och jämför hashen de genererar med den hash vi redan har. Om vi testar ett lösenord och det ger samma hash som vi har så har vi gissat rätt och knäckt lösenordet.
Kort om Linux
Verktyg som används för att knäcka lösenordshashar kräver ofta ett linuxsystem då verktygen inte stödjs på andra plattformar. Om du är van vid Windows och vill testa Linux rekommenderar jag WSL (Windows Subsystem for Linux) med Ubuntu. Ni kan installera Ubuntu genom att starta PowerShell och köra kommandot
wsl --install -d Ubuntu |
Se den officiella dokumentationen från Microsoft för mer information.
Knäck lösenordet till en krypterad zip-fil
För att knäcka ett lösenord behöver vi tre saker:
- En lösenordshash, den vi ska knäcka
- En ordlista, de lösenord vi skall testa
- Ett verktyg, som testar orden i ordlistan för att identifiera lösenordet till hashen
Vi börjar med en krypterad zip-fil hemligt.zip som vi ska knäcka lösenordet till.

Sedan flyttar vi filen till ett linuxsystem med de verktyg vi vill använda. Stegen för att knäcka lösenordet är:
- Hämta ut hashen
- Skapa ordlistan
- Knäck hashen med ordlistan
1 Hämta ut hashen – Vi hämtar ut hashen från filen med verktyget zip2john och sparar hashen i en ny fil hash.txt.
zip2john hemligt.zip > hash.txt |
2 Skapa ordlistan – Vi skapar en ordlista ordlista.txt med lösenord vi tror skulle använts för att kryptera filen med, vi gissar att lösenordet är eld, vatten eller jord.
cat << EOF > ./ordlista.txt |
3 Knäck hashen med ordlistan – Avslutningsvis använder vi verktyget john (John the ripper) för att testa lösenorden.
john --wordlist=ordlista.txt hash.txt |
När vi kör respektive kommando får vi följande output.

John indikerar att lösenordet till filen är ”vatten”, vi verifierar att det stämmer.


Svårare än så är det inte, hämta hashen, välj ordlista och knäck lösenordet! Om vi hade önskat knäcka ett lösenord till en annan fil eller något annat än en fil hade vi använt ett annat verktyg för att hämta ut hashen. Man får googla sig fram till vilket verktyg man bör använda.
Kluring till läsaren
Kan du knäcka hashen till den lösenordsskyddade filen hemligt.pdf?

Hashen till filen har redan hämtats ut med verktyget pdf2john och resultatet kan kopieras nedan.
hemligt.pdf:$pdf$4*4*128*-1060*1*16*8538f3948862114091b60b37445fbb5b*32*9ad2b879159b7d6e63254af6009cbd0d00000000000000000000000000000000*32*f3492ee1852730caedee89a11919107504d9e2532305f2869e6ee1915b5b7297 |
Lösningen följer samma format som tidigare men en ny ordslista krävs. Är lösenordet hemligt eller superhemligt? Många lösenord skrivs dessutom på engelska så lösenordet kanske är secret eller topsecret. Om ni inte lyckas knäcka lösenordet så finns det ett lösningsförslag i slutet av bloggen, lycka till!
Hashar, ordlistor och vertkyg
Hashar kommer i olika format beroende på vilken algoritm som används för att skapa hashen. Olika algoritmer är olika starka mot lösenordsknäckning då de kräver olika mycket beräkningskraft för att beräkna en hash från ett lösenord. I exemplet med orden vatten, eld och jord har jag listat ordens MD5-hash, om man väljer en annan algoritm får man en annan hash. Några vanliga algoritmer man kan stöta på är MD5, SHA1 och SHA256 men det finns många fler algoritmer och hashtyper.
Ordlistor kan man göra själv eller hämta färdiga från internet. Jag rekommenderar SecLists som en bra resurs då den innehåller flera kända listor som används för penetrationstester. Bland annat innehåller den en lista på vanliga lösenord under Passwords/Common-Credentials. Utöver SecLists rekommenderar jag även weakpass som innehåller många bra listor, bland annat weakpass_4a.txt som innehåller över 8 miljarder (8 000 000 000) lösenord. Om man vill ta lösenordslistor ett steg längre kan man använda verktyget CeWL för att skapa ordlistor utifrån ord som hittas på en hemsida. Detta kan vara användbart om man vill gissa lösenord kopplade till en specifik aktör eller ett specifikt företag.
Verktyg som jag själv stött på och använt för lösenordsknäckning är först och främst John the ripper och Hashcat. John the ripper är enkel att komma igång med och upplevs av många som användarvänlig. Hashcat presterar bättre och erbjuder mer avancerad funktionalitet men har lite klurigare syntax. Med anledning av detta använder jag oftast Hashcat i arbetet medan denna blogg använder John the ripper för dess användarvänlighet.
Kluring till läsaren – lösning
Kör nedanstående kommandon för att spara hashen till en fil, skapa en ordlista och knäcka hashen med john.
echo 'hemligt.pdf:$pdf$4*4*128*-1060*1*16*8538f3948862114091b60b37445fbb5b*32*9ad2b879159b7d6e63254af6009cbd0d00000000000000000000000000000000*32*f3492ee1852730caedee89a11919107504d9e2532305f2869e6ee1915b5b7297' > hash.txt |
När vi kör ovanstående får vi följande output.

Om ni redan kört john en gång och vill testa igen kan ni ta bort filen ~/.john/john.pot då denna innehåller information om vilka hashar som redan knäckts.
rm ~/.john/john.pot |
Lösenordet till filen hemligt.pdf är topsecret.
Referenser
- Windows Subsystem For Linux (WSL) https://learn.microsoft.com/en-us/windows/wsl/install
- SecLists https://github.com/danielmiessler/seclists
- Weakpass 4A https://weakpass.com/wordlists/weakpass_4a.txt
- CeWL https://github.com/digininja/CeWL
- John the ripper https://github.com/openwall/john
- Hashcat https://github.com/hashcat/hashcat

