Cześć 🙂 Chciałbym dzisiaj opisać pewną ciekawą podatność, która pozwala na usuwanie plików z uprawnieniami „Trusted Installer”. Pewnie nie wszyscy kojarzą ten obiekt, ale spróbujcie usunąć pewne kluczowe dla systemu Windows zasoby posiadając tylko i wyłącznie uprawnienia Administratora – istnieje duża szansa, że taka próba zostanie zablokowana przez WRP – Windows Resource Protection, a z błędu odczytacie, że potrzebujecie uprawnień właśnie Trusted Installera.
Za chwilę postaramy się wykorzystać ciekawą lukę w oprogramowaniu Windows Defender, która pozwoli nam na usuwanie dowolnych zasobów na komputerze z wykorzystaniem uprawnień zwykłego użytkownika.
Wspomniana luka powstaje przy próbie rotowania logów Windows Defendera, które znajdują się w katalogu C:\Windows\Temp pod nazwą MpCmdRun.log. W momencie, gdy oryginalny plik logów osiąga rozmiar 16MB ze starego pliku MpCmdRun.log powstaje plik MpCmdRun.log.bak, a nowe logi zapisywane są w czystym pliku, bez końcówki .bak. W momencie gdy MpCmdRun.log znów osiągnie 16 778 kB, plik .bak jest po prostu usuwany, a na jego miejsce wchodzi MpCmdRun.log. Dodajmy, że możemy dowolnie nadpisywać plik MpCmdRun.log powershellowym poleceniem Update-MpSignature. Operację tę możemy wykonywać z uprawnieniami zwykłego użytkownika. Przyjrzyjmy się jak to wygląda w szczegółach.
Uwaga: Na potrzeby nauki i tego wpisu ułatwiam sobie pracę i sztucznie tworzę ww. logi, w gotowych rozmiarach. Zapętlona instrukcja Update-MpSignature osiągnęłaby ten sam efekt w kilkadziesiąt minut.
W celu dokładnego prześledzenia co dokładnie dzieję się z plikami w momencie rotacji, wykorzystamy narzędzie Process Monitor z paczki Sysinternals. Nie da się komfortowo korzystać z Process Monitora bez nałożenia odpowiednich filtrów na wychwycone zdarzenia, więc przyjmijmy następującą konfigurację filtra:
Po uruchomieniu polecenia Update-MpSignature możemy zauważyć ciekawy ciąg zdarzeń.
Aplikacja najpierw odpytuje plik MpCmdRun.log o rozmiar („QueryStandardInformation), następnie usuwa stary plik logów MpCmdRun.log.bak (flag FILE_DISPOSITION_DELETE) , aby w końcu do starych logów dołożyć końcówkę „.bak”. A co jeżeli utworzymy folder o nazwie MpCmdRun.log.bak i utworzymy punkt do zamontowania (ang. NTFS junction) tego katalogu w dowolnym, innym miejscu? Utwórzmy z uprawnieniami administratora folder u użytkownika Piotr na pulpicie.
Dodajmy do niego jeszcze testowy plik zawierający w sobie napis „test”.
Mountpoint (NTFS junction) możemy utworzyć na dwa sposoby. Możemy użyć wbudowanego polecenia mklink lub skorzystać z biblioteki NtApiDotNet.dll.
Okej. Widzimy, że efekt jest taki sam 😊 Na przykładzie wyżej widać, że utworzyliśmy NTFS junction z C:\Windows\Temp\MpCmdRun.log.bak do C:\Users\piotr\Desktop\mountpoint. Utworzenie takie połączenia nie wymaga od nas żadnych szczególnych uprawnień. Sprawdźmy teraz co się stanie z wyżej wymienionymi folderami (i plikiem test.txt!) gdy dokona się rotacja logów. Po uruchomieniu polecenia Update-MpSignature obserwujemy następującą sekwencję zdarzeń w „Process Monitorze”.
Widzimy, że NTFS junction działa prawidłowo i folder MpCmdRun.log.bak jest rozwiązywany jako C:\Users\piotr\Desktop\mountpoint. Następnie usuwana jest zawartość folderu, link do C:\Users\piotr\Desktop\mountpoint (C:\Windows\Temp\MpCmdRun.log.bak) jest usuwany, a jego miejsca zajmuje dotychczasowy plik logów (MpCmdRun.log) z dopisaną końcówką „.bak”.
Wszystkie te operacje mają miejsce z uprawnieniami użytkownika System, z ustawioną flagą „SeRestorePrivilege” [1]. Sprawdzić to możemy za pomocą programu „Process Explorer” dostępnego w pakiecie „Sysinternals”. Uruchamiając polecenie Update-MpSignature możemy przeanalizować uprawnienia programu „MpCmdRun.exe” dziedziczone od rodzica „MsMpEng.exe”.
Okej. Widzimy, że w prosty sposób możemy usuwać zawartości wskazanych przez nas folderów z uprawnieniami użytkownika NT Authority\System, z pominięciem ochrony zapewnianej przez TrustedInstaller. To już bardzo dużo. Możemy w ten sposób usuwać logi, ważne ustawienia systemu, pliki konfiguracyjne.
Skoro możemy dowolnie usuwać pliki z dysku, to może są gdzieś jakieś biblioteki, które nieodnalezione we właściwym miejscu, są szukane w miejscach do których prawo zapisu ma zwykły user? W następnym wpisie postaram się połączyć wyżej opisaną podatność z inną i przeprowadzić pełnoprawną eskalację uprawnień.