Stvaranje jake i jedinstvene lozinke za svaki nalog koji kreirate je od vitalnog značaja. Da li ste se nekad upitali kako su hakeri ipak uspeli da je razbiju i provale i tako uđu u vaše naloge? To me je navelo da alatu otvorenog koda za razbijanje lozinki ponudim tri različite lozinke da bih otkrio na šta bi trebalo da obratim posebnu pažnju kada želim da napravim izuzetno bezbednu lozinku.
Šta je razbijanje lozinke?
Kada kreirate nalog na onlajn usluzi, nadamo se da dobavljač, uglavnom, šifruje vaše podatke za prijavu na svom serveru. Šifrovanje se obavlja pomoću algoritma za kreiranje „heša“ (engl. hash), naizgled nasumičnog niza slova i brojeva jedinstvenih za vašu lozinku. Naravno, tu ništa nije nasumično, već se radi o veoma specifičnom nizu znakova koji samo vaša lozinka može da napravi, ali neuvežbanom oku izgleda kao besmislena zbrka.
Mnogo je brže i lakše pretvoriti reč u heš nego ponovo „razmrsiti“ heš u reč. Zbog toga, kada postavite lozinku, usluga na koju se prijavljujete provlači vašu lozinku kroz heš, a zatim čuva rezultat na svom serveru.
Ako ta datoteka sa lozinkom procuri, hakeri će pokušati da otkriju njen sadržaj pomoću postupka razbijanja lozinke. Pošto je šifrovanje lozinke brže nego njeno dešifrovanje, hakeri će postaviti sistem koji uzima potencijalne lozinke kao ulaz, šifruje ih koristeći isti metod kao i server, a zatim upoređuje rezultat sa bazom podataka lozinki.
Ako se heš potencijalne lozinke poklapa sa bilo kojim unosom u bazi podataka, haker zna da se svaki pogodak podudara sa potencijalnom lozinkom koju je pokušao da pogodi.
Kako sam razbio sopstvene lozinke koristeći HashCat
Sada ćemo pokušati da razbijemo neke lozinke koje sam napravio da bismo videli koliko je to lako (ili nije). Da bih to uradio, koristio sam Hashcat, besplatni program otvorenog koda za razbijanje lozinki koji je dostupan svima.
Da bih proverio koliko je lako razbiti lozinke, alatu sam ponudio sledeće tri:
- 123456. Klasična i najčešće korišćena lozinka na svetu zbog koje stručnjaci za sajber-bezbednost ne mogu da spavaju. Firma NordPass je utvrdila da 3 miliona naloga koristi 123456 kao lozinku, od kojih 1,2 miliona štiti naloge na korporativnom nivou.
- Susan48!. Lozinka koja prati obrasce koje će većina korisnika upotrebiti kada pravi bezbedne lozinke. U njoj su sadržani elementi kojima se odlikuje bezbedna lozinka, ali kao što ćemo kasnije videti, poseduje neke kritične slabosti koje se mogu iskoristiti.
- t9^kJ$2q9a. Ovu lozinku sam napravio koristeći Bitwarden generator. Koristi se za generisanje lozinki koje imaju 10 znakova, među kojima su gornji i donji karakteri, simboli i brojevi.
Pošto smo izabrali lozinke, šifrovao sam ih pomoću kriptografskog algoritma MD5 (engl. Message-Digest algorithm 5). Evo kako bi se lozinke pojavile da su u sačuvanoj datoteci lozinke:
- 123456. e10adc3949ba59abbe56e057f20f883e
- Susan48!. df1ce7227606805745ee6cbc644ecbe4
- t9^kJ$2q9a. 450e4e0ad3ed8766cb2ba83081c0a625
Hajde sad da ih razbijemo.
Obavljanje jednostavnog razbijanja lozinke pomoću napada rečnikom
Bilo bi dobro da na početku izvršimo napad rečnikom (engl. dicitionary attack), jer je jedan od najčešćih metoda napada na lozinke. Napad je jednostavan. Prvo uzimam listu potencijalnih lozinki, dajem alatu Hashcat da ih konvertuje pomoću algoritma MD5 i proveravam da li se neka podudara sa tri gornja unosa. Za taj eksperiment sam koristio datoteku „rockyou.txt“ kao rečnik, što je bilo jedno od najvećih provaljivanja lozinki u istoriji. Da bih počeo sa razbijanjem, moram da odem u fasciklu u kojoj se nalazi Hashcat, kliknem desnim tasterom miša na prazan prostor i kliknem na Open u Terminalu. Kada je Terminal otvoren i postavljen u Hashcat direktorijum, pozivam Hashcat aplikaciju sledećom naredbom:
.\hashcat -m 0 -a 0 passwordfile.txt rockyou.txt -o results.txt
Evo šta naredba radi:
- .\hashcat poziva Hashcat.
- -m 0 određuje koje ćemo šifrovanje koristiti. U ovom slučaju, koristićemo MD5, koji je naveden kao broj 0 u uputstvu za korišćenje programa za Hashcat.
- -a 0 određuje napad koji želimo da izvršimo. Dokumentacija koja sadrži uputstva za korišćenje alata Hashcat navodi napad rečnikom kao broj 0, zbog čega ga ovde pozivamo.
- passwordfile.txt rockyou.txt Prva datoteka obuhvata tri šifrovane lozinke koje smo ranije postavili. Druga predstavlja celu rockyou bazu podataka lozinki.
- -o results.txt Ova promenljiva određuje gde stavljamo rezultat. U mojoj naredbi, ona stavlja razbijene lozinke u TXT datoteku pod nazivom results (rezultati).
Iako je baza podataka rockyou ogromna, Hashcat je uspeo da prođe kroz sve lozinke za šest sekundi. U datoteci results, Hashcat je naveo da je provalio lozinku 123456, ali lozinke Susan i ona koja je napravljena pomoću Bitwarden generatora nisu razbijene. To znači da je razbijenu lozinku 123456 već koristio neko drugi u datoteci rockyou.txt, ali niko drugi nije koristio lozinke Susan ili Bitwarden, što znači da su bile dovoljno jedinstvene da prežive taj napad.
Izvođenje složenijeg razbijanja lozinki korišćenjem napada grubom silom uz pomoć maske
Napadi rečnikom su uspešni ako neko koristi istu lozinku koja se već nalazi na većoj listi lozinki. Napadi su brzi i lako se obavljaju, ali ne mogu da razbiju lozinke koje nisu u rečniku. Zbog toga, ako želimo da zaista testiramo naše lozinke, moramo da koristimo napade grubom silom.
Ako se napadi rečnikom svode na uzimanje unapred postavljene liste lozinki i pretvaranje jedne po jedne u niz karaktera, napadi grubom silom rade to isto, ali u obzir uzimaju svaku moguću kombinaciju. Teže se izvode i potrebno im je mnogo više vremena, ali na kraju će provaliti bilo koju lozinku. Kao što ćemo uskoro videti, to ponekad može veoma dugo da traje.
Navešću naredbu koju sam koristio da izvršim pravi napad grubom silom:
.\hashcat -m 0 -a 3 target.txt –increment ?a?a?a?a?a?a?a?a?a?a -o output.txt
Evo šta naredba radi:
- -a 3 Ova promenljiva definiše napad koji želimo da izvršimo. U dokumentaciji za pomoć pri korišćenju alata Hashcat napadi grubom silom su navedeni pod brojem 3, tako da ga ovde pozivamo.
- target.txt je datoteka koja sadrži šifrovanu lozinku koju želimo da razbijemo.
- –increment upućuje Hashcat da isproba sve lozinke koje sadrže jedan znak, zatim dva, pa tri, i tako dalje dok ne dobijemo rešenje.
- ?a?a?a?a?a?a?a?a?a?a se zove maska. Maske nam omogućavaju da kažemo alatu Hashcat koje znakove da koristi na kom mestu. Svaki znak pitanja označava poziciju znaka u lozinki, a slovo diktira šta pokušavamo da provalimo na svakom mestu. Slovo a predstavlja velika i mala slova, brojeve i simbole, tako da ova maska kaže: „Probaj sve na svakom slotu“. To je maska užasa, ali kasnije ćemo je dobro iskoristiti.
- -o output.txt je promenljiva koja određuje gde stavljamo rezultat. Moja naredba stavlja provaljene lozinke u TXT datoteku pod nazivom output (izlaz).
Čak i uz pomoć spomenute maske užasa, lozinka 123456 je razbijena u roku od 15 sekundi. Pošto je najpopularnija lozinka, jedna je od najslabijih.
Lozinka Susan48! mnogo se bolje pokazala. Računar je rekao da će mu biti potrebna četiri dana da je na slepo razbije. Međutim, postojao je jedan problem. Sećate se kada sam rekao da lozinka Suzan ima neke kritične mane? Najveća je ta što je lozinka napravljena da bude predvidljiva.
Kada kreiramo lozinku, obično stavljamo određene elemente na određena mesta. Recimo, osoba koja je napravila lozinku Suzan na početku je verovatno unela suzan, ali sistem joj je rekao da doda velika slova i brojeve. Da bi je lakše zapamtila, prvo slovo je stavila veliko i dodala brojeve na kraju. Onda je možda neka usluga na koju se prijavljivala zahtevala i simbol, pa je spomenuta osoba taj simbol stavila na kraj.
Ako se vodimo takvim razmišljanjem, možemo da koristimo masku da bismo uputili Hashcat da isproba samo određene znakove na određenim mestima da bismo iskoristili predvidljivost ljudi kada kreiraju lozinku. U sledećoj maski, ?u će koristiti samo velika slova na toj poziciji, ?l će koristiti samo mala slova, a ?a predstavlja bilo koji znak:
.\hashcat -m 0 -a 3 -1 ?a target.txt ?u?l?l?l?l?a?a?a -o output.txt
Uz pomoć navedene maske Hashcat razbija lozinku za tri minuta i 10 sekundi, što je mnogo brže od četiri dana.
Bitwarden lozinka ima deset znakova i ne koristi nikakve predvidljive obrasce, tako da bih morao da izvršim napad grubom silom bez bilo kakve maske da bih je razbio. Nažalost, kada sam zamolio Hashcat da to uradi, prijavio je grešku i rekao da je broj mogućih kombinacija premašio granicu celog broja. Veliki i priznati stručnjak za IT bezbednost kaže da bi bilo potrebno tri godine da se provali Bitwarden lozinka, što mi sasvim odgovara.
Kako da zaštitite naloge od razbijanja lozinke
Dakle, šta možemo naučiti iz svega što smo videli? Glavni činioci koji su me sprečili da provalim Bitwarden lozinku su njena dužina (10 znakova) i nepredvidljivost. Zbog toga, kada pravite lozinke, pokušajte da ih napravite što je moguće duže i unesite simbole, brojeve i velika slova na bilo kojem mestu u lozinki. Tako ćete sprečiti hakere da koriste maske da bi predvideli gde se svaki element nalazi i zbog toga će mnogo teže razbiti lozinke.
Sigurno su vam već dobro poznata sva ona pravila za kreiranje lozinki, kao što su: koristite niz znakova i treba da bude što duža. Sve te preporuke prave razliku između razbijene lozinke i one bezbedne.