Jeśli pamiętacie nasz post o podatności zero-day w notatniku to dzisiaj dowiecie się o co w nim dokładnie chodziło. Od tamtego momentu minęło 90 dni i według swojej polityki Google oficjalnie zaprezentował POC exploit’a. W tym artykule przyjrzymy się dokładnie nowemu exploitowi wykorzystującym niedawno odkrytą podatność w środowisku usług tekstowych Microsoft (ang. Microsoft Windows Text Services Framework) polegającą na uruchomieniu procesu dziedziczonego, który pozwala na eskalację uprawnień zwykłego użytkownika systemu Windows do administratora lub uprawnienia NT AUTHORITY\system. Przedstawimy krótki przegląd za co odpowiada usługa Text Services Framework, na czym polega wykryta w niej podatność i jak można wykorzystać exploit w celu eskalacji uprawnień w Windows. Następnie przejdziemy do bardziej szczegółowych informacji na temat uruchamiania exploita i różnych metod, które można wykorzystać do wykrywania i jego eliminacji w środowisku informatycznym IT.
Co to jest i jak działa środowisko usług tekstowych (Microsoft Windows Text Services Framework)?
Czy kiedykolwiek zastanawialiście za co w Menadżerze Zadań Windows odpowiada proces „ctfmon.exe”? CTF to nie skrót od „Clear Type Fonts”, jak podają niektóre portale internetowe, lecz usługa, która odpowiada za powiadamianie aplikacji o zmianach w układzie klawiatury lub przetwarzaniu tekstu itp. Jądro systemu Windows zmusza aplikacje (takie jak np. Microsoft Office) do łączenia się z usługą ctfmon podczas ich uruchamiania, a następnie wymiany wiadomości z innymi klientami (np. klient rozpoznawania pisma ręcznego) i otrzymywania z niej powiadomień.
Proces ctfmon.exe jest domyślnie uruchamiany w każdym systemie desktopowym Windows i używany jest jedynie podczas pracy z innymi językami lub gdy informacje wprowadzane są za pomocą innego urządzenia niż standardowa klawiatura np. edytora IME (ang. Input Method Editor) takiego jak Microsoft Pinyin lub innych alternatywnych metod wprowadzania.
Usługa CTFMon jest ścigle powiązana z Text Services Framework (Text Services Framework jest uruchamiany przez proces ctfmon.exe). TSF to nic innego jak platforma (środowisko uruchomieniowe), które tym wszystkim zarządza, czyli umożliwia włączonym aplikacjom na odbieranie tekstu bez konieczności znajomości szczegółów urządzenia do wprowadzania tekstu. Może to być na przykład klawiatura, mowa lub narzędzie do rozpoznawanie pisma ręcznego.
Aby móc korzystać z CTF musimy ustawić w Windows język na Chiński, wtedy domyślnie zainstaluje się Microsoft Pinyin.
Tak wygląda użycie Microsoft Pinyin w notatniku.
Inne regiony posiadają inne edytory IME. Na przykład, jeśli zmienimy region na japoński użyjemy Microsoft JP-IME.
Na czym polega odkryta podatność w Microsoft Windows Text Services Framework?
Podatność w TSF została zgłoszona do Microsoft w maju 2019 natomiast oficjalnie została opublikowana i opisana w zeszłym miesiącu przez znanego reseachera bezpieczeństwa pracującego w Google Project Zero – Tavisa Ormandy. Odkrył on, że usługa CTF nie posiada żadnego mechanizmu kontroli dostępu i każda aplikacja oraz każdy użytkownik, a nawet procesy uruchamiane w „piaskownicy” (ang. Sandboxer) – mogą łączyć się z dowolną sesją CTF. Podczas badań Ormandy zauważył, że aplikacje klienckie w chwili zgłaszania swojego identyfikatora wątku, identyfikatora procesu oraz uchwytu okna konsoli HWND do CTF nie wymagają uwierzytelnienia i dzięki temu można bardzo łatwy sposób oszukać system. Wystarczy, że fałszywa aplikacja będzie udawać, że jest usługą CTF i może pozwolić na to, aby inne aplikacje (uruchomione na kontach uprzywilejowanych) łączyły się z nią i tym samym umożliwiły jej przejęcie od nich uprawnień (eskalację). Po tym odkryciu researcher postanowił napisać własne narzędzie o nazwie CTFTool.exe jako POC (ang. Proof of Concept) stawianej przez niego teorii.
Czym jest narzędzie CTFTool.exe?
Wspomniane powyżej narzędzie CTFTool jest niczym inny jak interaktywnym klientem CTF (exploitem) uruchamianym z wiersza poleceń Windows stworzonym w celu wykorzystania luki w środowisku usług tekstowych (TSF), która pozwala zalogowanemu użytkownikowi na przejęcie uprawnień innego procesu uruchomionego w innym kontekście bezpieczeństwa (np. NT Authority\ SYSTEM lub jako inny użytkownik uprzywilejowany, na którym jest uruchomiony proces). Warunkiem poprawnego działania eksploita w celu eskalacji uprawnień jest to, że oba procesy muszą łączyć się z TSF. Narzędzie CTFTool znajduje się portalu GitHub.
Exploit znajduje się jeszcze w początkowej fazie tworzenia i jak się okazało podczas naszych testów mieliśmy z nim trochę problemów, które nie zostały jeszcze udokumentowane (opisaliśmy je poniżej). Na szczęście udało nam się go uruchomić i przetestować we wszystkich scenariuszach. Z tego powodu bylibyśmy zaskoczeni faktem, że nie był dalej rozwijany w celu uczynienia go bardziej stabilnym.
Ciekawostką jest, że exploit działa na wszystkich wersjach desktopowych Windows, w tym najnowszej wersji Windows 10 wydanie 1903! Na wcześniejszych wersjach również działa.
Możliwe scenariusze użycia CTFTool.exe w niekontrolowanym środowisku informatycznym IT
Narzędzie CTFTool może stanowić duże zagrożenie w firmach/korporacjach korzystających z usługi katalogowej Active Directory, ponieważ osoba atakująca mogłaby łatwo przejąć najwyższe uprawnienia na komputerze, zainfekować go innymi narzędziami oraz przeprowadzić ruch boczny atakując inne komputery w sieci i przejmować na nich kolejne konta, aż do przejęcia uprawnień administracyjnych domeny AD.
Poniżej opisaliśmy niektóre z możliwych sposobów takiego przejęcia uprawnień przy użyciu narzędzia CTFTool:
1)
Osoba atakująca może użyć poświadczeń standardowego zalogowanego użytkownika na stacji roboczej do eskalacji uprawnień do użytkownika systemowego (SYSTEM), a następnie użyć ich do kompromitacji maszyny i wykonania dalszych aktywności infekując ją złośliwym oprogramowaniem. Posiadając najwyższe uprawnienie „NT AUTHORITY\SYSTEM” na Windows atakujący może przejąć uprawnienia każdego innego użytkownika w tym administratora lokalnego oraz innych użytkowników domenowych (w tym uprzywilejowanych) logujących się do tego komputera.
2)
Osoba atakująca może użyć poświadczeń standardowego zalogowanego użytkownika na stacji roboczej w celu przechwycenia uprawnień innego uprzywilejowanego użytkownika, na którym jest uruchomiona inna aplikacja (proces) np. podczas instalacji przez administratora pakietu Office lub procesów innych zalogowanych użytkowników do systemu. Takie działanie może umożliwić wykonanie ruchu bocznego na inne komputery w sieci i uzyskanie dostępu do udziałów plików zawierających poufne dane oraz wykonanie dalszej kompromitacji środowiska.
W celu przeprowadzenia testów powyższych dwóch scenariuszy w naszym środowisku musieliśmy przygotować system Windows 10 wersja 1903, aby spełniał wymagania wstępne dla CTFTool.exe, które nie są obecnie udokumentowane:
- Zainstalować pakiet narzędzi Visual C ++ 2015 Redistributable x86 oraz x64. Bez instalacji tego pakietu w chwili uruchomienia narzędzia pojawiają się dwa błędy związane z brakiem bibliotek „MSVCP140.dll” oraz „VCRUNTIME140.dll”. Problem został już poruszony tutaj. Mamy nadzieję, że spowoduje on, że twórca w przyszłości doda do narzędzia wymagane biblioteki DLL, dzięki którym nie będzie konieczna ich dodatkowa instalacja.
- W przypadku niektórych wersji językowych Windowsów (np. angielskie) należy zainstalować pakiet językowy korzystający z edytora IME (w naszym przypadku dodaliśmy chiński) – może to zmienić sam użytkownik bez uprawnień administracyjnych!
-
Wyłączyć ochronę w czasie rzeczywistym i skanowanie w programie Windows Defender – tutaj w zależności od skuteczności malware, można ominąć te zabezpieczenia w systemie (o tym jak to wykonać pisaliśmy tutaj). Twórca CTFTool udostępnia kod źródłowy, więc można go tak przekompilować, że nie będzie rozpoznawalny przez sygnatury antywirusowe.
W kwestii wykrywalności CTFTool przez Defender nie zaskoczyło to nas, bo w chwili pisania tego artykułu jest ono wykrywane na Virustotal.com przez 34/70 silniki antywirusowe.
- Nie podnosić systemu do sierpniowych aktualizacji – po instalacji poprawek nie będzie już tak łatwo 🙂
Poniżej zaprezentowaliśmy wykonane w naszym środowisku testowym oba wymienione powyżej scenariusze.
Scenariusz 1A – eskalacja uprawnień do NT Authority\System (okno UAC)
Do wykonania tego scenariusza posłużyliśmy się exploit’em wykorzystującym proces „consent.exe” (okno dialogowe UAC proszące o dodatkowe uprawnienia), który uruchamia się w momencie, gdy zalogowany użytkownik nie posiada wystarczających uprawnień, aby zainstalować lub uruchomić aplikację. Za pomocą tego exploit’a i dodatkowego skryptu będziemy chcieli zdobyć uprawnienia użytkownika systemowego, czyli „NT AUTHORITY \System”. W naszym systemie Windows 10 wersja 1903 PL jesteśmy zalogowani jako zwykły użytkownik „testowy”. Można to sprawdzić wpisując w wierszu poleceń komendę „whoami / groups”.
Wymagane komendy w narzędziu CTFTool.exe jakie musieliśmy wykonać to:
- Connect
- Scan
- Script .\scripts\ctf-consent-system.ctf
Po uruchomieniu ostatniego polecenia skryptu system skopiuje bibliotekę „payload64.dll” do katalogu „C:\TEMP\”, a następnie uruchomi wiersz poleceń jako administrator. W oknie dialogowym UAC (consent.exe) pojawi się monit o podanie hasła administratora (nie należy nic wpisywać, wszystko dzieje się automatycznie!). Następnie wykonywany jest ładunek, który czeka na proces „consent.exe” na połączenie się z sesją CTF i uruchomi na nim exploit.
Po udanym uruchomieniu ładunku wyświetli się nam nowe okno wiersza polecenia, w którym będziemy mogli zobaczyć uprawnienia jakie od teraz posiadamy, czyli „NT AUTHORITY\System”.
Nagrane demo tego scenariusza możesz zobaczyć poniżej.
Scenariusz 1B – eskalacja uprawnień do NT Authority\System (z poziomu ekranu logowania Windows)
Podobnie jak w przypadku 1A będziemy chcieli zdobyć uprawnienia „NT AUTHORITY\System”, ale tym razem do wykonania tego scenariusza posłużyliśmy się exploit’em wykorzystującym proces „logonUI.exe” (ekran logowania Windows, gdzie system prosi o zalogowanie się użytkownika).
Wymagane komendy w narzędziu CTFTool.exe jakie musieliśmy wykonać to:
- Connect
- Scan
- Script .\scripts\ctf-logonui-system.ctf
Po wywołaniu skryptu ładunku w wierszu poleceń pojawi się komunikat, że po 5 sekundach zostanie wywołany ekran logowania Windows. Następnie, gdy się pojawi po około 2-3 sekundach zostanie wywołany kolejne okno wiersza poleceń Windows, ale już na uprawnieniach „NT AUTHORITY\System”.
Nagrane demo tego scenariusza możesz zobaczyć poniżej.
Scenariusz 2 – eskalacja uprawnień do administratora domeny AD
W tym scenariuszu będziemy polować na „admina”, który zaloguje się do naszego komputera lub na inne konto uprzywilejowanego użytkownika (np. z lokalnymi uprawnieniami administracyjnymi do komputera). Dla działów IT jest to bardzo niebezpieczny scenariusz, ponieważ możemy nim w łatwy sposób przejąć konto administratora i zdobyć duże uprawnienia w zależności od ich konfiguracji w środowisku IT.
W naszym środowisku laboratoryjnym użyliśmy konta z uprawnieniami lokalnego administratora (Kapitan) oraz konta zwykłego użytkownika (Testowy), tak jak w poprzednim scenariuszu.
W podobny sposób moglibyśmy zalogować się do komputera użytkownika posiadającego uprawnienia administratora domeny Active Directory, ale kto się loguje na stacje adminem domeny? Uwierzcie, ale zdarzają się takie przypadki w firmach.
Podczas sesji użytkownika „testowy” na Windows 10 uruchomimy narzędzie CTFTool.exe i wykonamy odpowiedni exploit (skrypt „ctf-exploit-common-win10.ctf”).
Na użytkowniku „Kapitan” uruchomimy aplikację „notepad.exe” i będziemy chcieli przechwycić z niej uprawnienia z poziomu użytkownika „Testowy”.
Możemy też wykonać scenariusz z życia – czyli zalogować się przez zdalny pulpit do komputera, na którym jest zalogowany użytkownik „kapitan” i chcieć na nim np. zainstalować aplikację Office oraz wykonać szereg czynności sprawdzających – tak jak jest to wykonywane w środowisku IT.
Ponieważ, aby można było udanie przeprowadzić atak administrator musi uruchomić aplikację, która komunikuje się z CTF. Sprawdziliśmy, że odpowiednią tego typu aplikacją będzie Notatnik (uruchomiony na uprawnieniach konta Kapitan) 🙂
Następnie w celu wykonania ataku na „notepad.exe”, musimy połączyć się z wątkiem jego procesu. W tym celu musimy użyć polecanie „wait”, która będzie czekać, aż plik EXE znajdzie się na liście skanowania i połączy się z tym wątkiem. Skrypt exploit’a jaki użyliśmy na naszym Windows 10 pokazuje poniższy skrypt.
Po uruchomieniu skryptu exploita pojawi nam się nowe okno wiersza poleceń, w którym posiadamy uprawnienia admina (Kapitan).
W podobny sposób jak powyżej moglibyśmy przejąć każde inne konto użytkownika zalogowanego do systemu Windows, w tym kont domenowych i administracyjnych.
Nagrane demo tego scenariusza możesz zobaczyć poniżej.
Jak możemy wykryć problem w środowisku?
Wykrycie powyższego exploita nie jest szczególnie proste, ponieważ osoba atakująca może to zrobić dla prawie każdego procesu. System Windows może nam w tym pomóc włączając na nim kontrolę procesów (proces auditing) lub instalując darmowe narzędzie Sysmon na wszystkich komputerach klienckich Windows. Przekazywaniem i obróbką tych zdarzeń może zająć się np. system klasy SIEM lub centralny serwer za pomocą mechanizmu przekazywania zdarzeń Windows (WEF). Dodatkowo można monitorować system pod kątem tworzenia pliów Exploit.dll oraz payload64.dll w katalogach „C:\Temp” oraz „C:\Windows\temp”.
Włączenie inspekcji procesów na stacji Windows za pomocą polecenia auditpol (wymagana uprawnień administracyjnych do komputera):
auditpol /set /category:”detailed Tracking” /include /success:enable
lub dla windows w wersji polskiej
auditpol /set /category:” Szczegółowe śledzenie” /include /success:enable
Weryfikacja konfiguracji audytu wygląda następująco:
Włączenie powyższego audytu możemy wykonać także z poziomu GPO (zasady grupy ang. Group Policy Object) w Active Directory i przypisać automatycznie na wszystkie komputery w organizacji.
Po włączeniu audytu procesów interesujące dla nas będą zdarzenia w logu zabezpieczeń (Security) Microsoft spełniających poniższe kryteria:
- Identyfikator = 4688
- Informacja o procesie/Nazwa nowego procesu = C:\Windows\system32\cmd.exe
- Informacja o procesie/Nazwa procesu twórcy != C:\Windows\Explorer.exe
Czyli szukamy zdarzeń 4688 takich procesów, których źródłem wywołania nowego procesu „cmd.exe” nie jest proces „explorer.exe”. Jak się przekonamy poniżej tak właśnie się dzieje w przypadku scenariusza nr 2, który wykonaliśmy powyżej. Proces „notepad.exe” wywołał proces „cmd.exe” na uprawnieniach administratora (Kapitan).
Możemy do wykrywania zdarzeń exploitów w przypadku Windows Defender korzystać z ustawień ochrony przed lukami w zabezpieczeniach systemu Windows 10. W tym przypadku możemy przeprowadzić inspekcję dwóch konkretnych ataków (nasz opisywany scenariusz nr 1a i 1b)- w szczególności „consent.exe” i „logonUI.exe”. Aby to zrobić, musimy wykonać następujące kroki w Windows Defender:
- Kliknij w polu wyszukiwania menu Start i wpisz „Ochrona przed naruszeniami”, a następnie kliknij opcję, która się pojawi.
- Kliknij „Ustawienia programu”
- Kliknij „Dodaj program, aby dostosować”
- Wpisz „consent.exe”
- Przewiń w dół do „Nie zezwalaj na procesy dziedziczne”
- Zaznacz „Zastąp ustawienia”
- Przesuń przełącznik, aby go włączyć
- Kliknij „Tylko inspekcja”
- Kliknij „Zastosuj”
Następnie przejrzyj dzienniki w narzędziu do podglądu zdarzeń w Dzienniku aplikacji i usług/Microsoft/Windows/Security-Mitigations. Nazwa dziennika to: „Microsoft-Windows-Security-Mitigations/Kernel Mode”
Podobną konfigurację zalecamy dla LogonUI.exe w celu wykrycia exploita, który otwiera okno wiersza polecenia na ekranie blokady jako system – nasz scenariusz 1b.
Jak możemy się zabezpieczyć?
Chociaż nie jest to nigdzie udokumentowane, możemy zrobić kilka rzeczy w celu załagodzenia skutków działania exploit’a.
- Upewnij się, że Twój system zawiera sierpniowe aktualizacje. Jest to obecnie najskuteczniejsza porada, która powstrzymuje narzędzie przed uruchomieniem krytycznego polecenia skanowania (scan) i uruchomienia exploita.
- Upewnij się, że masz włączoną ochronę systemu Windows Defender w czasie rzeczywistym.
- Upewnij się, że Twój program antywirusowy na komputerze jest aktualny. Najlepiej, użyj NextGen AV, aby uzyskać więcej informacji o procesach i o tym, jak do nich doszło. To bardzo pomoże w reagowaniu na incydenty.
- Używaj tylko języka, który nie wymaga interakcji z CTF.
Zalecamy również skonfigurowanie w firmie na wszystkich komputerach opcji programu Windows Defender SmartScreen przez zasady grupy (GPO), aby użytkownicy nie mogli pominąć ostrzeżenia, które skutecznie blokuje działanie nieznanego oprogramowania – uruchamiania plików exe.
Jeśli interesuje Ciebie zaawansowana ochrona systemów Windows zachęcamy do kontaktu z firmą APPEAL
Przypominamy, że jesteśmy dostępni także w mediach społecznościowych Facebook i LinkedIn.