2011-01-11:

Windows, drivery, GS cookies i 1 bit entropi

windows:hacking:medium:gs cookies
W listopadzie na Code Project pewien chiński hacker opublikował "exploit omijający UAC", który, jak się okazało, z UAC nie miał dużo wspólnego - był to 0day na win32k.sys (czyli część kernela Windows odpowiedzialna za grafikę/okienka/etc). O sprawie napisano na Niebezpieczniku, zaznaczając, że błąd jest exploitowalny pod Windows 7, Vista oraz Windows XP. Umieszczenie w newsie XPka spowodowało wywiązanie się w komentarzach dyskusji (chociaż waham się przy użyciu tego słowa) w której kilku czytelników zwróciło uwagę, że błąd nie jest exploitowalny pod XP, a więc autor newsa wprowadza czytelników w błąd. Problemem pod XP okazały się, nieobecne na Vista i 7, stack cookies (a konkretniej /GS cookies), które powinny skutecznie uniemożliwić exploitacje. Postanowiliśmy z j00ru wgłębić się w temat, czego efektem jest prawie 40-stronnicowy artykuł zlinkowany poniżej.

Zanim przejdę do linków/abstractu - dygresja: wspomniany błąd jest exploitowalny na XP:



Zresztą, błąd wydaje się być również exploitowalny również na Windows 2000 (brak ciasteczek), o którym już chyba zapomnieli. Natomiast nie testowaliśmy Windowsa 2003, ale hmm, nie ma podstaw, żeby sądzić, że jest inaczej niż na XP.

Research Paper:
Exploiting the otherwise non-exploitable - Windows Kernel-mode GS Cookies subverted
by Matthew "j00ru" Jurczyk & Gynvael Coldwind (EN)

Abstract:
Abstract: This paper describes various techniques that can be used to reduce the effective entropy of GS cookies implemented in a certain group of Windows kernel-mode executable images by roughly 99%, or otherwise defeat it completely. This reduction is made possible due to the fact that GS uses a number of extremely weak entropy sources, which can be predicted by the attacker with varying (most often - very high) degree of accuracy. In addition to presenting theoretical considerations related to the problem, the paper also contains a great amount of experimental results, showing the actual success / failure rate of different cookie prediction techniques, as well as pieces of hardware-related information. Furthermore, some of the possible problem solutions are presented, together with a brief description of potential attack vectors against these enhancements. Finally, the authors show how the described material can be practically used to improve kernel exploits’ reliability - taking the CVE-2010-4398 kernel vulnerability as an interesting example.

W skrócie:
Początkowa entropia cieasteczek (w zależności od wersji Windowsa) to 16, 32 lub 48 bitów.
W najgorszym wypadku udało nam się zredukować entropię ciasteczek w driverach do około 6 bitów.
W najlepszym wypadku udało nam się zredukować entropię do około 1 bitu z prawdopodobieństwem trafienia oscylującym w granicy 50%.

Research dotyczył tylko i wyłącznie ciasteczek w driverach (tj. plikach .sys) - w głównym pliku kernla (tj. ntoskrln.exe/etc) ciasteczka są generowane inaczej i nimi się nie zajmowaliśmy.
Skupiliśmy się na atakach z perspektywy lokalnej maszyny (no remote, sorry). Założyliśmy również, że atakujący ma możliwość uzyskania podobnego środowiska do przeprowadzenia pewnych pomiarów (nie zawsze jednak koniecznych).

Timeline:
6 grudnia 2010 - Microsoft został poinformowany o wstepnych wynikach naszych badań, potwierdził odbiór.
8 grudnia 2010 - Microsoft odpowiedział, że jest świadom problemu i rozważa poprawę mechanizmu generowania ciastek w przyszłości. Nie zostaliśmy poproszeni o opóźnienie publikacji.
4 stycznia 2011 - Microsoft otrzymał pełne wyniki badań. Wymieniliśmy kilka e-maili. Nie otrzymaliśmy zastrzeżeń co do publikacji.
11 stycznia 2011 - Publikacja.

Thanks:
Chcielibyśmy podziękować następującym osobom za recenzje i cenne uwagi: Unavowed, Tavis Ormandy, Marc-Antoine Ruel, Carlos Pizano, Matt Miller and deus.

Zachęcam do komentarzy (oczywiście po przeczytaniu papierka od deski do deski ;>).

Comments:

2011-01-11 20:31:50 = pi3
{
gw! :)
}
2011-01-11 20:37:48 = Gynvael Coldwind
{
@pi3
thx! :)
}
2011-01-11 21:35:49 = Jurgi
{
Jestem za cienki bolek, żeby coś mądrego dorzucić, mogę więc tylko zaśmiać się nad jednobitową entropią i zaklaskać. :)
}
2011-01-11 23:09:20 = qyon
{
s/wacham/waham
}
2011-01-11 23:25:19 = Salvation
{
gw ;>
}
2011-01-12 01:13:23 = MDobak
{
GW! No ok ok... teraz dość tych pochwał (mój instruktor od latania zawsze powtarzał, że jak się za często kogoś chwali, ten zaczyna czuć niczym nieuzasadnioną moc i popełnia błędy). Teraz opierdol: czemu w wykresach stosujecie taką ogromną skalę, skoro wartości nawet 10% maksa nie sięgają! :] Dobra... podziwiam za wykonaną pracę.
}
2011-01-12 10:34:39 = jurek ogórek
{
dobry research.
byloby fajnie, gdybyscie znalezli sposob na liczenie ciasteczka korzystajac np. z javascriptu w przegladarce :)
}
2011-01-13 17:34:28 = Kele
{
Świetna robota panowie ;>
}
2011-01-17 01:55:06 = Rand
{
przepraszam ze nie na temat
ale czemu na re.coldwind.pl jest info o konsultacjach mimo ze juz dawno są nieaktualne ?
Czy może zostały wznowione ?
}
2011-01-21 08:59:53 = Gynvael Coldwind
{
@Jurgi
;)

@qyon
Thx, fixed.

@Salvation
Thx ;>

@MDobak
Heeh thx ;>
Ad wykresy, uznaliśmy, że przy takiej skali bardziej dobitnie widać jaki jest problem (chociaż przyznaje, że są przez to mniej czytelne).

@jurek ogórek
Thx ;>
Ad cookie via javascript - raczej bym na to nie liczył ;>

@Kele
Thx ;>

@Rand
Faktycznie, usunąłem są notkę z re.coldwind.pl ;>

}

Add a comment:

Nick:
URL (optional):
Math captcha: 10 ∗ 8 + 9 =