Przejdź


John the Ripper, znajomy nieznajomy

07 Wrz 2009 @ 20:29:47 groszek 5 komentarzy

Każdy kto kiedykolwiek miał potrzebę uzyskania hasła na podstawie jego skrótu, zapewne spotkał się z tym programem. ''john hash.lst'', czekamy, program wypluwa hasło, my mamy dostęp do serwera, koniec. John idzie w odstawkę. Oczywiście trochę to trwa, ponieważ john najpierw sprawdzi swoją wewnętrzną wordlistę, później zastosuje "single rules", na koniec przejdzie do "incremental mode". A szkoda, bo działanie programu można znacząco przyspieszyć, uzyskując wyniki nawet dla długich i skomplikowanych haseł w stosunkowo krótkim czasie.
Najlepsza metoda na oporne hasło? Sprawdzić dużą wordlistę (razem z --rules), sprawdzić single mode i zostawić na tydzień w "incremental mode". Ale w tym czasie można drugim komputerem wyszukiwać kolizję innymi metodami.

Chciałbym tu zaprezentować jak można znacząco przyspieszyć proces łamania hasła.

Metoda I: Single attack / wordlist
Najsampierw należy przejść do katalogu johna i otworzyć sobie w ulubionym edytorze plik john.conf. Tu mała dygresja, ten kto wymyślił taką formę przechowywania tak skomplikowanych danych powinien przejść eutanazję, no ale nic. Damy radę.
W sekcji "[List.Rules:Single]" należy odnaleźć wyłączone opcje (na samym końcu...) i je włączyć, z "very slow stuff" można eksperymentować czy warto. Na pewno warto "toggle case everywhere".
Teraz bierzemy dużą listę słów (np na serwerze ftp.openwall.com jest ładna, 40 mb) i uruchamiamy ją + przełącznik "--rules".

Metoda II: Markov generator
Ten sposób daje naprawdę dobre wyniki. Pozwala uzyskać w ciągu minut długie hasła, które w pewien sposób pasują do języka na jakim przygotowaliśmy plik "stats" który on używa. calc_stat na wejściu przyjmuje słownik danego języka, na wyjściu daje odpowiednio posortowany statsfile. W gruncie rzeczy chodzi o to, że generator słów raczej będzie wyszukiwał najczęście występujące w danym słowniku znaki, tyle. Dokładny opis znajduje się na stronie johna i tam radzę przeczytać wszystko. Atak ten daje naprawdę dobre wyniki w krótkim czasie. Dodatkowo w tym ataku można zdefiniować "początek" i "koniec", co się przydaje z prostego powodu - john jako taki nie ma obsługi wielu rdzeni.

Metoda III: External / keyboard
To następna mało znana metoda. Czy uważasz że hasło "m,klo90p;" jest dobre? Otóż nie, nie jest :) Należy zwrócić uwagę na to, że wszystkie znaki są blisko siebie. Nawet jak hasło brzmi "l,mju76tfde3wsxz" to i tak jest bardzo duże prawdopodobieństwo że ta metoda je złamie - kolejne znaki występują blisko siebie na klawiaturze, co pozwala sprawdzić w krótkim czasie hasła, które mają większą szansę się pojawić. Jeśli ktoś generuje hasła przez losowe uderzanie w klawisze, to możliwe że nieświadomie używa klawiszy znajdujących się blisko siebie. Program nie sprawdza wtedy haseł typu "zo5ub19v" i od razu odrzuca takie kombinacje, oszczędzając czas. Za to sprawdza wszystkie które mogły powstać w ten sposób. Ta metoda również daje niesamowite wyniki. Na koniec mała rada, warto skopiować całą sekcję keyboard, wrzucić ją np. jako keyboard2 zamieniając wartość "fuzz" na 0. I stosować najpierw jedną, potem drugą.

Metoda IV: External / double
Tutaj sprawa jest prosta - program bierze 4 znaki z jakiegoś wyrazu i je dubluje, zamieniając "word" w "wordword". Również skuteczny atak, jeśli testować na dużej grupie hashy gdzie prawdopodobnie wiele osób ma słabe hasła (np. baza wykopu :P ). Ponownie warto zdublować funkcję tak, by tworzyła zlepki 4+4 oraz 5+5.

Metoda V: Incremental / digits
Czyż nie wspaniała to myśl by stworzyć sobie długie hasło składające się z samych cyfr? Nikt o tym nie pomyśli!
Co z tego że sprawdzenie wszystkich kombinacji do długości 15 jest możliwe w sensownym czasie nawet na domowym komputerze, nie mówiąc o farmach liczących. W ogóle warto stworzyć sobie własny charset na podstawie haseł które wcześniej złamaliśmy i przetestować na nim pozostałe. Bardzo dobre efekty, a używa się to właśnie w trybie incremental.

Oczywiście john nie jest lekarstwem na wszystko. Jest to na pewno najlepszy program gdy mamy dziesiątki czy miliony haseł do złamania. Ale dla pojedynczego hasha skuteczniejsze są jednak dedykowane programy - np. barswf dla md5.
John cierpi głównie na jedną przypadłość - starość. Nie ma obsługi GPU, nie ma multithread... choć pośrednio da się to naprawić. Wszystko mu można wybaczyć, bo jest to świetny program.

Swoją drogą - na stronie johna próżno szukać windowsowej kompilacji z SSE2 - a ponieważ nie każdy ma cygwina, to kto chce niech sobie użyje moją - można ją znaleźć tutaj
Dodatkowo ma ona zintegrowany patch "jumbo" ze strony johna, więc obsługuje więcej formatów niż czysty john.

Miłego łamania.


Komentarze:

07 Wrz 2009 @ 21:22:58 moher

Musze zerknąć do źródeł JtR, może jak jest sensownie napisany dałoby się go przystosować do obsługi CUDA. Chociaż to pewnie spory kawałek softu.

07 Wrz 2009 @ 21:38:02 groszek

Niestety, ani API od cuda nie jest aż tak przyjemny, ani tym bardziej kod JtR. Ten drugi ma np. z 5 implementacji md5 i ciężko się zorientować którą akurat używa.
Chciałem wprowadzić swoje optymalizacje, do których doszedłem w czasie prac nad swoim programem, ale nadal nie znalazłem wszystkich potrzebnych części kodu... generatora słów, porównywania i całej reszty.

08 Wrz 2009 @ 00:53:52 groszek

O. Na przykład przed chwilą stworzyłem nowy external mode do JTR, dzięki któremu mamy incremental mode bez limitu długości (standardowo tylko 8 znaków, jak się chce rozszerzyć to są dziwne kłopoty). Proszę bardzo:
http://wklej.org/id/146729/

08 Wrz 2009 @ 23:07:40 necro.nomicon.pl

Unlimited incremental mode for John

As john's --incremental mode supports only words up to 8 characters long, I spent some time and wrote this external mode, with no word length limit, no character set limit etc.

05 Cze 2010 @ 17:05:24 misiael

mam pytanie jesli ktos jeszcze odwiedza ta strone otoz mam haslo do zlamania zapisuje je np crack.txt i tu sie rodzi moje pytanie gdzie mam je zapisac?? na pulpicie? folderze gdzie jest john czy kej?

Pierdol licencje, kopiuj na zdrowie!