Tworzenie lepszych haseł dzięki CrackLib
Napisał: Patryk Krawaczyński
22/07/2009 w Bezpieczeństwo Brak komentarzy. (artykuł nr 104, ilość słów: 816)
L
inux jest systemem, w którym hasła pełnią jedną z głównych funkcji zabezpieczających (Punkt 3. Skomplikowane hasła). Niestety nie każdy użytkownik naszego systemu potrafi zrozumieć rangi ich bezpieczeństwa. Wielu z nich tworzy bardzo łatwe kombinacje przy ich doborze. Wpływa to nie tylko negatywnie na bezpieczeństwo samego konta danego użytkownika, ale również bezpieczeństwo całego systemu. By przeciwdziałać tego rodzaju uchybieniom, możemy wymusić tworzenie lepszych haseł na samych użytkownikach z poziomu mechanizmów służących do ustanowienia i zmiany hasła. Proces taki nazywany jest proaktywnym testowaniem haseł i polega on na eliminowaniu słabych haseł zanim pojawią się w plikach zawierających informacje o kontach użytkowników.
Oczywiście pierwsze hasło dla nowego użytkownika powinno zawsze być tworzone przez administratora, który posiada doświadczenie w tworzeniu skomplikowanych fraz. Z kolei ich aktualizacja powinna być wymuszana cyklicznie (parametr: PASS_MAX_DAYS 120) na każdym użytkowniku. Za ustanawianie, blokadę oraz zmianę haseł odpowiada program passwd wchodzący w skład całego pakietu shadow (sekcja A/ w Slackware). Pakiet ten może być bez problemu zintegrowany z biblioteką CrackLib. Biblioteka ta służy do testowania haseł w czasie rzeczywistym, wykorzystując do tego różnego rodzaju słowniki, wbudowane operacje i zestawy reguł (transformacje słów). Dzięki funkcji FascistCheck
hasło poddawane jest różnym testom mającym na celu sprawdzenie, czy podany ciąg nie jest podatny na szybkie odgadnięcie (posiada mały stopień skomplikowania). Jeśli hasło nie spełnia określonych warunków, użytkownik musi podać inne hasło. Poprzez integrację CrackLib z pakietem służącym do maskowania haseł shadow jesteśmy w stanie wystawić na duże niepowodzenie ataki słownikowe oraz ataki typu brute force, tym samym zmuszając użytkowników do tworzenia profesjonalnych haseł. Pierwotnym autorem biblioteki był Alec Muffett odpowiedzialny za program do testowania haseł Crack, który swoim działaniem jest bardzo zbliżony do John The Ripper. Aktualnie CrackLib od wersji 2.8 jest rozwijany przez Nathan’a Neulinger’a.
Integrację należy rozpocząć od instalacji biblioteki:
tar -xzvf cracklib.tar.gz ./configure --prefix=/usr --with-default-dict=/usr/dict/cracklib_dict make make install ldconfig
Sama biblioteka jest mało użyteczna bez słownika, z którego mogłaby czerpać wzorce przy operacjach na haśle. Dość spory słownik (cracklib-words) możemy również ściągnąć z oficjalnej strony projektu.
gunzip cracklib-words.gz mv cracklib-words /usr/dict/cracklib_dict
Posiadając już w systemie wgrany słownik, musimy dokonać jego konwersji do formatu słownika, z którego korzysta biblioteka CrackLib. Oczywiście w katalogu /usr/dict/ możemy umieścić znacznie więcej słowników niż tylko jeden. Najlepszymi słownikami są te, które tyczą się języka narodowości naszych użytkowników oraz języka angielskiego, który uznawany jest za międzynarodowy. W celu wykonania konwersji wykonujemy komendę:
create-cracklib-dict /usr/dict/*
Komenda ta powinna utworzyć ze wszystkich słowników znajdujących się w tym katalogu następujące pliki:
/usr/dict/cracklib_dict.hwm /usr/dict/cracklib_dict.pwd /usr/dict/cracklib_dict.pwi
Ostatnim krokiem jest rekompilacja pakietu shadow. Standardowo w Slackware pakiet ten nie posiada wsparcia tej biblioteki. Jednak jego pobranie z oficjalnego repozytorium źródeł Slackware i przekompilowanie powoduje automatyczne wykrycie biblioteki i włączenie jej wsparcia. Źródła pakietu shadow znajdują się w katalogu /source/a/shadow/ naszej płyty CD/DVD lub wybranego serwera lustrzanego. Aby przeprowadzić proces rekompilacji należy przegrać cały katalog ../shadow w raz z całą jego zawartością na dysk naszego systemu. Proces ogranicza się do wykonania pliku shadow.SlackBuild:
cd shadow ./shadow.SlackBuild cd /tmp removepkg shadow-[wersja]-i486-[nr].tgz installpkg shadow-[wersja]-i486-[nr].tgz
Dla pewności przed rekompilacją możemy przeprowadzić edycję pliku .SlackBuild dodając do opcji konfiguracyjnych parametr –with-libcrack chociaż nie jest on wymagany. Źródła pobranego pakietu powinny być zgodne z wydaniem naszej dystrybucji. W celu uruchomienia wsparcia dla CrackLib poddajemy edycji plik /etc/login.defs by wskazać ścieżkę dostępu do przekonwertowanych słowników:
CRACKLIB_DICPATH /usr/dict/cracklib_dict
Od tej pory program passwd będzie dokonywał za pomocą biblioteki CrackLib sprawdzenia jakości hasła porównując go także z zawartością słów zawartych w słowniku potocznie używanych wyrazów. By wykonać test wystarczy z dowolnego konta użytkownika przeprowadzić proces zmiany hasła wpisując jako nowe hasło wybrane słowo ze słownika /usr/dict/cracklib_dict:
passwd Zmieniam hasło dla agresor Stare hasło: ********* Wpisz nowe hasło (minium 9, maksimum 127 znaków) Proszę użyj kombinacji wielkich i małych znaków oraz cyfr. Nowe hasło: 10password Złe hasło: oparte na słowie ze słownika. Spróbuj ponownie. Nowe hasło: 10.P4ss,w0rd Wpisz hasło ponownie: 10,P4ss,w0rd Hasło zmienione.
Bibliotekę CrackLib bardzo łatwo można użyć w dowolnym programie. Wystarczy przy etapie sprawdzania skomplikowania danego ciągu wykorzystać funkcję FascistCheck
. Poniżej zamieszczam prosty programik w C (tester.c), który dokonuje tak prostej weryfikacji:
#include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <crack.h> #define SLOWNIK "/usr/lib/cracklib_dict" int main(int argc, char*argv[]) { char *haslo; char *problem; int status = 0; printf("\nWprowadź puste hasło lub wciśnij Ctrl-D, aby zakończyć program.\n"); while ((haslo = getpass("\nHasło: ")) != NULL && *haslo ) { if ((problem = FascistCheck (haslo, SLOWNIK)) != NULL) { printf("Złe hasło: %s.\n", problem); status = 1; } else { printf("Dobre hasło!\n"); } } exit(status); }
Program wystarczy skompilować poprzez:
gcc tester.c -lcrack -o tester
Ponad to CrackLib bez problemu można wykorzystać w Perlu (patrz “Perl for System Administration” autorstwa David’a N. Blank-Edelman’a wydawnictwa O’Reilly w 2000 r. str. 373 poprzez Google Book Search), Pythonie czy PHP. Nic nie stoi również na przeszkodzie, by do przedstawionego wyżej mechanizmu zaangażować Pluggable Authentication Modules – PAM.
Więcej informacji: CrackLib, przykładowe słowniki, man passwd