Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Crackowanie haseł – czyli polowanie na grubego zwierza
Niedawno w serwisie arstechnika opisano wynik pewnego eksperymentu. Kilka osób (w tym autora narzędzia hashcat) poproszono o złamanie bazy 16,449 hashy. Najlepszemu uczestnikowi udało się złamać 90% z nich w czasie mniejszym niż 24h.
Czytając oryginalny tekst, można poczuć się jak prenumerator „Łowcy Polskiego” przeglądający z wypiekami na twarzy najnowszy numer magazynu. Uczestnicy konkursu opisują bowiem wykorzystane przez siebie techniki, nie stroniąc również od barwnych porównań:
That’s the thrill of it. It’s kind of like hunting, but you’re not killing animals. You’re killing hashes. It’s like the ultimate hide and seek.
No dobrze – przejdźmy do szczegółów :-) Pierwszy z mitów, który pada po przeczytaniu tekstu, to fakt, że o bezpieczeństwie hasła decyduje jedynie jego długość.
„Magdalenakupuje2!” wygląda na długie i złożone pod względem alfabetu (małe, duże litery, cyfra, znak specjalny) – idealne hasło domenowe, które spełnia wszystkie zasady złożonościowe ;-) Tymczasem jest ono łatwo łamalne – wystarczy użyć prostego słownika wyrazów w danym języku oraz wykonać próby wszystkich kombinacji:
Jako strzelbę weźmy niedrogi GPU i mamy tego typu hasła „upolowane”.
W tym miejscu trzeba przyznać, że pewne komplikacje w języku polskim (np. odmiana rzeczowników) stawiają nas w lepszej pozycji niż kraje anglojęzyczne. Słowniki z pełną polską odmianą są po prostu znacznie dłuższe – co wydłuża czas łamania.
Inny przykład hasła odzyskanego tą techniką? We wspominanym konkursie odzyskano np.: „momof3g8kids.” (udało się je zlokalizować właśnie opisaną wyżej techniką).
Jakich jeszcze innych technik stosowali uczestnicy 'crackme’ ? – Oczywiście najpopularniejszej metody – czyli podstawowe użycie jednego dużego słownika, najczęściej pochodzącego z jednego bądź kilku spektakularnych włamań. Najlepszym przykładem jest tu chyba wyciek z serwisu rockyou, z którego – wykorzystując podatność SQL injection – pobrano przeszło 32 miliony haseł w… plaintext.
Łamanie bazy hashy z wykorzystaniem dużego słownika można porównać do polowania ze scyzorykiem na ślimaka winniczka (nawet tępy nóż umożliwi nam upolowanie przynajmniej kilku egzemplarzy ;-)) przejdźmy więc do polowania na grubego zwierza.
Okazuje się, że sporo haseł bazuje na pewnych standardowych technikach wykorzystywanych przez ludzi – ręka do góry kto posiada hasła zakończone liczbą albo z wykrzyknikiem na końcu? h@sl000 to też przykład hasła stworzonego w oparciu o regułę. Narzędzie hashcat implementuje wręcz cały język umożliwiający tworzenie reguł jak i udostępnia pokaźną ich bazę (dostępna domyślnie po instalacji). Na ironię zakrawa też fakt, że sporo reguł przygotowanych w crackerach zbudowanych jest w oparciu o… poradniki tworzenia bezpiecznych haseł.
Pliki zawierające pełen opis konkretnej reguły najczęściej tworzone są poprzez analizę realnych baz haseł i zlokalizowanie w nich pewnych zależności. Pewnym wartym wspomnienia dodatkowym wariantem umożliwiającym automatyczne tworzenie reguł na podstawie już złamanych haseł jest wykorzystanie narzędzia PACK (przykłady zastosowania / teoria i praktyka – na stronie autora).
No dobrze, ale w jaki sposób tworzyć bezpieczne hasła? Kilka podpowiedzi poniżej:
- Nie stosuj prostych haseł słownikowych – np. imion – również jako „jedynie” fragment hasła
- Uważaj na hasła złożone z dwóch-trzech popularnych słów
- Jeśli dodajesz znaki specjalne do hasła, warto abyś nie dodawał ich na końcu
- Rozważ wykorzystanie zdrobnień odmian czy „przekręceń” wyrazów użytych do budowy hasła – duża szansa że te warianty nie będą ujęte w słowniku
- Rozważ wykorzystanie managerów haseł – np. keepass oraz automatycznej generacji długiego hasła
- Przeczytaj nasze kompendium bezpieczeństwa haseł w trzech częściach
Jeszcze raz zachęcam przeczytać cały tekst z arstechnika i … zastanowić się czy Twoje hasło przypomina raczej ślimaka winniczka, niedźwiedzia brunatnego czy może jest jeszcze nieznanym gatunkiem ;-) Myśliwi już ruszyli…
— michal.sajdak<at>sekurak.pl
Do banku 15 znaków, litery, głównie cyfry, znaki specjalne nie tylko na końcu, raczej niełamalne w ten sposób. Do kompa hasło admina mam 24-ro znakowe, niesłownikowe, ale same litery. Myślę, że też wystarczy. Do allegro mam jeszcze inacżej skonstruowane, 12 znaków wszelkiego typu. Trzeba się wysilić, żeby je popamiętać, ale warto… :)
Fajny artykuł, czytałem go już, daje do myślenia na temat haseł…
Warto też pamiętać, że tak jak w przypadku rockyou, jeśli jakiś mądrala będzie trzymał po stronie serwerowej całość w plaintext to nic nam nie pomoże ;) No ew. używanie różnych haseł w różnych serwisach.
–ms
Mi się wydaje, że serwerowa część jest bardzo istotna, jeżeli ktoś przechowuje nasze hasła md5 to nawet przy dużej dozie wyobraźni z naszej strony jest w stanie to złamać na GPU. Z drugiej strony jak ktoś dobrze posoli i wykorzysta bcrypt-a z kilkutysięczną pętlą to już powinno być lepiej:)
Piotr – jak najbardziej – polecam tu: http://sekurak.pl/kompendium-bezpieczenstwa-hasel-atak-i-obrona/
Ale niestety i tak przytłaczająca większość używa cały czas niesolonego MD5, jeśli nie plainteksta jak rockyou ;p
–ms
Język polski, to trudny język, polecam błędy ortograficzne w hasłach, słowniki tego nie złapią, np rzulty-wuz :)
@Piotr – tak, dyslektycy jeśli chodzi o tworzenie haseł mają lepiej ;) Orty – to generalnie dobry pomysł, choć też można by się pokusić o zrobienie reguły do tego – np. do hashcata.
–ms
tak jak czytam takie artykuły to uswiadamiam sobie jacy jesteśmy naiwni tworząc hasła. Np stosując na końcu wyrazu ? wydaję nam się że jesteśmy cwani bo zanotowaliśmy znak specjalny a okazuje się że wiele osób tak robi i jako regułę wykorzystują ta hakerzy
Przypomina mi się, jak w nie istniejącej już firmie jeden z pracowników działu IT założył „specjalne” hasło do terminala dla szefa:
„Cóż_za_cholernie_długaśne_hasło_do_terminala!”
Trzeba przyznać, że szef mimo iż wklepywał je z zaciśniętymi zębami :) to jednak nie poprosił o zmianę :D
@Grzegorz – czasem jest to dobra metoda, ale pod warunkiem że weźmiesz pierwsze litery z jakiegoś długiego zdania, które jednak łatwo zapamiętać. Pamiętasz zdanie a hasło wygląda na mocno losowe.
A to hasło które podałeś – jeszcze ma tą „zaletę” że posiada PL krzaczki.
–ms
Ja mam następującą metodę: jako wielbiciel aut pewnej marki, hasła układam z kombinacji: oznaczenia modelu, oznaczenia silnika, jego mocy i/albo momentu obrotowego; z przyrostkami km/KM/NM/nm, oczywiście, wszystko w dowolnej kolejności :)
Zalety:
– łatwe (dla mnie) do zapamiętania, bo parametry tych aut znam na wyrywki na pamięć, nawet obudzony w środku nocy :)
– praktycznie do każdego sajtu mam inne hasło; jedyne, co muszę zapamiętać, to którego konkretnie modelu dane podałem :D
Wady:
– czasem jednak zapominam te dane z pkt.2, szczególnie, jak się gdzieś dawno nie logowałem
Inną, uniwersalną metodą, którą znam, jest hasło tworzone z pierwszych (drugich, ostatnich – wybór dodolny) liter jakiegoś długiego, ale charakterystycznego i łatwego dla nas do zapamiętania zdania.
Przykład:
„Moja siostra ma 12 lat i chodzi do szkoły podstawowej numer 77”
hasło z pierwszych liter: Msm1licdspn7
hasło z ostatnich liter: aaa2tiioyjr7
:)
Używam haseł zbudowanych ze zdań. Na przykład „stare skarpetki Janusza kon zjadl ze smakiem wczoraj”. Nie zgadzam się z opinią, że takie hasła są słabe. W artykule była mowa o słowniku z 32 milionami słów. Dla ułatwienia załóżmy, że wszystkie słowa powyższego hasła są w słowniku. Hasło ma 8 wyrazów, a więc trzeba sprawdzić 1.1e+60 kombinacji. Niech haker posiada zestaw komputerów który sprawdza biliard (10^15) hashy na sekundę (na dziś to kilkaset tysięcy pecetów z dobrymi GPU). Sprawdzenie wszystkich kombinacji i tak będzie trwało 3.49e+37 lat. Czyli – w praktyce – wieczność.
Takie hasła mają jedną wadę – jest problem, gdy limit na długość hasła jest krótki. Problem jest podwójny, gdy nie dostajemy ostrzeżenia, a nadmiarowe znaki są niejawnie odrzucane zarówno przy tworzeniu hasła, jak i logowaniu.
@Grzegorz – generalnie metoda dobra – byle z głową:). Przy 8 znakowym haśle nikt się nie będzie bawił w łamanie słownikowe – tylko pojedzie bruteforce.
Na takim klastrze w 1 PC (~75 miliardów MD5/sek) – to pójdzie bodaj w < 1 minuta. Dołożenie dużych liter niewiele da (przy tej długości). Żadne hasło <= dla MD5 nie jest dobre - choćby nie wiadomo jak skomplikowane - złamanie to kwestia dnia na dobrym sprzęcie. PS 32 miliony - haseł (które się w dużej licznie powtarzały a spora też część z nich była zbudowana jako złożenie haseł atomowych. Więc unikalnych jest znacznie mniej. Słownik 1mln wyrazów angielskich jest uznawany już za b. duży --ms
@sekurak zrobicie sobie konta edytorów i z nich piszcie zamiast się podpisywać pod każdym komentarzem kto jest autorem, zabawnie to wygląda ;)
No właśnie się zastanawialiśmy co by tu jeszcze pozmieniać na sajcie i wyszło że poza auto postowaniem na FB i tw nic nie trzeba :P
A tu rzeczywiście przydatny ficzer.
@sekurak
Pisałem o haśle ośmiowyrazowym, nie ośmioznakowym. Nie stosuję techniki „pierwszych liter” opisanej przez bl4de, wpisuję całe hasło. Moje hasło ma 52 znaki, nawet biorąc pod uwagę to, że ograniczyłem się do spacji, oraz małych i dużych liter alfabetu angielskiego – powodzenia z bruteforcem przy 4.6e+89 kombinacji. Co do mniejszego słownika, nie ma problemu. Słownik z milionem wyrazów i ośmiowyrazowe hasło to wciąż 1.0e+48 hashy do sprawdzenia (wciąż zakładam, że wszystkie 8 wyrazów znalazło się – szczęśliwie dla hackera – w słowniku). Przy podanej przez Was wydajności 75 miliardów hashy na sekundę to drobne 4.2e+29 lat…
Jeśli tak – to pełna zgoda :-)
–ms
A czy użycie mechanizmu (skryptu), który po kilku nieudanych próbach zawiesza na kilka (naście?) sekund możliwość dalszego „celowania” z hasłem – nie załatwia sprawy?
Blokuje – ale przy ataku on-line. A tu się głównie skupiamy na ataku offline – tj atakujący wyciąga bazę hashy – np. z wykorzystaniem SQL injection – po czym w zaciszu domowym crackuje tą bazę. Więc nawet nie ma żadnego skryptu który by to offlineowe crackowanie mógłby blokować. A jak już ma hasła to wystarczy jedna próba zalogowania się (bo hasło będzie na pewno pasować).
–ms
A ja buduję hasła w oparciu o adres(/login) danej, konkretnej strony i wtedy mam hasła częściowo różne i dość łatwe do zapamiętania :) Nawet jeśli będzie plaintext to tylko jedna strona jest skompromitowana, jeśli md5, to słownikiem na pewno się nie uda :)
@sekurak nie wiem czy to ja czegoś nie widzę czy co, ale nie umiem odpowiedzieć na napisany wyżej komentarz, mogę napisać tylko nowy, zaczynając nowy wątek. WP ma takie strony /author, gdzie każdy użytkownik może napisać coś o sobie słowami wstępu, zrobić listę swoich wpisów, komentarzy itp. Dobra rzecz jak się prowadzi stronę w kilka osób.
Generalnie jasna sprawa – zrobimy update sajtu przy najbliższej okazji :)