Bitwa o hasła - czy postawienie kropki wiele zmieni?

Po co ta cała afera?

Dzisiaj niemal na każdym kroku spotykamy się z uwierzytelnianiem. Logujemy się do sieci społecznościowych, poczty, gier i większości innych usług, które znajdziesz w internecie. Od tej relatywnie mało skomplikowanej metody często zależy dostęp również do ważniejszych rzeczy, takich jak np. Profil Zaufany bądź bankowość elektroniczna.

W informatyce zazwyczaj wyróżniamy trzy podstawowe rodzaje uwierzytelniania:

  • Za pomocą hasła
  • Za pomocą przedmiotu posiadanego przez użytkownika, mowa tutaj o kluczach sprzętowych takich jak yubikey
  • Za pomocą własnego ciała tj. zabezpieczenia biometryczne

Hasła, na których się dzisiaj skupimy, możemy bez żadnych przeszkód nazwać najpopularniejszą metodą, są stosowane wszędzie. Dlatego ważne jest, aby znać zasady bezpieczeństwa, aby chronić nas i nasze dane przed nieuprawnionym dostępem.

Skąd mam wiedzieć, że hasło jest bezpieczne?

Ogólna zasada jest taka, że hasło jest tym silniejsze, im bardziej jest ono skomplikowane. Dzięki temu potencjalny atakujący musi sprawdzić jak najwięcej możliwych kombinacji przed natrafieniem na tą jedną poszukiwaną przez niego w danym momencie. Powszechnie zaleca się (choć wymuszanie tego jest złą praktyką, o czym będzie mowa w dalszej części tekstu) mieszanie ze sobą liter, cyfr i znaków specjalnych — dlaczego? Kombinatoryka. Liczba możliwych haseł jest po prostu wariacją z powtórzeniami: nk, gdzie n jest wielkością zbioru znaków, które mogą złożyć się na hasło, a k jest długością hasła. Rozważmy zatem różne ilości możliwych kombinacji dla ośmioznakowych haseł, uwzględniając różnorodne zestawy znaków:

  • Przy założeniu zbioru składającego się z cyfr od 0 do 9, wzór przyjmuje postać 10⁸, co oznacza łącznie 100000000 możliwych kombinacji. Jest to stosunkowo niewielka liczba, szczególnie biorąc pod uwagę dzisiejsze możliwości komputerów.
  • Kolejnym scenariuszem jest połączenie 10 znaków numerycznych z 26 znakami małymi liter. W takim przypadku mamy do czynienia z 36⁸ kombinacjami, czyli 2821109907456 możliwościami. Niemniej jednak, mimo że to już większa liczba, nadal nie jest to ogromna ilość, zważywszy na potencjał współczesnego sprzętu.
  • Gdy dodamy do zestawu wielkie litery oraz znaki specjalne (ogółem 33 znaki zgodnie z kodem ASCII), sytuacja staje się korzystniejsza. Liczba dostępnych kombinacji wzrasta do 95⁸, co daje nam aż 6634204312890625 możliwości.

W poprzednim fragmencie poruszono kwestię narzucania użytkownikom stosowania kombinacji cyfr, liter oraz znaków specjalnych, którą określono jako złą praktykę. Jednakże warto się zastanowić, dlaczego ona jest odradzana? Kluczowym powodem jest fakt, że jako ludzie na ogół dążymy do ułatwienia sobie życia i nie inaczej jest z hasłami. Prowadzi to do powszechności haseł typu 1WaletLab@. Nasuwać się może pytanie co jest złego w takim haśle, w końcu wykorzystuje ono zarówno małe jak i wielkie litery, cyfrę i znak specjalny, wykorzystuje ono jednak również sztuczki naszego mózgu ułatwiające jego zapamiętanie, w końcu łatwiej jest zapamiętać, że na początku znajduje się cyfra, a na końcu znak specjalny. Jednak w ten sposób nie tylko prowadzimy do istotnego zmniejszenia korzyści płynących z wprowadzania różnorodności, ułatwiamy też w ten sposób zadanie cyberprzestępcom, którzy doskonale zdają sobie sprawę z tych ludzkich skłonności i je bezwzględnie wykorzystają przeciwko nam. Jak więc w inny sposób dbać o tworzenie mocniejszych haseł przez użytkowników i co właściwie przyczynia się do ich odporności na złamanie (rozumiane jako odgadnięcie hasła)? Odpowiedzią na to pytanie jest jak największa długość hasła, a tu pojawia się znowu kluczowa rola matematyki. Poprzez wykorzystanie nawet niewielkiego zbioru znaków w haśle, ale zwiększenie długości otrzymanego w ten sposób hasła (a z lekcji matematyki co niektórzy mogą sobie w tym miejscu przypomnieć pojęcie ciągu), ilość dostępnych kombinacji rośnie wykładniczo wraz z każdym kolejnym znakiem hasła.

W literaturze spotyka się różnorodne wartości długości hasła, które pozwalają je określić jako bezpieczne. Jednakże powszechnie uznawanym minimum jest 12 znaków w haśle (np. zgodnie z OWASP Application Security Verification Standard 4.0). Dlaczego akurat 12? W przeciwieństwie do wcześniejszego standardowego minimum wynoszącego 8 znaków, hasło składające się z mieszanki cyfr, liter i znaków specjalnych oferuje 6634204312890625 różnych kombinacji, hasło składające się z samych małych liter alfabetu łacińskiego, ale liczące 12 znaków, może wygenerować aż 95428956661682176 kombinacji, czyli ponad 14-krotnie więcej.

Zauważmy zatem, że długość hasła ma znaczący wpływ na jego bezpieczeństwo. Niemniej jednak niektórzy mogą zauważyć pewien problem: jeśli użytkownicy przy krótszych hasłach już mieli skłonność do uciekania się po uproszczenia w celu ułatwienia zapamiętania, zwiększenie jego długości może tylko pogłębić ten problem.

Jednakże wydłużenie hasła umożliwia stosowanie tzw. fraz dostępowych (passphrase). Przykładem może być hasło składające się z połączenia różnych słów, na przykład WaletLabPiszeOCyberbezpieczeństwie. To długie i złożone hasło, a jednocześnie łatwe do zapamiętania!

Wspomniany przykład ma również dla nas (a dla cyberprzestępcy tym bardziej) pewną niespodziankę — zawiera polski znak. To kolejny skuteczny sposób na wzmocnienie siły hasła, ponieważ są one traktowane przez systemy komputerowe jako znaki specjalne, jednocześnie posiadając jeszcze większą różnorodność niż wcześniej wspomniany klasyczny zestaw znaków ASCII. Jeśli system na to pozwala (jak zaleca np. wcześniej wspomniany OWASP Application Security Verification Standard 4.0), warto wykorzystać bogactwo polskiego języka do tworzenia bardziej złożonych haseł.

Jak ci źli próbują radzić sobie z naszymi hasłami?

Kiedyś ataki brute force były jednym z najpopularniejszych sposobów na złamanie haseł i uzyskanie dostępu do chronionych danych. Metoda ta polega na próbowaniu wszystkich możliwych kombinacji znaków, aż do znalezienia poprawnego hasła. Niestety dla cyberprzestępców, technika ta jest skuteczna głównie w przypadku krótkich i prostych haseł, a gdy użytkownicy wybierają coraz dłuższe i coraz bardziej skomplikowane hasła, metoda ta jest trudna, a nawet niemożliwa do wykonania, Drastyczny wzrost liczby możliwych kombinacji hasła sprawia, że metoda brute force traci rację bytu w sensownej perspektywie czasowej.

Jak hakerzy próbują dorwać nasze hasła — Hashcat

Hashcat to wysoce zaawansowane narzędzie do łamania haseł, które wykorzystuje różnorodne strategie i optymalizacje, aby skutecznie testować setki tysięcy kombinacji w krótkim czasie. Co ważne, Hashcat potrafi korzystać z mocy obliczeniowej kart graficznych, co przyspiesza proces łamania haseł nawet o kilka rzędów wielkości. Dzieje się tak, ponieważ architektura kart graficznych, z jej dużą ilością rdzeni obliczeniowych, dużą pamięcią i zdolnością do równoczesnego wykonywania wielu zadań, sprawia, że są one dużo bardziej wydajne w zadaniach związanych z łamaniem haseł. Wracając do Hascata, należy wspomnieć, że oferuje on wiele metod, które dodatkowo podnoszą efektywność łamania haseł. Wśród nich znajdują się ataki słownikowe oraz ataki hybrydowe (łączące słowniki z dodatkowymi znakami ustalanymi na drodze starego dobrego brute force’a).

Słownik?

Słownik haseł stanowi bazę danych, zawierającą ogromną liczbę potencjalnych haseł, które mogą być wykorzystane podczas ataku. Istotną cechą słowników jest ich zróżnicowanie — obejmują one popularne hasła, frazy dostępowe, sekwencje znaków oraz inne potencjalnie używane kombinacje.

Proces generowania słowników zazwyczaj rozpoczyna się od zbierania danych. Hakerzy mogą wykorzystywać różne źródła, takie jak wycieki haseł ze złamanych baz danych, forów internetowych, mediów społecznościowych czy innych publicznie dostępnych źródeł (dlatego nigdy nie należy używać tego samego hasła w różnych miejscach). Następnie, zebrane dane są analizowane i przetwarzane w celu stworzenia słownika, który może być ogólny, kiedy cyberprzestępcy próbuje złamać jak najwięcej haseł np. w sytuacji kiedy uzyska dostęp do bazy danych użytkowników jakiegoś serwisu, bądź spersonalizowany, kiedy haker się na nas po prostu uwziął i chce tylko nasze hasło. Doskonałym przykładem jest narzędzie CUPP.

Jak hakerzy generują spersonalizowane słowniki

W celach edukacyjnych stworzymy prosty słownik za pomocą wyżej wymienionego narzędzia.

  • Aby cokolwiek zacząć, musimy pobrać repozytorium z Githuba:
git clone https://github.com/Mebus/cupp
  • Po pobraniu repozytorium przechodzimy do katalogu i uruchamiamy plik cupp.py:
cd cupp
python3 cupp.py
  • Wyświetli się nam widok pomocy, w którym opisywane są wszystkie dostępne opcje programu:

zrzut_ekranu_z_cupp

  • W tym momencie najbardziej interesująca będzie opcja -i która odpowiada za tryb interaktywny, w którym to program zadaje nam pytanie i na podstawie naszych odpowiedzi będzie generował hasła.

  • Przejdźmy zatem znowu do terminala i wywołajmy następującą komende:

python3 cupp.py -i

cupp_usage

  • W tym momencie program będzie zadawał nam szereg pytań dotyczących “ofiary”.

pytania_cupp

quest

  • Po odpowiedzeniu na wszystkie pytania, narzędzie zaczyna generować dla nas słownik z hasłami

generated_dict

Co robić, jak żyć?

Podsumowując, wzmocnienie ochrony przed łamaniem haseł wymaga skoncentrowania się na kilku kluczowych obszarach. Tworzenie długich i różnorodnych haseł, unikanie ich powtarzania w różnych miejscach oraz aktywowanie uwierzytelniania dwuetapowego stanowią fundamentalne kroki w zapobieganiu atakom.