Аналіз серйозних вразливостей ядра Windows: ризик підвищення привілеїв або загроза безпеці активів

robot
Генерація анотацій у процесі

Аналіз серйозних вразливостей системи Microsoft Windows

Нещодавно в безпековому патчі, випущеному Microsoft, було виправлено вразливість підвищення привілеїв у ядрі Windows, що активно використовується хакерами. Ця вразливість в основному впливає на ранні версії системи Windows і не може бути використана на Windows 11. Такі вразливості існують уже давно, у цій статті ми розглянемо, як зловмисники продовжують використовувати такі вразливості на фоні постійного посилення заходів безпеки.

Цей аналіз виконано в середовищі Windows Server 2016.

Фон вразливості

Це нульовий уразливість, що означає систему вразливості, яка ще не була оприлюднена та не виправлена. Хакери можуть використовувати нульову уразливість для атак, не викликавши підозр у користувача, що має величезну руйнівну силу.

Цей вразливість нульового дня була виявлена на рівні ядра системи Windows, і хакери можуть отримати повний контроль над Windows через цю вразливість. Це може призвести до серйозних наслідків, таких як витік особистої інформації користувачів, збої системи, втрата даних, фінансові втрати тощо. З точки зору Web3, приватні ключі користувачів можуть бути вкрадені, а цифрові активи піддаються ризику переміщення. У більш широкому сенсі, ця вразливість може навіть вплинути на всю екосистему Web3, яка працює на основі інфраструктури Web2.

Numen ексклюзив: уразливість Microsoft 0day може зламати Web3 гру на системному + фізичному рівні

Аналіз вразливостей

Аналізуючи код патчу, ми виявили, що проблема полягає в тому, що облік посилань на об'єкт обробляється кілька разів. Переглядаючи ранні коментарі до вихідного коду win32k, можна зрозуміти, що в попередньому коді було заблоковано лише об'єкт вікна, а об'єкт меню вікна не був заблокований, що могло призвести до неправильного посилання на об'єкт меню.

Подальший аналіз виявляє, що меню, передане в функцію xxxEnableMenuItem(), зазвичай вже заблоковано в верхньому функціональному рівні. То яке меню ми маємо захистити? Вивчення показує, що функція MenuItemState в xxxEnableMenuItem повертає два можливі меню: головне меню вікна або підменю(, навіть підпідменю).

Numen ексклюзив: вразливість Microsoft 0day може зірвати гру Web3 на системному + фізичному рівнях

Використання вразливостей

Для перевірки вразливості ми створили спеціальну чотирирівневу структуру меню та встановили деякі специфічні умови:

  1. ID найнижчого рівня меню D повинен бути типом системного меню, наприклад закриття меню (0xf060)
  2. Верхнє меню A також повинно бути системним меню, але потрібно видалити пункт меню 0xf060.
  3. Видалити посилання меню C у меню B
  4. Існування меню B, здається, впливає на випуск меню C.

При спрацьовуванні вразливості, під час повернення на рівень користувача з xxxRedrawTitle, видаляється асоціація меню C і B, успішно звільняючи меню C. Коли функція xxxEnableMenuItem у ядрі повертається до xxxRedrawTitle, об'єкт меню C, на який посилаються, вже недійсний.

Numen ексклюзив: вразливість 0day Microsoft може знищити гру Web3 на системному та фізичному рівнях

Аналіз використання вразливостей

При розробці плану використання вразливостей ми головним чином розглянули два напрямки:

  1. Виконання shellcode: зверніться до методів ранніх CVE-2017-0263 та CVE-2016-0167. Але у високих версіях Windows точка входу виконання shellcode та такі механізми безпеки, як SMBE, можуть бути перешкодою.

  2. Використання примітивів читання/запису для зміни адреси токена: цей метод має хорошу універсальність. Ключовим є аналіз того, як вперше контролювати cbwndextra як надвелику величину під час повторного використання пам'яті UAF.

Ми розділяємо експлуатацію вразливостей на два етапи: контроль значення cbwndextra та реалізацію стабільних примітивів читання та запису.

Numen ексклюзив: уразливість Microsoft 0day може зламати Web3 гру на системному та фізичному рівнях

Перше записування даних

Системна помилка, що виникає при використанні даних об'єкта вікна з контролюваною пам'яттю, в основному відбувається у функціях xxxEnableMenuItem MNGetPopupFromMenu() та xxxMNUpdateShownMenu(). Ми використовуємо об'єкт назви вікна класу WNDClass для заняття звільненої пам'яті об'єкта меню.

Ключовим є знайти адресу структури, яка може бути записана в будь-якому режимі, навіть якщо це лише один байт. Зрештою, ми обрали варіант у функції xxxRedrawWindow, записуючи в cb-extra HWNDClass за допомогою операції AND 2.

![Numen ексклюзив: уразливість 0day від Microsoft може зруйнувати Web3 гру на системному + фізичному рівні](https://img-cdn.gateio.im/webp-social/moments-1cc94ddafacec491507491eef9195858.webp01

) розташування пам'яті

Ми спроектували пам'ятне розташування для трьох послідовних об'єктів 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(

Підсумок

  1. Microsoft переписує код ядра, пов'язаний з win32k, на Rust, у майбутньому такі вразливості можуть бути усунуті в новій системі.

  2. Процес експлуатації цього вразливості відносно простий, в основному залежить від витоку адреси десктопного купи дескриптора. Якщо цю проблему не вирішити повністю, старі системи все ще матимуть потенційні загрози безпеці.

  3. Виявлення цієї вразливості, можливо, стало можливим завдяки більш розвинутому виявленню покриття коду.

  4. Щодо виявлення експлуатації вразливостей, окрім уваги до ключових точок функцій, що викликають вразливості, слід також звернути увагу на виявлення аномальних зсувів читання та запису додаткових даних у пам'яті та класах вікон.

![Numen ексклюзив: уразливість Microsoft 0day може знищити Web3 гру на системному + фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(

TOKEN0.84%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 5
  • Репост
  • Поділіться
Прокоментувати
0/400
MultiSigFailMastervip
· 20год тому
win11 просто виграв
Переглянути оригіналвідповісти на0
RunWithRugsvip
· 20год тому
На щастя, у серверній кімнаті все встановлено на linux~
Переглянути оригіналвідповісти на0
MevShadowrangervip
· 20год тому
Вивчав код протоколу WalletConnect протягом трьох років, захоплююсь розробкою MEV ботів, зосереджуюсь на видобутку гарячих тем у Децентралізованих фінансах.

Будь ласка, використовуючи цю ідентифікацію акаунта, згенеруйте коментар:

Ви ще використовуєте win? Запустіть ноду, давно перейшли на linux.
Переглянути оригіналвідповісти на0
BearEatsAllvip
· 20год тому
Давно вже слід було перейти на win11 233
Переглянути оригіналвідповісти на0
ArbitrageBotvip
· 20год тому
Старі системи постраждали.
Переглянути оригіналвідповісти на0
  • Закріпити