вторник, 7 апреля 2020 г.

Ошибка Windows32 в Windows Zombie - реанимированная исследователем.



Ошибка Windows32 в Windows Zombie - реанимированная исследователем.

В  редких  случаях  исследователь  раскрыл десятки связанных ошибок в основном API Windows, которые могли позволить злоумышленникам повысить свои привилегии в операционной системе.




Год назад Гил Дабах пообещал, что найдет более 15 ошибок, связанных с компонентом Windows win32k:



 На этой неделе он выпустил отчет с подробным описанием 25-ти из них:





Ошибки используют давно понятную проблему с win32k, который является компонентом ядра пользовательского интерфейса в Windows. Это программное обеспечение изначально работало в пользовательском режиме, в котором работают обычные приложения Windows. Пользовательский режим - это менее привилегированная часть системы, которая не может напрямую обращаться к системному оборудованию. Вместо, он должен отправить этот запрос ядру, которое является частью базовой ОС и выполняет функции операционной системы низкого уровня.

В конечном итоге Microsoft переместила win32k в ядро, но, поскольку на него полагаются тысячи программ, ей часто приходится возвращаться в пользовательский режим, чтобы выполнять свою работу. Этот мост между ядром и пользовательским режимом потенциально опасен, если что-то, работающее в пользовательском режиме, находит способ скомпрометировать компонент режима ядра. Они могут получить низкоуровневый доступ к системе.
В прошлом распространенная ошибка среди разработчиков заключалась в том, чтобы забыть заблокировать ядро. Объект режима в памяти, прежде чем он использовал win32k для обратного вызова в пользовательский режим. Затем злоумышленник может уничтожить вызывающий объект из пользовательского режима. Когда программа возвращает управление объекту ядра, его больше нет. Это создало ошибку «использование после освобождения» (UAF), когда злоумышленник мог использовать пустое место в памяти.



Microsoft исправила много ошибок в этом классе, но Dabah обнаружил новый  связанный класс ошибок. Злоумышленник может связать объект ядра (например, окно) с дочерним объектом, который он создает (скажем, с дочерним окном). Злоумышленник, работая в пользовательском режиме, просит Windows уничтожить родительское окно, работающее в режиме ядра.Windows не может этого сделать, пока родительское окно не завершит все, что делало в режиме ядра, поэтому вместо этого оно помечает родительское для уничтожения, когда оно готово. Это превращает его в то, что программисты Windows иногда называют объектом-зомби.
Эта ошибка использует концепцию, называемую перезагрузка зомби, чтобы внести изменения в объект зомби, прежде чем Windows удалит его. Это вызывает ошибку UAF в дочернем окне, которое оно создало.
Дабах обнаружил многочисленные ошибки в этом классе, пояснил он в отчете, добавив, что он использовал 11 из них с проверкой кода концепции (сейчас их до 13 на сайте GitHub). Он сказал добрые слова в адрес Microsoft, которая уже начала исправлять некоторые ошибки:



Гил Дабах добавил, что компания работает над широкими мерами по устранению всех ошибок в этом классе, которые в настоящее время находятся в WindowsInsiderPreview.  Microsoft также занималась исправлением этих ошибок на разовой основе, и вы можете увидеть, как она признает Dabah и ссылается на несколько CVE в своем разделе исправлений  за февраль 2020 года. Давайте не будем недооценивать то, что связано с исправлением десятилетнего кода, на который опираются тысячи программ. Этот вид технического долга огромен. Кто хотел бы стать разработчиком Microsoft, занимающимся этим изменением кода?




1 комментарий:

  1. Хм.... кто то еще старые операционки юзает! Конкретные олдфаги! :)

    ОтветитьУдалить