BEZPIECZEŃSTWO SYSTEMÓW INFORMACYJNYCH Laboratorium |
Uwagi | |
---|---|---|
Data: 30.03.2011 EAIiE, EiT, Rok 4. |
Temat: Łamanie słabych haseł | |
Wykonali: Ja, Byku, Patryk, Mati, Paulina ta czerwona na forum, Paulina ta pomarańczowa na forum, według Byka bardziej żółta |
Wstęp.
Tematyka ćwiczeń obejmowała zagadnienie łamania haseł w systemach Linux i Windows. Podczas laboratorium wykorzystywaliśmy aplikację John the Ripper. Program ten jest zaawansowanym, konfigurowalnym narzędziem służącym do szukania oryginalnych haseł na podstawie ich skrótów hasłowych (MD5, DES, itp.). Posługuje się przy tym metodami słownikowymi bądź metodą brutalnego ataku. W dalszej części sprawozdania opisane zostanie kilka trybów pracy programu.
Łamanie haseł w trybie SINGLE CRACK.
Na logu 1. pokazany został przykład użycia trybu SINGLE CRACK.
Log 1. Przykład użycia trybu SINGLE CRACK
student@labkt:~/john-1.7.0.2/run$ ./john --single hasla.txt
Loaded 6 password hashes with 6 different salts (FreeBSD MD5 [32/32 X2])
Kamil (kamil)
michal (michal)
99999 (wojtek)
LUKASZ (lukasz)
marcin1 (marcin)
1mariusz (mariusz)
guesses: 6 time: 0:00:00:00 100% c/s: 4333 trying: 1mariusz - 1mariusz99999
Tryb SINGLE CRACK jest trybem, od którego powinniśmy rozpocząć łamanie haseł. Hasła testowane w tym trybie to między innymi: loginy, nazwy folderu głównego użytkownika. Informacje przechowywane w pliku /etc/passwd zapisywane są w formacie:
username:password:uid:gid:gcos-field:home-dir:login-shell
W trybie SIGNLE CRACK wykorzystywane są także pola gcos-field zawierające między innymi: imię i nazwisko użytkownika, numer telefonu, pokoju itp.. Program wykonuje na potencjalnych hasłach szereg zmian, które najczęściej stosowane są przez użytkowników w celu utrudnienia jego złamania. Tryb ten jest bardzo szybki i często (jak zostało pokazane w ćwiczeniu) daje dobre wyniki w wyszukiwaniu haseł. W pliku hasla.txt znajduje się wpis:
wojtek:$1$Bjdz5jac$ZOaWGdRl0KZKiEVHxphJs/:13584:0:99999:7:::
Porównując go z ogólnym formatem zapisu haseł widać, że wartość 99999 znajduje się w polu gcos-field, a zatem możemy wnioskować, że jest to liczba bezpośrednio powiązana z życiem użytkownika. Inne złamane hasła, widoczne na logu 1. również są hasłami słabymi, ponieważ są one jedynie modyfikacjami loginu użytkownika. Hasło tego typu może być łatwo złamane nawet bez użycia dedykowanych aplikacji.
Łamanie haseł w trybie WORDLIST.
Jedną z metod przynoszącą dobre rezultaty w łamaniu haseł jest metoda słownikowa. Polega ona na wypróbowywaniu zestawu słów, które potencjalnie mogą być szukanym hasłem. Działanie takie wydaje się rozsądne z uwagi na fakt, że przeważnie hasła użytkowników nie są losowymi ciągami znaków, a słowami z używanego przez nich języka. Na logu 2. przedstawiony został przykład użycia programu z trybie WORDLIST.
Log 2. Przykład użycia program w trybie WORDLIST.
student@labkt:~/john-1.7.0.2/run$./john --wordlist=asteroid.txt t_hasla.txt
Loaded 6 password hashes with 6 different salts (FreeBSD MD5 [32/32 X2])
Kallisto (t4)
guesses: 1 time: 0:00:00:03 100% c/s: 4971 trying: Zyskin
student@labkt:~/john-1.7.0.2/run$./john --wordlist=shakespe.txt t_hasla.txt
Loaded 5 password hashes with 5 different salts (FreeBSD MD5 [32/32 X2])
demetrius (t1)
guesses: 1 time: 0:00:00:00 100% c/s: 3778 trying: york
student@labkt:~/john-1.7.0.2/run$./john --wordlist=tolkien.txt t_hasla.txt
Loaded 4 password hashes with 4 different salts (FreeBSD MD5 [32/32 X2])
hobbiton (t3)
mithrandir (t6)
pippin (t2)
uruk-hai (t5)
guesses: 4 time: 0:00:00:00 100% c/s: 2403 trying: uruk - uruk-hai
Na podstawie logu 2. możemy przypuszczać, że użytkownik t1 interesuje się angielską literaturą piękną, użytkownicy t2, t3, t5 i t6 – uniwersum Tolkienowskim, natomiast użytkownik t4 – astronomią. Hasła związane z zainteresowaniami nie są bezpieczne, ponieważ hakerzy mogą łatwo zdobyć wiedzę na temat zainteresowań użytkowników (np. z for internetowych czy portali społecznościowych). Złamane hasła zapisywane są w pliku john.pot. Z tego względu ponowna próba łamania nie zwraca żadnych wyników. Dopiero po usunięciu odszukanych haseł z pliku john.pot możliwa jest ich ponowna analiza. Dzieję się tak, ponieważ program nie próbuje łamać raz odgadniętych haseł w celu przyspieszenia działania całego procesu łamania hasła.
Program umożliwia również stosowanie reguł modyfikujących zawarte w słowniku wyrazy. Log 3. przedstawia przykład użycia programu z parametrem rules. Tryb ten bazuje na regułach określonych w pliku konfiguracyjnym programu (john.conf). Spis wszystkich możliwych reguł oraz zasady ich używania znajduje się w dokumentacji programu (plik RULES). Dla domyślnych reguł program odgadł hasła siedmiu użytkowników dzięki zastosowaniu bazowego hasła (romeo) oraz różnych modyfikacji na nim.
Log 3. Przykład użycia program z wykorzystaniem reguł.
student@labkt:~/john-1.7.0.2/run$./john --wordlist=shakespe.txt --rules r_hasla.txt
Loaded 7 password hashes with 7 different salts (FreeBSD MD5 [32/32 X2])
ROMEO (r5)
RomeoRomeo (r2)
oemoR (r4)
romeO (r7)
Romeo! (r1)
7romeo (r3)
romeing (r6)
guesses: 7 time: 0:00:00:25 100% c/s: 4774 trying: roderiging – romeing
Dla poszczególnych użytkowników możemy wyróżnić reguły które zostały zaaplikowane:
r5 – zamiana małych liter na wielkie: -c >2!?XuQ
r2 – zamiana pierwszej litery na wielką i zdublowanie ciągu znaków: -c <7>1!?Acd
r4 – zamiana pierwszej litery na wielką i odwrócenie ciągu znaków: -c <+>2!?Acr
r7 – zamian ostatniej litery na wielką: -c <+>2!?AMrQcr
r1 – zmiana pierwszej litery na wielką i dodanie wykrzyknika: -c <*>2!?Ac$[2!
r3 – dodanie cyfry przed hasłem: >2!?Al^[379568]
r6 – utworzenie imiesłowu czasownikowego od zadanego słowa: <*>2!?Al[PI]
Ponieważ reguły zapisane są za pomocą wyrażeń regularnych użytkownik programu ma możliwość modyfikacji istniejących wzorców bądź tworzenia nowych, zdefiniowanych przez siebie. Log 4. przedstawia listę reguł stworzonych podczas laboratorium. Log 5. zawiera rezultat działania programu dla opisanej listy.
Log 4. Zdefiniowane reguły dla trybu WODRLIST.
# Zamień ‘a’ na ‘@’
sa@
# Zamień ‘o’ na ‘0’
so0
# Zamień ‘c’ na ‘(‘
sc(
# Dodaj ‘2007’ na koniec słowa
$2$0$0$7
# Dodaj ‘07’ na koniec słowa
$0$7
# Dodaj kropkę na początku słowa
^.
Log 5. Przykład użycia własnych reguł w trybie WORDLIST.
student@labkt:~/john-1.7.0.2/run$./john --wordlist=shakespe.txt --rules s_hasla.txt
Loaded 5 password hashes with 5 different salts (FreeBSD MD5 [32/32 X2])
l@dym@cbeth (s2)
capulet2007 (s1)
.montague (s3)
guesses: 3 time: 0:00:00:02 100% c/s: 6091 trying: .york
Zdefiniowane przez użytkownika reguły mogą być bardziej rozbudowane. Log 6. przedstawia regułę będącą powiązaniem reguł w logu 4. Log 7. zawiera rezultat działania programu dla nowozdefiniowanej reguły.
Log 6. Reguła łącząca reguły z logu 4.
# Zamień ‘a’ na ‘@’, ‘o’ na ‘0’, ‘c’ na ‘(‘ i dodaj na koniec ‘07’
sa@so0sc($0$7
Log 7. Rezultat działania programu dla reguły z logu 6.
student@labkt:~/john-1.7.0.2/run$./john --wordlist=shakespe.txt --rules s_hasla.txt
Loaded 2 password hashes with 2 different salts (FreeBSD MD5 [32/32 X2])
r0sen(r@ntz07 (s4)
guesses: 1 time: 0:00:00:00 100% c/s: 3766 trying: y0rik07 - y0rk07
Wprowadzając dodatkową regułę ss$ zamieniającą literę s na znak dolara, złamano hasło użytkownika s5. Wynik działania programu dla tej reguły przedstawiono na logu 8.
Log 8. Wynik działania programu dla reguły ss$.
student@labkt:~/john-1.7.0.2/run$./john --wordlist=shakespe.txt --rules s_hasla.txt
Loaded 1 password hash (FreeBSD MD5 [32/32 X2])
guilden$tern (s5)
guesses: 1 time: 0:00:00:00 100% c/s: 2305 trying: guideriu$ - guilden$tern
Łamanie haseł trybie INCREMENTAL.
Program umożliwia łamanie haseł metodą brutalnego ataku. Metoda ta w ogólności jest czasochłonna. Jednak w przypadku, gdy szukane hasło jest losowym ciągiem znaków jedyną metodą jest przeszukanie całego zbioru rozwiązań. Dla n-elementowego alfabetu oraz k-elementowego hasła liczba wszystkich możliwych wariacji wynosi:
Znając parametr c/s będący liczbą hashów wyliczanych w ciągu jednej sekundy oraz czas łamania hasła można oszacować po ilu próbach odgadnięto hasło. Statystycznie, hasło łamane powinno być po sprawdzeniu około 50% wariacji. Tabela 1. zawiera zestawienie danych dla łamanych haseł literowych (użytkownicy px) oraz cyfrowych (użytkownicy nx).
Tabela 1. Zestawienie danych dla łamania haseł w trybie INCREMENTAL.
Użytkownik | n | k | Hasło | Czas łamania | Vnk | c/s | Lp. prawidłowej wariancji |
---|---|---|---|---|---|---|---|
n1 | 10 | 1 | 5 | 0,008 s | 10 | 11.76 | 1 |
n2 | 10 | 2 | 28 | 0,024 s | 100 | 241 | 6 |
n3 | 10 | 3 | 735 | 0,020 s | 1000 | 60,86 | 2 |
n4 | 10 | 4 | 2914 | 0,668 s | 10000 | 4168 | 2785 |
n5 | 10 | 5 | 27148 | 4,628 s | 100000 | 5023 | 23247 |
n6 | 10 | 6 | 154297 | 95,042 s | 1000000 | 5298 | 503533 |
n7 | 10 | 7 | 8452825 | 783,185 s | 10000000 | 5211 | 4081178 |
p1 | 23 | 1 | g | 0,012s | 23 | 85,71 | 2 |
p2 | 23 | 2 | le | 0,080s | 529 | 905 | 73 |
p3 | 23 | 3 | raw | 0,868s | 12167 | 4052 | 3518 |
p4 | 23 | 4 | ftba | 16,425s | 279841 | 5482 | 90042 |
p5 | 23 | 5 | acdge | 215,281 s | 6436343 | 5487 | 1181247 |
Na rysunku 1. i 2. znajdują się wykresy teoretycznych i empirycznych zależności czasu łamania hasła w zależności od liczby cyfr i liter w nim zawartych. Obydwa wykresy zostały przedstawione w skali logarytmicznej z uwagi na wykładniczy charakter zmienności liczby koniecznych do przetestowania wariancji. Na rysunku 1. możemy dostrzec zafalowania małych wartości liczby liter w haśle. Efekt ten spowodowany jest prawdopodobnie niedokładnością pomiaru krótkich odcinków czasu przez funkcję time oraz pomiaru parametru c/s przez sam program John the Ripper. Dla większej liczby cyfr w haśle zależność stabilizuje się przybierając charaktery wykładniczy zgodnie z przewidywaniami teoretycznymi – każda dodatkowa cyfra w haśle wydłuża czas jego odgadnięcia 10-krotnie. Dla badanych haseł składających się wyłącznie z cyfr tylko hasło 6-cyfrowe zostało odgadnięte powyżej wyliczonego dla zależności teoretycznej progu.
Rys. 1. Zależność czasu łamania hasła składającego się z cyfr od jego długości.
Rysunek 2. przedstawia analogiczne wyliczenia dla haseł składających się jedynie z małych liter alfabetu angielskiego. W tym przypadku każde z badanych haseł zostało odgadnięte przed osiągnięciem teoretycznego, statystycznego punktu połowy liczności zbioru możliwych rozwiązań. W porównaniu do wykresu z rysunku 1. widzimy, że krzywa zależności teoretycznej posiada większe nachylenie – w tym przypadku każda dodatkowa litera w haśle powoduje wydłużenie czasu łamania 23-krotnie.
Rys. 2. Zależność czasu łamania haseł literowych od ich długości.
Tworzenie własnych użytkowników i haseł.
Z powodu napotkanych problemów z tworzeniem kont w systemie Linux zastosowano plik /etc/shadow został wygenerowany sztucznie. Za pomocą skryptu md5pass wyliczono hashe haseł dla dwóch użytkowników testUser1 i testUser2 z hasłami odpowiednio Dostojevsky (z asteroids.txt) oraz D0$+0jev$ky1. Strukturę wygenerowanego pliku przedstawia log 9.
Log 9. Stuktura wygenerowanego pliku /etc/shadow
testUser1:$1$2We4gq.U$mmh2U2S2H9BSO6UlZnru9/:15067:0:99999:7:::
testUser2:$1$JcadXaid$N53iG.Cu/ixrHIHKwYlY1.:15067:0:99999:7:::
Następnie przystąpiono do próby złamania haseł użytkowników. Tryb SINGLE CRACK nie przyniósł rezultatów, ponieważ hasło nie jest w żaden sposób powiązane z danymi użytkownika. Tryb WORDLIST bez zdefiniowanych zasad przyniósł zgodnie z oczekiwaniami jedno rozwiązanie. Przedstawione zostało ono na logu 10. Stosując regułę ss$st+so0$[0-9] otrzymano drugie rozwiązanie przedstawione na logu 11.
Log 10. Rezultat działania trybu WORDLIST bez zdefiniowanych reguł.
student@labkt:~/john-1.7.0.2/run$ ./john --wordlist=asteroid.txt shadow.txt
Loaded 2 password hashes with 2 different salts (FreeBSD MD5 [32/32 X2])
Dostojevsky (testUser1)
guesses: 1 time: 0:00:00:01 100% c/s: 3910 trying: Zwicky – Zyskin
Log 11. Rezulta działania trybu WORDLIST z zdefiniowaną regułą ss$st+so0$[0-9].
damian@damian-laptop:~/Pulpit/john-1.7.0.2/run$ ./john --wordlist=asteroid.txt --rules shadow.txt
Loaded 1 password hash (FreeBSD MD5 [32/32 X2])
D0$+0jev$ky1 (testUser2)
guesses: 1 time: 0:00:00:01 100% c/s: 4312 trying: D0$+0jev$ky1 - D0ugla$1
Można zauważyć, że chociaż hasło użytkownika testUser2 wydaje się być trudnym do złamania z uwagi na swoją skomplikowaną składnię to jednak zawiera ono zestaw typowych przekształceń, które łatwo mogą zostać wykryte przy pomocy użytego programu.
Łamanie haseł w systemie WINDOWS.
W systemie Windows stworzono trzech nowych użytkowników: testUser1, testUser2 i testUser3 z hasłami odpowiednio Dostojevsky, D0$+0jev$ky1 oraz testUser3. Za pomocą programu SAMInside odzyskano hashe użytkowników a następnie wyeksportowano je do pliku tekstowego kompatybilnego z programem John the Ripper. Warto zauważyć, że hasło użytkownika testUser3 było na tyle słabe, że zostało złamane od razu przez program SAMInside. Wynik działania programu SAMInside przedstawiono na rysunku 3. Dla otrzymanego pliku tekstowego przeprowadzono analizę identyczną jak w punkcie poprzednim z użyciem trybów SINGLE CRACK oraz WORDLIST. Plik wynikowy zawierający odgadnięte hasła przedstawiony jest na logu 12. Jak widać jego struktura różni się od plików otrzymanych dla systemu LINUX.
Rys. 3. Wynik działania programu SAMInside.
Log 12. Plik john.pot dla po złamaniu haseł użytkowników.
$LM$0676ea9fe2a6e53f:DOSTOJE
$LM$df8d2724a2615ddc:VSKY
$LM$b4ffa7ac5f9704e4:D0$+0JE
$LM$468aa0df9e2394c4:R3
$LM$0f20048efc645d0a:TESTUSE
Podsumowanie.
W trakcie tworzenia hasła warto kierować się wskazówkami zwiększającymi jego odporność na złamanie. Po pierwsze hasło powinno być odpowiednio długie. Jak wykazaliśmy w ćwiczeniu brutalne ataki dla więcej niż 7 znaków trwają bardzo długo. Trudne hasła powinny zawierać wielkie i małe litery, cyfry oraz znaki specjalne. Należy unikać stosowania intuicyjnych reguł (np. zamiany litery o na cyfrę 0), ponieważ doświadczony haker szybko może odgadnąć tego rodzaju modyfikacje. Hasła nie powinny być wyrazami, które można znaleźć w słownikach. Nie powinny być to także słowa powiązane z danymi personalnymi użytkownika lub jego zainteresowaniami. Ciekawym rozwiązaniem wydają się wyrazy generowane przez generatory haseł oraz hasła utworzone np. z pierwszych liter łatwej do zapamiętania sekwencji uzupełnione o znaki specjalne i litery. W razie zapomnienia takiego hasła dzięki mnemotechnice szybko można przypomnieć sobie właściwą sekwencję. Ważnym aspektem jest także bezpieczne użytkowanie hasła np. nie zapamiętywanie go na komputerach używanych przez wiele osób.