Tajemnice SAM (Security Account Manager) — resetowanie hasła systemu Windows
Hasło – jest to nieoceniony wytwór naszej nowoczesnej informatycznej cywilizacji. Haseł używamy wszędzie – przy uzyskiwaniu dostępu do różnych usług internetowych, przy logowaniu do komputera. Reguły tworzenia dobrych haseł raczej każdy zna. Wiadomo, że dobre hasło powinno mieć kilkanaście znaków, duże i małe litery, cyfry i znaki specjalne. Najlepiej też, żeby wszędzie mieć różne hasła (inne do logowania do systemu operacyjnego, inne do Facebooka itd.). Pewnie niejednej osobie na Ziemi zdarzyła się sytuacja, że ustawiła silne hasło do jakiegoś portalu, a potem go zapomniała.
Często zabezpieczamy dostęp do komputera, aby na przykład ktoś podczas naszej krótkiej nieobecności nie mógł skorzystać z naszego laptopa. Czasami też zdarza się taka sytuacja, że zapominamy hasła do naszego jedynego konta z uprawnieniami administratora w systemie. Co nas wtedy czeka? Stawianie systemu od nowa? Otóż nie. Jest co najmniej kilka sposobów na zresetowanie hasła. W tym wpisie spróbujemy zapoznać się z nimi zarówno od strony teoretycznej, jak i praktycznej.
Metoda I – dysk resetowania hasła
Sam Microsoft przewidział scenariusz, że użytkownik może zapomnieć hasła logowania do swojego komputera. W tym celu umożliwiono stworzenie tzw. dysku resetowania hasła. Istnieje jedna wada tej metody. Zwykle, dopiero po fakcie przypominamy sobie o tym, że warto byłoby posiadać taki dysk. Ale cóż, warto wiedzieć o tym sposobie gdyż ma on kilka niezaprzeczalnych zalet. Przede wszystkim, jeśli używamy szyfrowania plików (dla niewiedzących: PPM na plik/folder->Właściwości->Ogólne->Zaawansowane->Szyfruj zawartość, aby zabezpieczyć dane) to nie utracimy do nich dostępu po zresetowaniu hasła. Pozostałe dwie metody, które przedstawię w dalszej części niestety nie pozwalają na uzyskanie dostępu do zaszyfrowanych plików. Poza tym resetowanie hasła jest szybkie i przyjemne. Zastanówmy się teraz, jak działa dysk resetowania hasła, jak go utworzyć i jak go wykorzystać. Zaczynamy!
Przede wszystkim, do utworzenia dysku resetowania hasła potrzebujemy jakiegoś urządzenia pamięci masowej USB. Może to być np.: pendrive.
Aby utworzyć dysk resetowania hasła, wchodzimy do panelu sterowania. Następnie uruchamiamy „Konta użytkowników i Filtr rodzinny”. Wchodzimy do kategorii „Konta użytkowników”. W oknie po lewej stronie powinniśmy zauważyć opcję: „Utwórz dysk resetowania hasła”. Jedyną czynnością, o którą poprosi nas kreator, będzie podanie naszego aktualnego hasła oraz miejsce przechowywania klucza.
Po zakończeniu działania kreatora możemy wejść na nasz pendrive. Zauważymy tam tylko jeden plik – userkey.psw. To wszystko, co jest potrzebne, aby hasło do naszego konta zostało zresetowane.
Jak użyć utworzonego przed chwilą dysku resetowania hasła? Bardzo prosto. Po błędnym wprowadzeniu hasła pod polami na nazwę użytkownika i hasło pojawi się opcja: Resetuj hasło. Po kliknięciu, uruchomi się bardzo prosty i przyjemny kreator, który pozwoli nam utworzyć nowe hasło do naszego konta.
Metoda II – reset hasła za pomocą Offline NT Password Reset
Program ten poznałem niedawno. Możemy go pobrać ze strony http://pogostick.net/~pnh/ntpasswd/. Jest to bardzo przydatne narzędzie. Po nagraniu ściągniętego obrazu na płytę lub pendrive, możemy bez problemu z poziomu livecd/liveusb ingerować we wszelkie ustawienia kont użytkowników w systemie zainstalowanym na naszym komputerze. Możemy modyfikować ustawienia kontroli rodzicielskiej czy zablokować/odblokować konto. Nie wspominałbym o tym programie, gdyby nie posiadał fundamentalnej funkcji resetowania hasła. Zobaczmy, jak sprawdzi się to narzędzie w naszym przykładowym scenariuszu.
Po załadowaniu zawartości płyty program nas spyta o to, którą instalacją Windowsa będziemy się zajmować. Jeśli nasz dysk nie został wykryty, możemy załadować dodatkowe sterowniki z innego medium. W moim przykładzie jedyna instalacja Windowsa została bez problemu wykryta, więc wybieramy ją.
Po wybraniu instalacji musimy zadecydować, którą część rejestru chcemy wczytać. Jeśli będziemy chcieli jedynie zresetować hasło, wybieramy opcję 1 – „Password reset [sam]”. Opcja druga pozwoli nam m.in. na odczytanie klucza produktu. Ostatnia opcja, to połączenie dwóch poprzednich.
W naszym przykładzie wybieramy opcję pierwszą, gdyż chcemy jedynie zresetować hasło. Po krótkiej chwili oczekiwania będziemy musieli podjąć kolejną decyzję.
Mamy do wyboru następujące opcje: Możemy edytować dane użytkowników (opcja 1), wypisać dostępne w systemie grupy użytkowników (opcja 2), uruchomić bardzo prosty, konsolowy edytor rejestru (opcja 9) lub wyjść. Jeśli chcemy zresetować hasło, powinniśmy wybrać opcję 1.
Na kolejnym ekranie musimy wybrać konto, którym będziemy się zajmować. W tabelce mamy podany tzw. RID (Relative Identifier), czyli unikalny numer identyfikacyjny naszego konta, ostatnia część SID (Security Identifier). Konto wybieramy, wprowadzając jego numer RID z tabelki i wciskając enter. Zresetujmy np.: hasło do konta administratora. Jako rid podajemy więc 01f4.
Tu znajduje się sedno możliwości naszego programu – Dostępne do wyboru opcje to:
- Zresetowanie hasła użytkownika,
- Zablokowanie lub odblokowanie konta. Z nawiasu możemy odczytać informację, czy te konto jest aktualnie zablokowane czy odblokowane,
- Nadanie użytkownikowi uprawnień administratora,
- Dodanie użytkownika do grupy,
- Usunięcie użytkownika z grupy,
Aby zresetować hasło, powinniśmy najpierw wybrać opcję 1, a potem 2. Nie przejmuj się, że możesz zostać poinformowany o tym, że użytkownik nie posiada hasła – jest to mały defekt tego programu, jeśli używamy systemu nowszego od XP. Poprawny ciąg czynności wygląda tak, jak na powyższym screenie.
Aby zapisać zmiany, musimy wydać polecenie q. Cofniemy się do poprzedniego ekranu, na którym również musimy wpisać tą samą literkę. W końcu program zapyta nas, czy ma zapisać zmiany do rejestru systemu, ostrzegając o wszystkich możliwych tego konsekwencjach. Musimy nacisnąć y, a potem enter, aby zapisać zmiany. Po zapisaniu zmian będziemy mogli odpowiedzieć na pytanie, czy chcemy od nowa uruchomić program czy nie. W tym momencie możemy nacisnąć klawisze CTRL+ALT+DELETE, aby ponownie uruchomić komputer i spróbować się zalogować do naszego systemu.
Teoria kont użytkowników w MS Windows
Znamy już dwie metody na reset hasła. Jednakże, pewnie zastanawiasz się, czy możliwy jest reset hasła bez używania absolutnie żadnych programów? Oczywiście że tak. Jednak, aby to zrobić, musisz posiąść trochę „tajnej” wiedzy, która pozwoli nam na wykonywanie takich czynności. Przede wszystkim musimy się dowiedzieć, gdzie Windows przechowuje informacje o kontach użytkowników. W szkole nauczyciele mówią o tym jedynie pobieżnie. Tam właśnie dowiedziałem się, że dane o kontach użytkowników przechowywane są w rejestrze systemu, a konkretnie w kluczu SAM (Security Account Manager). Z poziomu działającego systemu dostęp do tego klucza nie jest prosty, gdyż nawet administrator systemu nie ma wystarczających uprawnień.
Aby uzyskać dostęp do tej gałęzi, musimy uzyskać uprawnienia konta SYSTEM. Jest to, wbrew pozorom, dość proste. Musimy jedynie wygooglować (lub wybingować :) ) zestaw narzędzi PsTools. Po jego pobraniu możemy wypakować zawartość pobranego archiwum do katalogu Windows/System32. Dzięki temu bez modyfikowania zmiennych środowiskowych będziemy mieli dostęp do nowych poleceń z poziomu cmd.
Aby uruchomić edytor rejestru na uprawnieniach konta systemowego, uruchom cmd na uprawnieniach administratora, a następnie wprowadź polecenie:
psexec –s –d –i regedit.exe
I voila – tym sposobem dostaliśmy się do najbardziej strzeżonej tajemnicy systemu Windows. Jednakże to jeszcze nie koniec naszych trudów, gdyż modyfikacja zawartych tu danych nie jest prosta. Przede wszystkim musimy poznać strukturę interesujących nas gałęzi rejestru. Dane o kontach użytkowników przechowywane są w kluczu \HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\. Jeśli rozwiniemy ten klucz, ujrzymy kilka podkluczy o dziwnie znajomych (jeśli przeczytałeś uważnie wcześniejszą część artykułu) nazwach.
Domyśliłeś się, co znaczą nazwy tych kluczy? (np.: 000001F4?) Jeśli nie, to ci podpowiem – są to po prostu wcześniej wspomniane numery RID, które w sposób unikatowy opisują dane konto w systemie. Wcześniej resetowaliśmy hasło do konta administratora, więc teraz zajmijmy się analizą mojego imiennego konta o numerze RID 00003F9.
Jak widzimy, po otworzeniu klucza ukazały nam się dwie wartości typu REG_BINARY o jakże wiele tłumaczących nazwach: F i V. Wydawałoby się, że nic z tego ciągu znaków nie można odczytać, ale nie przejmuj się, gdyż z moją pomocą odczytasz tajemnice klucza SAM.
Wartość F przechowuje informacje takie jak ilość nieudanych i udanych prób logowania, czas do odblokowania konta, datę, kiedy konto zostało utworzone, czas ostatniego logowania, typ konta itd.
Otwórzmy klucz F. Zauważmy, że dane zapisane są tu w systemie szesnastkowym. Oznacza to, że jeden bajt danych został opisany za pomocą dwóch liczb. Te spostrzeżenie jest bardzo potrzebne do tego, abyś mógł poprawnie odczytać tabelkę, która znajduje się nieco niżej.
Dane zawarte w tej wartości są co prawda ciekawe ale nie ma w nim nic, co by było przydatne do osiągnięcia naszego celu, a więc zresetowania hasła. Zajmijmy się więc drugą wartością – V. Tu znajdują się o wiele ciekawsze dane, dlatego w celu łatwiejszego zlokalizowania bitów podam także ich adres.
No dobra, teraz kilka słów wyjaśnień. To, co znajduje się w tej tabeli, jest to jakby nagłówek dla pozostałej części danych. Jeśli chcemy obliczyć dokładną lokalizację zapisu, np.: nazwy użytkownika, to do offsetu, który jest zapisany, musimy dodać wartość 0xCC. Spróbujmy teraz odczytać nazwę użytkownika dla konta, które aktualnie modyfikujemy.
Pamiętaj, że bity zapisane są w kolejności Little Endian – to znaczy, że najbardziej znaczący (czyli pierwszy) bit znajduje się na końcu. Odczytajmy więc wartość naszego offsetu – 000000BC. Dodajmy do niego CC. Z tego działania otrzymamy adres 188. Zobaczmy więc, co kryje się pod właśnie ustalonym adresem 0x188.
Voila! Ustaliliśmy wszystko poprawnie. Właśnie pod tym adresem znajduje się nazwa użytkownika. Spójrzmy jeszcze, czy długość tej nazwy zgadza się z tym, co jest przechowywane w nagłówku. Długość nazwy to 0A, czyli 10 bajtów. Jak widzimy, wszystko się zgadza.
Trochę odeszliśmy od tematu, którym jest resetowanie hasła. Zastanówmy się jak przechowywane jest hasło w systemie Windows. W tabelce widzimy dwa tajemnicze pola: LM hash i NT hash. Obydwa ciągi są generowane na podstawie tego hasła, które podamy podczas tworzenia konta. Metoda ich generowania podobna jest do działania md5, tzn. nie da się z tego ciągu odzyskać pierwotnej postaci hasła. Aby zresetować hasło, wystarczy wyzerować długość obydwu ciągów. Windows będzie wtedy myślał, że hasło nigdy nie było ustawione.
Spróbujmy więc zresetować hasło ręcznie. Z tabelki możemy odczytać, że długość hash LM jest przechowywana pod adresem 0xa0 i ma długość 4 bajtów.
Miejsce zapisu długości obydwu hashy zaznaczyłem na screenie powyżej. Wystarczy wyzerować te bajty, które są otoczone czerwoną i czarną obwódką. Wtedy będziemy mogli zalogować się na konto, nad którym pracujemy, bez problemów.
Metoda III – reset hasła z poziomu dysku instalacyjnego systemu Windows
Skoro wiemy, gdzie i jak są przechowywane hasła w systemie Windows, możemy je zresetować bez użycia jakichkolwiek dodatkowych programów. Wystarczy zwykła płytka lub pendrive z instalatorem systemu. Teraz zobaczymy, jak przeprowadzić taką operację. Przede wszystkim, musimy włożyć do napędu płytę z instalatorem systemu Windows i poczekać, aż środowisko Windows PE łaskawie się załaduje. Przechodzimy przez proces wyboru języka. Gdy dojdziemy do ekranu, gdzie widzimy duży przycisk Instaluj teraz!, wybieramy opcję „Napraw mój komputer”.
Instalator zacznie szukać zainstalowanych przez nas systemów operacyjnych. Klikamy w puste pole, aby odznaczyć nasz system, a następnie klikamy przycisk Dalej.
W oknie, które nam się pojawi, wybieramy wiersz poleceń, a następnie wydajemy polecenie regedit. Zostanie uruchomiony edytor rejestru. Zauważyłeś, że nie używaliśmy tym razem polecenia psexec? Wiersz poleceń uruchomiony w środowisku WinPE działa domyślnie na najwyższych możliwych uprawnieniach, dzięki czemu będziemy mogli bezproblemowo dobrać się do interesujących nas gałęzi rejestru.
Gdy widzimy już piękne i zacne okno edytora rejestru systemu Windows, Zaznaczamy dowolny korzeń (np.: HKEY_LOCAL_MACHINE czy HKEY_CLASSES_ROOT). Następnie klikamy kolejno Plik->Załaduj gałąź rejestru. Windows przechowuje cały swój rejestr w katalogu C:\Windows\system32\config. Tam właśnie znajduje się cel naszych poszukiwań. Kierujemy się więc do tego katalogu i zaznaczamy plik SAM. Edytor zapyta się nas jeszcze, pod jaką nazwą ma zamontować ową gałąź. Możemy wpisać cokolwiek – nie ma to żadnego znaczenia. Jeśli poprawnie wykonałeś wszystkie operacje, powinieneś ujrzeć coś podobnego, jak na screenie poniżej:
Dalszych kroków nie będę opisywał, gdyż będą analogiczne jak w poprzednim rozdziale. Pamiętaj, aby po zakończeniu pracy odmontować gałąź, wybierając odpowiednią opcję z menu plik.
Słowem podsumowania – moje przemyślenia
Dzięki metodom, które powyżej dokładnie opisywałem, można bezproblemowo, w ciągu kilku minut uzyskać dostęp do dowolnego konta w systemie. Niekiedy może to uratować mnóstwo czasu, gdyż zwyczajna utrata hasła nie musi się kończyć formatowaniem dysku i potencjalną utratą danych. Jednak dwie ostatnie metody pozwalają przeciętnemu użytkownikowi nie tylko odzyskać dostęp do swoich danych. Może dzięki nim uzyskać nieautoryzowany wgląd do plików, do których przystępu mieć nie powinien. Wystarczy brak obserwacji potencjalnego delikwenta przez te kilka-kilkanaście minut. Oczywiście, jeśli dodatkowo dane są szyfrowane, nie będzie z nich żadnego pożytku, ale nikt z przeciętnych użytkowników komputera nie stosuje takich zaawansowanych metod. Tymi przemyśleniami kończę swój dzisiejszy wpis.