Анализ уязвимости 0day в системе Microsoft Windows: возможность полного контроля над системой
В прошлом месяце обновление безопасности Microsoft исправило уязвимость повышения привилегий в ядре Windows, которая использовалась хакерами. Эта уязвимость в основном существует в ранних версиях Windows и не может быть вызвана в Windows 11. В этой статье будет проанализировано, как злоумышленники могут продолжать использовать эту уязвимость на фоне постоянного совершенствования текущих механизмов безопасности. Наша аналитическая среда — Windows Server 2016.
Уязвимость 0day относится к еще не обнаруженной и не исправленной уязвимости программного обеспечения. Как только она будет обнаружена и использована хакерами, она может причинить серьезный вред. Обнаруженная уязвимость 0day в Windows позволяет злоумышленникам получить полный контроль над системой, что в свою очередь может привести к краже личной информации, внедрению вредоносного ПО, кражи криптовалюты и т.д. В более широком смысле эта уязвимость может даже повлиять на всю экосистему Web3, основанную на инфраструктуре Web2.
Анализ патча показывает, что проблема заключается в обработке подсчета ссылок на объект в модуле win32k. Ранние комментарии в исходном коде указывают на то, что предыдущий код блокировал только объект окна, не блокируя объект меню в окне, что могло привести к неправильной ссылке на объект меню.
Мы создали специальную структуру многоуровнего вложенного меню для активации уязвимости. Ключевым моментом является удаление ссылки на определенное подменю и освобождение его, когда функция xxxEnableMenuItem возвращает уровень пользователя. Таким образом, когда функция снова войдет в ядро, ранее ссылающийся объект меню уже станет недействительным.
При реализации эксплуатации уязвимости мы в основном рассматривали два варианта: выполнение shellcode и использование примитивов чтения и записи для изменения токена. Учитывая механизмы безопасности высоких версий Windows, мы выбрали второй вариант. Весь процесс эксплуатации делится на два этапа: сначала контролируем значение cbwndextra, затем устанавливаем стабильные примитивы чтения и записи.
Чтобы записать первые данные, мы использовали одну точку записи в функции xxxRedrawWindow. Путем тщательной компоновки памяти мы можем контролировать данные памяти соседних объектов, что позволяет проверить их через флаги в функции.
В плане размещения памяти мы спроектировали три последовательных объекта HWND, освободив один из них и заняв его объектом HWNDClass. Передние и задние объекты HWND используются для проверки и реализации операций чтения и записи. Мы также используем адреса утечек дескрипторов ядра в области кучи для точного определения, соответствует ли расположение объектов ожидания.
В конце концов, мы используем GetMenuBarInfo() для реализации произвольного чтения, SetClassLongPtr() для реализации произвольной записи. Кроме изменения операций TOKEN, все другие записи выполняются с использованием объекта класса первого окна.
В общем, хотя уязвимости модуля win32k существуют уже давно, Microsoft пытается переписать соответствующий код на Rust, и в будущем такого рода уязвимости могут быть устранены в новой системе. Текущий процесс эксплуатации не является особенно сложным, он в основном зависит от утечки адреса дескриптора кучи рабочего стола. Улучшение обнаружения покрытия кода и целенаправленное обнаружение аномальных операций с памятью могут быть эффективными способами выявления подобных уязвимостей.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Анализ уязвимости 0day в ядре Windows: может повлиять на безопасность экосистемы Web3
Анализ уязвимости 0day в системе Microsoft Windows: возможность полного контроля над системой
В прошлом месяце обновление безопасности Microsoft исправило уязвимость повышения привилегий в ядре Windows, которая использовалась хакерами. Эта уязвимость в основном существует в ранних версиях Windows и не может быть вызвана в Windows 11. В этой статье будет проанализировано, как злоумышленники могут продолжать использовать эту уязвимость на фоне постоянного совершенствования текущих механизмов безопасности. Наша аналитическая среда — Windows Server 2016.
Уязвимость 0day относится к еще не обнаруженной и не исправленной уязвимости программного обеспечения. Как только она будет обнаружена и использована хакерами, она может причинить серьезный вред. Обнаруженная уязвимость 0day в Windows позволяет злоумышленникам получить полный контроль над системой, что в свою очередь может привести к краже личной информации, внедрению вредоносного ПО, кражи криптовалюты и т.д. В более широком смысле эта уязвимость может даже повлиять на всю экосистему Web3, основанную на инфраструктуре Web2.
Анализ патча показывает, что проблема заключается в обработке подсчета ссылок на объект в модуле win32k. Ранние комментарии в исходном коде указывают на то, что предыдущий код блокировал только объект окна, не блокируя объект меню в окне, что могло привести к неправильной ссылке на объект меню.
Мы создали специальную структуру многоуровнего вложенного меню для активации уязвимости. Ключевым моментом является удаление ссылки на определенное подменю и освобождение его, когда функция xxxEnableMenuItem возвращает уровень пользователя. Таким образом, когда функция снова войдет в ядро, ранее ссылающийся объект меню уже станет недействительным.
При реализации эксплуатации уязвимости мы в основном рассматривали два варианта: выполнение shellcode и использование примитивов чтения и записи для изменения токена. Учитывая механизмы безопасности высоких версий Windows, мы выбрали второй вариант. Весь процесс эксплуатации делится на два этапа: сначала контролируем значение cbwndextra, затем устанавливаем стабильные примитивы чтения и записи.
Чтобы записать первые данные, мы использовали одну точку записи в функции xxxRedrawWindow. Путем тщательной компоновки памяти мы можем контролировать данные памяти соседних объектов, что позволяет проверить их через флаги в функции.
В плане размещения памяти мы спроектировали три последовательных объекта HWND, освободив один из них и заняв его объектом HWNDClass. Передние и задние объекты HWND используются для проверки и реализации операций чтения и записи. Мы также используем адреса утечек дескрипторов ядра в области кучи для точного определения, соответствует ли расположение объектов ожидания.
В конце концов, мы используем GetMenuBarInfo() для реализации произвольного чтения, SetClassLongPtr() для реализации произвольной записи. Кроме изменения операций TOKEN, все другие записи выполняются с использованием объекта класса первого окна.
В общем, хотя уязвимости модуля win32k существуют уже давно, Microsoft пытается переписать соответствующий код на Rust, и в будущем такого рода уязвимости могут быть устранены в новой системе. Текущий процесс эксплуатации не является особенно сложным, он в основном зависит от утечки адреса дескриптора кучи рабочего стола. Улучшение обнаружения покрытия кода и целенаправленное обнаружение аномальных операций с памятью могут быть эффективными способами выявления подобных уязвимостей.