Анализ и эксплуатация уязвимости 0day в системе Windows от Microsoft
Недавние обновления безопасности, выпущенные Microsoft, содержат уязвимость повышения привилегий win32k, которая в настоящее время эксплуатируется. Эта уязвимость в основном присутствует в ранних версиях операционной системы Windows и не может быть активирована на Windows 11. В данной статье будет проанализировано, как злоумышленники продолжают использовать такие уязвимости на фоне постоянного усиления мер безопасности. Наш процесс анализа был завершен в среде Windows Server 2016.
Фон уязвимости
Уязвимость 0day относится к нераскрытым и неустраненным уязвимостям безопасности, аналогично концепции торговли T+0 на финансовых рынках. Такие уязвимости, если они будут обнаружены, могут быть злоупотреблены без обнаружения, что приведет к значительным разрушениям.
Обнаруженная уязвимость 0day в системе Windows позволяет злоумышленникам получить полный контроль над системой. Это может привести к утечке личной информации, сбоям в системе, потере данных, финансовым убыткам и другим серьезным последствиям. С точки зрения Web3, приватные ключи пользователей могут быть украдены, а цифровые активы - переведены. В более широком смысле, эта уязвимость может повлиять на всю экосистему Web3, работающую на основе инфраструктуры Web2.
Анализ уязвимостей
Анализируя код патча, мы обнаружили, что это проблема с ошибкой подсчета ссылок на объекты. Ранее в комментариях к коду win32k указывалось, что ранее блокировался только объект окна, а объект меню в окне не блокировался, что могло привести к ошибочным ссылкам на объект меню.
Дальнейший анализ показал, что в функции xxxEnableMenuItem возвращаемый объект меню может быть как главным меню окна, так и подменю или даже более глубоким меню. Это дает идеи для построения POC.
Реализация POC
Мы создали специальную многоуровневую структуру меню, содержащую четыре меню-объекта с определенными отношениями. Тщательно настроив атрибуты и отношения этих меню, можно обойти проверку функции xxxEnableMenuItem и освободить ключевые объекты меню при возврате функции. Таким образом, при последующем обращении к этому объекту будет вызвана уязвимость UAF.
Эксплуатация уязвимости ( EXP ) реализована
Общая идея
Мы рассмотрели два способа эксплуатации: выполнение shellcode и использование операций чтения/записи для изменения токена. В конечном итоге был выбран второй способ, поскольку он более осуществим на более поздних версиях Windows. Мы разделили весь процесс эксплуатации на два шага: как управлять значением cbwndextra через UAF и как использовать контролируемый cbwndextra для реализации стабильных операций чтения/записи.
Начальная запись данных
Мы используем объект имени класса окна WNDClass, чтобы занять память освобожденного объекта меню. Проанализировав различные возможные точки записи, в конечном итоге мы выбрали использование операции AND с флагами объекта в функции xxxRedrawWindow для записи значения cb-extra HWNDClass.
макет памяти
Мы разработали макет памяти, состоящий из трех последовательных объектов HWND, при этом средний объект был освобожден и занят объектом HWNDClass. Объекты HWND с обеих сторон используются для обхода обнаружения и реализации окончательных операций чтения и записи. С помощью утекшего адреса дескриптора ядра мы можем точно контролировать расположение этих объектов.
Реализация чтения и записи примитивов
Любая операция чтения использует функцию GetMenuBarInfo, а любая операция записи - функцию SetClassLongPtr. За исключением записи TOKEN, которая зависит от объекта класса второго окна, все остальные операции записи используют объект класса первого окна, реализуя это через смещение.
Резюме
Microsoft пытается переписать код win32k с использованием Rust, в будущем такие уязвимости могут быть полностью устранены в новой системе.
Процесс эксплуатации таких уязвимостей относительно прост, основная сложность заключается в том, как контролировать первую запись данных.
Обнаружение уязвимостей может быть связано с более совершенными технологиями проверки покрытия кода.
Что касается обнаружения уязвимостей, помимо внимания к ключевым точкам вызова функций, также следует проверять аномальное распределение памяти и операции чтения и записи данных.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
7 Лайков
Награда
7
6
Поделиться
комментарий
0/400
DeFiGrayling
· 3ч назад
Майкрософт на этот раз действительно заиграл по-крупному -_-
Посмотреть ОригиналОтветить0
HackerWhoCares
· 3ч назад
Неудивительно, что мой компьютер так тормозит!
Посмотреть ОригиналОтветить0
ResearchChadButBroke
· 3ч назад
Майкрософт на этот раз провалился, да.
Посмотреть ОригиналОтветить0
GasWrangler
· 3ч назад
технически говоря, этот недостаток в макете памяти крайне не оптимален
Уязвимость 0day в системе Windows вызывает угрозы безопасности Web3. Эксперты анализируют процесс эксплуатации.
Анализ и эксплуатация уязвимости 0day в системе Windows от Microsoft
Недавние обновления безопасности, выпущенные Microsoft, содержат уязвимость повышения привилегий win32k, которая в настоящее время эксплуатируется. Эта уязвимость в основном присутствует в ранних версиях операционной системы Windows и не может быть активирована на Windows 11. В данной статье будет проанализировано, как злоумышленники продолжают использовать такие уязвимости на фоне постоянного усиления мер безопасности. Наш процесс анализа был завершен в среде Windows Server 2016.
Фон уязвимости
Уязвимость 0day относится к нераскрытым и неустраненным уязвимостям безопасности, аналогично концепции торговли T+0 на финансовых рынках. Такие уязвимости, если они будут обнаружены, могут быть злоупотреблены без обнаружения, что приведет к значительным разрушениям.
Обнаруженная уязвимость 0day в системе Windows позволяет злоумышленникам получить полный контроль над системой. Это может привести к утечке личной информации, сбоям в системе, потере данных, финансовым убыткам и другим серьезным последствиям. С точки зрения Web3, приватные ключи пользователей могут быть украдены, а цифровые активы - переведены. В более широком смысле, эта уязвимость может повлиять на всю экосистему Web3, работающую на основе инфраструктуры Web2.
Анализ уязвимостей
Анализируя код патча, мы обнаружили, что это проблема с ошибкой подсчета ссылок на объекты. Ранее в комментариях к коду win32k указывалось, что ранее блокировался только объект окна, а объект меню в окне не блокировался, что могло привести к ошибочным ссылкам на объект меню.
Дальнейший анализ показал, что в функции xxxEnableMenuItem возвращаемый объект меню может быть как главным меню окна, так и подменю или даже более глубоким меню. Это дает идеи для построения POC.
Реализация POC
Мы создали специальную многоуровневую структуру меню, содержащую четыре меню-объекта с определенными отношениями. Тщательно настроив атрибуты и отношения этих меню, можно обойти проверку функции xxxEnableMenuItem и освободить ключевые объекты меню при возврате функции. Таким образом, при последующем обращении к этому объекту будет вызвана уязвимость UAF.
Эксплуатация уязвимости ( EXP ) реализована
Общая идея
Мы рассмотрели два способа эксплуатации: выполнение shellcode и использование операций чтения/записи для изменения токена. В конечном итоге был выбран второй способ, поскольку он более осуществим на более поздних версиях Windows. Мы разделили весь процесс эксплуатации на два шага: как управлять значением cbwndextra через UAF и как использовать контролируемый cbwndextra для реализации стабильных операций чтения/записи.
Начальная запись данных
Мы используем объект имени класса окна WNDClass, чтобы занять память освобожденного объекта меню. Проанализировав различные возможные точки записи, в конечном итоге мы выбрали использование операции AND с флагами объекта в функции xxxRedrawWindow для записи значения cb-extra HWNDClass.
макет памяти
Мы разработали макет памяти, состоящий из трех последовательных объектов HWND, при этом средний объект был освобожден и занят объектом HWNDClass. Объекты HWND с обеих сторон используются для обхода обнаружения и реализации окончательных операций чтения и записи. С помощью утекшего адреса дескриптора ядра мы можем точно контролировать расположение этих объектов.
Реализация чтения и записи примитивов
Любая операция чтения использует функцию GetMenuBarInfo, а любая операция записи - функцию SetClassLongPtr. За исключением записи TOKEN, которая зависит от объекта класса второго окна, все остальные операции записи используют объект класса первого окна, реализуя это через смещение.
Резюме
Microsoft пытается переписать код win32k с использованием Rust, в будущем такие уязвимости могут быть полностью устранены в новой системе.
Процесс эксплуатации таких уязвимостей относительно прост, основная сложность заключается в том, как контролировать первую запись данных.
Обнаружение уязвимостей может быть связано с более совершенными технологиями проверки покрытия кода.
Что касается обнаружения уязвимостей, помимо внимания к ключевым точкам вызова функций, также следует проверять аномальное распределение памяти и операции чтения и записи данных.