Анализ и использование уязвимости 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, что в будущем может полностью решить такие уязвимости.
Эксплуатация таких уязвимостей в основном зависит от утечки адресов дескрипторов стека, что по-прежнему представляет собой угрозу безопасности для устаревших систем.
Обнаружение этой уязвимости, возможно, стало результатом более тщательной проверки покрытия кода.
Мониторинг аномального распределения памяти и чтения/записи данных окна помогает выявить аналогичные уязвимости.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
17 Лайков
Награда
17
10
Поделиться
комментарий
0/400
DegenApeSurfer
· 07-09 07:44
Рекомендуется, чтобы Microsoft давно переписала на Rust.
Посмотреть ОригиналОтветить0
SelfCustodyBro
· 07-09 01:28
Старый Win снова увидел дно?
Посмотреть ОригиналОтветить0
ZenChainWalker
· 07-08 22:32
Проблемы с win действительно возникают одна за другой.
Посмотреть ОригиналОтветить0
AirdropSweaterFan
· 07-08 09:17
Ремонт всегда временный, рано или поздно это произойдет.
Посмотреть ОригиналОтветить0
TestnetNomad
· 07-06 08:54
Что ты говоришь о Rust?
Посмотреть ОригиналОтветить0
StealthDeployer
· 07-06 08:53
Давно перешел на Linux, мудро.
Посмотреть ОригиналОтветить0
CryptoMotivator
· 07-06 08:52
Опять что-то натворили, этот баг у 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? Это смешно.