Na Kapitanie Hack’u dużo piszemy o bezpieczeństwie haseł użytkowników. Poznanie haseł jest jednym z priorytetów cyberprzestępców. W dzisiejszym, nowym artykule kampanii CYBER KILL CHAIN pokażemy inny, nieopisywany jeszcze przez nas sposób na kradzież poświadczeń (haseł) użytkowników Windows w chwili, gdy zmieniają oni hasło na nowe.


Jak to jest z tymi hasłami i ich bezpieczeństwem?

W mediach trwają różne kampanie uświadamiające w temacie cyber- bezpieczeństwa. Jak się nim przyjrzymy bliżej, to najczęstszym z zaleceń jakie w nich się pojawia to wymóg stosowania silnych haseł i ich częstej zmiany. To, że powinniśmy stosować silne hasła nie podlega wątpliwości. Słabe hasło można szybko odgadnąć lub złamać, natomiast na temat jego częstej zmiany powinniśmy się już zastanowić. Jak stwierdził sam Microsoft zmiana hasła powinna nastąpić wtedy, kiedy istnieją symptomy, że mogło ono wyciec. W przeciwnym wypadku nie ma konieczności zmiany. My ta opinię podzielamy i powinniśmy ze szczególną uwagą monitorować aktywności użytkowników. Niestety świat bezpieczeństwa w tym zakresie jest podzielony podobnie jak świat muzyki na fanów i przeciwników Zenka.

W artykule tutaj pisaliśmy o metodzie przechwytywania haseł użytkowników Windows. Również pisaliśmy o wyciąganiu haseł z różnych miejsc Windows pisaliśmy przy wykorzystaniu mechanizmu DPAPI (programowalnego interfejsu dla aplikacji w celu ochrony danych). W poniższym artykule pokażemy, że zmiana hasła może nieść za sobą ryzyko związane z możliwością poznania naszego hasła przez cyberprzestępcę.


Filtry haseł w Windows

W artykule o Security Support Providers (SSP) pisaliśmy o ciekawym ustawieniu w rejestrze systemowym Windows w gałęzi „HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa” o nazwie „Security Packages”, dzięki któremu mogliśmy załadować do pamięci komputera specjalną bibliotekę DLL, za pomocą której można było przechwycić wszystkie wprowadzane przez użytkowników hasła do systemu Windows.
Oprócz kontroli SSP, Microsoft wprowadził w systemie Windows filtry haseł jako metodę wymuszania przez administratorów systemów zasad haseł i powiadamiania o zmianie. Za kontrolę ładowanych do pamięci filtrów haseł i powiadomień odpowiedzialny jest klucz rejestru „Notification Packages” również znajdujący się w powyższej ścieżce rejestru.

Filtry haseł służą do sprawdzania poprawności nowych haseł i zapewnienia, że są one zgodne z obowiązującą polityką haseł i nie są używane żadne hasła, które mogą być zgodne z zasadami domeny. Na przykład hasło o długości 9 znaków może być akceptowane przez zasady grupy (GPO), ale jeśli ma postać $Alamakota123 lub Wiosna2020, jest uważane za słabe, ponieważ cyberprzestępca może użyć tych haseł podczas ataku siłowego. Filtry haseł pomagają administratorom zapobiegać tego typu hasłom, aby użytkownicy mogli wybrać bardziej unikalne hasła.

Technicznie wygląda to tak, że filtr haseł w celu przeprowadzenia weryfikacji hasła wymaga od lokalnego mechanizmu bezpieczeństwa Windows (LSA) hasła użytkownika w postaci zwykłego tekstu. Dlatego jeśli będziemy mogli zainstalować i zarejestrować w systemie dowolny filtr haseł, to będziemy mogli go wykorzystać do zbierania danych uwierzytelniających za każdym razem, gdy użytkownik zmienia swoje hasło.
Przed zapisaniem nowego hasła w lokalnej bazie zwanej SAM, wymagane jest sprawdzenie go przez filtr haseł. Zgodnie z dokumentacją Microsoft każdy filtr haseł jest wywoływany dwukrotnie w celu sprawdzenia poprawności nowego hasła, jego akceptacji i powiadomienia filtra o zmianie hasła.

Poniższy zrzut ekranu pokazuje przebieg żądania zmiany hasła przez użytkownika. Uwzględnia zainstalowaną, złośliwą bibliotekę, która zapisuje zmienione hasło do pliku na dysku.



Scenariusz – zapisywanie zmienianych haseł użytkowników do pliku na dysku

Poniższe eksperymenty z wyciąganiem haseł z procesu LSASS.EXE i omijaniem AV wykonaliśmy na najnowszym Windows 10 1909 zaktualizowanym w dniu opublikowania artykułu.

Aby można było poprawnie wykonać scenariusz musimy użyć poświadczenia konta posiadającego uprawnienia lokalnego administratora. Cały scenariusz opiera się na wykonaniu czterech kroków:

  1. Przygotowanie i skompilowanie odpowiedniej biblioteki filtrów haseł DLL – kapitanhack.dll.
  2. Umieszczenie tej biblioteki (plik DLL) w folderze „C:\Windows\ System32” (wymagane uprawnienia administracyjne).
  3. Modyfikacja klucza rejestru „Notification Packages” w celu zarejestrowania biblioteki DLL (wymagane uprawnienia administracyjne).
  4. Uruchomienie ponownie systemu Windows w celu załadowania biblioteki filtrów haseł do procesu LSASS.

Po zarejestrowaniu pliku biblioteki „kapitanhack.dll” w pakietach powiadomień Windows (Notification packages) zostanie ona załadowana do pamięci procesu lsass.exe i przechwyci wszystkie zmieniane hasła użytkowników.


Krok 1- przygotowanie biblioteki filtrów haseł

Kawałek kodu biblioteki „kapitanhack.dll” przedstawia poniższy listing.

W wyniku działania biblioteki otrzymamy nowe zmienione hasła użytkowników w postaci zwykłego tekstu zapisane w pliku „c:\temp\user-passwors.txt”.
Po kompilacji w C++ powyższego kodu do biblioteki „kapitanhack.dll” i testach jej niewykrywalności na Windows Defender, będziemy ją mogli załadować do pamięci komputera.


Krok 2 – skopiowanie biblioteki kapitanhack.dll do „C:\Windows\System32”

W systemie operacyjnym musimy najpierw skopiować nasza bibliotekę do katalogu „c:\Windows\system32”. Możemy to wykonać poleceniem (wymagane uprawnienia administracyjne):

copy kapitanhack.dll c:\windows\system32


Krok 3 – Dodanie biblioteki do klucza rejestru „Notification Packages”

Następnie musimy dodać do rejestru wartość klucza

reg add “HKLM\SYSTEM\CurrentControlSet\Control\Lsa” /v “Notification Packages” /d “scecli\0kapitanhack” /t REG_MULTI_SZ /f

Uwaga! Pomiędzy nazwą biblioteki „scecli” a „kapitanhack” umieściliśmy znak spacji „\0”.

W wyniku powyższej komendy w rejestrze systemowym w kluczu “Notification Packages” zaobserwujemy następujące wartości:


Krok 4 – Restart komputera

Po restarcie komputera będziemy mogli w pliku „lsass-paswords.txt” w katalogu „c:\temp” zobaczyć hasła wszystkich użytkowników, którzy zmienią hasło.

Po stronie procesu Lsass.exe możemy zaobserwować załadowaną naszą bibliotekę kapitanhack.dll, za pomocą, której będziemy mogli zapytywać zmieniane hasła do pliku.


Jak sobie radzić z problemem?

Udało nam się pokazać scenariusz, w którym możemy wykonać złośliwy kod na zabezpieczonym i zaktualizowanym komputerze z Windows 10 (wydanie 1909 ) i dzięki temu poznać hasła zmieniane na kontach przez użytkowników. W celu zabezpieczenia się w przyszłości przed tego typu działaniami możemy skorzystać z następujących wskazówek:

  • Monitorować zmiany w pakietach bezpieczeństwa (wartość klucza rejestru):
    “hklm\system\ currentcontrolset \control\lsa\”
  • Naszą bibliotekę „kapitanhack.dll”można zaobserwować na liście bibliotek DLL ładowanych przez lsass.exe. W celu wykrycia nowych/innych niestandardowych bibliotek możemy ustalić białą listę podstawowych bibliotek DLL, jakie ładują się do procesu lsass i monitorować go pod kątem wszelkich nowych, podejrzanych bibliotek DLL
  • Wdrożyć SYSMON do monitorowania procesów.
  • Wdrożyć dobrego antywirusa (najlepiej z funkcją EDR).