Metody łamania haseł

Brute force

Próbujemy łamać szyfr za pomocą każdej możliwej kombinacji. Przykładowo, próbując złamać hash, powinniśmy obliczać hashe dla każdej możliwej kombinacji liter małych/dużych, cyfr, znaków itp - w zależności od tego, czego się spodziewamy. Metoda czasochłonna, ale mając odpowiednio dużo czasu mamy gwarancję złamania hasła - oczywiście pod warunkiem, że będziemy sprawdzać wszystkie litery/cyfry/znaki.


Metoda Słownikowa

Ogólny schemat działania

Metoda słownikowa w swoim działaniu jest bardzo prosta. Jest faktycznie nieco podobna do ataku brute force, jednak może dać lepsze efekty w przypadku łatwych haseł. Łatwe, czyli po prostu pojedyncze wyrazy. Metoda słownikowa polega zatem na dostarczeniu do algorytmu pewnego słownika - zbioru słów, które będą sprawdzane w roli szukanego hasła. Okazuje się, że większość haseł prostych jest łamana pomyślnie dzięki tej metodzie. Zatem tak jak w brute force sprawdzamy każdą możliwość, jednak spośród zasobu słów już dostarczonych. Oczywiście dostarczamy gotową tablicę ze słowami (bo wygenerujemy ją tylko raz), słowa haszujemy i porównujemy z haszem wejściowym.

Wariacje i modyfikacje metody słownikowej

Ciekawsze i lepsze efekty można uzyskać dzięki stosowaniu pewnych modyfikacji metody. Można wówczas odgadnąć hasła, które składają się z pewnej mutacji słowa.

Polega ona na wykorzystaniu kilku słowników, na przykład łamanie haseł słownikiem polskim, angielskim, biblią lub książką o Kubusiu Puchatku. Często także zadziwiająco dobre wyniki daje wprowadzenie bazy imion do przeszukiwania.

Wprowadzenie reguły, w której wybrane litery będą duże, reszta zaś mała. Na przykład - pierwsza litera duża, co drugi znak duży etc.

Niektóre litery w słowie zastępowane są odpowiadającą im literą, np. pokemon = p0k3m0n; freak = fr34k; password = p4s5w0rd...

Zazwyczaj skutkują kilku znakowe przedrostki lub przyrostki liczbowe, np 123, 654 itd.

Przydatne linki

Oczywiście w internecie znajdują się przydatne zestawy słowników, które mogą zostać użyte do ataku słownikowego:

  1. Zbiory słów: [[url:http://code.google.com/p/sipvicious/wiki/WordLists|http://code.google.com/p/sipvicious/wiki/WordLists]]
  2. Słowniki w różnych językach: [[url:ftp://ftp.ox.ac.uk/pub/wordlists/|ftp://ftp.ox.ac.uk/pub/wordlists/]]

Tablice Tęczowe

Wstęp

Tablice tęczowe są fajnym i bardzo skutecznym sposobem łamania haseł. Tablice z prawdziwego zdarzenia są tworami bardzo dużymi i rozbudowanymi, ale zarazem skutecznymi. Wytłumaczę zatem w skrócie na czym polega ich fenomen i zasada działania. Warto ją poznać, mimo, że całego algorytmu nie będziemy wykorzystywać.

Podstawowe zagadnienia

Aby móc sprawnie operować pojęciem tablicy tęczowej, należy zwrócić uwagę na podstawowe zagadnienia i terminy, których będziemy używać.

Zasada działania

Przede wszystkim musimy wiedzieć na początku czym jest funkcja haszująca (link wyżej). Jest to funkcja, która przyporządkowuje dowolnie dużej liczbie (wiadomości) krótką, zwykle posiadającą stały rozmiar niespecyficzną, a quasi-losową wartość (tzw.skrótnieodwracalny wiadomości). (źródło: wiki). Warto zwrócić uwagę też na fakt, że taka funkcja musi wyeliminować możliwość wygenerowania takiego samego skrótu dla różnych wiadomości (plaintext). Właściwie jest ona nieodwracalna.

Drugim ważnym aspektem jest funkcja redukująca. Będzie ona nam służyć do zredukowania hasza w taki sposób, aby dostać kolejny plaintext. Naturalnym jest, że otrzymany plaintext (oczywiście różny od początkowego) można ponownie przepuścić przez funkcję skrótu i tak w kółko. Ogólna zasada działania zaprezentowana została na ascii-schemacie:

początkowy PLAINTEXT ---f.haszująca--> HASH ---f.redukująca--> PLAINTEXT1 ---f.haszująca--> HASH1 ---f.redukująca--> PLAINTEXT_2 itd. ...

W jaki sposób może być zdefiniowana funkcja redukująca? Przykładowo:

Wiemy, że naszym poszukiwanym hasłem jest ciąg cyfr o długości 6. Wówczas z posiadanego hashu musimy wygenerować taki plaintext, który będzie zgodny z naszymi założeniami, czy będzie również składać się z ciągu cyfr o długości 6. (np. 123456, 362866, 973521...). Najprostszą funkcją redukującą może być pobranie pierwszych sześciu napotkanych cyfr w haszu, co obrazuje poniższy przykład.

początkowy plaintext --> hasz --> otrzymany plaintext:

4259cc34599c530b1e4a8f225d665802 --> 425934

c744b1716cbf8d4dd0ff4ce31a177151 --> 744171

3cd696a8571a843cda453a229d741843 --> 369685

[...]

7ad7d6fa6bb4fd28ab98b3dd33261e8f --> 776642

Z powyższą wiedzą możemy zatem już wygenerować sobie pewien łańcuch (chain), którego pierwszym ogniwem będzie początkowy plaintext(pptxt), zaś ostatnim ogniwem będzie końcowy hasz (khsh).

pptxt -> hsh0 -> ptxt0 -> hsh1 -> ptxt1 -> hsh2 -> ptxt2 -> khsh

Mając wygenerowane takie łańcuchy, możemy utworzyć z niej już pewną listę, która jest właśnie tęczową tablicą. Tworzymy ją jednak tylko z dwóch elementów: początkowego plaintextu oraz końcowego hasha, ponieważ każdy ze środkowych elementów możemy sobie w dowolnym momencie i niskim kosztem już sami wygenerować. Zatem nasza tęczowa tablica będzie wyglądać następująco:

pptxt | khsh

425934 | 3cd696a8571a843cda453a229d741843

769834 | 7ad7d6fa6bb4fd28ab98b3dd33261e8f

[...]

itd.

Tworzenie tablicy tęczowej

Aby utworzyć zatem samemu taką tablicę musimy wygenerować mnóstwo takich łańcuchów, które będą haszowane i redukowane nawet miliony razy. Pierwszy zaś plaintext będzie generowany randomowo. Całe tablice jak łatwo się domyślić muszą mieć bardzo duże rozmiary. Najlepsze z nich zajmują nawet kilkaset GB! Plusem jest jednak to, że taką tablicę generuje sie tylko raz - a służyć ona może wieczność.

Algorytm łamania hasła za pomocą tablicy tęczowej

Algorytm jest bardzo prosty:

  1. Dostarcz na wejście algorytmu hasz, który ma zostać odczytany

  2. Sprawdź, czy hasz znajduje się na liście w naszej tablicy tęczowej

  3. Jeżeli na liście nie znajduje ten hasz, wygeneruj z niego plaintext (f. redukująca) i otrzymany wynik zhaszuj ponownie, po czym idź do pkt. 2

  4. Jeżeli na liście znajduje się ten hasz, wówczas mamy pewność, że odnaleziony łańcuch zawiera rozwiązanie.

Teraz możemy przeszukać nasz łańcuch w poszukiwaniu rozwiązania. Wiemy bowiem ile razy modyfikowaliśmy hasz początkujący, oraz mamy hasz końcowy. Możemy zatem wygenerować rozwiązanie.

Problemy z tablicami i próby ich rozwiązania

P: Kolizja

R: ...

Słowo od Jaworka

Myślę, że można podjąć się tego zadania. Szczególnie, że w internecie dostępne są darmowe, gotowe już tablice tęczowe, które wystarczy tylko przeszukiwać w celu znalezienia rozwiązania. Jak się dowiadujemy z różnych stron, ich efektywność wynosi 99,9%. Najmniejsze mają od 350MB do 4GB. Więc takie coś jesteśmy w stanie udźwignąć. Są oczywiście dostępne również tablice po kilkaset GB, jednak raczej szkoda na nie czasu ;)

Linki

Najlepszy sajt o działaniu tablic: [[url:http://kestas.kuliukas.com/RainbowTables/|http://kestas.kuliukas.com/RainbowTables/]]

Małe tablice: [[url:http://ophcrack.sourceforge.net/tables.php|http://ophcrack.sourceforge.net/tables.php]]

Duże tablice: [[url:http://www.freerainbowtables.com/|http://www.freerainbowtables.com/]]

PODSUMOWANIE

Brute force jest proste w zrozumieniu i implementacji. Będzie jednak potrzebowało sporo czasu, chociaż kiedyś hasło się złamie... Metoda słownikowa - również powinna być prosta. Słowniki są już wcześniej dostarczone, więc po prostu sprawdzamy słowa. Więcej zabawy będzie z różnymi kombinacjami haseł, ale wiadomo - do przejścia. Szczególnie, że w internecie są dostępne słowniki. Tablice tęczowe - właściwie chyba najbardziej skomplikowana, ale bez przesady. Tablice są gotowe na necie... nic tylko kodzić ;D


Comments