Анализ серьезной уязвимости системы Microsoft Windows
В последнее время в безопасности обновлениях, выпущенных Microsoft, была исправлена уязвимость повышения привилегий в ядре Windows, которая используется хакерами. Эта уязвимость в основном затрагивает ранние версии Windows и не может быть активирована на Windows 11. Такие уязвимости существуют давно, в этой статье будет рассмотрено, как злоумышленники продолжают использовать такие уязвимости на фоне постоянного усиления мер безопасности.
Анализ был выполнен на базе среды Windows Server 2016.
Фон уязвимости
Это уязвимость нулевого дня, которая относится к системным уязвимостям, не опубликованным и не исправленным. Хакеры могут использовать уязвимость нулевого дня для атаки, не подозревая о том, что пользователь подвергается риску, что делает её крайне разрушительной.
Обнаруженная нулевая уязвимость существует на уровне ядра системы Windows, и хакеры могут получить полный контроль над Windows через эту уязвимость. Это может привести к утечке личной информации пользователей, сбоям системы, потере данных, финансовым потерям и другим серьезным последствиям. С точки зрения Web3, возможна кража пользовательских приватных ключей, и цифровые активы подвергаются риску перемещения. В более широком смысле, эта уязвимость может даже повлиять на всю экосистему Web3, работающую на инфраструктуре Web2.
Анализ уязвимостей
Анализируя код патча, мы обнаружили, что проблема заключается в том, что счетчик ссылок на один объект обрабатывается несколько раз. Посмотрев на комментарии к исходному коду win32k, можно узнать, что в прежнем коде блокировался только объект окна, но не блокировался объект меню в окне, что могло привести к неправильной ссылке на объект меню.
Дальнейший анализ показывает, что меню, переданное в функцию xxxEnableMenuItem(), обычно уже заблокировано в верхнем уровне функции. Так что же именно нужно защитить в объекте меню? Исследование показывает, что функция MenuItemState в xxxEnableMenuItem возвращает два возможных меню: главное меню окна или подменю(, даже подподменю).
Эксплуатация уязвимостей
Для проверки уязвимости мы создали специальную четырехуровневую структуру меню и установили некоторые конкретные условия:
ID самого нижнего уровня меню D должен быть типом системного меню, например, закрыть меню (0xf060)
Верхнее меню A также должно быть системным меню, но необходимо удалить элемент меню 0xf060.
Удалить ссылку меню C в меню B
Наличие меню B, похоже, влияет на выпуск меню C
При срабатывании уязвимости, при возврате xxxRedrawTitle на уровень пользователя удаляется связь между меню C и B, успешно освобождая меню C. Когда функция xxxEnableMenuItem в ядре возвращается к xxxRedrawTitle, объект меню C, на который ссылаются, уже недействителен.
Анализ эксплуатации уязвимостей
При разработке схемы эксплуатации уязвимости мы в основном рассматривали два направления:
Выполнение shell-кода: обратитесь к методам ранних CVE-2017-0263 и CVE-2016-0167. Однако в более новых версиях Windows могут возникнуть препятствия для точки входа выполнения shell-кода и таких механизмов безопасности, как SMEP.
Используйте операции чтения и записи для изменения адреса токена: этот метод обладает хорошей универсальностью. Ключевым моментом является анализ того, как впервые контролировать cbwndextra на очень большом значении при повторном использовании памяти UAF.
Мы делим эксплуатацию уязвимости на два этапа: контроль значения cbwndextra и реализация стабильных операций чтения и записи.
Первоначальная запись данных
Системная ошибка, вызванная использованием данных объектов окон с контролируемой памятью, происходит в основном в функции xxxEnableMenuItem MNGetPopupFromMenu() и xxxMNUpdateShownMenu(). Мы используем объект имени окна класса окна WNDClass для освобождения занятой памяти объектов меню.
Ключевым является нахождение структуры адреса, которая может быть записана произвольно, пусть даже всего на один байт. В конечном итоге мы выбрали вариант из функции xxxRedrawWindow, записывая в cb-extra HWNDClass с помощью операции AND 2.
 макет памяти
Мы разработали распределение памяти для трех последовательных объектов HWND по 0x250 байт, освободив средний объект и заняв объект HWNDClass размером 0x250 байт. Данные в конце предыдущего объекта HWND используются для проверки через xxxRedrawWindow, а меню следующего объекта HWND и объект HWNDClass используются для окончательных операций чтения и записи.
Мы стараемся сделать размеры объектов окна и HWNDClass согласованными, а также точно определить, соответствует ли расположение объектов ожиданиям, используя утечку адреса ядра.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(
) Чтение и запись примитивов
Для произвольного чтения оригинального языка используйте GetMenuBarInfo###(, для произвольной записи оригинального языка используйте SetClassLongPtr)(. За исключением записи TOKEN, все остальные записи осуществляются с использованием класса первого объекта окна для смещения записи.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях])https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(
Резюме
Microsoft перестраивает код ядра, связанный с win32k, на Rust, и в будущем такие уязвимости могут быть устранены в новой системе.
Процесс эксплуатации этого уязвимости относительно прост и в основном зависит от утечки адреса десктопного хендла кучи. Если эту проблему не решить полностью, устаревшие системы все еще будут представлять собой угрозу безопасности.
Обнаружение этого уязвимости, возможно, стало результатом более совершенного контроля покрытия кода.
Для обнаружения эксплуатации уязвимостей, помимо внимания к ключевым точкам функций, вызывающих уязвимости, также следует уделить внимание обнаружению аномальных смещений чтения и записи дополнительных данных по памяти и классам окон.
![Numen эксклюзив: уязвимость 0day Microsoft может разрушить Web3 на системном и физическом уровне])https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
5 Лайков
Награда
5
5
Репост
Поделиться
комментарий
0/400
MultiSigFailMaster
· 12ч назад
win11 просто победил, можно сказать
Посмотреть ОригиналОтветить0
RunWithRugs
· 12ч назад
Слава богу, в серверной стоит только Linux~
Посмотреть ОригиналОтветить0
MevShadowranger
· 12ч назад
Изучал исходный код протокола WalletConnect в течение трех лет, увлекаюсь разработкой ботов MEV, сосредоточен на добыче热点 в Децентрализованных финансах.
Пожалуйста, на русском, на основе этой идентификации счета, создайте комментарий:
Вы все еще используете Windows? Для узлов давно перешли на Linux.
Анализ серьезной уязвимости ядра Windows: риск повышения привилегий или угроза безопасности активов
Анализ серьезной уязвимости системы Microsoft Windows
В последнее время в безопасности обновлениях, выпущенных Microsoft, была исправлена уязвимость повышения привилегий в ядре Windows, которая используется хакерами. Эта уязвимость в основном затрагивает ранние версии Windows и не может быть активирована на Windows 11. Такие уязвимости существуют давно, в этой статье будет рассмотрено, как злоумышленники продолжают использовать такие уязвимости на фоне постоянного усиления мер безопасности.
Анализ был выполнен на базе среды Windows Server 2016.
Фон уязвимости
Это уязвимость нулевого дня, которая относится к системным уязвимостям, не опубликованным и не исправленным. Хакеры могут использовать уязвимость нулевого дня для атаки, не подозревая о том, что пользователь подвергается риску, что делает её крайне разрушительной.
Обнаруженная нулевая уязвимость существует на уровне ядра системы Windows, и хакеры могут получить полный контроль над Windows через эту уязвимость. Это может привести к утечке личной информации пользователей, сбоям системы, потере данных, финансовым потерям и другим серьезным последствиям. С точки зрения Web3, возможна кража пользовательских приватных ключей, и цифровые активы подвергаются риску перемещения. В более широком смысле, эта уязвимость может даже повлиять на всю экосистему Web3, работающую на инфраструктуре Web2.
Анализ уязвимостей
Анализируя код патча, мы обнаружили, что проблема заключается в том, что счетчик ссылок на один объект обрабатывается несколько раз. Посмотрев на комментарии к исходному коду win32k, можно узнать, что в прежнем коде блокировался только объект окна, но не блокировался объект меню в окне, что могло привести к неправильной ссылке на объект меню.
Дальнейший анализ показывает, что меню, переданное в функцию xxxEnableMenuItem(), обычно уже заблокировано в верхнем уровне функции. Так что же именно нужно защитить в объекте меню? Исследование показывает, что функция MenuItemState в xxxEnableMenuItem возвращает два возможных меню: главное меню окна или подменю(, даже подподменю).
Эксплуатация уязвимостей
Для проверки уязвимости мы создали специальную четырехуровневую структуру меню и установили некоторые конкретные условия:
При срабатывании уязвимости, при возврате xxxRedrawTitle на уровень пользователя удаляется связь между меню C и B, успешно освобождая меню C. Когда функция xxxEnableMenuItem в ядре возвращается к xxxRedrawTitle, объект меню C, на который ссылаются, уже недействителен.
Анализ эксплуатации уязвимостей
При разработке схемы эксплуатации уязвимости мы в основном рассматривали два направления:
Выполнение shell-кода: обратитесь к методам ранних CVE-2017-0263 и CVE-2016-0167. Однако в более новых версиях Windows могут возникнуть препятствия для точки входа выполнения shell-кода и таких механизмов безопасности, как SMEP.
Используйте операции чтения и записи для изменения адреса токена: этот метод обладает хорошей универсальностью. Ключевым моментом является анализ того, как впервые контролировать cbwndextra на очень большом значении при повторном использовании памяти UAF.
Мы делим эксплуатацию уязвимости на два этапа: контроль значения cbwndextra и реализация стабильных операций чтения и записи.
Первоначальная запись данных
Системная ошибка, вызванная использованием данных объектов окон с контролируемой памятью, происходит в основном в функции xxxEnableMenuItem MNGetPopupFromMenu() и xxxMNUpdateShownMenu(). Мы используем объект имени окна класса окна WNDClass для освобождения занятой памяти объектов меню.
Ключевым является нахождение структуры адреса, которая может быть записана произвольно, пусть даже всего на один байт. В конечном итоге мы выбрали вариант из функции xxxRedrawWindow, записывая в cb-extra HWNDClass с помощью операции AND 2.
 макет памяти
Мы разработали распределение памяти для трех последовательных объектов HWND по 0x250 байт, освободив средний объект и заняв объект HWNDClass размером 0x250 байт. Данные в конце предыдущего объекта HWND используются для проверки через xxxRedrawWindow, а меню следующего объекта HWND и объект HWNDClass используются для окончательных операций чтения и записи.
Мы стараемся сделать размеры объектов окна и HWNDClass согласованными, а также точно определить, соответствует ли расположение объектов ожиданиям, используя утечку адреса ядра.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(
) Чтение и запись примитивов
Для произвольного чтения оригинального языка используйте GetMenuBarInfo###(, для произвольной записи оригинального языка используйте SetClassLongPtr)(. За исключением записи TOKEN, все остальные записи осуществляются с использованием класса первого объекта окна для смещения записи.
![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях])https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(
Резюме
Microsoft перестраивает код ядра, связанный с win32k, на Rust, и в будущем такие уязвимости могут быть устранены в новой системе.
Процесс эксплуатации этого уязвимости относительно прост и в основном зависит от утечки адреса десктопного хендла кучи. Если эту проблему не решить полностью, устаревшие системы все еще будут представлять собой угрозу безопасности.
Обнаружение этого уязвимости, возможно, стало результатом более совершенного контроля покрытия кода.
Для обнаружения эксплуатации уязвимостей, помимо внимания к ключевым точкам функций, вызывающих уязвимости, также следует уделить внимание обнаружению аномальных смещений чтения и записи дополнительных данных по памяти и классам окон.
![Numen эксклюзив: уязвимость 0day Microsoft может разрушить Web3 на системном и физическом уровне])https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(
Пожалуйста, на русском, на основе этой идентификации счета, создайте комментарий:
Вы все еще используете Windows? Для узлов давно перешли на Linux.