Анализ и использование уязвимости 0day в системе Windows от Microsoft
Недавно в безопасности обновления, выпущенного Microsoft, был исправлен уязвимость повышения привилегий win32k, которая активно эксплуатируется. Эта уязвимость в основном затрагивает ранние версии операционной системы Windows, и, похоже, не может быть вызвана в Windows 11. В этой статье будет проанализировано, как в текущей безопасной среде злоумышленники могут продолжать использовать такие уязвимости. Следующий анализ выполнен в среде Windows Server 2016.
Фон уязвимости
0day уязвимость относится к нераскрытой и неустраненной безопасности уязвимости, аналогичной концепции T+0 в финансовых рынках. Если такие уязвимости будут злоупотреблены, они могут нанести серьезный ущерб. Обнаруженная уязвимость 0day в системе Windows позволяет злоумышленникам получить полный контроль над системой, что может привести к кражам информации, разрушению систем, внедрению вредоносного ПО и другим атакам. С точки зрения Web3 это может привести к краже приватных ключей, перемещению цифровых активов и даже угрожать всей экосистеме Web3, основанной на инфраструктуре Web2.
Анализ патча
Анализ кода патча показал, что он в основном исправляет проблему с обработкой счётчика ссылок на объекты. Исходя из комментариев к исходному коду win32k, можно понять, что оригинальный код блокировал только объект окна, но не блокировал объект меню в окне, что могло привести к неправильному обращению к объекту меню.
Проверка концепции эксплуатации уязвимостей ( PoC )
Анализ показывает, что состояние MenuItemState в функции xxxEnableMenuItem может возвращать главное меню окна или подменю. Мы создали специальную четырехуровневую структуру меню, содержащую следующие характеристики:
Идентификатор самого нижнего уровня меню D должен быть типом системного меню.
Верхнее меню A также должно быть системным меню, но необходимо удалить элементы с тем же ID, что и у меню D.
Удалите ссылку на меню C в меню B.
Наличие меню B, похоже, способствует выпуску меню C.
При активации уязвимости, при возврате на пользовательский уровень из xxxRedrawTitle, необходимо удалить связь между меню C и B, освободив меню C. Это приводит к тому, что последующая ссылка на недействительный объект меню C в функции xxxEnableMenuItem.
Использование уязвимости ( Exp )
Общая идея
Рассмотрите два возможных направления использования:
Выполнение shell-кода: см. ранние уязвимости, такие как CVE-2017-0263, но в новых версиях Windows могут возникнуть множество препятствий.
Использование примитивов чтения и записи для изменения токена: в последние годы все еще существует открытый exp, который можно использовать в качестве примера, в основном необходимо решить вопрос, как впервые контролировать значение cbwndextra.
Мы используем второй вариант, разделив exp на два этапа: управление значением cbwndextra и создание стабильных примитивов чтения и записи.
 Первоначальная запись данных
Используйте имя объекта класса окна WNDClass для захвата и освобождения памяти объекта меню. Найдите место для записи данных в функции xxxRedrawWindow и управляйте данными памяти предыдущего объекта, чтобы удовлетворить проверку флага в функции.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(
) стабильная память
Разработать макет памяти для трех последовательных объектов HWND по 0x250 байт, освободить промежуточный объект и занять его объектом HWNDClass. Передние и задние объекты HWND используются для проверки через функции и реализации операций чтения и записи. Точная локализация расположения объектов осуществляется через утечку адреса ядровой дескриптора.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(
) Реализация примитивов чтения и записи
Для произвольного чтения используется функция GetMenuBarInfo, для произвольной записи используется функция SetClassLongPtr. За исключением записи TOKEN, все другие операции записи выполняются через объект класса первого окна.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(
Заключение
Microsoft использует Rust для переписывания кода win32k, что в будущем может полностью решить такие уязвимости.
Эксплуатация таких уязвимостей в основном зависит от утечки адресов дескрипторов стека, что по-прежнему представляет собой угрозу безопасности для устаревших систем.
Обнаружение этой уязвимости, возможно, стало результатом более тщательной проверки покрытия кода.
Мониторинг аномального распределения памяти и чтения/записи данных окна помогает выявить аналогичные уязвимости.
Посмотреть Оригинал
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.
11 Лайков
Награда
11
6
Поделиться
комментарий
0/400
TestnetNomad
· 9ч назад
Что ты говоришь о Rust?
Посмотреть ОригиналОтветить0
StealthDeployer
· 9ч назад
Давно перешел на Linux, мудро.
Посмотреть ОригиналОтветить0
CryptoMotivator
· 9ч назад
Опять что-то натворили, этот баг у Microsoft действительно традиционный.
Анализ 0day-уязвимости Windows: от повышения прав в win32k до рисков безопасности Web3
Анализ и использование уязвимости 0day в системе Windows от Microsoft
Недавно в безопасности обновления, выпущенного Microsoft, был исправлен уязвимость повышения привилегий win32k, которая активно эксплуатируется. Эта уязвимость в основном затрагивает ранние версии операционной системы Windows, и, похоже, не может быть вызвана в Windows 11. В этой статье будет проанализировано, как в текущей безопасной среде злоумышленники могут продолжать использовать такие уязвимости. Следующий анализ выполнен в среде Windows Server 2016.
Фон уязвимости
0day уязвимость относится к нераскрытой и неустраненной безопасности уязвимости, аналогичной концепции T+0 в финансовых рынках. Если такие уязвимости будут злоупотреблены, они могут нанести серьезный ущерб. Обнаруженная уязвимость 0day в системе Windows позволяет злоумышленникам получить полный контроль над системой, что может привести к кражам информации, разрушению систем, внедрению вредоносного ПО и другим атакам. С точки зрения Web3 это может привести к краже приватных ключей, перемещению цифровых активов и даже угрожать всей экосистеме Web3, основанной на инфраструктуре Web2.
Анализ патча
Анализ кода патча показал, что он в основном исправляет проблему с обработкой счётчика ссылок на объекты. Исходя из комментариев к исходному коду win32k, можно понять, что оригинальный код блокировал только объект окна, но не блокировал объект меню в окне, что могло привести к неправильному обращению к объекту меню.
Проверка концепции эксплуатации уязвимостей ( PoC )
Анализ показывает, что состояние MenuItemState в функции xxxEnableMenuItem может возвращать главное меню окна или подменю. Мы создали специальную четырехуровневую структуру меню, содержащую следующие характеристики:
При активации уязвимости, при возврате на пользовательский уровень из xxxRedrawTitle, необходимо удалить связь между меню C и B, освободив меню C. Это приводит к тому, что последующая ссылка на недействительный объект меню C в функции xxxEnableMenuItem.
Использование уязвимости ( Exp )
Общая идея
Рассмотрите два возможных направления использования:
Выполнение shell-кода: см. ранние уязвимости, такие как CVE-2017-0263, но в новых версиях Windows могут возникнуть множество препятствий.
Использование примитивов чтения и записи для изменения токена: в последние годы все еще существует открытый exp, который можно использовать в качестве примера, в основном необходимо решить вопрос, как впервые контролировать значение cbwndextra.
Мы используем второй вариант, разделив exp на два этапа: управление значением cbwndextra и создание стабильных примитивов чтения и записи.
 Первоначальная запись данных
Используйте имя объекта класса окна WNDClass для захвата и освобождения памяти объекта меню. Найдите место для записи данных в функции xxxRedrawWindow и управляйте данными памяти предыдущего объекта, чтобы удовлетворить проверку флага в функции.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(
) стабильная память
Разработать макет памяти для трех последовательных объектов HWND по 0x250 байт, освободить промежуточный объект и занять его объектом HWNDClass. Передние и задние объекты HWND используются для проверки через функции и реализации операций чтения и записи. Точная локализация расположения объектов осуществляется через утечку адреса ядровой дескриптора.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(
) Реализация примитивов чтения и записи
Для произвольного чтения используется функция GetMenuBarInfo, для произвольной записи используется функция SetClassLongPtr. За исключением записи TOKEN, все другие операции записи выполняются через объект класса первого окна.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(
Заключение
Microsoft использует Rust для переписывания кода win32k, что в будущем может полностью решить такие уязвимости.
Эксплуатация таких уязвимостей в основном зависит от утечки адресов дескрипторов стека, что по-прежнему представляет собой угрозу безопасности для устаревших систем.
Обнаружение этой уязвимости, возможно, стало результатом более тщательной проверки покрытия кода.
Мониторинг аномального распределения памяти и чтения/записи данных окна помогает выявить аналогичные уязвимости.
Комментарий к статье:
rust сможет спасти win? Это смешно.