Bezpieczeństwo systemów informacyjnych |
|
Numer i temat ćwiczenia: 1. Łamanie słabych haseł
|
|
Skład grupy: 1. Łukasz Szałas 2. Kamil Bogacz 3. Piotr Kasprzyk 4. Natalia Nieścior 5. Ewelina Skoczylas 6. Tomasz Truty
|
Data i godzina wykonania ćwiczenia: 29.03.2011 17:00 |
Celem ćwiczeń wykonanych w ramach laboratorium jest pokazanie zagrożeń jakie wynikają ze stosowania słabych haseł przez użytkowników systemów informatycznych oraz poznanie sposobów łamania haseł, których znajomość ma istotny wpływ na umiejętność zabezpieczenia się przed włamaniami. Wykorzystywanym programem jest John the Ripper - jeden z najlepszych i najbardziej znany program służący do łamania haseł.
Łamanie haseł w trybie SINGLE CRACK
Tryb single crack pozwala na sprawdzenie czy użytkownik ma ustawione bardzo proste hasło. Hasła, które będziemy próbowali złamać są zapisane w pliku hasła.txt w następującym formacie:
Login : Password : t1 : t2 : t3 : t4 : t5 : t6 :
gdzie t1-t6 są datami związanymi ze zmianą I wygaśnięciem hasła. Password jest hasłem w postaci zaszyfrowanej. Wyniki działania programu uruchomionego za pomocą komendy ./john -single hasla.txt jest następujący:
Login |
Hasło |
kamil michal wojtek lukasz marcin mariusz |
Kamil michal 99999 LUKASZ marcin1 1mariusz |
Jak widać są to bardzo proste i bardzo słabe hasła, łatwe do odgadnięcia. Reguły łamania hasła w tym trybie są zdefiniowane w pliku john.conf. Operują one głównie na loginie użytkownika, który jest poddawany rozmaitym operacjom takim jak np. zmiana liter na wielkie bądź na małe, dodanie cyfry, kropki lub jakiegoś znaku specjalnego na końcu bądź na początku loginu itp. Sprawdzane są również formaty odpowiadające datom, do loginu dodawane są ciągi cyfr. Pozwala to na odgadnięcie większości prostych haseł, którym autor nie poświęcił zbyt wiele uwagi. Hasła złamane przez program nie są bezpieczne, ponieważ powstały w wyniku przeprowadzenia mało skomplikowanego przekształcenia loginu.
Każde złamane hasło jest zapisywane w pliku john.pot. Ma to na celu uniknięcie sytuacji, w której następowałaby próba odgadnięcia uprzednio złamanego hasła. Po wykasowaniu odpowiednich linijek z pliku john.pot program ponownie próbuje złamać hasło, ponieważ nie posiada go w swojej bazie.
Łamanie haseł w trybie WORDLIST
Tryb wordlist pozwala na łamanie haseł słownikowych - czyli takich, które są wyrazami pochodzącymi ze słownika. Za pomocą specjalnych reguł wyrazy te również mogą być modyfikowane. Kluczowa jest więc znajomość zainteresowań użytkownika, którego hasło próbujemy złamać.
Próba złamania haseł z pliku t_hasla.txt za pomocą słowników asteroid.txt, shakespe.txt oraz tolkien.txt dała następujące rezultaty:
Login |
Hasło |
t1 t2 t3 t4 t5 t6 |
demetrius pippin hobbiton Kallisto uruk-hai 1mariusz |
Na podstawie otrzymanych wyników można stwierdzić, że użytkownik t1 jest fanem Szekspira, użytkownik t4 interesuje się astronomią i asteroidami, a użytkownicy t2, t3, t5 i t6 zaczytują się w powieściach Tolkiena. Ustawianie jako hasła nazwisk ulubionych twórców literackich, sportowców czy nazw własnych jest częstą praktyką i niestety nie jest to zbyt bezpieczne. Każda osoba znająca zainteresowania ofiary może przy pomocy słownika odgadnąć hasło.
Oczywiście hasło może bazować na wyrazie pochodzącym ze słownika, lecz może być poddane pewnej modyfikacji. W programie John the Ripper istnieje specjalna opcja -rules, pozwalająca na odgadnięcie haseł zmodyfikowanych wg pewnych popularnych reguł. Próba złamania haseł z pliku r_hasla.txt wykorzystując tę właśnie opcję spowodowała odgadnięcie następujących haseł:
Login |
Hasło |
r1 r2 r3 r4 r5 r6 r7 |
Romeo! RomeoRomeo ?romeo oemoR ROMEO romeing romeO |
Wszystkie złamane hasła opierają się na słowie pochodzącym ze słownika shakespe.txt (romeo), lecz są w pewien sposób zmodyfikowane. Może to być dodanie wykrzyknika, znaku zapytania, zamiana pierwszej lub ostatniej litery na wielką, napisanie wyrazu od tyłu, zapisanie całego słowa wielkimi literami lub wpisanie słowa dwukrotnie. Program John the Ripper zawiera bardzo dużą ilość mniej lub bardziej popularnych reguł pozwalających na złamanie hasła. Dodatowo użytkownicy programu mogą tworzyć swoje własne reguły.
Wiedząc, że użytkownicy często stosują następujące metody zapisu haseł:
- zamiast litery `a' zapisują znak `@';
- zamiast litery `o' zapisują cyfrę `0';
- zamiast litery `c' zapisują znak `(`;
- dodają na końcu hasła liczbę `2007' lub `07';
- dodają przed hasłem kropkę;
możemy stworzyć własne reguły i spróbować złamać hasła z pliku s_hasla.txt. Reguły dodane w pliku john.conf wyglądają następująco:
sa@ - zamiana każdego `a' na `@'
so0 - zamiana każdego `o' na `0'
sc( - zamiana każdego `c' na `(`
$2M$0M$0M$7 - dodanie `2007' na końcu wyrazu
$0M$7 - dodanie `07' na końcu wyrazu
^. - dodanie kropki przed wyrazem
Hasła, które udało się odczytać wyglądają następująco:
Login |
Hasło |
s1
s2
s3
|
capulet2007
l@dym@cbeth
.montague
|
Złamane hasła zostały stworzone na podstawie wyżej wymienionych reguł. Do słowa słownikowego „capulet” dodano `2007', w „ladymacbeth” każda litera `a' została zastąpiona przez `@', natomiast przed słowem „montague” postawiono kropkę.
Jeżeli wiadomo, że użytkownik s4 zastosował jednocześnie wszystkie reguły opisane wyżej, można spróbować odgadnąć jego hasło. Stworzone reguły wyglądają następująco:
sa@Mso0Msc(M$2M$0M$0M$7 - wszystko z dodaniem `2007'
sa@Mso0Msc(M$0M$7 - wszystko z dodaniem `07'
Odgadnięte hasło użytkownika s4 to r0sen(r@ntz07 bazujące na słowie rosencrantz.
Jeżeli wiadomo, że użytkownik s5 zastępuje literę `s' swojego hasła pewnym znakiem specjalnym, można spróbować domyślić się jaki to znak i na tej podstawie odgadnąć hasło. Znakiem, który najbardziej przypomina literę `s' jest `$'. Tworzymy wiec odpowiednią regułę:
ss$ - zamienia każdą literę `s' na znak `$'
Odkryte hasło to guilden$tern.
Łamanie haseł w trybie INCREMENTAL
Tryb incremental łamie hasła na zasadzie ataku brutalnego czyli sprawdza wszystkie dostępne kombinacje. Czas złamania hasła tym sposobem zależy od wielu czynników, jednak podstawowym z nich jest jego długość oraz ilość dostępnych znaków.
Hasła w pliku n_hasla.txt składają się z samych cyfr (0-9) natomiast w pliku p_hasla.txt z samych liter (a-z). Numer użytkownika odpowiada liczbie znaków w haśle. W zależności od długości hasła, próby ich złamania przedstawiają się następująco:
Login |
Hasło |
Czas złamania |
n1 n2 n3 n4 n5 n6 n7 |
5 28 735 2914 27148 154297 8452825 |
0,232 s 0,209 s 0,250 s 0,959 s 5,062 s 1 m 41,035 s 13 m 50,469 s |
Próba złamania haseł dłuższych niż 7 cyfr jest bardzo czasochłonne i przewidywania wskazują, że zajęłoby to około godziny czasu. Można przyjąć, że hasła mające 9 i więcej cyfr są bezpieczne.
Login |
Hasło |
Czas złamania |
p1 p2 p3 p4 p5
|
g le raw ftba acdge
|
0,24 s 0,286 s 1,237 s 18,932 s 4 m 0,238 s
|
Złamanie hasła składającego się z określonej ilości liter jest dłuższe niż hasła złożonego z takiej samej ilości cyfr ze względu na fakt, że istnieje o wiele więcej kombinacji (cyfr jest 10 liter 26). Złamanie hasła składającego się z 6 liter trwało bardzo długo. Zgodnie z szacunkami powinno potrwać około godziny. Można więc założyć, że hasła składające się z 7 i więcej cyfr są bezpieczne.
Każdą próbę złamania hasła charakteryzuje parametr c/s. Jest to ilość prób złamania hasła na sekundę. Znając wartość tego parametru oraz czas złamania każdego hasła można stwierdzić, które hasła zostały złamane przed sprawdzeniem 50% możliwości.
Ilość cyfr |
Ilość możliwości |
c/s |
Ilość sprawdzonych możliwości |
1 2 3 4 5 6 7 |
10 100 1000 10000 100000 1000000 10000000 |
10 341 70 5221 6697 6919 6829 |
23% 71% 1% 50% 33% 69% 56% |
Wykres przedstawiający czas łamania hasła w zależności od ilości cyfr jest przedstawiony poniżej:
Na niebiesko zaznaczono czas łąmania hasła podczas ćwiczenia, na czerwono czas sprawdzenia 50% mozliwości.
Ponieważ początkowe wartości różnią się nieznacznie i ich odczytanie z powyższego wykresu jest utrudnione poniżej przedstawiony jest wykres dla pierwszych 5 wartości:
Takie same statystyki dla haseł składających się z liter:
Ilość liter |
Ilość możliwości |
c/s |
Ilość sprawdzonych możliwości |
1 2 3 4 5
|
26 676 17576 456976 11881376
|
90 1175 4808 6330 6514
|
83% 49% 33% 26% 13%
|
Poniżej wykres przedstawiający czas łamania hasła w zależności od ilości liter w haśle:
Na niebiesko zaznaczono czas łąmania hasła podczas ćwiczenia, na czerwono czas sprawdzenia 50% mozliwości.
Poniżej wykres dla pierwszych 4 wartości:
Tworzenie własnych użytkowników i haseł.
W systemie Linux utworzone zostały 4 konta użytkowników z następującymi loginami i hasłami:
Login |
Hasło |
adam
maciej
lukasz
pawel |
!adam!
.@d@m333?
Jsc!@#123
H0bbit! |
Przeprowadzone próby złamania haseł w trybie single i wordlist wykazały, że 3 z tych 4 haseł można było szybko złamać. Jedynym hasłem, którego programowi John the Ripper nie udało się złamać było hasło użytkownika lukasz.
Łamanie haseł w systemie Windows
W celu przetestowania programu w systemie Windows utworzono w nim 4 konta użytkowników z następującymi loginami i hasłami:
Login |
Hasło |
Kasia009
agata
magdalena
agnieszkaa
|
900aisak
Zh0ng0l0vivh!?
123456
alrlijwtd^
|
W tym przypadku dostęp do skrótów haseł uzyskany został za pomocą programu SAMInside. Program John the Ripper nie poradził sobie tylko z hasłem użytkownika agnieszkaa.
Wnioski
Przeprowadzone ćwiczenia miały na celu pokazanie jak szybko można złamać słabe hasła, nie wykorzystując do tego celu ani specjalnych narzędzi ani specjalnych umiejętności. Przez pojęcie „słabe hasło” rozumiane jest hasło, które w bardzo łatwy sposób można odgadnąć, jak np. imię, nazwisko, pseudonim czy data urodzenia. Nawet lekka modyfikacja hasła nie daje gwarancji bezpieczeństwa, ponieważ programy takie jak John the Ripper potrafią sprawdzić kilka tysięcy kombinacji na sekundę, więc z dużym prawdopodobieństwem odgadną hasła lekko zmodyfikowane. Aby zapewnić sobie bezpieczeństwo nie należy także stosować haseł będących wyrazami ze słownika. Największe bezpieczeństwo dają hasła, które są przypadkowymi kombinacjami liter, cyfr i znaków specjalnych.