1. Wstęp
Tematem dzisiejszego postu jest bezpieczeństwo haseł w systemie Windows, a dokładniej Windows XP — chociaż zaprezentowane rozwiązania będą działać zarówno w Windowsie 2000 jak i Viście. Po dzisiejszym wykładzie będziemy mogli o sobie mówić „jestem hakerem”. Dokładnie — będziemy hakerami ujętymi w cudzysłowiu :D. No ale od czegoś trzeba zacząć. Po zainstalowaniu systemu trzeba by go jakoś skonfigurować np. utworzyć nowych użytkowników, nadać im odpowiednie uprawnienia itp. itd. Użytkownik po ustawieniu sobie hasła jest gotowy do korzystania z systemu. I tutaj zaczyna się właściwa część dzisiejszego wpisu. Chodzi właśnie o bezpieczeństwo haseł ustawionych przez użytkowników. Jako, że jesteśmy administratorami danego systemu musimy zadbać o bezpieczeństwo całości, w tym o bezpieczeństwo haseł użytkowników (oczywiście nie będziemy im mówili jakie hasła mają ustawić dla siebie — będziemy sprawdzać bezpieczeństwo haseł). Nasz system jest tak bezpieczny jak najsłabsze hasło — gdy intruz zdobędzie dowolny login i hasło nawet zwykłego użytkownika to już krok do zwiększenia uprawnień w całym systemie włączając w to zdobycie uprawnień administratora, a tego byśmy nie chcieli. Gdy już ustawimy wszystko warto pobawić się w administratora i hakera — czyli odwieczna walka administratora i hakera. Gdy nasz system jest gotowy do użytkowania, zabieramy się za sprawdzenie haseł wszystkich użytkowników.
2. Trochę przydatnej teoriiW tym celu posłużymy się dystrybucją Linuxa — Linux OphCrack. Na dzień dzisiejszy istnieją dwie odmiany tej dystrybucji — Linux OphCrack przeznaczony do łamania haseł w Windows XP i Linux OphCrack przeznaczony do łamania haseł w Windows Vista (w celu sprawdzenia siły haseł w Windows 2000 możemy posłużyć się darmowym programem Cain z pakietu Cain&Abel, ewentualnie płatnym L0phtCrack). Linux OphCrack możemy zainstalować na dysku lub uruchamiać bezpośrednio z płyty jako LiveCD. Ja posłuże się wersją LiveCD. Zanim jednak zaczniemy łamać lub jak niektórzy wolą „odzyskiwać” :) hasła, eksperci od bezpieczeństwa nazywają to „audytem haseł”, trochę teorii na temat samej dystrybucji OphCrack i metod jakimi posługuje się podczas łamania haseł. Jedną metodą jest znana chyba każdemu metoda Brute Force — czyli sprawdzane są wszystkie kombinacje znaków dla danej długości np. dla hasła 8 znakowego będą to wszystkie znaki alfanumeryczne plus np. znaki specjalne (zakres sprawdzanych znaków można samemu określać) takie jak „!@#$%^&*()” ale będą sprawdzane tylko hasła 8 znakowe np. „1qAw4j*8” „d$Ji2<oE” itd. itp. Metoda Brute Force jest skuteczna, ale w przypadku wydajnych komputerów — na zwykłym domowym sprzęcie prawdopodobieństwo złamania hasła jest niewielkie — chociaż można do tego celu wykorzystać współczesne konsole do gier, które są o wiele wydajniejsze od domowych PC, ewentualnie wspomóc proces łamania poprzez zatrudnienie bardzo wydajnych kart graficznych. Krótko mówiąc dla hasła o długości np. 8 znaków będą sprawdzane wszystkie możliwe kombinacje znaków, ale tylko w zakresie 8-znakowym, dla hasła 10 znakowego wszystkie kombinacje znaków, ale tylko w zakresie 10-znakowym. Drugą metodą jaką stosuje Linux OphCrack jest metoda sprawdzania tzw. haszy i wykorzystanie do tego celu tzw. Tęczowych Tablic (ang. Rainbow Tables). Na temat Tęczowych Tablic nie będę się rozpisywał, ponieważ sam dopiero raczkuje w tym temacie i nie chce pisać głupot. Wystarczy w Google wpisać „Tęczowe Tablice”, „Tęczowe Tabele”, „Rainbow Tables” i poczytać.
W systemie Windows XP (również w Windows NT, Windows 2000 czy Windows Vista) hasła przechowywane są w pliku SAM, który domyślnie znajduje się w katalogu C:\Windows\system32\config\. Hasła przechowywane w pliku SAM są szyfrowane tzw. funkcją jednokierunkową lub inna nazwa to algorytm mieszania tzw. hash. Haseł tak zaszyfrowanych nie da się odszyfrować bezpośrednio (stąd nazwa funkcja jednokierunkowa — szyfruje w jedną stronę np. szyfrowanie MD5). Inne popularne funkcje haszujące to m.in. SHA1, MD2, MD4, RIPEMD-160, Cisco PIX i wiele innych. Można jednak posłużyć się wspomnianym wcześniej Tęczowymi Tablicami (trzeba znać zasadę działania Tęczowych Tablic) i porównać przygotowane wcześniej tabele z hashami, z hashami znajdującymi się w pliku SAM. Co to są „tabele z hashami”? Są to nasze Rainbow Tables, w których występują wcześniej wygenerowane przez kogoś (takie tabele można kupić, lub wygenerować samemu — proces generowania hashy trwa długo) hashe haseł. Tablice z hashami można sobie samemu wygenerować np. używając programu Cain
Ad. screen 2 — benchmarkOpis:
- — zostanie wygenerowana tabela zawierająca „tylko hashe typu LM” (typ hashy można ustawić)
- — tabela będzie zawierała „tylko znaki alfabetu od A do Z” (typ znaków można ustawić)
- — generowana tabela będzie zawierać 8353082582 kluczy, będzie zajmować 610,35 MB a „skuteczność łamania wyniesie 97,80 %” — czyli całkiem nieźle :)
- — wyniki benchmarku mówią nam m.in. że tabela jaką sobie ustawiliśmy „będzie generowała się ponad 2 dni”
Opcje można dopasować do swoich potrzeb. Można zadać pytanie: no to po co ustawiać hasła skoro mogę użyć Rainbow Tables i je zdekodować? Dobre pytanie :). Ale można zadać też pytanie jaka jest skuteczność łamania i jak długo trzeba czekać na znalezienie haseł tak zaszyfrowanych? Odpowiedź jest prosta: skuteczność łamania uzależniona jest od jakości haseł a czas od jakości oraz mocy obliczeniowej komputera. Jeżeli np. ustawie hasło logowania „qwerty” to czas łamania wyniesie kilka sekund przy mocy obliczeniowej dzisiejszych komputerów — procesor dwurdzeniowy, 4 GB Ramu. Przy takim haśle nie będzie nawet potrzebne użycie Rainbow Tables ponieważ zadziała atak Brute Force. Ale gdy ustawimy hasło logowania na „E^jd#8/lv-1J” to czas łamania znacznie się wydłuży. Coś ty oszalał! Jak takie hasło zapamiętać? Bardzo prosto :) — patrz Przydatne linki oraz punkt Hardening systemu.
Kolejna dobra wiadomość — standardowo zakodowany plik SAM można dodatkowo zaszyfrować używając polecenia SYSKEY. Co to jest SYSKEY? SYSKEY (skrót od SYStem KEY) jest to dodatkowa warstwa kodowania haseł zapisanych w pliku SAM. SYSKEY dostarcza losowo 128 bitowy klucz do ponownego zaszyfrowania haseł (nie pliku SAM — tylko samych haseł, które są już raz zaszyfrowane). Takie działanie nazywane jest też „dodaniem soli” (ang. salt) lub dodaniem „ciągów zaburzających”. Dodanie dodatkowej warstwy szyfrującej praktycznie uniemożliwia złamanie haseł za pomocą Rainbow Tables, nie mówiąc już o ataku Brute Force. Aby dodatkowo zaszyfrować nasze hasła należy użyć polecenia „syskey”. W menu Start → Uruchom wpisujemy „syskey”. Pokaże nam się okno SYSKEYa:
Po kliknięciu na przycisk Aktualizuj pokaże się dodatkowe menu z możliwością wybrania sposobu aktywacji SYSKEYa:
Dostępne są trzy opcje:- Opcja 1 — SYSKEY zachowany w Rejestrze i uruchamiany automatycznie podczas startu systemu (opcja domyślna)
- Opcja 2 — SYSKEY zachowany w Rejestrze, ale blokowany hasłem, które trzeba zawsze wpisać aby uruchomić system
- Opcja 3 — SYSKEY przechowywany na dyskietce — aby uruchomić system konieczne jest włożenie dyskietki do napędu
Teraz gdy uaktywniliśmy SYSKEY-a możemy być spokojni o nasze hasła :) Błąd! Istnieje metoda, która pozwala na wyłączenie SYSKEY-a oraz zdekodowanie haseł z włączonym SYSKEY-em. Miałem tego nie pisać, ale jednak postanowiłem opisać po krótce o co chodzi, żeby uświadomić powage problemu. Otóż aby wyłączyć ustawionego syskey'a trzeba posłużyć się techniką polegającą na wstrzyknięciu biblioteki DLL. Technika polega na wymuszeniu przez jeden proces na innym procesie wczytania dodatkowej biblioteki DLL. Następnie kod zawarty w tej bibliotece wykonywany jest w przestrzeni adresowej i w kontekście użytkownika tego drugiego procesu.
Kolejną ważną wiadomością jest typ hashy, które przechowują hasła. W Windowsie XP są to hashe typu NT, ale występują również hashe typu LM, które są potrzebne do zachowania kompatybilności wstecznej z systemami typu Win9x. Domyślnie algorytm szyfrowania typu LM (LanManager) jest włączony co stanowi poważne osłabienie bezpieczeństwa pliku SAM ponieważ system oprócz szyfrowania NT przechowuje jednocześnie hashe typu LM. Dlaczego przechowywanie hashy LM stanowi wadę? Ano dlatego, że ten algorytm już dawno został rozpracowany i obecnie nie stanowi większego problemu podczas łamania haseł. Hasze LM można odróżnić od haszy NT tym, że wszystkie znaki w haśle wyświetlane są tylko wielką literą, natomiast hash NT rozróżnia wielkość znaków. Na całe szczęście „przechowywanie hashy LM można wyłączyć” — komputery z Win9x nie są nam potrzebne :). Aby wyłączyć autoryzację LanManager należy w Rejestrze dodać wartość „nolmhash” typ wartości „DWORD = 1” do klucza:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa
Jeśli ktoś boi się lub nie lubi grzebać w Rejestrze może posłużyć się programem xp-AntiSpy aby wyłączyć autoryzację haszy LM:
Od teraz przechowujemy tylko hasła zaszyfrowane algorytmem NT, tzn. hasła z hashami LM dalej są ale tylko do momentu gdy użytkownik zmieni hasło — po zmianie hasła na nowe jest ono szyfrowane tylko algorytmem NT. Natomiast po takiej zmianie użytkownicy z systemami Win9x nie będą już mogli się zalogować. No to do dzieła — zobaczmy łamanie haseł przy pomocy Rainbow Tables.
3. Linux OphCrack — Łamanie haseł nie zabezpieczonych przez Syskey (teoria + film)Po tej całej teorii warto by zobaczyć jak to wszystko wygląda w praktyce. Hakowany system to Windows XP Professional, ustawionych jest kilku użytkowników — dwóch administratorów, jeden zaawansowany użytkownik, kilku zwykłych użytkowników plus konta wbudowane. Zostanie wykorzystany Linux OphCrack dla Windowsa XP. OphCracka można uruchomić w trybie graficznym lub tekstowym. Ja wykorzystałem tryb tekstowy ponieważ miałem problemy z uruchomieniem trybu graficznego, ale że jesteśmy hakerami to oczywiście uruchamiamy tryb tekstowy ;). Jednak żeby lepiej zrozumieć zasade działania OphCracka warto uruchomić go w trybie graficznym.
Jak widać złamanie 6 haseł (właściwie 5 — bo jedno było puste) zajęło około 20 minut. Niedużo. Mój sprzęt to Athlon XP 3200+, 1 GB Ramu. Jak widać występuje problem z polskimi znakami a właściwie braku polskich znaków. Nie wiem czy to wina kodowania zastosowanego przez OphCracka, czy wykorzystania tabeli. Na całe szczęście aby poznać prawidłowe nazwy użytkowników możemy posłużyć się programem Cain, który pokazuje prawidłowe nazwy. Wadą OphCracka jest też to, że nie podświetla użytkownika, który jest administratorem systemu — zrobi to za nas program L0phtCrack.
Znamy wszystkich użytkowników i wszystkie hasła trzeba by je sprawdzić.
Jak już wspomniałem Linux OphCrack ma problem z wyświetlaniem polskich znaków i dlatego, żeby uzyskać prawidłowe nazwy i hasła trzeba się posłużyć np. programem Cain. Loginy i hasła już zdobyte, teraz je sprawdzimy czy rzeczywiście ten Linux OphCrack działa. Uruchamiamy Windowsa i wpisujemy.
5. Linux System Rescue CD — podmiana pliku SAM i plików Zdarzeń Systemowych (teoria + film)Na razie wszystko idzie po naszej myśli, loginy i hasła złamane, Linux OphCrack działa, teraz wykorzystamy inną dystrybucję Linuxa mianowicie Linux SystemRescueCD do podmiany pliku SAM oraz plików Dzienników zdarzeń w hakowanym Windowsie, chociaż może to być każda inna dystrybucja, ale ja wybrałem akurat tą ponieważ posiada zestaw narzędzi przydatnych podczas np. odzyskiwania danych, partycjonowania dysku i kilka innych gadżetów. Co to jest plik SAM? Plik SAM (Security Accounts Manager) służy do przechowywania wszystkich informacji o kontach i hasłach, a informacje tam zawarte przechowywane są w postaci zaszyfrowanej — szyfrowanie funkcją jednokierunkową. Oprócz pliku SAM będziemy również podmieniać pliki Dzienników zdarzeń (pliki z rozszerzeniem EVT) znajdujące się domyślnie w tym samym katalogu co plik SAM. Domyślnym katalogiem jest katalog:
C:\Windows\system32\configNas interesują pliki „AppEvent.evt”, „SecEvent.evt” i „SysEvent.evt”.
Po uruchomieniu Linux SystemRescueCD trzeba podmontować system plików NTFS — oczywiście jeśli na takim mamy zainstalowany Windows. System plików NTFS montujemy następującym poleceniem:
ntfs-3g /dev/sda1 /mnt/windows6. Działanie w hakowanym systemie i zacieranie śladów (teoria + film)
Logujemy się jako haker wykorzystując przygotowany wcześniej dla naszych potrzeb plik SAM. Przechodzimy do Panelu Sterowania → Narzędzia administracyjne i sprawdzamy czy rzeczywiście mamy uprawnienia administratora. Następnie sprawdzamy jakie zdarzenia loguje prawdziwy administrator (Zasady inspekcji). Na koniec sprawdzamy stan naszych spreparowanych Dzienników zdarzeń — wszystko co zrobimy zostanie zachowane ale w naszych a nie prawdziwych Dziennikach zdarzeń. Gdy na koniec podmienimy nasze pliki EVT na pliki oryginalne w logach nie będzie śladu po naszej działalności, a przecież o to nam chodziło :). Następnie przeglądamy dysk C — widać utworzone katalogi dla pliku SAM i Dzienników zdarzeń. W rzeczywistości powinniśmy wszystko nagrywać np. na pendriva. Kolejną czynnością jest przegląd Rejestru w celu usunięcia pozostawionych śladów.
7. Administrator sprawdza działalność hakera (film)Przyszła pora, żeby prawdziwy administrator sprawdził działalność hakera
8. Hardening systemu operacyjnego (kilka przydatnych wskazówek)- Stosować SYSKEY — dodatkowe hasło lub przechowywane na dyskietce;
- Usunięcie zapamiętywania hashy LM — gdy usuniemy zapamiętywanie hashy LM stracimy możliwość zalogowania się do systemu używając systemów Windows 9x, ale tym samym wzmocnimy bezpieczeństwo naszego systemu. Hashe LM służą jedynie do zachowania kompatybilności wstecznej z systemami Windows9x, ale takich chyba mało kto używa;
- Blokada BIOS-u — ustawić hasło blokujące dostęp do BIOSu, chociaż można posłużyć się specjalną zworką i zresetować ustawienia BIOSu ewentualnie zablokować obudowę komputera przed ingerencją w nasz hardware;
- Kopie pliku SAM oraz Rejestru (katalog Repair zostawić pusty) przechowywać w bezpiecznym miejscu w razie problemu uruchomić dystrybucje System Rescue CD lub inną i przegrać pliki;
- Stosować silne hasła — stosowanie silnych haseł stanowi dodatkową linie obrony przed intruzem. Jeśli ustawimy sobie standardowe hasło typu „qwerty” to nasz system padnie od razu, natomiast jeśli ustawimy hasło „aS9,%C8gPu#L6Ry” to nasz system nie padnie od razu :). No dobra tylko jak takie hasło zapamiętać? Przedstawie mój sposób na zapamiętywanie długich i skomplikowanych haseł — w sumie to nie jest mój sposób, bo tym sposobem posługuje się wiele osób, ale nie każdy zna ten sposób.
Jesteśmy sobie pracownikiem jakieś firmy i admin polecił nam abyśmy wymyślili i zapamiętali hasło logowania do systemu, ale hasło MUSI mieć przynajmniej 20 znaków i składać się ze znaków alfa-numerycznych i znaków specjalnych, oczywiście małe i duże znaki — tak na dokładke :]. Hasło jakie sobie wymyśliłem lub wygenerowałem jakimś programem jest takie (hasło można oczywiście wygenerować i pozmieniać znaki):\G4qG:kL5oZw|Lp*3t}F
Kolejność zapamiętywania hasła:
- Bierzemy czystą kartkę, najlepiej z zeszytu w kratke, długopis i wypisujemy nasze hasło poziomo na samej górze;
- Następnie hasło wypisujemy pionowo długopisem innego koloru — najlepiej każdy znak w osobnej kratce;
- Teraz do tak przygotowanego hasła dopisujemy nazwy kojarzące się z danym znakiem w kratce. Może to wyglądać następująco:
- Teraz trzeba nauczyć się hasła wraz z dopasowanymi wyrazami na pamięć. Można się nauczyć od razu całego a można też podzielić takie hasło np. na cztery pięcio znakowe części i pamiętać jaki znak kończący daną część rozpoczyna nową i nowy znak. Ja często zapamiętując długie hasła korzystam z dzielenia hasła na części;
- Gdy już znamy dość dobrze nasze hasło wpisujemy je z pamięci na kartce do momentu aż mamy pewność, że go nie zapomnimy. Po kilku/kilkunasu minutach robimy sobie pół godziny przerwy, żeby mózg odpoczął i ponownie sprawdzamy czy pamiętamy nasze hasło;
- Kartki z hasłem nie wyrzucamy tylko dla pewności sprawdzamy po kilku godzinach czy na pewno zapamiętaliśmy hasło;
\ (zaczynamy od ukośnika — w nawiasie
Hasło nie należy do łatwych do zapamiętania. Gdy sobie wymyślimy lub wygenerujemy jakieś hasło można pozmieniać poszczególne znaki, żeby było ławiej nam je zapamiętać;
można wpisywać różne podpowiedzi)
G odzina
4 (czwarta)
q uadów
G arść
: (dwukropek)
k iedy
L amerów
5 (pięciu)
o twiera
Z asilacz
w ewnętrzny
| (pionowe)
L amerzy
p róbują
* (razy lub gwiazdka)
3 (trzy)
t ypować
} (nawias klamrowy zamykający)
F ajerwerki - Jeśli jesteśmy administratorem danego systemu regularnie robić audyt haseł;
- Stosować firewall :);
- Aktualizować system :);
- Stosować inne pomocne programy służące do wykrywania czy blokowania intruza;
9. Przydatne linki:
1. Linux OphCrack
2. Cain&Abel
3. L0phtCrack
4. Free Rainbow Tables
5. Opis Syskey-a
6. Zasadza działania Rainbow Tables
7. Projekt Rainbow Tables
8. Generator silnych haseł
9. Top500 najbardziej popularnych haseł
10. Literatura:
„Hakerzy w Windows 2000” — Joel Scambray, Stuart McClure
Celem tego postu było uświadomienie użytkownikom jak ważne jest stosowanie silnych haseł. Gdy ustawimy sobie skomplikowane hasło logowania to intruz będzie potrzebował odpowiednio dużo czasu aby je złamać. Trudne hasło można łamać nawet miesiąc czasu lub więcej w zależności od posiadanego sprzętu — no chyba że do dyspozycji jest jakiś porządny klaster i odpowiednia ilość Rainbow Tables, a do tego czasu już sobie wymyślimy nowe hasło, ewentualnie intruz zniechęci się już na starcie domyślając się, że hasło które łamie jest długie i skomplikowane. Zaprezentowane metodu „hakowania” systemu działają tylko jeśli mamy fizyczny dostęp do komputera, oprócz techniki „dll injection”, którą wykonuje się zdalnie.
Oczywiście wymienione przykłady można lub należy rozbudować, ponieważ nie skupiałem się na konkretnym ataku a chciałem tylko przedstawić zarys problemu — w rzeczywistości wszystko wygląda zawsze inaczej, ale dzięki zdobytym dzisiaj umiejętnością będziemy potrafili lepiej zabezpieczyć dostęp intruzom do naszego komputera.







