Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Rozwiązanie konkursu „Złam sekurakowe hasła”. Prezentujemy również metody łamania haseł użyte przez zwycięzców (writeupy!)
17 lipca ogłosiliśmy konkurs w którym do wygrania były klucze Yubikey od Yubico. Do złamania było 12 hashy ze strony http://recon.zone/hashez.txt. Rozstrzygnięcie nastąpiło 19 lipca w samo południe.
Większość uczestników do działania zaprzęgło narzędzie hashcat. I nie, nie chodziło by wykorzystać możliwości wielu kart GPU. Trzeba było wykorzystać narzędzie sprytnie, tj. odpowiedni słownik, odpowiedni tryb i przede wszystkim zidentyfikować hashe, ale o tym za chwilę.
Niektóre z haseł można było odtworzyć za pomocą dekoderów online – tam gdzie hashe były już znane i wcześniej użyte, np. na naszych szkoleniach. W ciągu pierwszych minut spokojnie można było osiągnąć wynik 4/12. Potem zaczęły się schody, bo hasła były bardziej skomplikowane, mniej-słownikowe. Niektórzy z Was nawet wracali do naszych starych tekstów (nomen omen, nadal aktualnych), czyli kompendium bezpieczeństwa haseł. Możecie przeczytać je tutaj: część 1, 2 i 3.
Nawet jak ktoś nie był zaznajomiony z narzędziem, to na naszym kanale na YouTube dostępne jest nagranie “Łamanie haseł w praktyce”, którym się podzieliliśmy podczas konkursu na naszym Discordzie Akademii Sekuraka.
Była też jeszcze jedna podpowiedź, bo tego samego dnia wrzuciliśmy ankietę na Twittera z pytaniem do Was, które hasło będzie najtrudniejsze do złamania ;-), wśród nich było jedno z dwunastu 🙂
Jednak najlepszym w ciągu dwóch dni udało się złamać 11 z 12 hashy. O to pełna lista z rozwiązaniem:
43108240da3d4d6a0abeaa7036753b24071758c2:sekurak
33b30e879c08451ec880976ad68c063528f798ca:startowe
38e38f8657216671d26fac36565156400d39f076:startowe!
42320d13edb9bb3a0dbe99ce34755dfde965f5fe:Barbara2013!
0171355e6359e7ef94c622ece77f4b14e5c5a32c:trudnydohakowaniacosiek
3f461a4489cea80e7aad7c30f5000413fe76e445:st@rtowe
81b75435176a5c99ed6aa83a16768b7e07a17156:trudnehaslo
89e0e65a842001d95fe580de0fd8fd3f0dc765bf:sekuraktwitter
232e72cfbc50518b72a93ccc2727a451cfdd2c17:qoiwejw1
dab1b92a5b4824139425387fc0d152ca795b6bf5:Ia4wkje9
c279a4caee4184000d3dc35487d1d968738811c6:mocnehaselko
Nie udało się tylko jednego:
d5c49c3206b1c392c130907b9515ab6808cacd5b:ciezkatosprawa
Zwycięzcą okazał się użytkownik „Róża„, który jako pierwszy podał 11/12 prawidłowych haseł. Następnie jeszcze trzem osobom udało się osiągnąć ten wynik:
- Paweł “Róża” Różański
- _secmike
- Keeper
- Anonimowy uczestnik
W konkursie wzięło udział 149 osób. Jednak tylko 14 osobom udało się osiągnąć wynik 9-10 złamanych hashy.
Nagrody zostały rozdane. 4 klucze Yubikey oraz darmowe wejściówki do Akademii Sekuraka. Dodatkowo także przekazaliśmy dobre kody rabatowe na nasze szkolenia dla uczestników w zależności od liczby złamanych hashy. Trzeba było złamać minimum sześć z dwunastu by otrzymać od nas nagrodę.
Dodatkowo, poniżej mamy dla Was niespodziankę. Nasi zwycięzcy postanowili podzielić się write-upami. Prezentujemy Wam trzy różne podejścia jak można było osiągnąć wynik 11 hashy.
Na początek write-up Pawła “Róży” Różańskiego
Wstęp
Niedawno odbył się konkurs zorganizowany przez Sekurak.pl, i udało mi się zostać jednym ze zwycięzców. Zaproponowano mi napisanie writeupu, na co chętnie się zgodziłem, tym bardziej, że i tak miałem zamiar opisać na blogu. Nie będzie tu żadnej wiedzy tajemnej, większość potrzebnych informacji była prezentowana na szkoleniu przez Michała Sajdaka w ramach Cisco SecUniversity, z którego nagranie jest dostępne w serwisie YouTube. Pomocny może być też ten artykuł nt. bezpieczeństwa haseł. Reszta to odrobina inwencji, doświadczenia, sprzętu i… szczęścia. Oczywiście łatwo dorabiać teorie znając wynik, jednak postaram się przedstawić sposób myślenia i dotarcia do wyniku najwierniej jak się da.
Zadanie
Otrzymaliśmy do złamania następujące hashe (tu lista prezentowana wcześniej, przyp. red).
Rozpoznanie
Zanim zaczynam, analizuję dane. Organizatorem konkursu i autorem haseł jest najprawdopodobniej sam Michał. To on zamieścił 17 lipca 2023, 19:03 artykuł z informacją o konkursie. Wiem też, że tego samego dnia rano, na Twitterze zamieścił ankietę które hasło będzie najtrudniejsze do złamania. Do wyboru były cztery odpowiedzi:
Jw2&AH;a
trudnydohakowaniacosiek
osiemznaków!1
Barbara2023!
Czyli: losowe krótkie, złożenie kilku wyrazów, złożenie dwóch wyrazów z dodatkowym przekształceniem poprzez dodanie cyfry i znaku specjalnego oraz imię żeńskie przekształcone przez dodanie cyfr i znaku specjalnego.
Wiem też, że nie jest to pierwszy konkurs tego typu organizowany przez Michała. Wyniki poprzedniego konkursu:
2843bb0a418644ec00efeb8b58f5f60c:ToLatwee
b318c80c42dfeb2c2c510b160867b392:zyczliwialianci
dd67b8aa204c1209e15579defdf1ce0d:Hermenegilda997
7764442f70e644d8e8d6a40b5ab60f1c:sekuraksekurak
16c25aa83dff11805fa608a9e6bc006a:sekurak
cab69d0d40f1f29f82255880fd70a9c4:Hermenegilda
1dcc07acf54297a2634127a341a77aa6:Sekurak
2fc0f8a3c058fb21ba1114ad2f57e095:K@t@rzyn@
Co tu mieliśmy?
Hasło sekurak jego wersję z dwukrotnym powtórzeniem, wersję pisaną wielką literą. Kolejne trzy hasła to imię żeńskie Hermenegilda, jego wersja z przekształceniem przez dodanie cyfr oraz inne imię żeńskie z przekształceniem leet speak (czyli np. zmiana “e” na “3”). Ostatnie dwa hasła to złożenie dwóch słów ze słownika języka polskiego, bez polskich znaków (zyczliwialianci) oraz najtrudniejsze wg mnie ToLatwee, które jest zarówno kombinacją zarówno dwóch słów, jak i przekształceń.
Dodatkowe informacje
Michał napisał “10 złamanych hashy to już bardzo dobry wynik :-)
Osoby, które złamią 6 lub więcej hashy dostaną od nas małą nagrodę pocieszenia.”
Zakładam więc, że 6 haseł jest stosunkowo łatwych, dwa bardzo trudne. Konkurs ma trwać długo, ponad trzy doby, i to też może być wskazówka. Czyżby brute force?
Zauważam też, że pewne schematy haseł powtarzają się między ankietą i poprzednim konkursem
Początek
Najważniejszą rzeczą na początku jest ustalenie rodzaju hashy do złamania. Można w tym celu skorzystać z któregoś narzędzia przeznaczonego do tego celu, takiego jak Hash Analyzer. Można też zwyczajnie policzyć znaki albo ocenić na oko. Wszystko wskazuje na SHA1 i od tego zacznę. Jeśli założenie się potwierdzi, to dla mnie dobra wiadomość – dysponuję bowiem przyzwoitym sprzętem, który wg benchmarku Hashcata osiąga ok. 2700 MH/s dla SHA1.
Postanawiam zacząć od trzech rzeczy:
1. słownik z poprzedniego konkursu
2. powszechnie dostępny słownik z hasłami
3. słownik języka polskiego
W międzyczasie, gdy będę przygotowywał słowniki, uruchamiam hashcata w trybie brute force
./hashcat -O -a3 -m 100 hashez.txt
Liczę, że może być jakieś krótkie, niesłownikowe hasło. Przerywam go po sprawdzeniu haseł o długości 7 znaków, co trwa około dwóch minut. Nie udaje się w ten sposób złamać żadnego hasła.
Dzień pierwszy
Słownik powstały na podstawie poprzedniego konkursu to:
ToLatwee
ToLatwe
tolatwe
to
latwe
zyczliwialianci
zyczliwi
alianci
Hermenegilda
Hermenegilda997
sekuraksekurak
sekurak
Sekurak
K@t@rzyn@
Katarzyna
ToTrudnee
ToTrudne
trudne
Jak widać umieszczam tam zarówno dosłowną wersję poprzednich haseł, jak i słowo podstawowe. Jeśli to możliwe rozbijam hasło na składowe wyrazy. Użyłem też antonimów haseł lub ich składowych. Będę też dodawał tu wszystkie znalezione hasła, aby wzbogacać bazę. Ten customowy słownik ma być nieduży, tak naprawdę liczę, że większość pracy załatwią reguły.
Wykonanie polecenia
./hashcat -O -a0 -m 100 hashez.txt slownik.txt
jest błyskawiczne. Co prawda znalezione jest tylko jedno hasło
43108240da3d4d6a0abeaa7036753b24071758c2:sekurak
ale zyskuję pewność, że hashe do złamania to SHA1.
Jako powszechnie dostępnego słownika użyję RockYou, który jest de facto standardem przy zabawach typu CTF, więc liczę, że coś znajdę. Słownik zawiera ok. 14,3 mln haseł.
Sprawdzenie względem RockYou
./hashcat -O -a0 -m 100 hashez.txt rockyou.txt
nie zwiększa liczby znalezionych haseł.
Jako słownik języka polskiego wykorzystam ten dystrybuowany w Debianie w pakiecie wpolish, głównie dlatego, że mam go pod ręką. Zawiera 4,3 mln haseł.
Dzięki niemu znajduję kolejne hasło:
33b30e879c08451ec880976ad68c063528f798ca:startowe
Reguły
Pora na użycie reguł. Reguły hashcata to zbiory opisów przekształceń, które powodują, że z każdego hasła ze słownika tworzone są hasła pochodne. Reguły mogą być proste, mogą być bardzo skomplikowane. Można je tworzyć samodzielnie od zera, ale jest to czasochłonne. Hashcat w katalogu rules dostarcza popularne reguły.
Warto też zaopatrzyć się w OneRuleToRuleThemAll. Polecam też lekturę artykułu o tworzeniu tej reguły. Autorzy bardzo mocno zwracają uwagę na efektywność łamania haseł. Podobnie jak przy słowniku nie chcemy mieć największej możliwej wersji, ale taką, która znajdzie nam stosunkowo dużo haseł w możliwie krótkim czasie.
Na początek uruchamiam słowniki z regułą best64.rule. Wybieram ją, bo jest szybka. Okazuje się, że nie znajduje żadnych nowych haseł, ale wykonuje się błyskawicznie dla wszystkich słowników.
To skłania mnie do uruchamiania OneRuleToRuleThemAll.rule Zanim to zrobię, postanawiam dodać do słownika hasła z ankiety i ich pochodne:
Jw2&AH;a
trudnydohakowaniacosiek
osiemznaków!1
Barbara2023!
trudnydohackowaniacosiek
trudny
do
hackowania
cosiek
hackowanie
osiem
znaków
znaki
Barbara
Efekty są więcej niż dobre. Tym sposobem znajduję kolejne cztery hasła:
38e38f8657216671d26fac36565156400d39f076:startowe!
42320d13edb9bb3a0dbe99ce34755dfde965f5fe:Barbara2013!
0171355e6359e7ef94c622ece77f4b14e5c5a32c:trudnydohakowaniacosiek
3f461a4489cea80e7aad7c30f5000413fe76e445:st@rtowe
Niestety, uruchomienie OneRuleToRuleThemAll dla pozostałych słowników nie przynosi żadnych rezultatów. Czas wykonania to około 20 minut.
Tu dygresja – można korzystać jednocześnie z więcej niż jednego zestawu reguł. O ile ciężkie zestawy raczej nie dadzą się połączyć – przynajmniej na moim sprzęcie – o tyle lżejsze jak najbardziej. Szczególnie polecam przyjrzenie się tu zestawom z leet speak w nazwie.
Wpisuję hashe w wyszukiwarkę. Zdarza się, że hashe prostych haseł można znaleźć w ten sposób. Nie znajduję nic ciekawego w serwisach do łamania haseł, ale trafiam na ciekawy wątek.
Co prawda hashe, które tam widzę, już złamałem, ale wątek potencjalnie ciekawy, jeśli ktoś dopiero zaczyna. Wspominam o tym, bo często wpisanie hasha w wyszukiwarkę lub wykorzystanie dedykowanych serwisów bywa najszybsze.
Do głowy przychodzi mi skorzystanie z jeszcze jednego popularnego słownika Ignis. Od razu uruchamiam go z OneRuleToRuleThemAll i tak znajduję
81b75435176a5c99ed6aa83a16768b7e07a17156:trudnehaslo
Mam 7 haseł, jest 21:26, postanawiam wysłać pierwszy wynik.
Do sprawdzenia zostały brute force oraz ataki kombinacyjne, gdzie każdy wyraz z jednego słownika jest łączony z każdym wyrazem z drugiego słownika. Na wykorzystanie pierwszego wskazuje ankieta, drugie występowały w każdym konkursie i tego typu jest ostatnie znalezione hasło.
Kombinacje słowników
Oba ataki wydają się raczej czasochłonne, niemniej chwilę się bawię kombinacyjnymi, głównie by sprawdzić czasy wykonania. Przy sprawdzaniu czasów wykonania uruchamiam
./hashcat -O -a1 -m100 hashez.txt slownik.txt ignis-10M.txt
i w ten sposób znajduję kolejne hasło:
89e0e65a842001d95fe580de0fd8fd3f0dc765bf:sekuraktwitter
Czas wykonania: 3 sekundy. Dla porównania kombinacja ignis-10M ignis-10M jest szacowana na ponad dobę.
Warto tu zauważyć, że kolejność słowników przy ataku kombinacyjnym ma znaczenie.
./hashcat -O -a1 -m100 hashez.txt slownik.txt ignis-10M.txt
oraz
./hashcat -O -a1 -m100 hashez.txt ignis-10M.txt slownik.txt
sprawdzają różne kombinacje.
Kolejny raz daje się zauważyć przewaga małych słowników. Kończę dzień pierwszy odsyłając 8 haseł o 22:05.
Brute force
Przy porannej kawie uruchamiam ponownie hashcata w trybie brute force, z zamiarem sprawdzenia wszystkich haseł ośmioznakowych. Jest sukces, a nawet dwa:
232e72cfbc50518b72a93ccc2727a451cfdd2c17:qoiwejw1
dab1b92a5b4824139425387fc0d152ca795b6bf5:Ia4wkje9
To oznacza doskonale rozpoczęty dzień i uzyskanie bardzo dobrego – wg zapowiedzi – wyniku. Odsyłam 10 hashy o 6:13.
Koniec
Ostatnie hasło zajęło mi najwięcej czasu. Spodziewam się czegoś w stylu zyczliwialianci, jednak atak kombinacyjny przy wykorzystaniu wpolish szacowany jest na niemal 6 godzin. Do tego nie mam pewności, czy powinienem korzystać z wersji z polskimi znakami, czy przerobić go na wersję ”polskawą”.
W haśle zyczliwialianci zwraca uwagę jeszcze jedna rzecz. Jedno ze słów pochodzi z końca słownika, drugie z początku. Przygotowuję kolejne pliki, z początkiem i końcem:
head -n 400000 polish > slo_h_400k.txt
head -n 400000 polish > slo_t_400k.txt
Przy pomocy polecenia tr tworzę też wersje “polskawe” ww plików. Oraz całego polskiego słownika. Pojedynczy atak kombinacyjny na tak skróconym słowniku trwa około 2 minut na każde wywołanie. Jednak żaden z nich nie przynosi rezultatu, podobnie jak próby wykorzystania reguł na “polskawym” słowniku.
Ostatecznie decyduję się na uruchomienie ataku kombinacyjnego na “polskawej” wersji słownika, bo taka występowała w dotychczasowych konkursach. Udaje mi się w ten sposób znaleźć jedenaste hasło
c279a4caee4184000d3dc35487d1d968738811c6:mocnehaselko
Wynik odsyłam 19 lipca o 15:34 i jest to koniec sukcesów. Próbuję jeszcze skorzystać z bardzo dużego słownika wspomnianego w artykule w serwisie nfsec.pl, który świetnie radził sobie z poprzednim konkursem, ale bez sukcesu.
Hashem, którego nie udało mi się złamać, było
d5c49c3206b1c392c130907b9515ab6808cacd5b:ciezkatosprawa
Wygląda na możliwe do połamania atakiem kombinacyjnym z trzema słownikami, ale to będzie i bardzo czasochłonne, i hashcat nie wspiera tego “z pudełka”.
Linki
- https://nfsec.pl/security/6333
- https://sekurak.pl/polam-z-nami-troche-hasel-i-wygrywaj-sekurakowe-nagrody/
- https://sekurak.pl/wycieki-lamanie-hasel-na-zywo-konkurs-dla-lamaczy-z-super-nagrodami-zapraszamy-na-nasza-prezentacje-w-ramach-cisco-secuniversity/
- https://www.youtube.com/watch?v=xwfnqTjfApA
- https://sekurak.pl/zlam-sekurakowe-hasla-wygraj-klucz-yubikey-5-nfc/
- https://twitter.com/Sekurak/status/1680877895080718336https://sekurak.pl/kompendium-bezpieczenstwa-hasel-atak-i-obrona-czesc-2/#r14
- https://github.com/zacheller/rockyou
- https://github.com/ignis-sec/Pwdb-Public/
- https://www.hejto.pl/wpis/sekurak-oglasza-konkurs-zlam-hash-a-wygrasz-klucz
Czas na write-up _secmike’a
O konkursie dowiedziałem się przypadkiem, na jednym z portali społecznościowych Sekuraka. W pierwszej chwili chciałem zrezygnować z udziału w konkursie, ponieważ nie dysponuję profesjonalnym sprzętem (8-letni laptop z kartą graficzną GeForce 920M), który swoje już przeżył. Jednak chęć rywalizacji wygrała i postanowiłem spróbować swoich sił w konkursie.
Pierwszym krokiem była identyfikacja funkcji skrótu. Jak łatwo zaobserwować, każdy z hashy ma długość 20 bajtów co sugeruje, iż został wygenerowany algorytmem SHA1 lub RIPEMD-160. Dodatkowo, hasła mogły zostać przekształcone np. dwukrotnym SHA1(SHA1(pass)) lub połączeniem dwóch funkcji skrótu SHA1(MD5(pass)). Założyłem najprostszy wariant, a mianowicie algorytm SHA1.
Kolejnym krokiem był wybór narzędzia dedykowanego do łamania hashy. Istnieje wiele narzędzi umożliwiających odtworzenie danych wejściowych do funkcji skrótu. Na potrzeby konkursu skupiłem się jednak na najbardziej popularnym oprogramowaniu – hashcat.
Po pobraniu niezbędnego oprogramowania, przystąpiłem do działania, a mianowicie przeprowadziłem atak słownikowy, bez modyfikacji, bazując na słowniku języka polskiego (47 MB). W ten sposób udało mi się odzyskać pierwsze hasło: startowe.
Rys. 1 Atak słownikowy – słownik języka polskiego
Uzyskane hasło potwierdziło jednoznacznie zastosowany algorytm – SHA1. Dysponując wiedzą związaną z pierwszym hasłem, postanowiłem przeprowadzić atak hybrydowy, bazując na słowniku języka polskiego oraz zestawie autorskich reguł. W ten sposób udało mi się odnaleźć kolejne dwa hasła: st@rtowe i startowe!
Rys. 2 Atak hybrydowy – słownik języka polskiego + zestaw reguł
Następnie, postanowiłem zastosować słownik najbardziej popularnych haseł (ok. 6 milinów), dostępnych na stronie https://weakpass.com/. Do słownika dodałem listę słów powiązanych
z organizatorami (m.in. sekurak, securitum, yubikey, linkedin, twitter, facebook, instagram, itp.). Wynikiem przeprowadzonego ataku słownikowego były dwa kolejne hasła: sekurak i trudnehaslo.
Rys. 3 Atak słownikowy – słownik najbardziej popularnych haseł
Jak widać powyżej, w ciągu zaledwie kilku minut udało mi się odzyskać 5/12 haseł. Następne kilka godzin spędziłem na atakach hybrydowych, bazując na wyżej wymienionych słownikach. Niestety, żadne hasło nie zostało złamane.
Postanowiłem zmienić nieco podejście i zastosować atak kombinacyjny. W tym celu zastosowałem słownik języka polskiego, rozszerzonego o listę słów powiązanych z organizatorami. Wynikiem przeprowadzonego ataku były następujące hasła: mocnehaselko i sekuraktwitter.
Rys. 4 Atak kombinacyjny – rozszerzony słownik języka polskiego
Bazując na odzyskanych hasłach, postanowiłem utworzyć nowy słownik, składający się z haseł złożonych z dwóch słów. W tym celu wykorzystałem narzędzie combinator.exe, dostępne w pakiecie hashcat-utils. Czas utworzenie słownika był stosunkowo długi, dlatego w międzyczasie postanowiłem przeprowadzić OSINT. Analizując aktywność Sekuraka na twitterze znalazłem ciekawy post, dotyczący wyboru najtrudniejszego do złamania hasła.
Rys. 5 Ankieta dotycząca bezpieczeństwa haseł – Twitter
Hasło trudnydohakowaniacosiek wydawało mi się idealnym pomysłem na hasło konkursowe. Dodając ww. hasło do słownika udało mi się potwierdzić przypuszczenia.
Rys. 6 Atak słownikowy – autorski słownik OSINT
Bazując na wyżej przedstawionym poście, postanowiłem dostosować wymagania na hasła, do postaci haseł przedstawionych w poście, głównie z uwagi na potrzebę skrócenia czasu ataku. W pierwszym kroku przeprowadziłem analizę hasła Barbara2023!. Jak łatwo zauważyć, hasło składa się ze słowa kodowego Barbara, aktualnego roku oraz znaku specjalnego. Nie pozostało mi nic innego jak przeprowadzenie ataku maski, przyjmując słowo kodowe Barbara. Przy wykorzystaniu następującej maski:
-1 ?d?s Barbara?1?1?1?1?1
udało mi się odnaleźć kolejne hasło: Barbara2013!.
Rys. 7 Atak maski – słowo kodowe Barbara
Bazując na informacjach uzyskanych w poście, założyłem że pozostałe 3 hasła muszą być przynajmniej 8 znakowe i nie słownikowe. Nie miałem wiedzy jakiej dokładnie są postaci, a czas trwania ataku brutalnego na hasła 8 znakowe nie wchodził w grę, głównie z uwagi na moc obliczeniową sprzętu. Postanowiłem zastosować atak maski. W tym celu przygotowałem zestaw masek zakładając, że w haśle jest przynajmniej jedna wielka litera, jedna cyfra, jeden znak specjalny, itd. Dodatkowo, pobrałem zestaw najpopularniejszych masek 8 znakowych, dostępnych na jednym z portali internetowych. Po przygotowaniu pliku maski przeprowadziłem kolejny atak, w wyniku czego uzyskałem kolejne dwa hasła: Ia4wkje9 i qoiwejw1.
Rys. 8 Atak maski ½
Rys. 9 Atak maski 2/2
Konkurs zakończyłem z wynikiem 11/12 haseł. Ostatniego hasła niestety nie udało mi się odzyskać. Moce obliczeniowe sprzętu nie pozwoliły mi na przeprowadzenie ataku hybrydowego na hasła złożone z 3 słów kodowych w rozsądnym czasie.
Podsumowując, uważam iż konkurs nie wymagał potężnych zasobów obliczeniowych ani najnowszego oprogramowania łamiącego hashe, co zostało udowodnione na powyższych zrzutach ekranu. Wymagał przede wszystkim sprytu oraz nieszablonowego podejścia do zagadnienia. Zastosowanie ataku brutalnego oraz dostępnych w Internecie słowników mogło się okazać niewystarczające.
PS.
Zadanie złamania sekurakowych hashy zostało zlecone na portalu hashes.com. Niestety, społeczności udało się złamać jedynie 5/7 hasełek. Hasła ciezkatosprawa oraz trudnydohakowaniacosiek okazały się nie do złamania.
~_secmike
Write-up Keepera
Do łamania hashy używałem hashcata na systemie Windows, na dwóch maszynach jedna
z rtx 3080 druga z nvidia Quadro nvs310. Na dwie godziny za 10 $ wynająłem także maszynę
z 8 x rtx 4090, ale złamałem na nich tylko jedno hasło, które w dałoby się złamać też na słabszym sprzęcie.
Pierwsze podejście
Zawsze na początku warto sprawdzić, czy ktoś już kiedyś hashy nie złamał. Dlatego na początku użyłem hashes.com oraz hashmob.net
Obecnie te serwisy zwracają dużo więcej wyników niż w czasie konkursu. Tydzień temu zwracały tylko dwa hasła. Niestety nie mam zrzutów ekranu z tamtego okresu. Mała dygresja, po złamaniu siedmiu haseł, pozostałe pięć wrzuciłem na hashmob licząc, że może ktoś inny je złamie, ale bez skutku.
Słowniki
Kolejną rzeczą jaką wypróbowałem są oczywiście słowniki. Posiadam małą kolekcję słowników do odzyskiwania haseł. Zawiera ona między innymi:
· słowniki seclists,
· słowniki dostępne w linux kali,
· słownik crackstation,
· Top2Billion-probable-v2,
· słowniki hashes.org od 2015 do 2021 roku,
· słownik hashmob z lutego bieżącego roku,
· kilka słowników z wycieków,
· polską listę cert,
· polskie imiona męskie, żeńskie i nazwiska,
· polskie pesele,
· polski słownik premium_gigant (tak, tak się nazywa :D nie pamiętam skąd go mam, bardzo duży ale całkiem skuteczny na polskie hasła),
· słowa występujące w języku polskim,
· polskie miasta,
· jeszcze parę innych, mniejszych i bardziej celowanych słowników.
Łącznie około 110 GB.
Polecenie wyglądało następująco:
.\hashcat.exe -m 100 -a 0 -O -w 3 ..\hashes\sekurak.txt ..\dict\*
gdzie poszczególne parametry oznaczają:
-m 100 typ hasha SHA1
-a 0 atak słownikowy
-O użycie zopytmalizowanych kernili do hashcata, poprawia wydajność
-w 3 intensywność pracy, im większe tym bardziej zacina komputer, ale szybciej liczy
Niska skuteczność skłoniła mnie do zrobienia nowego słownika, już dawno miałem to zrobić i wreszcie trafiła się motywacja. Niestety nowy nie dał oczekiwanych rezultatów.
Rules
Kolejną metodą jest użycie tzw. rules. Są to zestawy przekształceń, których hashcat dokonuje na hasłach ze słownika, np.
c ?1?! |
Oznacza to, że pierwszą literę hasła należy skapitalizować a na końcu dodać znaki 1!. W swojej kolekcji mam także kilka obszernych plików z regułami, m.in. z hashmob.net. Najciekawszą jest chyba OneRuleToRuleThemAll.rule. Jest to ogromny zbiór różnych plików .rule, który zawiera najpopularniejsze przekształcenia i potrafi znacząco podnieść skuteczność pojedynczego słownika.
.\hashcat.exe -m 100 -a 0 -O -w 3 ..\hashes\sekurak.txt ..\dict\polish\cebulka_final2.txt -r ..\rules\OneRuleToRuleThemAll.rule
Maski
Innym trybem pracy hashcata jest tryb -a 3 czyli atak z wykorzystaniem masek. Maski są poleceniami dla hashcata, na jakiej pozycji jaki zestaw znaków należy sprawdzić. Trochę brute force, ale dzięki odpowiedniemu manipulowaniu maską można znacznie zawęzić przestrzeń poszukiwań, np.
?u?l?l?l?d?d?d?s
Powyższa maska oznacza, że hashcat ma sprawdzić wszystkie możliwości zaczynające się dużą literą (?u – uppercase) następnie mają w haśle się znajdować trzy małe litery (?l – lowercase) po nich mają nastąpić trzy cyfry (?d – digit) a na końcu ma znajdować się znak specjalny (?s – special). Tym sposobem można złamać, np. słynne Dupa123!.
W hashcacie dostępne są domyślne maski w folderze /masks/. Jedna z nich zadziałała i dała mi kolejne hasła, m.in. qoiwejw1. Maski te powstają w wyniku analizy prawdziwych haseł i tego jakie ludzie mają tendencje przy ich tworzeniu, np. często duża litera będzie na początku hasła. Przez cały tydzień trwania konkursu stosowałem wiele różnych masek i nie sposób je spamiętać ani które hasła się udało nimi złamać.
Combinator
Combinator to kolejny tryb hashcata, który pozwala na łączenie dwóch słowników w taki sposób, że do każdego słowa z pierwszego słownika, dokładane jest każde słowo z drugiego. Atak ten można wykonać używając tego samego słownika co da nam wtedy wszystkie kombinacje dwóch haseł ze słownika. Jako, że dysponowałem słownikiem zawierającym wszystkie polskie wyrazy w każdej odmianie, to spróbowałem tego ataku licząc, że hasła mogą się składać z dwóch polskich słów. Tak udało się zdobyć mocnehaselko.
.\hashcat.exe -m 100 -a 1 -O -w 3 ..\hashes\sekurak.txt ..\dict\polish\slowa.txt ..\dict\polish\slowa.txt
Dodatkowo do tego trybu można dodawać reguły do każdego słownika niezależnie (przełączniki –rule-left i –rule-right). Próbowałem także ataku z paroma regułami, np. kapitalizacja pierwszych liter wyrazów i jakieś znaki/cyfry na końcu, ale bez skutku.
Niestety kombinator nie pozwala na łączenie większej ilości słowników. Podjąłem próbę połączenia słownika z wyrazami polskimi sam ze sobą tak by tworzyć kombinacje dwóch słów i ponowić atak tak, żeby użyć kombinacji trzech słów. Posłużyłem się do tego programem combinator z hashcat-utils-1.9. Musiałem gdzieś popełnić błąd albo program do łączenia się zawiesił a myślałem, że skończył bo tą metodą powinien złamać ostatnie brakujące hasło ciezkatosprawa. Szkoda, bo pomysł był, wykonanie zawiodło.
Cewl i twitter
Cewl to narzędzie służące do zbierania treści ze stron internetowych i generowania z nich słowników do łamania haseł. Puściłem cewl na stronę sekuraka, na której znajdował się wpis o konkursie i tak udało się odzyskać kolejne hasło.
cewl -d 2 -m 5 -w sekurak_twitter.txt https://sekurak.pl/zlam-sekurakowe-hasla-wygraj-klucz-yubikey-5-nfc/
W ten sposób wytworzony słownik pomógł złamać kolejne hasło sekuraktwitter. Skoro cewl okazał się skuteczny przejrzałem inne media sekuraka i trafiłem na ankietę na twitterze. Jako, że Barbara2023! miałem już złamane, dało mi to do myślenia, a co jeżeli to jest ogromna podpowiedź? Spróbowałem innych haseł z ankiety i okazało się, że trudnydohakowaniacosiek był jednym z nich. Próbowałem także robić słowniki z innych stron sekuraka oraz listy imion i nazwisk redaktorów oraz autorów książki, bezskutecznie.
Inne próby
Czytając writeup można odnieść wrażenie, że zadanie należało do łatwych, jednak takie nie było. Wiele pomysłów, które przetestowałem nie dało żadnego rezultatu a zabrało znaczną część czasu. Sugerując się hasłem osiemznaków!1 z ankiety próbowałem wielu masek z zestawami polskich znaków w różnych kodowaniach pasujących do hasła z ankiety, np.
.\hashcat.exe -m 100 -a 3 -O -w 3 ..\hashes\sekurak.txt -1 .\charsets\standard\Polish\pl_cp1250.hcchr -2 ?1?l ?2?2?2?2?2?2?2?2?s?d
Próbowałem też przełączników ze zmienionym kodowaniem, np. -m 170. Bardzo dużo też pracowałem z zestawem narzędzi PACK, które pozwalają generować pliki reguł z masek i nie tylko. Niestety nie można łączyć masek ze słownikami, więc te narzędzia okazały się nieprzydatne. Jednym z ciekawszych jest narzędzie policygen, które na podstawie polityki haseł, np. minimum jedna duża litera, jeden znak specjalny itp. tworzy pliki masek do hashcata. Podjąłem też próbę przeprowadzenia ataku PRINCE. Jest to specjalny atak, który przetwarza słownik na potencjalne hasła z wykorzystaniem zaawansowanych technik statystycznych jednak nie doszedł on do skutku, gdyż ze względu na swoją ogromną złożoność pamięciową nie udało mi się generować słowników jeżeli słownik wejściowy miał więcej niż 100 wyrazów. Przy 300 wyrazach zajął mi cały ram i dodatkowo 50 GB pliku stronicowania.
Ostatnim desperackim strzałem był atak wykorzystujący konwencję jednego z polskich banków do tworzenia haseł do dokumentów przesyłanych mailem. Było to ostatnie 6 cyfr peselu oraz do 10 znaków nazwiska panieńskiego matki. Miałem nazwiska żeńskie i pesele wygenerowane wcześniej więc uruchomiłem ten atak.
.\hashcat.exe -m 100 ..\hashes\sekurak.txt -a 1 ..\pesele_MK_1980_2005.txt ..\polsih_female_names_normalized_caps_fixed.txt --rule-left=x56 --rule-right=x0A
Jak widać był to straszny overthinking.
Podsumowanie
W ciągu pięciu dni złamałem jedenaście z dwunastu hashy stosując miks różnych technik i podejść.
81b75435176a5c99ed6aa83a16768b7e07a17156:trudnehaslo
38e38f8657216671d26fac36565156400d39f076:startowe!
42320d13edb9bb3a0dbe99ce34755dfde965f5fe:Barbara2013!
0171355e6359e7ef94c622ece77f4b14e5c5a32c:trudnydohakowaniacosiek
89e0e65a842001d95fe580de0fd8fd3f0dc765bf:sekuraktwitter
3f461a4489cea80e7aad7c30f5000413fe76e445:st@rtowe
33b30e879c08451ec880976ad68c063528f798ca:startowe
43108240da3d4d6a0abeaa7036753b24071758c2:sekurak
232e72cfbc50518b72a93ccc2727a451cfdd2c17:qoiwejw1
dab1b92a5b4824139425387fc0d152ca795b6bf5:Ia4wkje9
c279a4caee4184000d3dc35487d1d968738811c6:mocnehaselko
Z pewnością zadanie było wykonalne na słabszym sprzęcie, jednak mocne GPU dawało przewagę gdyż można było testować dużo więcej pomysłów. Łamanie hashy to z pewnością zadanie ciekawe i emocjonujące wymagające nieszablonowego myślenia i gruntownej znajomości stosowanych narzędzi. Dzięki konkursowi z pewnością nauczyłem się lepiej obsługiwać hashcata i inne pomocnicze narzędzia.
~Keeper
Wszystkim zwycięzcom gratulujemy, a od siebie możemy dodać, że potwierdza się zasada, że długość hasła (minimum 3 wyrazy, 15+ znaków) jest ważniejsza niż jego złożoność, zgodnie z rekomendacjami NIST i FBI.
Dołącz do Akademii Sekuraka tutaj: https://sklep.securitum.pl/sekurak-academy-2023
Zapisz się na Mega Sekurak Hacking Party w Krakowie: https://sklep.securitum.pl/mshp-krakow-onsite
~Tomek Turba
Skąd wiedzieliście kto ile haseł pozyskał? O wynikach pisali uczestnicy do was?
tak, takie były zasady, opisane w momencie ogłoszenia akcji
Kawał wiedzy, dzięki :)
fajne :)