Przypadek, który opiszemy w dzisiejszym artykule może okazać się poważnym problemem, ponieważ za pomocą poniższego scenariusza można obejść restrykcje konfiguracyjne wdrażane na komputerach w sieci na Active Directory, a także w unikalny i niewykrywalny sposób uruchomić dowolny kod na komputerze w organizacji.


Co to jest GPO?

Zasady grupy (GPO) to funkcja Microsoft, która umożliwia administratorom domeny Active Directory zarządzanie ustawieniami i egzekwowanie uprawnień dla użytkowników i komputerów w sieci. GPO wykorzystują najczęściej firmy bądź organizacje w celu ujednolicenia konfiguracji ustawień na komputerach. Administrator może skonfigurować ustawienia zasad grupy na poziomie komputera lub na poziomie użytkownika. W przypadku ustawień dla użytkownika, wypychane są one na konto użytkownika domeny po zalogowaniu do komputera i przechowywane są w profilu w pliku „% USERPROFILE%\ntuser.dat”. Skonfigurowane GPO są przeznaczone tylko do odczytu dla użytkowników domeny, co zapobiega ich zmianie. I tutaj dobra nowina, znaleziono metodę jak można to obejść.


W czym tkwi problem?

Okazuje się, że istnieje sposób na podmianę ustawień GPO przechowywanych w rejestrze i nie wymaga on uprawnień administracyjnych na komputerze. Trzeba jedynie przygotować specjalny plik „ntuser.man” i wgrać go do katalogu profilu użytkownika. Dzięki temu będziemy mogli ominąć ustawienia zasad grupy dla użytkownika oraz skonfigurować własne, tym samym powodując duża lukę w zabezpieczeniach. Oczywiście ominięcie zasad grupy użytkowników nie jest końcem Świata, ale też nie jest czymś, co powinno być dozwolone.

Opisana poniżej technika została odkryta przez firmę Tenable i została przetestowana w systemach Windows 7 i Windows 10 Enterprise x64 (10.18363 1909) i co najważniejsze nie wymaga dostępu administratora.

Badacze odkryli, ze podczas logowania użytkownika do Windows ładowane są jego ustawienia rejestru z pliku „%USERPROFILE%\ntuser.dat”, ale także wykonywana jest próba załadowania pliku „%USERPROFILE%\ntuser.man”!
Możemy się o tym przekonać, gdy odpalimy narzędzie ProcMon w konfiguracji z włączoną opcją „boot logging”.

Po zalogowaniu usługa profilu użytkownika (ProfSvc ) lokalizuje ten plik i wywołuje funkcję NtLoadKeyEx w celu załadowania gałęzi rejestru. Jeśli użytkownik chce dokonać modyfikacji klucza rejestru podczas sesji logowania, musi przejść przez odpowiednie interfejsy API Microsoft, które z kolei sprawdzają uprawnienia kluczy, które chcemy zmodyfikować.
Jak można zaobserwować na powyższym ekranie ProfSvc sprawdził istnienie nieistniejącego pliku, czyli plik „%USERPROFILE%\ntuser.man” i następnie załadował plik ustawień „%USERPROFILE%\ntuser.dat”.


Co zawiera plik „ntuser.man”?

Plik ten jest dokładnie tym samym co ntuser.dat (gałąź rejestru odpowiedzialna za ustawienia profilu użytkownika), lecz jest używany w przypadkach, kiedy chcemy ustawić dla użytkownika tak zwany „Profil obowiązkowy”.
Obowiązkowy profil użytkownika to profil użytkownika mobilnego (roaming), który został wstępnie skonfigurowany przez administratora w celu określenia ustawień dla użytkowników. Ustawienia powszechnie definiowane w profilu obowiązkowym obejmują (ale nie są do nich ograniczone): ikony, które pojawiają się na pulpicie, tła pulpitu, preferencje użytkownika w Panelu sterowania, opcje drukarki i inne.
Ponieważ zwykły użytkownik posiada uprawnienia do zapisu w jego katalogu profilowym %USERPROFILE% możemy taki własny, spreparowany plik „ntuser.man” do niego podrzucić. Warunek jest jeden – plik musi być skonfigurowany na tej samej wersji systemu Windows oraz musimy wykonać następujące kroki:

  • Stworzyć własną gałąź rejestru dla użytkownika np. w „HKEY_LOCAL_MACHINE\ \Software\Microsoft\Windows\CurrentVersion\Policies\” i wyeksportować ustawienia do pliku „ntuser.man”,
  • Usunąć lub skonfigurować dowolny klucz / wartość w tej gałęzi rejestru,
  • Przegrać plik do ścieżki %USERPROFILE% na docelowym komputerze,
  • Wylogować się i zalogować ponownie.

Kluczowym w tym przypadku jest skonfigurowanie uprawnienia „DENY” dla konta systemowego „NT AUTHORITY\SYSTEM” na skonfigurowanej przez nas gałęzi rejestru, ponieważ w przeciwnym wypadku mechanizm Windows GPO (usługa GpSvc) zmieni automatycznie niezgodne uprawnienia oraz nadpisze z powrotem ustawienia GPO na nowe.
Uprawnienie „DENY” skutecznie zablokuje odzyskanie uprawnień do zapisu przez konto „SYSTEM”, ponieważ ma pierwszeństwo przed regułą „ALLOW”, którą system Windows będzie próbował dodać.


Scenariusz podmiany ustawień GPO i wywołania kodu

Postanowiliśmy sprawdzić, czy w systemie Windows 10 v1909 będzie możliwe podmienienie pliku konfiguracji ustawień rejestru ntuser.man przez zwykłego użytkownika oraz czy dzięki temu, za pomocą sfałszowanych ustawień będziemy mogli uruchomić dowolny plik znajdujący się na dysku (ograniczyliśmy się do pliku cmd.exe).


Krok 1 – Przygotowanie pliku „ntuser.man”

Ten krok musimy wykonać na identycznym systemie operacyjnym, jak ten, na który będziemy docelowo wgrywać plik. Do systemu Windows, na którym będziemy przygotowywać plik musimy posiadać uprawnienia administracyjne.
Logujemy się na komputer na użytkownika z uprawnieniami administracyjnymi. Kopiujemy plik „%USERPROFILE%\ ntuser.dat” dowolnego użytkownika (nie może być on zalogowany). W naszym przypadku użytkownik nazywa się hacker, a na komputerze jesteśmy zalogowani jako Administrator.

Uruchamiamy narzędzie regedit.exe i wgrywamy zawartość gałęzi rejestru z plik „ntuser.dat”, wybierając klucz HKEY_LOCAL_MACHINE i klikając Plik-> Załaduj gałąź…

W nowo załadowanej gałęzi rejestru (o nazwie KH) zmieniamy ustawienia dla autorun przechowywanych w folderze „\Software\Microsoft\Windows\CurrentVersion\CurrentVersion\Run”, tak aby Windows uruchamiał podczas startu kalkulator „calc.exe”. W tym celu dodajemy klucz „Calc” o wartości z katalogu „C:\Windows\System32\calc.exe” w “HKEY_LOCAL_MACHINE\KH\Software\Microsoft\Windows\CurrentVersion\Run”.

W głównym katalogu gałęzi załadowanej w regedit (KH) zmieniamy uprawnienia, aby umożliwić „Wszyscy” pełną kontrolę (odczyt / zapis/ pełna kontrola) i zaznaczmy propagację tych uprawnień dla wszystkich podkluczy.

Klikamy prawym przyciskiem myszy na katalogu „\Software\Microsoft\Windows\CurrentVersion\Run” i dla konta SYSTEM ustawiamy uprawnienie „DENY”. Dzięki temu ustawieniu serwis odpowiadający za aktualizację GPO (GpSvc) nie będzie mógł zastąpić naszego klucza inną wartością.

Następnie musimy podobnie jak funkcją „Load Hive” odpiąć plik z rejestru „Unload Hive” i zmienić rozszerzenie na *.man.


Krok 2 – Umieszczenie pliku „ntuser.man” na komputerze ofiary

Uwaga! Przed kontynuowaniem upewnij się, że zrobiłeś kopię zapasową dla konta z profilu użytkownika, dla którego będziesz chciał podmienić ustawienia w rejestrze i posiadasz do niego uprawnienia administracyjne.

Skopiuj przygotowany wcześniej plik „%USERPROFILE%\ntuser.dat” jako „%USERPROFILE%\ntuser.man” na docelowy komputer do profilu użytkownika KapitanHack.pl, na którym chcemy zastąpić zasady grupy użytkowników.

Wyloguj się i zaloguj ponownie. Po zmianie zaobserwujemy ekran powitalny, tak jakbyśmy logowali się użytkownikiem pierwszy raz do systemu. Od tej pory wszystkie zasady grupy użytkowników zostały zastąpione tymi, które skonfigurowaliśmy w ntuser.man. Powinien tez uruchomić się kalkulator.


Czy jest się czego bać?

Przedstawiony w naszym artykule sposób może skutkować czymś więcej niż zwykłym ominięciem zasad grupy użytkowników. Doskonale zdajemy sobie sprawę, że podmiana ustawień na własne, może spowodować, że cyberprzestępcy będą mogli:

  1. Uruchomić dowolny kod – jeśli na uprawnieniach zwykłego użytkownika wrzucą plik „%USERPROFILE%\ntuser.man” z kluczem rejestru zawierającym konfigurację autostart uruchamiającego eksploit lub malware ze zdalnej lokalizacji, będą mogli przejąć kontrolę nad komputerem.
  2. Ominąć oprogramowanie anrywirusowe/EDR – niektóre produkty antywirusowe / EDR monitują modyfikacje rejestru tylko poprzez przechwytywanie interfejsów API rejestru lub modyfikacji w systemie. W przypadku zmiany rejestru poprzez zastąpienie jego całej gałęzi można ominąć monitorowanie i w konsekwencje wykrycie takiej zmiany.
  3. Spowodować niedostępność komputera (DoS) – po umieszczeniu pustego pliku ntuser.man w profilu użytkownika jego rejestr systemowy nie załaduje się. Wtedy użytkownik nie będzie mógł się zalogować do systemu i konieczne będzie uruchomienie Windows w trybie awaryjnym „Safe Mode” (wymagane uprawnienia administratora) i usuniecie wadliwego pliku ntuser.man.

Podsumowanie

Pomimo zgłoszenia przez badaczy Tenable problemu do Microsoft i udanej replikacji problemu przez Microsoft, gigant z Redmont uznał, że jest to oczekiwane zachowanie, a nie problem bezpieczeństwa. Według naszej opinii, jest to problem, na który powinniśmy zwrócić szczególną uwagę w środowisku IT. Modyfikacja tych ustawień dotyka bezpieczeństwo, ponieważ cyberprzestępcy w fazie rekonesansu (rozpoznania) mogą dużo dowiedzieć się o wersji systemu ofiary, przygotować na boku taki plik i w sposób niezauważalny zmienić ustawienia w rejestrze na dowolne. Skutkować to może uruchomieniem przez nich dowolnego kodu.

Podziel się z innymi tym artykułem!