Odgadywanie nazw użytkowników i haseł metodą siłową
Problem
Aplikacja internetowa nie posiada w tym momencie mechanizmu blokowania konta, napastnik może zatem próbować logowania metodą siłową, odgadując wiele często używanych nazw użytkowników i haseł. Zwykle tego rodzaju atak obejmuje siłowe odgadywanie listy prawidłowych nazw użytkowników, a następnie siłowe odgadywanie ich haseł.
Rozwiązanie
Celem niniejszego testu jest sprawdzenie, czy napastnik zdoła zdobyć prawidłowe nazwy użytkowników aplikacji oraz czy będzie mógł odgadywać hasła tak długo, aż znajdzie jedno, które będzie poprawne. Aby dowiedzieć się, czy aplikacja celowo bądź nieumyślnie ujawnia nazwy użytkowników, wykonaj następujące czynności:
Napastnik może spróbować zalogować się, wykorzystując nieistniejącą nazwę użytkownika, a następnie logować się z nazwą użytkownika, która istnieje, ale z nieprawidłowym hasłem. Jeśli odpowiedź aplikacji w tych dwóch przypadkach jest różna, oznacza to, że napastnik zdoła znaleźć listę nazw użytkowników w systemie.
W aplikacji powinien istnieć mechanizm resetowania hasła dla użytkowników, którym zdarzyło się je zapomnieć. Ponieważ nazwy użytkowników muszą być unikatowe, aplikacja powinna informować użytkownika, czy nazwa, której próbuje użyć, już istnieje w systemie. Mechanizm ten może być wykorzystany przez napastników do wyszukania nazw użytkowników.
Jeśli w dowolnym z wymienionych testów aplikacja pozwoli napastnikowi na uzyskanie prawidłowych nazw użytkowników, wynik tej części testu będzie dla niej dodatni. W wybranej aplikacji może to być fakt godny odnotowania bądź nie. Jeśli jednak wynik kolejnego testu okaże się dodatni, będzie to oznaczało, że zajęcie się przypadkiem jest konieczne.
Następny krok ma na celu stwierdzenie, czy aplikacja umożliwia odgadywanie haseł metodą siłową. Nawet jeśli napastnik nie może uzyskać przekonującej listy nazw użytkowników na podstawie informacji z aplikacji, może spróbować zastosować siłową metodę odgadywania haseł dla popularnych nazw użytkowników — takich, które mogą być prawidłowe w aplikacji (na przykład jkowalski).
Jeśli dla aplikacji istnieje wymaganie dotyczące mechanizmu blokowania kont po określonej liczbie nieudanych prób podawania danych identyfikacyjnych, należy przetestować ten mechanizm poprzez kilkakrotne wprowadzenie nieprawidłowego hasła dla prawidłowej nazwy użytkownika (zgodnie z wymaganiami). Następnie należy sprawdzić, czy po takiej próbie konto zostało zablokowane (w tym celu należy wprowadzić tę samą nazwę użytkownika wraz z odpowiadającym jej prawidłowym hasłem). Jeśli konto zostało zablokowane, należy sprawdzić, czy aplikacja zwraca tę samą odpowiedź niezależnie od tego, czy wprowadzone hasło jest prawidłowe. Jeśli po zablokowaniu konta aplikacja zwraca różne odpowiedzi w zależności od tego, czy hasło jest prawidłowe, czy nie, oznacza to, że napastnik i tak może odgadnąć hasło metodą siłową. W takiej sytuacji nie będzie on jednak mógł zalogować się do aplikacji tak długo, jak długo konto pozostaje zablokowane.
Jeśli nie określono wymagania istnienia mechanizmu blokowania kont po pewnej liczbie nieudanych prób, należy sprawdzić, czy aplikacja pomimo to zawiera taki mechanizm. W tym celu należy kilkakrotnie wprowadzić nieprawidłowe hasło dla prawidłowej nazwy użytkownika (powinno wystarczyć, jeśli zrobimy to dziesięć - piętnaście razy). Następnie należy wprowadzić prawidłowe hasło i sprawdzić, czy konto zostało zablokowane. Jeśli tak się stało, należy sprawdzić, czy aplikacja zwraca tę samą odpowiedź niezależnie od tego, czy wprowadzone hasło jest prawidłowe.
Test dla aplikacji jest dodatni, gdy nie zawiera mechanizmu blokowania kont lub zwraca różne odpowiedzi w zależności od tego, czy wprowadzone hasło jest prawidłowe, czy nie.
DYSKUSJA
Nazwy użytkowników i hasła często daje się odgadnąć metodą siłową nawet wtedy, gdy aplikacja jest wyposażona w mechanizm blokowania kont lub inne środki zapobiegawcze. Aplikacje często próbują być pomocne użytkownikom i wyświetlają różne komunikaty o błędach w zależności od tego, czy nieprawidłowa jest wprowadzona nazwa użytkownika, czy hasło. Często aplikacja zachowuje się w podobny sposób nawet po zablokowaniu konta. Spotykaliśmy się z aplikacjami, które wyświetlały komunikaty o błędach zgodnie z następującym schematem: jeśli była nieprawidłowa nazwa użytkownika, aplikacja generowała komunikat „Nazwa użytkownika lub hasło są błędne"; jeżeli było nieprawidłowe hasło, wyświetlał się komunikat „Uwierzytelnianie nie powiodło się"; gdy hasło było prawidłowe, a konto zostało wcześniej zablokowane, wyświetlał się komunikat „Twoje konto zostało zablokowane". Taki mechanizm dostarcza łatwego sposobu na siłowe odgadywanie nazw użytkowników i haseł.
W przykładzie przytoczonym wcześniej napastnik mógłby wyznaczyć listę nazw użytkowników poprzez próbowanie różnych wartości i notowanie, czy aplikacja wygeneruje komunikat „Nazwa użytkownika lub hasło są błędne", czy też „Uwierzytelnianie nie powiodło się". Następnie napastnik mógłby zastosować metodę siłową w odniesieniu do hasła, obserwując, czy uda mu się zalogować, czy też aplikacja wyświetli komunikat „Twoje konto zostało zablokowane". Nawet jeśli napastnik zablokuje konto podczas stosowania metody siłowej, będzie musiał jedynie zaczekać z dostępem do aplikacji do chwili, kiedy konto zostanie odblokowane. Wiele aplikacji odblokowuje konta automatycznie po ustalonym okresie czasu.
W większości systemów napastnikom nie przysparza trudności odgadnięcie przynajmniej niewielkich fragmentów nazw użytkowników i haseł. Jest tak dlatego, że nazwy użytkowników zwykle są przewidywalne, a wielu użytkowników wybiera bardzo słabe hasła.
Odgadywanie nazw użytkowników i haseł
W zależności od aplikacji napastnik ma do dyspozycji kilka różnych sposobów uzyskania prawidłowych nazw użytkowników i haseł. W wielu systemach wykorzystywane są nazwy użytkowników, do których jest dostęp publiczny lub które łatwo zdobyć (na przykład operacja wyszukiwania w serwisie Google frazy „gmail.com" ujawnia wiele prawidłowych nazw użytkowników serwisu Google). W innych przypadkach informacje z aplikacji mogą wyciekać w procesie logowania, resetowania hasła lub rejestracji konta.
Napastnik może próbować odgadnąć nazwy użytkowników poprzez zebranie listy popularnych nazwisk i wygenerowanie na ich podstawie nazw użytkowników.