Skip to content

Windows, drivery, GS cookies i 1 bit entropii

W dniu dzisiejszym chciałbym zaprezentować rezultaty badań, prowadzonych przez ostatnie trzy tygodnie przeze mnie oraz Gynvaela Coldwinda – prawie 40 stronicowy artykuł pt. “Exploiting the otherwise non-exploitable: Windows Kernel-mode GS cookies subverted” (tak, jest to oczywiste nawiązanie do publikacji “Exploiting the otherwise non-exploitable on Windows”, wydanej przez Skywing’a oraz Skape w 2006 roku). Dokument ten opisuje obecny poziom bezpieczeństwa zapewniany przez zabezpieczenia stosu, zaimplementowane w znacznej większości sterowników systemu Windows (zarówno domyślnych, jak i pochodzących od stron trzecich) – ciasteczka GS – oraz omawia poszczególne słabości, znalezione w implementacji owego zabezpieczenia, w systemach Windows XP, Windows Vista oraz Windows 7 (w wersji 32- oraz 64-bitowej).

Okazuje się, że źródła entropii używane do wygenerowania finalnej wersji ciasteczka – chroniącego przed wykorzystaniem nadpisanego adresu powrotu – są wyjątkowo słabe, co z kolei prowadzi do wysokiej przewidywalności  w zamyśle losowej wartości. W artykule zostało przedstawionych pięć różnych technik przewidywania wartości kanarka; trzy z nich zostały zaprojektowane z myślą o przybliżaniu ilości tzw. ticków systemowych (jedyna nieznana część ciasteczka), z możliwie największą precyzją. Oprócz ściśle teoretycznych rozważań, wykonano również znaczną ilość empirycznych testów, udowadniając prawdziwą skuteczność technik zaprezentowanych w artykule. Dzięki użyciu metody uznawanej obecnie za najbardziej dokładną, udało nam się osiągnąć blisko  50% skuteczności obliczania wartości ciasteczka (a więc eksploitacji błędów trybu jądra, bazujących na przepełnieniu bufora stosu).

Zainspirowany przez artykuł o podobnej tematyce (“Reducing the effective entropy of GS cookies” autorstwa skape, Uninformed 7), chciałbym przedstawić trzy przykładowe wykresy, podsumowujące ogólny poziom rezultatów osiągniętych w dziedzinie szacowania wartości kanarków trybu jądra. Wszystkie eksperymentalne testy zostały przeprowadzone na platformie Microsoft Windows XP SP3, i dotyczą zabezpieczenia stosu używanego przez domyślny moduł win32k.sys.

Wykres 1. Poziom przewidywalności poszczególnych bitów ciasteczka, przy użyciu Techniki 1 (Absolute loading time).

Wykres 2. Poziom przewidywalności poszczególnych bitów ciasteczka, przy użyciu Techniki 2 (Process-relative loading time).

Wykres 3. Poziom przewidywalności poszczególnych bitów ciasteczka, przy użyciu Techniki 3 (Symlink-relative loading time).

Legenda: Wartość 1,0 oznacza, że rozważany bit może zostać obliczony ze stuprocentową dokładnością (tj. bit przedstawia zerowy poziom entropii).

Wartość 0,5 oznacza, że rozkład zer i jedynek dla danego bitu jest równy, a jego wartość nie może być przewidziana (tj. bit przedstawia maksymalny poziom entropii).

Dzięki wysokiej przewidywalności kanarków, określona grupa podatności – polegających na przepełnieniach mających miejsce w obrębie stosu – znajdowanych w modułach jądra Windows, może zostać określona mianem eksploitowalnych ze zróżnicowanym prawdopodobieństwem (wcześniej należały do kategorii Denial of Service – odmowy dostępu do usługi). Za przykład takiej właśnie podatności służyć może luka CVE-2010-4398; ujawniona jako 0-day w dniu 26 listopada 2010, przez chińskiego hackera o pseudonimie noobpwnftw. Odkrywca opisał w tym dniu błąd walidacji leżący u podstaw luki bezpieczeństwa, określił podatne wersje systemów operacyjnych, udostępnił przykładowy kod exploita, podnoszący uprawnienia lokalnego użytkownika systemu do NT AUTHORITY\SYSTEM, a także przedstawił nagranie, prezentujące udany atak na bezpieczeństwo systemu Microsoft Windows Vista.

Oryginalny autor advisory podkreślił fakt, iż dziura może zostać wykorzystana do ominięcia mechanizmu User Access Control (dostępnego w systemach Windows Vista oraz Windows 7), a także udostępnił kod Proof of Concept, kompatybilny wyłącznie z dwoma najnowszymi edycjami systemu Windows – działania te wywołały swoiste zamieszanie wokół informacji o podatności na platformie Windows XP (patrz:  “Exploit 0day na Windows” @ Niebezpiecznik). Po przeczytaniu kilku komentarzy, których autorzy byli przekonani o bezpieczeństwie systemu Windows XP, wraz z Gynvaelem zdecydowaliśmy się dokładniej zbadać tę kwestię. W trakcie analizy okazało się, że podatność w istocie dotyczy wspomnianej platformy –  co więcej, dowiedzieliśmy się również, że podatna funkcja jest chroniona przez ciasteczko GS, w przeciwieństwie do Windows Vista i 7. Jednym z głównych powodów podjęcia pracy nad badaniem możliwych sposobów redukcji entropii kanarków, była chęć stworzenia stabilnego exploita wykorzystującego wspomnianą lukę (przez wielu uważane za niemożliwe).

Dzięki opracowanym technikom obliczania przybliżonej wartości ciasteczek, udało nam się osiągnąć ten cel (współczynnik przewidywalności został wyznaczony empirycznie, i wynosi ok. 46%, co zostało przedstawione w artykule). Udane podniesienie uprawnień użytkownika, poprzez oszacowanie GS cookie oraz eksploitacji luki CVE-2010-4398 została przedstawiana na poniższym nagraniu:

Download

Pełna treść publikacji dostępna jest pod następującym odnośnikiem: link (PDF, 885kB).

Vendor Timeline

6 grudnia 2010: Wstępny e-mail do Microsoftu, informujący o badaniach wskazujących na niski poziom zabezpieczeń stosu trybu jądra Windows.

6 grudnia 2010: Potwierdzenie odbioru wiadomości.

8 grudnia 2010: Ponowna odpowiedź Microsoftu. Firma jest świadoma niskiej entropii ciastek GS oraz przyznaje, że nasze rozumowanie jest uzasadnione. Firma oświadcza, że nie ma w planach poprawiania istniejącej implementacji ochrony stosu, oraz zaznacza, że problem zostanie rozwiązany w przyszłych wydaniach systemu operacyjnego Windows.

4 stycznia 2011: Microsoft otrzymał pełne wyniki badań. Nie otrzymaliśmy zastrzeżeń co do publikacji.

11 stycznia 2011: Publikacja

Podziękowania

Chcielibyśmy w sposób szczególny podziękować następującym osobom, które okazały swoją pomoc w redagowaniu oraz korekcie niniejszej publikacji: Unavowed, Tavis Ormandy, Marc-Antoine Ruel, Carlos Pizano, Matt Miller, oraz deus.

Podsumowanie

Publikowany artykuł ma na celu przedstawić fakt, iż zabezpieczenie które do tej pory uznawane było za skuteczny sposób ochrony przed przepełnieniami na stosie, jest podatne na różnego rodzaju ataki, które z kolei mogą prowadzić do wykorzystania określonej grupy luk bezpieczeństwa, a więc do kompromitacji bezpiecznych wcześniej maszyn. Przedstawione techniki nie tylko działają, ale również będą działały w kontekście przyszłych, nieznanych jeszcze podatności, jako że Microsoft nie deklaruje planów naprawy mechanizmu GS cookies w najbliższym czasie. Należy jednak pamiętać, że możliwość przewidywania stosowych ciasteczek otwiera możliwość wykorzystania błędów, znajdowanych jedynie w ściśle określonej grupie modułów jądra – co najważniejsze, rdzeń systemu Windows (obraz wykonywalny ntoskrnl.exe) nie jest podatny na żadną z opisanych w dokumencie słabości.

{ 7 } Trackbacks

  1. […] poniższego tekstu jest Mateusz “j00ru” Jurczyk oraz Gynvael […]

  2. […] This post was mentioned on Twitter by antic0de and others. antic0de said: RT @j00ru: Read "Windows Kernel-mode GS Cookies subverted" by me and @gynvael: http://bit.ly/glR4fn Blogs: http://bit.ly/ibmf8E http://b … […]

  3. […] Дальше […]

  4. […] implementation-specific details of exploit mitigations, hilarity often results (case in point: the 1 bit of entropy in Windows stack cookies),” he […]

  5. […] implementation-specific details of exploit mitigations, hilarity often results (case in point: the 1 bit of entropy in Windows stack cookies). Hey, maybe I’ll do it if I can find some free […]

  6. […] específicas de mitigações explorar, hilaridade resulta muitas vezes (caso em questão: o bit 1 da entropia em cookies pilha do Windows). Ei, talvez eu vou fazer isso se eu posso encontrar algum tempo […]

  7. […] details of exploit mitigations, hilarity often results (case in point: the 1 bit of entropy in Windows stack cookies),” he […]

Post a Comment

Your email is never published nor shared. Required fields are marked *