Łamanie haseł

Przechwytywanie haseł.


Jedną z metod uzyskania dostępu do zdalnego komputera jest przechwycenie hasła przesyłanego siecią. Jest to metoda bardzo specyficzna, ale tez bardzo często skuteczna. Opiera się ona tym, że użytkownik, który chce skorzystać z jakiejś usługi na komputerze zdalnym (to ten komputer będzie naszą ofiarą, nazywajmy go dalej serwerem) w ramach uwierzytelniania bedzie przesyłał swoje hasło wraz z nazwą użytkownika siecią, bez szyfrowania. Poza tym nasz komputer musi być "na drodze" pakietów TCP/IP między uzytkownikiem, a serwerem. Jeżeli architektura sieci opiera się na modelu magistrali (np: Ethernet, połączony kablem koncentrycznym), to pakiet z komputera A do Z biegnie przez wszystkie komputery B-Y. Każdy z tych komputerów może "podsłuchać" transmisję danych.
Jeżli użytkownik z komputera Z chce się zatelnetować do serwera A wysyła w formie niezaszyfrowanej swoją nazwę użytkownika i hasło. Odpowiednio oprogramowanie na komputerze H wyłapuje pakiety TCP/IP pochodzące z Z. Dzięki temu w bardzo prosty sposób można wejść w posiadanie cudzego loginu i hasła. Możemy się dostać do wnętrza systemu.
Tą metodę można łatwo używac w sieciach lokalnych (np: w akademiku, pracy itp), gdzie cząsto zdaża się, że rolę routera pełni jeden komputer (można przy pomocy tego komputera przeprowadzić atak), lub po protu sieć zbudowana jest na schemacie magistrali.
Usługi, które standardowo przesyłają hasła otwartymi, nieszyfrowanymi kanałami to np: telnet, ftp, pop3

Innym sposobem na przechwycenie hasła może być napisanie małego programu, który imituje np: ekran powitalny komputera w pracowni wydziałowej. Nieświadomy użytkownik podchodząc do komputera poprostu spróbuje się zalogować, wpisze nazwe użytkownika oraz hasło. W tym momencie program wyłącza się uprzednio zapisawszy hasło i login na naszym koncie.

Łamanie haseł

Kolejną metodą otrzymania większych uprawnień w systemie, niż je posiadamy jest znalezienie hasła do konta roota, lub innego uzytkownika.
Najpierw należy zdobyc plik z hasłami. Plik ten to zazwyczaj /etc/passwd. PLik ten ma strukture:
postgres:x:1001:100:postgres,,,:/home/postgres:/bin/bash piotrek:x:1002:100:,,,:/home/piotrek:/bin/bash kwinto:x:1010:100:,,,:/home/kwinto:/bin/bash ronnie:x:1011:100:Michal Zych,,,:/home/ronnie:/bin/bash stacho:x:1013:100:Stanislaw Wierchola,,,:/home/stacho:/bin/bash

Struktura tego pliku została opiana w jednym ze scenariuszy do laboratorium z SO. Plik ten to zbiór pól oddzielonych separatorem ":". Pole drugie powinno zawierać hasło, ale jak widzimy w tym miejscu jest "x". Oznacza to, że hasła są w pliku "shadow". Potrzebny więc będzie plik /etc/shadow.

Plik A oto fragment plik /etc/passwd z mojego komputera:

postgres:$1$/5H3xOO.$mlGI6DsbEiBilP.MlYSoZ/:11924:0:99999:7::: piotrek:$1$hBHxV34u$tNVDZ.FvdS9uwxR7pbuxZ/:11945:0:99999:7::: kwinto:$1$08/QxXWn$fQkMogWzQ42q8SnmM4HdO.:11952:0:99999:7::: ronnie:$1$1YArxiAN$Ny8H54Nw.4R8DP9xo7MHz.:11984:0:99999:7::: stacho:$1$0Cz9xh1X$Ji6L2iooae6Huj5.yW7Og.:11981:0:99999:7::: Drugie pole w tym pliku zawier zakodowane hasła. Aby takie hasło złamac można posłużyć się password-crackerem takim jak np: John The Ripper, Cracker Jack, Star Crack, Hades
Jako przykład użyjemy tutaj John The Ripper.
Dzialanie programu opiera się na tym, żę:
  • Rozpoznaje on rodzaj algorytmu użytego do zaszyfrowania hasła (może też otrzymać ten parametr z linii poleceń)
  • Wybrany (ze słownika lub losowy ) ciąg znaków koduje tym algorytmem i wynikowy, zekodowany ciąg znaków przyrównuje do wzorca w pliku z hasłem. Jeśli ciąg pasuje do wzorca to program znalazł hasło ! :)
Ciągi, które John przyrównuje do hasła z pliku mogą pochodzić z pliku słownika, lub mogą to być ciągi generowane metodą brute-force np: aaa, aab, aac itd. Kluczem do sukcesu jest posiadanie dobrego pliku ze słownikiem, najlepiej takiego, ktory wzglednia jezyk (np: polski). Taki plik to po prostu zwykły plik tekstowy zawierający po jednym słowie w każdej z linijek.
Z racji na sposób w jaki John i inne łamacze haseł działają, należy liczyć się z tym, że proces taki może trwać nawet kilkadziesiąt godzin w zależności od ilości wpisów w pliku z hasłami, oraz, naturalnie, szybkości komputera :)

Link do strony domowej John The Ripper: http://www.false.com/security/john/

Tak ja używałem Johna:

[jarek:/home/jarek/soft/john-1.6/run ]$ ./john shadow Loaded 6 passwords with 6 different salts (FreeBSD MD5 [32/32]) (postgres) (piotrek) guesses: 2 time: 0:01:04:52 (3) c/s: 2333 trying: pigBOYN guesses: 2 time: 0:01:04:56 (3) c/s: 2333 trying: piess97 guesses: 2 time: 0:01:05:02 (3) c/s: 2333 trying: cuphyja guesses: 2 time: 0:01:05:05 (3) c/s: 2333 trying: phiply5 guesses: 2 time: 0:01:05:07 (3) c/s: 2333 trying: ph3lyss
Jak widać na listingu John załadował plik z sześcioma hasłami, znalazł dwa konta, które mają pusta hasła. Jeżeli w czasie działania Johna wciśniemy jakikolwiek klawisz, wypisze on ciąg, który obecnie przyrównuje do wzorca (jw).
Co zyskujemy?
  • Jeśli nie mieliśmy konta w danym systemie (plik z hasłami otrzymaliśmy np: za pomocą dziury w oprogramowaniu serwera www), a odkodowaliśmy hasło do takiego, jesteśmy o krok bliżej. O wiele łatwiej atakować z wnętrza systemu, niż z zewnątrz.
  • Jeśli odkodowaliśmy hasło root'a to osiągneliśmy cel :) i system jest na naszej (nie)łasce.

[ UP ]

(c) by Jarek