Анализ уязвимости 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, и в будущем такого рода уязвимости могут быть устранены в новой системе. Текущий процесс эксплуатации не является особенно сложным, он в основном зависит от утечки адреса дескриптора кучи рабочего стола. Улучшение обнаружения покрытия кода и целенаправленное обнаружение аномальных операций с памятью могут быть эффективными способами выявления подобных уязвимостей.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
22 Лайков
Награда
22
8
Поделиться
комментарий
0/400
LiquidationSurvivor
· 07-14 04:58
Майнинг, нормально?
Посмотреть ОригиналОтветить0
MerkleDreamer
· 07-14 04:27
Сковороду с овощами нужно будет отдать системе?
Посмотреть ОригиналОтветить0
BearMarketBro
· 07-13 09:19
У Windows снова появился баг. Кто будет использовать это дерьмо?
Анализ уязвимости 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, и в будущем такого рода уязвимости могут быть устранены в новой системе. Текущий процесс эксплуатации не является особенно сложным, он в основном зависит от утечки адреса дескриптора кучи рабочего стола. Улучшение обнаружения покрытия кода и целенаправленное обнаружение аномальных операций с памятью могут быть эффективными способами выявления подобных уязвимостей.