Wstęp
Na czym polegają ataki offline, czyli odzyskiwanie haseł z hashy omówiliśmy już we wcześniejszym artykule tutaj. Teraz czas przetestować konkretne narzędzie, najpopularniejszy łamacz hashy czyli Hashcat. Jest to cross-platformowe narzędzie wydane jako open-source w 2015 roku. Wcześniej kod programu był zastrzeżony przez MIT. Obecnie istnieje już 5 wersja Hashcat’a, która wspiera większość systemów operacyjnych i pozwala na stosowanie wielu wariantów konfiguracyjnych CPU oraz GPU. Wszystko dzięki działaniu opartemu na OpenCL (Open Computing Language). Jest to standard bibliotek w języku C99, który pozwala na wykonywanie obliczeń na wielu procesorach jednocześnie. Dzięki temu crackowanie hashy wykorzystując pełen potencjał naszego komputera trwa znacznie krócej. Sprzęt do łamania dużej ilości hashy powinien być wyposażony w mocną kartę graficzną, gdyż to właśnie ich architektura umożliwia najwydajniejsze równoległe liczenie.
Samo narzędzie zostało wydane w kilku wariantach, aby umożliwić najlepsze dobranie metody w zależności od potrzeb i posiadanego sprzętu:
- klasyczny Hashcat – pozwala na pełne wykorzystanie potencjału CPU
- oclHashcat-Plus – pozwala na obliczenia GPGPU, obsługuje multi GPU aż do 128 kart graficznych, zawiera również wsparcie dla przetwarzania rozproszonego (sieć klastrów Linux)
- oclHashcat-Lite – wersja zoptymalizowana pod kątem ataku na pojedynczy hash.
W każdej z powyższych odsłon zastosowano najszybsze na świecie implementacje znanych algorytmów, takich jak: md5crypt, phpass, mscach2, WPA, WPA2. Dzięki swojej uniwersalności i skuteczności darmowy Hashcat zdobył nawet przewagę nad komercyjnymi rozwiązaniami.
Wiele możliwości
Hashcat zapewnia kilka różnych metod łamania hashy oraz wspiera ponad 200 algorytmów hashujących. Możliwości konfiguracyjne są naprawdę duże. Przedstawiamy kilka rodzajów ataków, które można wykonać:
1. Straight Attack
Najprostszy atak słownikowy, który sprawdza po kolei dopasowanie haseł z podanego przez użytkownika słownika. Efektywny w przypadku słabego, powszechnego hasła które chcemy złamać. Wymaga użycia dobrego słownika zawierającego dużą listę popularnych haseł.
2. Brute-Force Attack
Atak siłowy w Hashcat sprawdza każdą możliwą kombinację podanych przez użytkownika znaków wejściowych. Daje duże możliwości konfiguracji za pomocą zdefiniowanych w programie masek. ?l – mała litera, ?u – wielka litera, ?d – cyfra, ?s – znak specjalny, ?a – wszystkie znaki.
Czyli na przykład wyrażenie ?u?l?l?l?l?l?l?d będzie znaczyło kombinację wszystkich możliwych haseł zaczynających się od wielkiej litery, potem składających się z sześciu małych liter i na końcu jednej cyfry.
3. Combinatory Attack
Bardziej złożony atak słownikowy. Polega na zlepianiu ze sobą haseł ze słownika i tworzeniu nowych, dłuższych. Często daje lepsze rezultaty niż brute-force, szczególnie dla długich haseł.
4. Hybrid Attack
Łączy atak brute-force z atakiem słownikowym dodając na końcu słowa kombinację znaków podanych jako maska.
5. Table Lookup Attack
Zaawansowany atak słownikowy, który wymaga oprócz słownika zdefiniowania tabeli lookup. Zawiera ona dopasowania zamiany znaków, które są powszechnie używane w hasłach, np. a=aA4@, s=sS5$. Dzięki temu sprawdzane są wszystkie hasła ze słownika z zastosowaniem podanych w tabeli podmian znaków.
6. Rule-Based Attack
Jest to jeden z bardziej złożonych ataków offline, ale dający tez najlepsze rezultaty przy skomplikowanych hasłach. Bazuje na podanym przez crackera słowniku haseł oraz na zdefiniowanych regułach w języku programowania podobnym do wyrażeń regularnych. Reguły te to na przykład: usuń piąty znak w słowie, dodaj znak na początku, zamień wszystkie X na Y.
Jest jeszcze więcej bardziej zaawansowanych metod oraz możliwość dodawania własnych reguł do praktycznie każdego z ataków. Każda z powyższych metod może być skuteczna, jeśli jest odpowiednio dobrana do posiadanego hasha. Osoba łamiąca hash będzie chciała więc dysponować pewną wiedzą o użytkownikach i mieć przekonania jak złożonego hasła mogli użyć oraz jakie hasła dopuszcza polityka organizacji.
Czasy obliczeń w praktyce
Aby przedstawić Wam jakie możliwości wydajnościowe ma Hashcat pracujący na dzisiejszym sprzęcie komputerowym przeprowadziliśmy krótki test.
W naszym środowisku lab na karcie graficznej GeForce GTX1050 4GB uruchomiliśmy crackowanie jednego hasha MD5, metodą najbardziej czasochłonną, czyli brute-force.
W pierwszym przypadku wywołanie programu było następujące:
.\hashcat64.exe -m 0 -a 3 -w 4 -d 1 myhash.txt ?a?a?a?a?a?a?a
Polecenie to oznacza odpowiednio: szyfrowanie md5, atak typu brute-force, najbardziej wydajny profil wykorzystania zasobów, wybranie tylko przetwarzania GPU, plik tekstowy zawierający nasz hash, kombinacja 7 dowolnych znaków.
Wyniki ze statusu pracy programu przedstawia poniższy screen:
Widzimy tutaj, że prędkość hashowania wynosi 2516.7 MH/s (megahashy na sekundę), a przewidywany czas zakończenia to 7 godzin i 41 minut. Po tym czasie sprawdzone zostaną wszystkie możliwe kombinacje 7 znakowych haseł, więc jeśli wykradnięty skrót pochodzi od hasła 7 znakowego, to ze stuprocentową pewnością po tym czasie zostanie złamany.
Warto zaznaczyć, że metoda szyfrowania MD5 jest najprostsza z obecnie stosowanych. Dla bardziej skomplikowanych, a więc i bardziej bezpiecznych metod czas ten byłby dłuższy.
W drugim wywołaniu zwiększyliśmy maskę z 7 do 8 znaków:
.\hashcat64.exe -m 0 -a 3 -w 4 -d 1 myhash.txt ?a?a?a?a?a?a?a?a
Rezultaty są następujące:
Widać tutaj, że czas potrzebny na przeanalizowanie wszystkich możliwych haseł składających się z 8 dowolnych znaków wzrósł do 30 dni i 11 godzin.
Profesjonalni łamacze haseł używają kilku złączonych ze sobą potężnych kart graficznych, co pozwala na kilkunastokrotne zmniejszenie czasu obliczeń. Domyślacie się teraz skąd wzięła się przyjęta powszechnie polityka, że hasło powinno zawierać minimum 8 znaków 🙂 Skrót hasła o mniejszej ilości znaków każdy z nas może bez problemu złamać w domu.
No dobrze, a co z atakami słownikowymi. Posłużymy się tutaj statystykami przygotowanymi przez haker.edu.pl.
Przeprowadzili oni testy na sprzęcie: procesor i7 + karta Radeon HD 7600M współpracującymi ze sobą. I tak:
Łamanie hasha MD5 słownikiem o rozmiarze 26,1 GB zajęłoby 7 minut i 35 sekund,
hasha SHA-1 – 3 minuty i 15 sekund.
Dla przykładu słownik 8 znakowy wygenerowany ze wszystkich możliwych małych liter alfabetu łacińskiego ma 1750 GB.
Powyższe czasy są oczywiście czasami pesymistycznymi (czas przejrzenia całego słownika). Może się zdarzyć sytuacja, że program trafi na właściwe hasło nawet po kilku sekundach. To samo tyczy się również ataków brute-force.
Podsumowanie
Jak widać Hashcat to multiplatformowe narzędzie pozwalające na złamanie praktycznie każdego hasha. Jest dostępne za darmo i współpracuje z popularnymi producentami komponentów – Nvidia, AMD, Intel. Zapewnia ogromne możliwości konfiguracji i dostosowania metod w zależności od zadania.
Znając mechanizmy łamania hashy wiemy jakie hasła są podatne na ataki offline i jak dostosować politykę haseł w organizacji, aby była skuteczna. Polecamy również zapoznać się z artykułem o słabych hasłach w organizacjach.