Windows

Łamiemy hasła za pomocą HashCat

Tworzenie silnego i unikalnego hasła dla każdego zakładanego konta jest bardzo ważne. Ale czy kiedykolwiek zastanawiałeś się, w jaki sposób Twoje silne hasło może zostać złamane i wykorzystane przez hakerów do uzyskania dostępu do Twoich kont?

Dzisiaj to sprawdzimy.

Wstęp.

Gdy zakładamy konto w serwisie internetowym, dostawca zazwyczaj (a przynajmniej powinien) szyfruje Twoje dane logowania na swoim serwerze, aby zwiększyć ich bezpieczeństwo. Proces ten polega na zastosowaniu algorytmu hashowania, który przekształca hasło w tzw. „hash” – pozornie losowy ciąg liter i cyfr. Każde hasło generuje unikalny hash, który jest niemożliwy do odtworzenia na podstawie samego wyniku. Oznacza to, że nawet jeśli haker uzyska dostęp do bazy danych serwisu, zobaczy jedynie hashe, a nie rzeczywiste hasła użytkowników.

Co ciekawe, hash wcale nie jest przypadkowy. To precyzyjny ciąg znaków, który zawsze wynika z tego samego hasła przetworzonego określonym algorytmem. W praktyce oznacza to, że jeśli wpiszesz to samo hasło ponownie, algorytm stworzy identyczny hash. Dla osoby postronnej, która nie zna algorytmu ani hasła, hash wygląda jak chaotyczna mieszanka znaków, ale dla systemu jest łatwy do porównania.

Tworzenie hashy ma pewne kluczowe właściwości. Po pierwsze, proces ten jest znacznie szybszy niż próba „rozszyfrowania” hashy, co sprawia, że serwery mogą efektywnie obsługiwać logowania użytkowników. Po drugie, hashe są przechowywane w bazie danych, a nie same hasła, co zwiększa bezpieczeństwo – nawet w przypadku wycieku danych.

Jeśli jednak taka baza danych zostanie skradziona i wycieknie do internetu, hakerzy mogą próbować złamać hasła przy pomocy specjalistycznych programów. Zamiast próbować bezpośrednio odszyfrować hash, co jest praktycznie niemożliwe, wykorzystują metodę porównawczą. Budują system, który generuje hashe dla potencjalnych haseł, korzystając z tego samego algorytmu co serwer. Każdy wynik porównują z hashami z bazy danych.

Łamanie haseł polega na testowaniu milionów, a nawet miliardów możliwości. Hakerzy używają potężnych komputerów lub całych klastrów serwerów, które mogą generować ogromne ilości hashy w krótkim czasie. W przypadku prostych haseł, takich jak „123456” czy „password”, proces ten jest wyjątkowo szybki, ponieważ takie kombinacje znajdują się na tzw. listach słownikowych, które zawierają popularne hasła używane przez miliony użytkowników.

Gdy hash wygenerowany przez system hakerów pasuje do tego w bazie danych, staje się jasne, jakie hasło było używane. To dlatego tak ważne jest tworzenie silnych i unikalnych haseł – długich, złożonych, zawierających kombinacje liter, cyfr i znaków specjalnych. Im bardziej skomplikowane hasło, tym trudniej i dłużej zajmuje jego złamanie.

Aby zwiększyć bezpieczeństwo, wiele serwisów dodaje tzw. „sól” (salt) do procesu hashowania. Salt to dodatkowy, losowy ciąg znaków, który jest łączony z hasłem przed jego przetworzeniem w hash. Dzięki temu nawet identyczne hasła różnych użytkowników generują zupełnie inne hashe, co znacząco utrudnia hakerom pracę.

Łamiemy hasła

Dobrze, zatem sprawdźmy, jak łatwo można złamać kilka haseł. Aby to zrobić, skorzystam z HashCat – darmowego i otwarto źródłowego narzędzia do łamania haseł, dostępnego dla każdego, kto chciałby go użyć.

Hashcat to jedno z najbardziej zaawansowanych narzędzi dostępnych za darmo. Pozwala na łamanie haseł z wykorzystaniem wielu różnych metod, takich jak ataki brute force, słownikowe, hybrydowe czy wykorzystujące tęczowe tablice (rainbow table). Dzięki wsparciu dla procesorów graficznych (GPU), Hashcat potrafi przetwarzać ogromne ilości danych w krótkim czasie, co czyni go niezwykle wydajnym w łamaniu hashy.

Do testów złamię następujące hasła:

  1. 123456
    To klasyka wśród haseł, a zarazem koszmar specjalistów ds. cyberbezpieczeństwa. „123456” jest najczęściej używanym hasłem na świecie. Według danych z NordPass, aż 3 miliony kont korzysta z tego hasła…
  2. Kabson!4
    Przykład hasła, które wydaje się spełniać podstawowe wymogi bezpieczeństwa, a jego budowa przypomina strategie stosowane przez większość użytkowników, aby stworzyć „bezpieczne” hasło. Mimo że takie hasło zawiera kombinację liter, cyfr i symboli, jak zobaczymy później, posiada krytyczne słabości, które można łatwo wykorzystać.
  3. a9U4[N?q!e
    To hasło zostało wygenerowane za pomocą generatora haseł dostępnym na tej stronie. Generator został ustawiony na tworzenie haseł o długości 10 znaków, zawierających wielkie i małe litery, symbole oraz cyfry.

Teraz, gdy mamy już nasze hasła, zaszyfrowałem je za pomocą algorytmu MD5. Tak wyglądałyby te hasła, gdyby znajdowały się w bazie danych na serwerze.

  • 123456 e10adc3949ba59abbe56e057f20f883e
  • Kabson!4 e3de9b87d030b5eae2bd335af4d86b5b
  • a9U4[N?q!e 930f2fdb157d830e8bf43851777c1ecb

Mamy więc nasze hashe, więc spróbujmy je odszyfrować.

Przeprowadzamy prosty atak słownikowy. 

Na początek przeprowadzimy atak słownikowy – jedną z najczęściej stosowanych metod łamania haseł. W tym ataku wykorzystuje się listę potencjalnych haseł, które Hashcat przekształca w algorytmie MD5, a następnie porównuje z zapisanymi hashami, aby sprawdzić, czy któryś pasuje do trzech wcześniej przygotowanych wpisów. Do tego eksperymentu używam pliku „rockyou.txt” – jednego z największych wycieków haseł w historii.

Aby rozpocząć proces łamania, otwieram folder z programem Hashcat, klikam prawym przyciskiem myszy na pustą przestrzeń i wybieram opcję Otwórz w terminalu. Po uruchomieniu terminala, ustawionego na katalog z Hashcatem, wywołuję aplikację Hashcat za pomocą następującej komendy:

.\hashcat -m 0 -a 0 hasla.txt rockyou.txt -o wynik.txt

Oto, co oznacza ta komenda:

  • .\hashcat: Uruchamia program Hashcat.
  • -m 0: Określa algorytm szyfrowania, który będziemy używać. W tym przypadku jest to MD5, który w dokumentacji Hashcata został oznaczony numerem 0.
  • -a 0: Określa rodzaj ataku, który chcemy przeprowadzić. Atak słownikowy w dokumentacji Hashcata oznaczony jest numerem 0, dlatego wybieramy go tutaj.
  • hasla.txt rockyou.txt:
    Pierwszy plik zawiera trzy zaszyfrowane hasła, które przygotowaliśmy wcześniej.
    Drugi to baza danych haseł „rockyou,” używana jako słownik do porównywania.
  • -o wynik.txt: Definiuje miejsce zapisu wyników. W tej komendzie złamane hasła zostaną zapisane do pliku tekstowego o nazwie „wynik.txt”

hashcat

Pomimo ogromnego rozmiaru bazy danych „rockyou.txt,” Hashcat przetworzył ją w zaledwie kilka sekund. W wygenerowanym pliku wyników Hashcat wskazał, że hasło „123456” zostało złamane, jednak hasła „Kabson!4” i „a9U4[N?q!e” pozostały nietknięte. Dlaczego tak się stało? „123456” pojawia się w bazie danych „rockyou.txt,” ponieważ było używane przez wielu użytkowników, ale hasła „Kabson!4” i „a9U4[N?q!e” były wystarczająco unikalne, aby przetrwać ten rodzaj ataku.

Łamiemy hasło wykorzystując atak brute force.

Ataki słownikowe działają wtedy, gdy ktoś używa hasła znajdującego się w dużej liście gotowych haseł. Są szybkie i łatwe do wykonania, ale nie poradzą sobie z hasłami, które nie występują w słowniku. Dlatego, jeśli chcemy naprawdę przetestować nasze hasła, musimy przeprowadzić atak brute force.

Podczas gdy ataki słownikowe opierają się na przekształcaniu ustalonej listy haseł jedno po drugim, ataki brute force działają na tej samej zasadzie, ale zamiast korzystać z listy, sprawdzają każdą możliwą kombinację znaków. Są znacznie trudniejsze do przeprowadzenia i wymagają o wiele więcej czasu, ale mają tę przewagę, że w końcu złamią każde hasło. Jak zobaczymy za chwilę, to „w końcu” może czasami zająć naprawdę dużo czasu.

Oto komenda, której użyłem do przeprowadzenia „prawdziwego” ataku brute force:

.\hashcat -m 0 -a 3 hasla.txt --increment ?a?a?a?a?a?a?a?a?a?a -o wynik.txt

Oto, co oznacza ta komenda:

  • -a 3: Określa rodzaj ataku, który chcemy przeprowadzić. Dokumentacja Hashcata wskazuje atak brute force jako numer 3, dlatego wybieramy go tutaj.
  • hasla.txt: Plik zawierający zaszyfrowane hasło, które chcemy złamać.
  • –increment: Nakazuje Hashcatowi próbować kolejno wszystkich kombinacji haseł – zaczynając od haseł jednoznakowych, przez dwuznakowe, aż do momentu znalezienia rozwiązania.
  • ?a?a?a?a?a?a?a?a?a?a: To tzw. „maska.” Maski pozwalają wskazać Hashcatowi, jakich znaków używać na określonych pozycjach w haśle. Każdy znak zapytania reprezentuje jedną pozycję w haśle, a litera określa rodzaj znaków do użycia na tej pozycji. Litera „a” oznacza wszystkie możliwe znaki – zarówno duże i małe litery, cyfry, jak i symbole. Ta konkretna maska oznacza: „Próbuj wszystkiego na każdej pozycji hasła.” 
  • -o output.txt: Wskazuje miejsce, w którym zapisane zostaną wyniki. W tym przypadku złamane hasła zostaną zapisane do pliku tekstowego o nazwie „wynik.txt.”

Mimo kiepskiego maskowania, hasło 123456 zostaje rozszyfrowane w zaledwie 10 sekund. Choć należy do najczęściej używanych, jest również jednym z najsłabszych.

Z kolei hasło „Kabson!4” okazało się dużo trudniejsze do złamania — mój komputer oszacował, że odgadnięcie go metodą brute force zajęłoby około trzech dni. Niemniej jednak ma ono istotną wadę. Jak już wcześniej wspominałem, hasło „Kabson!4” ma pewne poważne słabości, z których najważniejszą jest jego przewidywalna struktura. I to hakerzy również potrafią bezwzględnie wykorzystać.

Możemy użyć maski, aby nakazać Hashcatowi próbowanie tylko określonych znaków na określonych pozycjach, wykorzystując przewidywalność ludzi przy tworzeniu haseł. 

  • „?u” używa tylko wielkich liter na tej pozycji,
  • „?l” używa tylko małych liter,
  • „?a” reprezentuje każdy możliwy znak

Możemy założyć, że użytkownik użyje dużej litery na początku hasła, zaś cyfry na końcu. Modyfikując w ten sposób maskę złamanie hasła zajmuje zaledwie 6 godzin.

Próba złamania ostatniego hasła (a9U4[N?q!e) które ma dziesięć znaków długości i nie korzysta z przewidywalnych wzorców wymagałoby od nas zastosowania ogólnej maski. Z powodu jego długości może to zająć nawet kilka miesięcy, a dodając do niego nawet dodatkowy znak wydłużamy czas potrzebny na złamanie hasła nawet do kilku lat.

Podsumowanie.

Ataki słownikowe są jednym z najpopularniejszych i najprostszych sposobów łamania haseł, ale ich skuteczność ogranicza się do haseł, które znajdują się w powszechnych listach. W przypadku bardziej skomplikowanych haseł,  ataki te nie są w stanie złamać zabezpieczeń, ponieważ te hasła są zbyt unikalne, by znaleźć je w standardowych słownikach.

Pamiętaj, że hasło to pierwszy i najważniejszy krok w ochronie Twoich danych online. Używanie długich, skomplikowanych haseł znacząco zwiększa bezpieczeństwo Twoich kont. Generowanie haseł z wykorzystaniem narzędzi do generowania silnych haseł, to najlepsza praktyka, która może uchronić Cię przed nieautoryzowanym dostępem i potencjalnymi wyciekami danych.

Dziękuję za uwagę.

Może cię zainteresować:

Jak wyłączyć Firefox Relay w przeglądarce Firefox

Kabson

Jak ograniczyć liczbę prób logowania w WordPressie

Kabson

Sprawdzamy kto dobierał się do naszego telefonu

Kabson

Jak „włamać się” do systemu Windows nie znając hasła

Kabson

Jak sprawdzić czy nasze dane wyciekły z Facebook’a ?

Kabson

Uniemożliwiamy uruchomienie wiersza poleceń oraz polecenia uruchom.

Kabson

Zostaw komentarz