Przesłanianie haseł (Shadow Password): Po co przesłaniać plik passwd ?
Następna strona
Poprzednia strona
Spis treści
2. Po co przesłaniać plik passwd ?
W chwili obecnej większość dystrybucji Linux-a nie instaluje domyślnie pakietu
Shadow Suite. Dotyczy to Slackware 2.3, Slackware 3.0 i innych
popularnych dystrybucji. Jednym z powodów tego jest to, że jeśli zapłacono
jakąś kwotę za Shadow Suite to prawa co do redystrybucji nie były
do końca jasne. Linux używa licencji GNU, która pozwala na umieszczanie go
w dowolnych pakietach (jak np. dystrybucje CD-ROM) i pobieranie za nie opłaty.
Obecny opiekun pakietu Shadow Suite,
Marek Michałkiewicz otrzymał
źródła oryginału na licencji w stylu BSD, która pozwala na dystrybucję.
Teraz, kiedy już sprawy praw kopiowania są rozwiązane, spodziewane jest, że
przyszłe dystrybucje będą zawierać domyślnie przesłanianie haseł. Jednak do
tego czasu, będziesz musiał je samemu instalować.
Jeśli instalowałeś swoją dystrybucję z CD-ROM-u, to pomimo, że dystrybucja
nie zainstalowała Shadow Suite niektóre pliki, których potrzebujesz
mogą się znajdować na CD-ROM-ie.
Wersje pakietu 3.3.1, 3.3.1-2 i shadow-mk mają problemy dotyczące
bezpieczeństwa ze swoim programem login i kilkoma innymi programami typu
suid root i nie powinny być już używane.
Wszystkie potrzebne pliki są dostępne poprzez anonimowane ftp oraz WWW.
W Linux-ie bez zainstalowanego pakietu Shadow Suite informacje
o użytkowniku wraz z hasłem trzymane są w pliku /etc/passwd.
Hasło znajduje się tam w formie zakodowanej (encrypted). Jednak jeśli
spytasz jakiegoś eksperta od kryptografii, to powie ci on/ona, że
hasło jest w postaci "encoded", a nie "encrypted" ponieważ używając
funkcji crypt(3), tekstowi jest przypisywany łańcuch pusty a hasło
jest kluczem. Dlatego, od tego momentu będę używał określenia "encoded".
Algorytm używany do kodowania hasła jest technicznie określany jako algorytm
działający w jedną stronę. Jest to algorytm, który jest łatwy do zastosowania
w jedną stronę, ale bardzo trudny do złamania. Więcej na ten temat znajdziesz
w sekcji
2.4 albo na stronie podręcznika systemowego
dotyczącej funkcji crypt(3).
Kiedy użytkownik wybiera hasło, albo jest mu ono przydzielone, jest ono
kodowane losowo generowaną wartością zwaną salt (sól). Oznacza to,
że każde hasło może zostać zakodowane na 4096 sposobów. Wartość salt
jest potem zapisywana razem z zakodowanym hasłem.
Kiedy użytkownik się wlogowuje i podaje hasło, najpierw pobierana
jest wartość salt z zakodowanego hasła. Następnie pobrane
hasło zostaje zakodowane pobraną wartością, i porównane z zapisanym
zakodowanym hasłem. Jeśli łańcuchy te są identyczne, to użytkownik
zostaje "wpuszczony" do systemu. Jest bardzo trudno (ale nie jest
to niemożliwe) wziąć losowo zakodowane hasło i otrzymać hasło
rozkodowane. Chociaż, w każdym systemie z większą liczbą
użytkowników, przynajmniej kilka haseł będzie zwykłymi słowami albo
jakąś wariacją zwykłych słów.
Włamywacze więdzą o tym wszystkim i po prostu kodują słownik ze
słowami i popularnymi hasłami wszytkimi możliwymi wartościami
salt. Potem porównają wyniki z zawartością twojego pliku
/etc/passwd. Jak znajdą jakiś identyczny łańcuch, to mają
hasło na następne konto. Nazywane jest to atakiem
słownikowym i jest to jeden z najpopularniejszych sposobów na
pozyskiwanie dostępu do systemu przez osoby nieuprawnione.
Jeśli się nad tym zastanowisz, to zobaczysz, że 8-znakowe hasło
może zostać zakodowane na 4096 * 13 sposobów. Tak więc słownik
składający się powiedzmy z 400.000 popularnych słów, nazw, imion,
haseł i ich prostych wariacji zmieściłby się z łatwością na dysku o
pojemności 4GB. Włamywacz musi go tylko posortować i sprawdzić czy
któryś z łańcuchów nie jest hasłem. Dysk o pojemności 4GB można
kupić za ok. 1000 dolarów, tak więc mieści się to w możliwościach
większości włamywaczy systemowych.
Jeśli włamywacz zdobędzie twój plik /etc/passwd, to musi
on zakodować swój słownik kluczem, który znajduje się w tym
pliku. Metoda ta może być wykorzystana przez przeciętnego
nastolatka z kilkoma megabajtami na dysku i komputerem klasy 486.
Nawet bez dużej ilości wolnego miejsca na dysku, narzędzia takie
jak crack(1) mogą zwykle złamać przynajmniej kilka haseł z systemu
z dostatecznie dużą ilością użytkowników (zakładając, że
użytkownicy mają możliwość samemu wybierać sobie hasła).
Plik /etc/passwd zawiera także takie informacje jak ID
użytkownika i ID grupy, które są używane przez większość
programów. Dlatego plik /etc/passwd musi
pozostać odczytywalny dla każdego. Jeśli chciałeś właśnie zmienić
prawa dostępu do pliku /etc/passwd tak, żeby nikt nie mógł
go czytać (oprócz "root-a"), to pierwszym symptomem jaki byś
zauważył, to to, że przy wydaniu polecenia ls -l
pojawiłyby się numery zamiast nazw użytkowników.
Pakiet Shadow Suite rozwiązuje ten problem poprzez
umieszczenie haseł w innym pliku (z reguły jest to
/etc/shadow). Plik /etc/shadow ma tak ustawione
prawa dostępu, że nie może go czytać nikt, oprócz
"root-a". Niektóre programy jak np. xlock, nie muszą mieć
możliwości zmiany haseł, ale tylko ich odczytu. Programy te mogą
albo być uruchamiane z prawem "suid root", albo możesz dodać grupę
shadow, która miałaby tylko prawo odczytu pliku
/etc/shadow. Program ten może wtedy należeć do grupy
"shadow" i być uruchamiany z prawem "sgid".
Przenosząc zakodowane hasła do innego pliku, efektywnie zabraniamy
włamywaczom dostępu do nich, co uniemożliwia ataki słownikowe.
Dodatkowo pakiet Shadow Suite posiada wiele innych zalet:
Plik konfiguracyjny, w którym można ustawic wartości domyślne
podczas logowania (/etc/login.defs)
Narzędzia do dodawania, modyfikacji i usuwania kont i grup.
Ustalanie "daty ważności" konta i jego wygasanie (expiration).
Przesłanianie haseł dla grup. (opcjonalnie)
Hasła o podwójnej długości (16 znaków) [NIE ZALECANE]
Lepsza kontrola nad wybieraniem haseł przez użytkowników.
Hasła przez telefon.
Programy do dodatkowej autentykacji [NIE ZALECANE]
Instalacja pakietu Shadow Suite przyczynia się do
zwiększenia bezpieczeństwa sieci opartej na Linux-ie, ale pozostaje
jeszcze wiele innych rzeczy do zrobienia, aby zwiększyć
bezpieczeństwo takiej sieci. Z czasem pojawi się seria HOWTO
poświęcona bezpieczeństwu.
Na
stronie poświęconej bezpieczeństwu w Linux-ie zawarte są
różne informacje na ten temat jak również ostrzeżenia o znanych
dziurach w systemie.
2.1 Czemu możesz nie chcieć przesłaniać swojego pliku z hasłami ?
Jest kilka okoliczności i konfiguracji, w których instalacja
pakietu Shadow Suite nie byłaby dobrym pomysłem:
Maszyna nie zawiera kont użytkowników.
Twoja maszyna jest w sieci LAN i używa NIS (Network Information
Services), aby obsługiwać nazwy użytkowników i hasła na innych
maszynach w tej samej sieci. (Właściwie mogłoby to być zrobione,
ale wykracza poza ramy tego dokumentu i nie zwiększyłoby
bezpieczeństwa w znacznym stopniu.)
Twoja maszyna jest używana przez serwery terminali, aby
weryfikować użytkowników poprzez NFS (Network File System), NIS
albo jakąś inną metodę.
Na twojej maszynie znajduje się inne oprogramowanie, które
autentykuje użytkowników, a nie ma wersji tego oprogramowania dla
shadow i nie masz źródeł.
2.2 Format pliku /etc/passwd.
Nieprzesłonięty plik /etc/passwd ma następujący format:
identyfikator:hasło:UID:GID:imie_nazw:katalog:powłoka
Gdzie:
identyfikatorNazwa (login) użytkownika
hasłoZakodowane hasło
UIDNumer użytkownika
GIDNumer domyślnej grupy dla użytkownika
imie_nazwImię i nazwisko użytkownika - Właściwie
pole to nazywa się GECOS (General Electric Comprehensive Operating
System) i mogą tam być zapisane inne dane niż tylko imię i nazwisko
Polecenia Shadow i strony podręcznika systemowego nazywają to pole
polem komentarza.
katalogKatalog domowy użytkownika (pełna ścieżka)
powłokaPowłoka dla danego użytkownika (pełna
ścieżka)
Na przykład:
login:Nkjg97jh7yff8:503:100:Imię Nazwisko:/home/login:/bin/bash
Gdzie Nk jest wartocią salt a
jg97jh7yff8 jest zakodowanym hasłem. Zakodowane hasło z
kluczem mogłoby równie dobrze wyglądać tak: ghHFgj75fR8iP
a te dwa łańcuchy to dokłanie te same hasła. Jest 4096 możliwości
zakodowania pojedynczego hasła. {Przykładowym hasłem jest tutaj
'hasło' naprawdę zły przykład hasła.}
Jak już pakiet Shadow Suite jest zainstalowany, to plik
/etc/passwd zawiera:
login:x:503:100:Imię Nazwisko:/home/login:/bin/bash
Znaczek "x" w tym przypadku jest po prostu czymś co wypełnia miejsce
hasła. Format pliku /etc/passwd się nie zmienił, zmieniło się
tylko miejsce przechowywania zakodowanego hasła. Oznacza to, że
każdy program, który tylko czyta plik /etc/passwd,a nie
zapisuje w nim hasła, będzie nadal działał poprawnie.
Hasła znajdują się obecnie w pliku /etc/shadow. (jest to
domyślna nazwa)
2.3 Format pliku przesłaniającego.
Plik /etc/shadow zawiera następujące informacje:
login:hasło:ostatnio_1970:może:musi:ostrz:dni:dni_1970:zarez
Gdzie:
loginpatrz /etc/passwd
hasłoZakodowane hasło
ostatnio_1970Ilość dni od 1 Stycznia 1970, kiedy
hasło było ostatnio modyfikowane
możeIlość dni w przeciągu, których hasło może być
zmienione
musiIlość dni, po której hasło musi zostać
zmienione
ostrzIlość dni przed wygaśnięciem hasła od jakiej
należy zacząć informować użytkownika o wygaśnięciu hasła.
dniIlość dni, po której hasło wygasa i konto jest
blokowane
dni_1970Ilość dni od 1 Stycznia 1970, po której
konto jest blokowane
zarezPole zarezerwowane
Poprzedni przykład mógł więc wyglądać tak:
login:Nkjg97jh7yff8:9479:0:10000::::
2.4 Przegląd funkcji crypt(3).
Ze strony podręcznika systemowego "man":
"crypt jest funkcją kodującą hasło. Oparta jest na
algorytmie DES (Data Encryption Standard) z dozwolonymi wariacjami
(między innymi), aby zniechęcić do sprzętowych rozwiązań
poszukiwania klucza.
Kluczem jest podane przez użytkownika hasło. [Zakodowany łańcuch
jest wartościami NULL]
Salt jest łańcuchem 2-znakowym wybranym ze zbioru
[a-zA-Z0-9]. Łańuch ten jest użyty po to, aby zaburzyć algorytm w
jeden z 4096 sposobów.
Biorąc 7 najmniej znaczących bitów każdego znaku z klucza
otrzymujemy 56-bitowy klucz. Ten 56-bitowy klucz jest używany, do
powtórnego kodowania stałego łańcucha (zwykle są to znaki
NULL). Zwrócona wartość wskazuje na zakodowane hasło - serię 13
drukowalnych znaków ASCII (dwa pierwsze znaki reprezentują wartość
salt). Wartość zwracana wskazuje na stałe dane, których zawartość
jest zmieniana przy każdym wywołaniu.
Uwaga: Liczba możliwych wartości klucza to 2^56 = 7,2E16
(około 72 biliardów). Wyczerpujące poszukiwania tego klucza są
możliwe przy wykorzystaniu wielu równolegle współpracujących
komputerów. Oprogramowanie, takie jak crack(1), jest dostępne i
szuka ono takich kluczy, które z reguły używane są przez
ludzi. Dlatego właśnie przy wybieraniu hasła powinno się unikać
przynajmniej zwykłych słów. Zaleca się, używanie programu
passwd(1), które podczas zmiany hasła sprawdza czy nowe hasło nie
jest przesadnie proste.
Algorytm DES ma w sobie pewne kruczki, które czynią użycie
interfejsu crypt(3) bezużytecznym w przypadku innym niż
autentykacja haseł. Jeśli masz zamiar używać interfejsu crypt(3)
do kryptografii nie rób tego: zdobądź dobrą książkę na temat
kodowania (encryption) i jedną z szeroko dostępnych bibliotek DES."
Większość pakietów Shadow Suite zawiera kod zwiększający
ilość znaków w haśle do 16. Eksperci od DES-a są temu przeciwni,
ponieważ w takim przypadku kodowanie najpierw odbywa się dla lewej
strony dłuższego hasła, a potem dla prawej strony. Z powodu tego
jak działa crypt, może to stworzyć mniej bezpiecznie
zakodowane hasło niż wtedy, gdy użyte zostałoby hasło
krótsze. Dodatkowo, jest mało prawdopodobne, żeby użytkownik był w
stanie zapamiętać hasło 16-znakowe.
Trwają w tej chwili prace, które mają na celu zastąpienie
dotychczasowego algorytmu autentykacji czymś bardziej bezpiecznym
oraz z obsługą dłuższych haseł (szczególnie algorytmem MD5) oraz
pozostawienie kompatybilności z metodą wykorzystującą crypt.
Jeśli szukasz dobrej książki na temat kodowania polecam:
"Applied Cryptography: Protocols, Algorithms, and Source Code in C"
by Bruce Schneier <schneier@chinet.com>
ISBN: 0-471-59756-2
Następna strona
Poprzednia strona
Spis treści
Wyszukiwarka
Podobne podstrony:
Shadow Password HOWTO pl 10 (2)Shadow Password HOWTO pl 8 (2)Shadow Password HOWTO pl (3)Shadow Password HOWTO pl 5 (2)Shadow Password HOWTO pl (2)Shadow Password HOWTO pl 6 (2)Shadow Password HOWTO pl 9 (2)Shadow Password HOWTO pl 7 (2)Shadow Password HOWTO pl 1 (2)Shadow Password HOWTO pl 4 (2)Shadow Password HOWTO pl 3 (2)Shadow Password HOWTO plshadow password howto 4 wrjj4xl2rttpywxk645hll3i63bvo7zfmqmiewy wrjj4xl2rttpywxk645hll3i63bvo7zfmqmishadow password howto 5 xwj2yqx7sdr7adin3jsjtftaoqyivxcflwawaqa xwj2yqx7sdr7adin3jsjtftaoqyivxcflwawshadow password howto 2 foxyypsfur2dgvcm757tzpjjjqzxkvhcxqxuazi foxyypsfur2dgvcm757tzpjjjqzxkvhcxqxushadow password howto xaxuxvyqvflgb5m452rbxlszzlk756szuoenxpa xaxuxvyqvflgb5m452rbxlszzlk756szuoenxpshadow password howto 6 wekeaom5hhmqmfgscm4mih3yeed3zer56aqewwa wekeaom5hhmqmfgscm4mih3yeed3zer56aqeshadow password howto 9 rrzkcxlxnah6g6g76dgcjvmvfeeihhseu43rxfi rrzkcxlxnah6g6g76dgcjvmvfeeihhseu43rshadow password howto 1 jvl6nxop7fpn62s67zmft74rytj65xu7oqy4xdi jvl6nxop7fpn62s67zmft74rytj65xu7oqy4więcej podobnych podstron