You are on page 1of 69

Hispasec

Praktyczne spojrzenie na luki bezpiecze stwa j dra Windows


o podatno ciach ring-0 s w kilka

Mateusz j00ru Jurczyk SEConference, Krakw 2010

Plan prezentacji
Tryb j dra co to jest?
Punkt widzenia aplikacji u ytkownika Punkt widzenia napastnika

Bezpiecze stwo j dra


Podzia pami ci wirtualnej Komunikacja modu w o r nych uprawnieniach Wektory ataku Miejsca wyst powania potencjalnych luk

Pytania

Kilka s w o mnie
Mateusz j00ru Jurczyk
Reverse Engineer @ Hispasec Pentester / Bughunter Vexillium (http://vexillium.org/) Autor bloga technicznego (http://j00ru.vexillium.org)

Architektura
Jeden z poziomw uprzywilejowania kodu Intel x86 Dysponuje najwy szymi mo liwymi uprawnieniami
Wy czaj c mechanizmy wirtualizacji

Wykorzystywany przez rdze systemu operacyjnego


Obs uga dost pnego sprz tu Tworzenie odpowiedniego rodowiska pracy dla aplikacji u ytkownika

W praktyce j dro w ring-0


Zarz dza dost pnymi zasobami komputera
Planuje i rozdziela czas procesora pomi dzy zadania Zarz dza pami ci fizyczn oraz mechanizmem stronicowania Zapewnia prawid ow obs ug i dost p do zewn trznych urz dze

W praktyce j dro w ring-0


Udost pnia interfejs komunikacji j dra z zadaniami
Pozwala programom na wykonywanie okre lonych przez j dro operacji w systemie Nadzoruje ka dy istotny ruch, wykonywany przez aplikacj Operuje na ogromnej ilo ci danych dostarczanych przez uruchomione aplikacje oraz aktywne urz dzenia

Punkt widzenia aplikacji u ytkownika

? ?

Punkt widzenia napastnika

10

11

Podzia pami ci wirtualnej

Ca kowita powierzchnia 4GB podzielona na dwie cz ci

12

Podzia pami ci wirtualnej


Dolne obszary pami ci
Przechowuj dane (kod, informacje) danego procesu Regularnie zmieniaj swoj posta (context switch) Dost pne z ka dego poziomu uprzywilejowania Mog zosta tymczasowo zapisane na dysk twardy (plik stronicowania)

13

Podzia pami ci wirtualnej


Pami aplikacji zawiera
Obraz wykonywalny programu Obrazy wykonywalne bibliotek zewn trznych Stosy oraz sterty procesu Struktury systemowe
x Thread Environment Block x System Environment Block x KUSER_SHARED_DATA

Prywatne dane programu

14

Podzia pami ci wirtualnej


Wysokie obszary pami ci
Nie ulegaj zmianie w kontek cie r nych procesw Mog , ale nie musz zosta oznaczone jako PAGEABLE S wsp dzielone pomi dzy wszystkimi modu ami j dra w systemie Chronione przed odczytem i zapisem z poziomu user-mode (ca kowity brak dost pu)

15

Podzia pami ci wirtualnej


Pami j dra zawiera:
Obraz wykonywalny j dra Obrazy wykonywalne pozosta ych sterownikw Stosy kernel-mode Sterty (kernel memory pools) Wewn trzne listy i struktury j dra, opisuj ce obecny stan systemu

16

Podzia pami ci wirtualnej


Konkluzje
Kod z uprawnieniami ring-3 nie ma bezpo redniego dost pu do wysokich obszarw Je li system jest bezpieczny, kod u ytkownika nie nadpisze krytycznych struktur j dra Wniosek kod dzia aj cy w kernel-mode mo e bezgranicznie ufa strukturom, umieszczonym w pami ci j dra

17

Podzia pami ci wirtualnej

Jedyny sposb, aby nadpisa pami trybu j dra z user-mode zrobi to za pomoc aktywnego modu u j dra St d problem bezpiecze stwa luki pozwalaj na wykonywanie niedozwolonych operacji przez sterowniki, w imieniu aplikacji u ytkownika

18

Pami

wirtualna context switch


1. W tek 01 procesu A zostaje uruchomiony 2. W tek 02 procesu B zostaje uruchomiony zmiana kontekstu pami ci 3. W tek 01 procesu B zostaje uruchomiony brak zmiany kontekstu

Wniosek
Context switch nast puje jedynie w obr bie pami ci u ytkownika, je li aktualny i kolejny w tek nale do r nych procesw

19

O wyj tkach s w kilka


Tryb u ytkownika Tryb j dra

Dwa mechanizmy obs ugi wyj tkw Structured Exception Handling Vectored Exception Handling Nieobs u ony wyj tek crash aplikacji Brak wp ywu na stabilno ca ego systemu

Jeden mechanizm obs ugi wyj tkw Structured Exception handling Nieobs u ony wyj tek Blue Screen of Death oraz za amanie pracy systemu Bardziej oglnie luka typu Denial of Service (najcz ciej lokalna)

20

Wyj tek aplikacji

21

Wyj tek j dra

22

23

Komunikacja z modu ami j dra

Wywo ania systemowe (ang. system calls) Przerwania systemowe (ang. interrupts) IOCTL (ang. Device Input and Output Control) Urz dzenia fizyczne hardware

24

Wywo ania systemowe


Zbir kilkuset funkcji j dra systemu, wywo ywane z user-mode Odpowiedzialne za wykonywanie (prawie) wszystkich operacji w imieniu programu Obs ugiwane przez dwa modu y
ntoskrnl.exe (wywo ania bazowe) win32k.sys (wywo ania graficzne)

Przyk adowe funkcjonalno ci


Pliki Rejestr Procesy, w tki Informacje o systemie

25

Wywo ania systemowe


Cz sto hookowane (!)
Malware Uprawnione programy AV Cel monitorowanie i filtracja danych przep ywaj cych pomi dzy aplikacj a j drem

Dwie metody wywo ania


Stary INT 0x2e (wci wspierany!) Nowy instrukcja SYSENTER / SYSCALL

26

ntoskrnl.exe vs win32k.sys
J dro systemu Sterownik graficzny

Blisko 300 wywo a systemowych Numery identyfikacyjne <= 0x1000 Dobrze usystematyzowane nazewnictwo funkcji U ywane przez ka dy istniej cy w systemie proces

Ponad 600 wywo a systemowych Numery identyfikacyjne > 0x1000 S aba systematyka nazw U ywane wy cznie przez procesy korzystaj ce z trybu graficznego

27

Przerwania systemowe
Zbir pi ciu przerwa , ktrych mo e u y aplikacja
KiGetTickCount (0x2a) KiCallbackReturn (0x2b) KiRaiseAssertion (0x2c) KiDebugService (0x2d) KiSystemService (0x2e)

Wywo ywane instrukcj int, parametryzowane za pomoc rejestrw oglnego przeznaczenia

28

IRP / IOCTL
Udokumentowane metody komunikacji ze sterownikami
Wy cznie posiadaj cymi globaln nazw , np. \Global\MyDriver

Pozwalaj na wykonywanie zapyta i odbieranie odpowiedzi w formie buforw we/wy


I/O request packet Otwieranie Odczyt Zapis CreateFile ReadFile WriteFile Device Input and Output Control CreateFile DeviceIoControl

29

Wnioski
Zarwno rdze systemu, jak wi kszo dodatkowych sterownikw operuje na du ej ilo ci danych z zewn trz Co wi cej, istnieje wiele sposobw komunikacji z j drem a wi c wiele potencjalnych luk

30

Wnioski

Wszystkie modu y j dra maj rwne uprawnienia


Zachwianie bezpiecze stwa dowolnego z nich umo liwia wykonanie ataku na ca y system

31

32

Pu apki trybu j dra


Brak zaufania do otrzymywanych danych
Adresy wirtualne (wska niki) Struktury kontrolowane przez u ytkownika Warto ci zwracane przez wewn trzne funkcje

Zasada nie zak ada nic o warto ciach, nad ktrymi nie mamy kontroli

33

Pu apka pierwsza pami


Dost p do pami ci
Konieczno

wirtualna

weryfikacji zakresu adresu

x Funkcje ProbeForRead i ProbeForWrite

Obszar user-mode
x Nieistniej ca strona (Access Violation) x Nieprawid owe uprawnienia strony (Access Violation) x B dne wyrwnanie (?) x Dynamiczna zawarto pami ci (Race Condition)

34

Weryfikacja adresu
Aplikacja u ytkownika nigdy nie powinna u ywa adresu j dra jako argumentu wywo ania W przeciwnym wypadku:
Bufor wej ciowy Memory Disclosure, potraktowanie sekretnych danych j dra jako informacji wej ciowych Bufor wyj ciowy Write-what-where, wykonanie zapisu pod adres j dra, zawieraj cy krytyczne dane

35

Weryfikacja adresu
NTSTATUS IOCTLHandler( PVOID InBuffer, PVOID OutBuffer, ULONG InBufferSize, ULONG OutBufferSize ) { struct OBJECT obj; if((struct OBJECT*)InBuffer->dwSize > 8) return STATUS_INFO_LENGTH_MISMATCH; /* */ memcpy(&obj,InBuffer,InBufferSize); return STATUS_SUCCESS; }

36

Weryfikacja adresu

Sprawdzenie rozmiaru bufora (buffer overflow)

37

Weryfikacja adresu
{ struct OBJECT obj; if(InBufferSize != sizeof(struct OBJECT)) return STATUS_INVALID_PARAMETER; if((struct OBJECT*)InBuffer->dwSize > 8) return STATUS_INFO_LENGTH_MISMATCH; /* */ memcpy(&obj,InBuffer,InBufferSize); return STATUS_SUCCESS; }

38

Weryfikacja adresu

Wst pne wywo anie ProbeForRead / ProbeForWrite (zakres adresu)

39

Weryfikacja adresu
{ struct OBJECT obj; if(InBufferSize != sizeof(struct OBJECT)) return STATUS_INVALID_PARAMETER; ProbeForRead(InBuffer,InBufferSize,sizeof(BYTE)); if((struct OBJECT*)InBuffer->dwSize > 8) return STATUS_INFO_LENGTH_MISMATCH; /* */ memcpy(&obj,InBuffer,InBufferSize); return STATUS_SUCCESS; }

40

Weryfikacja adresu

Ograniczenie kodu operuj cego na wska niku znacznikami try{} except(){} (race condition)

41

Weryfikacja adresu
{ struct OBJECT obj; __try { if(InBufferSize != sizeof(struct OBJECT)) return STATUS_INVALID_PARAMETER; ProbeForRead(InBuffer,InBufferSize,sizeof(BYTE)); if((struct OBJECT*)InBuffer->dwSize > 8) return STATUS_INFO_LENGTH_MISMATCH; /* */ memcpy(&obj,InBuffer,InBufferSize); } except(EXCEPTION_EXECUTE_HANDLER) { return GetExceptionCode(); } return STATUS_SUCCESS; }

42

Weryfikacja adresu

Kopiowanie zawarto ci bufora do pami ci j dra (race conditon)

43

Weryfikacja adresu
{ struct OBJECT obj; __try { if(InBufferSize != sizeof(struct OBJECT)) return STATUS_INVALID_PARAMETER; ProbeForRead(InBuffer,InBufferSize,sizeof(BYTE)); memcpy(&obj,InBuffer,InBufferSize); if(obj.dwSize > 8) return STATUS_INFO_LENGTH_MISMATCH; /* */ } except(EXCEPTION_EXECUTE_HANDLER) { return GetExceptionCode(); } return STATUS_SUCCESS; }

44

Pami

wirtualna c.d.

Niezainicjalizowane wska niki zagro eniem?


Domy lnie wskazuj na pierwsz stron pami ci u ytkownika (NULL = 0x0000000) Nie wiadome u ycie adresu zerowego powoduje pobranie danych zaufanych danych od u ytkownika

45

Nieinicjalizowane wska niki


Microsoft Windows Kernel NULL Pointer Dereference Local Privilege Escalation Vulnerability
BID: 36939 (Windows 2000-Vista) BID: 36624 (Windows 2000-Vista)

Microsoft Windows SMB Null Pointer Remote Denial of Service Vulnerability


BID: 38051 (Windows XP Seven)

46

B dne wska niki c.d.


NTSTATUS(*DispatchRoutine)(VOID); NTSTATUS IOCTLHandler() { DispatchRoutine = RealFunction; return STATUS_SUCCESS; } NTSTATUS SecondHandler() { return DispatchRoutine(); }

47

B dne wska niki po raz ostatni


Czy adres zerowy mo e wyst pi w innej sytuacji, ni niezainicjalizowana zmienna? TAK! Przyk ad:
ExAllocatePool zwracaj ca NULL w przypadku b du alokacji Brak weryfikacji zwrconego adresu nie wiadome odwo ania do pami ci u ytkownika

48

B dne wska niki po raz ostatni


Kiedy alokacja si nie powiedzie?
Rozmiar po danego obszaru pami ci przekracza rozmiar obszaru j dra, np. ExAllocatePool(0xDEADBEEF); J dro nie dysponuje wystarczaj c ilo ci wolnego miejsca sytuacja zape nionej sterty Zosta wyczerpany limit pami ci dla konkretnego procesu pool quota

49

B dne wska niki po raz ostatni


Wniosek
Nigdy nie zak adajmy, e dynamiczna alokacja ko czy si powodzeniem ka dy wynik rezerwacji miejsca powinien by weryfikowany W przeciwnym wypadku operujemy na obszarach pami ci kontrolowanych przez u ytkownika

50

B dne wska niki po raz ostatni


NTSTATUS IOCTLHandler( PVOID InBuffer, PVOID OutBuffer, ULONG InBufferSize, ULONG OutBufferSize ) { BYTE* Pointer = ExAllocatePool(PagedPool,InBufferSize); memcpy(Pointer,DecryptionKey,16); // klucz prywatny return DecryptData(InBuffer,InBufferSize,Pointer); }

51

Problemy z liczbami ca kowitymi


Integer overflow
Jedna z najcz ciej spotykanych klas b dw Polega na przepe nieniu warto ci zmiennej ca kowitoliczbowej Niezwykle istotne w przypadku obliczania rozmiaru bufora (alokacja dynamiczna) Przyczyna: potencjalnie dowolna operacja arytmetyczna

52

Problemy z liczbami ca kowitymi


Przyk ad:
UINT a = 0x20000000; UINT b = 0x38000000; BYTE* Buffer = ExAllocatePool(a+b*4); for( UINT i=0;i<a;i++ ) Buffer[i] = A;

53

Problemy z liczbami ca kowitymi


Funkcja ExAllocatePool zosta a wywo ana a z argumentem 0 (zero) Alokacja powiod a si zosta zarejestrowany najmniejszy mo liwy rozmiar alokacji 8 bajtw W p tli wype niaj cej bufor danymi nast puje przepe nienie

54

Problemy z liczbami ca kowitymi


Wariacje popularnych b dw
8/16-bit integer wrap alokacja przy u yciu dolnych bitw rozmiaru

55

Problemy z liczbami ca kowitymi


NTSTATUS IOCTLHandler() { const DWORD Size = 0x123456; BYTE* Pointer; Pointer = ExAllocatePool(PagedPool,(WORD)Size); if(Pointer == NULL) return STATUS_INSUFFICIENT_RESOURCES; memset(Pointer,0,Size); return STATUS_SUCCESS; }

56

Problemy z liczbami ca kowitymi


Wariacje popularnych b dw
8/16-bit integer wrap alokacja przy u yciu dolnych szesnastu bitw rozmiaru Off-by-one

57

Problemy z liczbami ca kowitymi


NTSTATUS IOCTLHandler() { static BYTE Buffer[256]; UINT i; for( int i=0;i<=sizeof(Buffer);i++ ) Buffer[i] = A; return STATUS_SUCCESS; }

58

Problemy z liczbami ca kowitymi


Wariacje popularnych b dw
8/16-bit integer wrap alokacja przy u yciu dolnych szesnastu bitw rozmiaru Off-by-one Wyj tki procesora dzia ania arytmetyczne
x Dzielenie przez zero x Dzielenie INT_MIN przez -1

Brak weryfikacji poprawno ci indeksu tablicy

59

Problemy z liczbami ca kowitymi


NTSTATUS IOCTLHandler( LPDWORD InBuffer ULONG InBufferSize) { DWORD Table[4096]; UINT i; /* walidacja bufora wej ciowego */ for( i=0;i<InBufferSize/sizeof(DWORD);i++ ) { Table[InBuffer[i]]++; } return STATUS_SUCCESS; }

60

Przepe nienia bufora


Oparte o pami stosu
W dzisiejszych czasach praktycznie niespotykane Powody
x Zabezpieczenia stosu (/GS) x U ywanie bezpiecznych funkcji obs ugi tekstu
x strcpy_s, wcscpy_s, _mbscpy_s

Chocia kiedy si zdarza y


x Microsoft Windows Kernel Message Handling Buffer Overflow Vulnerability x BID: 7370 (Windows 2000 Windows XP SP1)

61

Przepe nienie bufora

Oparte o pami

sterty

Bardzo cz sto spotykane Powody


x atwo wykorzystania brak ochrony sterty x Wewn trzna struktura podobna do sterty user-mode x Konsekwencja popularnego integer overflow

62

Przepe nienie bufora

Oparte o pami

sterty c.d.

Poprawne wykorzystanie 4-byte write-whatwhere condition Po nadpisaniu arbitrary code execution

63

Przepe nienie bufora

Oparte o pami

sterty c.d.

Dlaczego tak atwo?


x Ca kowity brak zabezpiecze w mechanizmie Kernel Pools w cznie z Windows Vista x Windows 7 po raz pierwszy wprowadzono weryfikacj o nazwie Safe Unlinking, zapobiegaj cej wi kszo ci atakw

64

65

Uwagi ko cowe
J dro Windows cel ataku
Mo liwo przej cie ca kowitej kontroli nad systemem Mnogo metod wymiany informacji potencjalnych furtek dla napastnika R norodno mo liwych atakw
x Poziom weryfikacji danych i wska nikw wej ciowych x Poziom w a ciwej synchronizacji x Poziom logiki konkretnych mechanizmw j dra

66

Uwagi ko cowe

Dziesi tki modu w otwartych na komunikacj z aplikacj u ytkownika


Ka dy z nich potencjalnym zagro eniem a zw aszcza STEROWNIKI FIRM TRZECICH

67

Uwagi ko cowe

Pojawienie si niespodziewanego wyj tku w trybie ring-0 za amanie pracy systemu


A wi c prosty atak typu DoS Szczeglne niebezpieczne w przypadku systemw serwerowych

68

Uwagi ko cowe
Konieczna ostro no przy ka dej operacji

Dzia anie arytmetyczne Odwo anie do pami ci u ytkownika Odwo anie do tablicy o niekontrolowanym indeksie

Sprawdzanie zwracanych warto ci


Alokacja pami ci ExAllocatePool

Brak jednego z powy szych wysoce prawdopodobne zagro enie dla systemu

69

Pytania

Dzi kuj za uwag !

Q&A
E-mail: j00ru.vx@gmail.com Tech blog: http://j00ru.vexillium.org/

You might also like