Professional Documents
Culture Documents
Plan prezentacji
Tryb j dra co to jest?
Punkt widzenia aplikacji u ytkownika Punkt widzenia napastnika
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
? ?
10
11
12
13
14
15
16
17
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
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
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
21
22
23
Wywo ania systemowe (ang. system calls) Przerwania systemowe (ang. interrupts) IOCTL (ang. Device Input and Output Control) Urz dzenia fizyczne hardware
24
25
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)
28
IRP / IOCTL
Udokumentowane metody komunikacji ze sterownikami
Wy cznie posiadaj cymi globaln nazw , np. \Global\MyDriver
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
31
32
Zasada nie zak ada nic o warto ciach, nad ktrymi nie mamy kontroli
33
wirtualna
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
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
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
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.
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Oparte o pami
sterty
62
Oparte o pami
sterty c.d.
63
Oparte o pami
sterty c.d.
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
67
Uwagi ko cowe
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
Brak jednego z powy szych wysoce prawdopodobne zagro enie dla systemu
69
Pytania
Q&A
E-mail: j00ru.vx@gmail.com Tech blog: http://j00ru.vexillium.org/