Vista, wio!

W Windows Viście nawet użytkownikowi z uprawnieniami administratora nie wolno modyfikować niektórych elementów systemu. Na szczęście znaleźliśmy lukę, która pozwoli ci sforsować tę przeszkodę.


W Windows Viście nawet użytkownikowi z uprawnieniami administratora nie wolno modyfikować niektórych elementów systemu. Na szczęście znaleźliśmy lukę, która pozwoli ci sforsować tę przeszkodę.

Największe niebezpieczeństwo zagrażające komputerowi i zainstalowanemu w nim systemowi to sam użytkownik. Tę tezę Microsoft wyjątkowo konsekwentnie wprowadził do Windows Visty i ubezwłasnowolnił obsługującego ją człowieka. Nawet osoba z uprawnieniami administratora dysponuje początkowo ograniczonymi prawami dostępu i staje się prawdziwym administratorem dopiero wtedy, gdy potwierdzi ostrzeżenie modułu Kontrola konta użytkownika (UAC, User Account Control). A kto po prostu wyłączy UAC z poziomu Panelu sterowania (polecenie Włącz lub wyłącz funkcję Kontrola konta użytkownika w aplecie Konta użytkowników), nie uzyska takiej wolności, do jakiej się przyzwyczaił w Windows 2000/XP. Straci dostęp do setek kluczy rejestru i takich obiektów, jak foldery i pliki. W Viście pozostał już tylko jeden "użytkownik" o nieograniczonych przywilejach. Jest nim sam system. Teoretycznie można by tymczasowo wymusić na nim poszczególne uprawnienia, jednak w praktyce jest to niewykonalne - wymagałoby zbyt wiele pracy. Odkryliśmy jednak inny sposób z wykorzystaniem luki w zabezpieczeniach Visty.

Założenie - skrypt o nieograniczonych uprawnieniach

Do uruchomienia skryptu pcwRunasSystem.CMD są wymagane uprawnienia administratora.

Do uruchomienia skryptu pcwRunasSystem.CMD są wymagane uprawnienia administratora.

Wstępnie zamierzaliśmy zmodyfikować krótki skrypt z Windows XP, aby działał w Viście. Okazało się to niemożliwe. Większość operacji w rejestrze nie doszła do skutku, bo Vista odmawia ich wykonania nawet administratorowi. Natomiast próba uzyskania poświadczeń systemu za pomocą windowsowego narzędzia RunAs okazuje się bezskuteczna, bo wymaga ono podania hasła, zaś użytkownikowi System go nie przydzielono.

Ostatnią deską ratunku zdawało się narzędzie Schtasks.exe, które działa w trybie tekstowym i wykonuje programy z poświadczeniami systemu. W odróżnieniu od leciwego At.EXE z Windows 2000/XP nie umożliwia ingerencji w przywołany za jego pomocą program. Oznacza to, że można uruchamiać tylko skrypty, które nie wymagają interaktywnej obsługi ani wizualnej kontroli ich działania. Schtasks.exe okazało się więc nieodpowiednie do przywołania naszego graficznego skryptu HTA.

Pomysł - interaktywna usługa

Microsoft usiłuje zablokować w Viście uruchamianie interaktywnych aplikacji z poświadczeniami systemu. Nie ma udokumentowanej opcji, która by na to pozwalała. Mimo to można w zadziwiająco prosty sposób przechytrzyć systemowe obo-strzenia. Usługi w środowiskach z rodziny NT, czyli np. Windows 2000/XP i Vista, mają szczególne przywileje - działają zawsze z poświadczeniami systemu. I właśnie do tego zmierzamy - pozostaje kwestia, czy Vista zaakceptuje dowolny program jako usługę. Aby otrzymać odpowiedź na to pytanie, wystarczą dwa polecenia z użyciem windowsowego narzędzia Sc.exe:

sc create testsvc bin

path= notepad.exe

type= own type=

interact

sc start testsvc

Z poziomu pliku wsadowego możesz uruchomić niemal dowolną aplikację w kontekście systemu.

Z poziomu pliku wsadowego możesz uruchomić niemal dowolną aplikację w kontekście systemu.

Pierwsze z poleceń zgłasza systemowi program Notatnik jako usługę o nazwie testsvc, drugie zaś ją uaktywnia. Większość usług w środowisku Windows nie działa interaktywnie, niemniej jednak można wymusić taki tryb pracy za pomocą argumentu interact. Natychmiast lub po upływie kilku chwil na ekranie pojawi się zadanie Wykrywanie okien dialogowych usług interakcyjnych. Gdy je klikniesz, zostanie wyświetlone okno o takiej samej nazwie. Widnieje w nim polecenie Pokaż komunikat. Wystarczy je kliknąć, aby uzyskać poświadczenia użytkownika System i mieć nieograniczone uprawnienia. Na jego spartańskim pulpicie znajdzie się przywołany program Notatnik, a także okno z poleceniem Powróć teraz, którym przywrócisz swój poprzedni kontekst (i poświadczenia administratora). Możesz łatwo sprawdzić, czy masz poświadczenia systemu. Wystarczy przywołać menu Otwórz i przejść do folderu System Volume Information. Dysponując tylko poświadczeniami administratora, nie uda ci się tego zrobić.

Rozwiązanie - pcwRunasSystem

Chcąc uruchomić program jako usługę interaktywną, musisz potwierdzić ten komunikat.

Chcąc uruchomić program jako usługę interaktywną, musisz potwierdzić ten komunikat.

Niewiele wierszy kodu i można rozszerzyć opisaną ideę na tyle, aby użytkownik Visty mający uprawnienia administratora mógł uruchomić dowolny program - chociażby Edytor rejestru Regedit.exe lub menedżera plików Total Commander (Totalcmd.exe). Jest to możliwe za pomocą naszego skryptu pcwRunasSystem.CMD, który zamieszczamy na dołączonym krążku DVD (działa w środowiskach Windows 2000/XP/Vista). W systemie Vista kliknij go prawym przyciskiem myszy i wskaż polecenie Uruchom jako administrator (uprzednio wyłącz Kontrolę konta użytkownika - patrz wyżej). Plik wsadowy wykona wówczas następujące zadania:

1. Uruchamia usługę UI0Detect. W zwyczajnie skonfigurowanej Viście usługa ta działa domyślnie, ale uaktywniamy ją na wszelki wypadek, bo bez niej nie działa moduł wykrywania usług interaktywnych. W starszych wersjach Windows skrypt pomija tę czynność.

2. W dalszej kolejności skrypt prosi użytkownika o podanie nazwy programu, który chce uruchomić w kontekście systemu. Najprostszy wariant przewiduje naciśnięcie klawisza [Enter]. W ten sposób uruchomisz uniwersalną konsolę poleceń Cmd.exe. Z jej poziomu będziesz mógł przywołać niemal każdą aplikację. W wypadku narzędzi systemowych, które znajdują się w obrębie domyślnej ścieżki wyszukiwania, wystarczy podać nazwę pliku - np. Regedit.exe. W przeciwnym razie trzeba poprzedzić nazwę pliku pełną ścieżką dostępu. Jeśli w ścieżce lub nazwie pliku występują spacje, należy ująć ją w cudzysłów, np. "c:\program files\...\xyz.exe". Nielicznych aplikacji - m.in. Eksploratora Windows, Internet Explorera i składników pakietu Microsoft Office - nie da się uruchamiać w kontekście systemu lub działają w nim z pewnymi ograniczeniami.

3. Wybrany program zostaje zarejestrowany jako usługa interaktywna, a następnie uruchomiony. Wówczas pojawi się na ekranie wspomniane powyżej okno Wykrywanie okien dialogowych usług interakcyjnych i znajdziesz się na najbardziej uprzywilejowanej płaszczyźnie Ring 0 (więcej szczegółów na ten temat znajdziesz pod adresemhttp://en.wikipedia.org/wiki/Ring_0 - informacje w języku angielskim). Zauważ, że usługa UI0Detect w Windows Viście samodzielnie powraca do konta administratora po upływie minuty bezczynnego działania usługi interaktywnej. Zanim sam cofniesz się do konta administratora, powinieneś zamknąć aplikację uruchomioną w kontekście systemu. W przeciwnym razie będzie nadal bezczynna do momentu zamknięcia systemu, pochłaniając miejsce w pamięci i zasoby systemu.

Ocena - ryzykowne czy przydatne?

Administratorzy i entuzjaści majstrowania w systemie zapewne odetchną z ulgą na wiadomość o przedstawionych możliwościach i ich realizacji w skrypcie pcwRunasSystem.CMD. W ten sposób uda im się obalić irytujący mur, który niepotrzebnie odizolowuje użytkownika od systemu. Gdy zechcesz szybko zmienić jakiś klucz rejestru i trafisz na opór Visty, wczytaj Edytor rejestru bez wahania jako usługę interaktywną. Jednakże rzekomo tak bezpieczna Vista spada w hierarchii niemal do poziomu środowisk Windows 2000/XP. Mało ostrożni użytkownicy mogą uzyskać uprawnienia systemu i wyszaleć się w jego koncie. Nie ma nowego ryzyka infekcji wirusowej. Przypuszczamy, że opisana luka w zabezpieczeniach nie stanowi kolejnego ryzyka, które mogłoby zostać wykorzystane przez cyfrowe szkodniki, bo ani nie szukają, ani nie wymagają interakcji z użytkownikiem. Wręcz przeciwnie - wirusom ani trochę nie zależy na powiadamianiu użytkownika komunikatem Wykrywanie okien dialogowych usług interakcyjnych, że coś się dzieje w systemie - a tym bardziej na proszeniu go o potwierdzenie kliknięciem myszy. Tymczasem na koncie administratora i tak można potajemnie uruchamiać procesy z poświadczeniami systemu za pomocą API lub narzędzia Schtasks.exe.