Silne hasła i użyteczność haseł - w jaki sposób hasła są łamane i jakie hasła są bezpieczne?

sages.pl 4 lat temu
Każdego dnia, zarówno w pracy zarówno jaki i w życiu prywatnym wpisujemy dziesiątki haseł. Logujemy się do komputera, poczty, sieci Wi-Fi, Facebooka, Instagrama, LinkedIna, sklepu internetowego, konta pacjenta i wielu innych aplikacji. Zdecydowana większość, jeżeli nie wszystkie z tych logowań wymagają od nas podania hasła. Czy odpowiednio dbamy o bezpieczeństwo tych haseł?

Statystyki wykonane przez jednego z badaczy bezpieczeństwa pokazują, iż 86% wykorzystywanych przez użytkowników haseł jest uznawana za bardzo słabe lub znajdujące się na liście haseł, które wyciekły w przeszłości, a błędy związane z podatnością na ataki na hasło znajdują się na liście OWASP Top 10, czyli liście dziesięciu najczęściej występujących podatności aplikacji internetowych.

Na temat OWASP, czyli Open Web Application Security Project warto wspomnieć, iż jest to organizacja non-profit, której celem jest poprawa stanu bezpieczeństwa aplikacji poprzez tworzenie artykułów, metodologii, dokumentacji, narzędzi i technologii o otwartym dostępie. Jednym z najbardziej znanych projektów tej organizacji jest właśnie lista OWASP Top 10.

Zanim przejdziemy do tematu łamania haseł i rekomendacji dotyczących bezpiecznego hasła odsyłam do humorystycznej grafiki pochodzącej z serwisu [xkcd](https://xkcd.com/936/). Bardzo dobrze ilustruje ona tematykę złożoności haseł i ich użyteczności. Nie zawsze losowe hasła będą najlepszym rozwiązaniem, a na pewno zawsze ich zapamiętanie będzie stanowiło poważne wyzwanie.

![rys1.webp](/uploads/rys1_6804e0e648.webp)


## Sposoby łamania haseł i cechy haseł bezpiecznych

Techniki łamania haseł można podzielić na kilka rodzajów. Hasło można zdobyć od użytkownika przez **atak socjotechniczny**, wykorzystujący manipulację i podstęp lub zgadując je na podstawie informacji o użytkowniku i listy najczęściej wykorzystywanych haseł. Również wykorzystując całkowicie techniczne ataki jak **atak brute force**, polegający na znalezieniu hasła poprzez sprawdzenie skryptem wszystkich możliwych kombinacji oraz **atak słownikowy** (lub połączenie tych dwóch rodzajów ataku). Nie przed każdym atakiem twórcy aplikacji są w stanie ją zabezpieczyć. W przypadku „pytania” i „zgadywania” można jedynie edukować użytkowników oraz blokować możliwość wprowadzenia zbyt prostych haseł, jednak w przypadku pozostałych form ataku można stosować zabezpieczenia techniczne.

Standardowo hasło można nazwać bezpiecznym, o ile czas jego złamania wynosi powyżej 1 miesiąca (systemy niezawierające ważnych danych), 1 roku (większość systemów/aplikacji), 10 lub choćby 100 lat (systemy krytyczne). Na potencjalny **czas łamania hasła** wpływa oczywiście ilość wykorzystanych zasobów obliczeniowych, które można szacować na podstawie profilu potencjalnego atakującego, przykładowo agencja rządowa, czy duża organizacja mogłaby dysponować dużo większymi zasobami obliczeniowymi niż pojedynczy hacker z ograniczonymi zasobami i środkami na wynajęcie sieci botnetów (botnet to sieć składająca się z komputerów zainfekowanych złośliwym oprogramowaniem i kontrolowanych przez atakującego). Jednak niezależnie od zasobów obliczeniowych **dłuższe hasła** zawsze zapewniają większą kombinację znaków, przez co trudniejsze jest ich złamanie.
Poza długością duże znaczenie ma **złożoność**. Hasła składające się z mniej niż 20 znaków są zwykle uważane za słabe, jeżeli składają się tylko z małych liter alfabetu łacińskiego. Najłatwiejsze do złamania i niezapewniające praktycznie żadnej ochrony są hasła zawierające najczęściej wykorzystywane słowa i hasła słownikowe. jeżeli spotkaliście się z listą 10 najbardziej popularnych haseł, to mają one właśnie taką postać. Tutaj, w zależności od próbki danych pojawiają się takie hasła jak:

* 123456
* 123456789
* qwerty
* password
* 111111
* 12345678
* abc123
* 1234567
* password1
* 12345

Jednak kto z nas nigdy nie użył hasła qwerty? Dlaczego w takim razie tak często używamy tego typu haseł? Odpowiedź na to pytanie jest prosta - zależy nam na tym, żeby łatwo zapamiętać hasło, czyli ważniejsza jest dla nas użyteczność niż bezpieczeństwo.

## Jakie hasła są nie tylko bezpieczne ale też łatwe do zapamiętania?

Wymienione wyżej hasła, poza łatwością złamania mają jeszcze jeden element wspólny - są łatwe do zapamiętania, czyli wygodne, a wygoda i łatwość korzystania z systemu jest przecież bardzo ważna.
Użytkownicy wybierają hasła, które są w stanie zapamiętać. Nie jest praktycznie możliwe zapamiętanie długich losowych haseł do kilkudziesięciu różnych serwisów, z kolei zmuszanie użytkowników do tworzenia takich haseł powoduje, iż są one często zapominane lub też zapisywane, najczęściej w łatwo dostępnym miejscu, co znacznie zmniejsza ich bezpieczeństwo.
Zatem patrząc na hasła z punktu widzenia użyteczności, potrzebujemy haseł przede wszystkim łatwych do zapamiętania. Jak wygląda bezpieczeństwo haseł składających się ze słów łatwych do zapamiętania? Na to pytanie częściowo odpowiedział już podlinkowany komiks. **Hasło składające się z kilku słów zdania np. tego, o czym myślimy, wiersza, piosenki (najlepiej, żeby nie były to najpopularniejsze utwory) rozdzielonych znakami specjalnymi wraz z liczbami jest praktycznie nie do złamania** z wykorzystaniem ataków brute force i słownikowych. Przykładowo hasło **Niebieska$55$Sukienka** jest znacznie trudniejsze do złamania od losowo wygenerowanego hasła J4fS>7, a co najważniejsze jest znacznie łatwiejsze do zapamiętania.

## Bezpieczeństwo haseł z punktu widzenia użytkownika

Jako świadomi użytkownicy do każdego z serwisów powinniśmy używać złożonych, ale też łatwych do zapamiętania haseł, utworzonych zgodnie z zamieszczonymi wyżej wskazówkami. Ponadto bardzo ważne jest, aby każde z haseł było **unikalne** oraz zmieniane raz na jakiś czas. Dzięki unikalności haseł uchronimy się przed sytuacją, gdy wyciek danych z jednego z serwisów powoduje przejęcie kont również w innych serwisach, w których korzystamy z tego samego hasła.
Haseł nie należy zapisywać otwartym tekstem w łatwo dostępnych miejscach (kartka przyklejona do monitora nie będzie dobrym pomysłem ☺) ani też ich udostępniać. W przypadku problemów z zapamiętaniem haseł można korzystać z menedżera haseł np. KeePass.
Wróćmy na chwilę do wspomnianych statystyk dotyczących wykorzystania słabych haseł. Zostały one wyliczone dzięki bazie danych kont i haseł, które wyciekły w ramach incydentów naruszenia bezpieczeństwa danych. Taką bazę danych można znaleźć nie tylko na forach dla hackerów albo w darknecie (darknet to ukryta część Internetu). Możemy ją łatwo przeszukać korzystając z [Have I Been Pwned](https://haveibeenpwned.com/) . Jest to serwis, który gwałtownie i bezpłatnie pozwala sprawdzić, czy nasze hasło już wyciekło i powinniśmy je natychmiast zmienić. Wyszukiwać możemy po naszym adresie email, możemy też ustawić powiadomienie, w przypadku pojawienia się naszego adresu email w danych pochodzących z kolejnych wycieków. Poniżej przykładowy screen z wynikami sprawdzenia konta w serwisie.

![rys2.webp](/uploads/rys2_294e7d110a.webp)


Wynik zawiera krótką informację o incydencie wraz z listą danych, które zostały ujawnione, w moim przykładzie są to Email addresses, Geographic locations, IP addresses, Names, Passwords.

## Bezpieczeństwo haseł z punktu widzenia twórców aplikacji

Aby uchronić nieświadomego użytkownika, przed ustawieniem słabego hasła do aplikacji należy ustawić **politykę haseł** odpowiednio dobraną do aplikacji i krytyczności przechowywanych w niej danych. OWASP rekomenduje wprowadzenie wymagań na długość hasła, jak i jego złożoność. Aplikacja powinna sprawdzać minimalną długość hasła, najlepiej 10 znaków oraz zachęcać do ustawiania haseł (zdań lub kombinacji słów), które mogą być znacznie dłuższe niż typowe hasła, a jednocześnie łatwiejsze do zapamiętania tak jak we wcześniejszych przykładach.
Zalecane jest również wprowadzenie ochrony przed atakami automatycznymi w postaci dodawania kilkusekundowych odstępów pomiędzy kolejnymi logowaniami oraz blokowania konta lub też spowalniania logowania w przypadku wykrycia kilku następujących po sobie nieudanych prób logowania. Warto umożliwić również **logowanie wieloskładnikowe**, czyli tzw. 2FA/MFA, gdzie poza loginem i hasłem użytkownik musi podać np. kod z wiadomości SMS.
Można również zaimplementować funkcjonalność sprawdzenia **siły hasła** oraz weryfikację czy hasło nie znajduje się na liście tysiąca najsłabszych haseł. Należy również w miarę możliwości uniemożliwić wylistowanie loginów użytkowników aplikacji.
Podsumowując, zarówno ustawiając hasła do naszych prywatnych kont w aplikacjach, jak i tworząc lub testując aplikację, nie można zapominać o bezpieczeństwie haseł. W aplikacjach zawsze należy wprowadzać wymagania na złożoność hasła, tak aby użytkownik nie miał możliwości utworzenia bardzo słabego hasła. Jako użytkownicy również powinniśmy pamiętać o bezpieczeństwie haseł tworząc hasła złożone, ale też łatwe do zapamiętania, najlepiej w formie kilku słów rozdzielonych znakami specjalnymi.
Idź do oryginalnego materiału