Последен ъпдейт на 4 май 2020 в 11:57 ч.
Преди една година, Гил Даба обещава, че ще открие над 15 бъга, свързани с компонента на Windows win32k. Миналата седмица обаче той публикува цели 25.
Guys & girls!
Exactly a year ago I promised over 15 bugs in win32k.
You're welcome to read and find out about my biggest research so far: #win32k #SmashTheRef bug class – https://t.co/niPACKBBLd
Check out the paper and the POCs, there are some crazy stuff going on. Promise!— Gil Dabah (@_arkon) April 1, 2020
Механизъм на действие
Бъговете се възползват от дългогодишен проблем с win32k, свързан с компонента за потребителски интерфейс в Windows. Обикновено този софтуер работи в User Mode (потребителски акаунт), използван от стандартни приложения за Windows. Тъй като е част от система с по-малко привилегии, в User Mode не може да се получи директен достъп до хардуера. Вместо това софтуерът изпраща заявка към ядрото (kernel) – част от операционната система, грижеща се за функциите на по-ниско ниво.
С течение на времето Microsoft изместват функциите на win32k към ядрото, но тъй като хиляди различни потребителски програми разчитат на него, много често се налага то да премине в User Mode, за да извърши дейността си. Този своеобразен мост между ядрото и User Mode обаче е потенциално опасен.
В случай че приложение, работещо в User Mode, намери начин да компрометира Kernel Mode (), то ще получи достъп до най-ниските и привилегировани нива на операционната система.
UAF грешка
Често срещана грешка, която допускат разработчиците в миналото е, че забравят да заключат обект в паметта, намиращ се в Kernel Mode, преди той да използва win32k, което би го върнало обратно в User Mode. Ако това се случи, атакуващият ще може да изтрие обекта, използвайки стандартния акаунт, т.е User Mode. Тогава програмата би се опитала да върне контрола над обекта и да му предостави административни права, което ще бъде неуспешно, тъй като той вече ще бъде изчезнал. Това създава така наречената use-after-free (UAF) грешка, при която атакуващият може да използва освободеното място в паметта.
„Зомби“ бъг
Microsoft коригират множество бъгове, свързани със съответния клас – win32k, за да предотврати евентуалното му експлоатиране експлойт. Даба открива нов бъг, подобен на тях: възможно е човек да осъществи връзка между обект от ядрото (например прозорец в Windows) и друг обект, който създава (друг прозорец). Впоследствие, лицето, работещо в User Mode, изпраща заявка към Windows да унищожи създателя на обекта, работещ в Kernel Mode, но не може да го направи, докато действията, извършвани в Kernel Mode не бъдат приключени. Така Windows маркира създателя за изтриване, след като бъде готов с всички задачи. Това всъщност превръща обекта в нещо, което програмистите наричат „зомби“ обект.
Даба открива множество бъгове от този клас, които обяснява в своя доклад. В него той показва как е обработил 13 от тях, добавяйки и PoC в GitHub хранилището си. Той споменава, че Microsoft работят върху бъговете от този клас в Windows Insider Preview версията, коригирайки ги един по един.
Признание
Заради своите заслуги, Даба получава заслужена похвала – Microsoft добавя името му в своята секция за признание през февруари 2020. В тази своеобразна зала на славата, място намират имената на хора, открили бъгове и спомогнали за тяхното разрешаване.