Аналіз та експлуатація 0day вразливості системи Microsoft Windows
Нещодавно в безпековому патчі від Microsoft було виправлено уразливість підвищення привілеїв win32k, яка активно експлуатувалася. Ця уразливість в основному впливає на ранні версії системи Windows, і, здається, не може бути активована в Windows 11. У цій статті буде проаналізовано, як у нинішньому безпековому середовищі зловмисники можуть продовжувати експлуатувати такі уразливості. Наступний аналіз проведено в середовищі Windows Server 2016.
Фон вразливості
Уразливість 0day означає, що це невідкрита та неусунута безпекова уразливість, подібно до концепції торгівлі T+0 на фінансових ринках. Якщо така уразливість буде зловмисно використана, це може призвести до серйозних наслідків. Виявлена уразливість 0day у системі Windows може дозволити зловмисникам отримати повний контроль над системою, що дозволяє здійснювати такі атаки, як крадіжка інформації, знищення системи, впровадження шкідливого програмного забезпечення тощо. З точки зору Web3 це може призвести до крадіжки приватних ключів, переміщення цифрових активів, а також загрожувати цілій екосистемі Web3, основаній на інфраструктурі Web2.
Аналіз патчів
Аналіз коду патчу виявив, що він в основному виправляє проблему обробки лічильника посилань на об'єкти. З огляду на коментарі до вихідного коду win32k, можна зрозуміти, що оригінальний код лише блокував об'єкт вікна, але не блокував об'єкт меню у вікні, що могло призвести до неправильного посилання на об'єкт меню.
Доказ концепції експлуатації вразливостей ( PoC )
Аналіз показав, що функція xxxEnableMenuItem може повертати MenuItemState для головного меню вікна або підменю. Ми створили спеціальну чотирирівневу структуру меню, яка містить такі характеристики:
ID найнижчого рівня меню D повинен бути типом системного меню.
Верхнє меню A також має бути системним меню, але необхідно видалити елементи з однаковим ID з меню D.
Видалити посилання меню C в меню B.
Існування меню B, здається, сприяє випуску меню C.
При спрацьовуванні вразливості, під час повернення з xxxRedrawTitle на рівень користувача, видаляється зв'язок меню C і B, а меню C звільняється. Це призводить до того, що подальше посилання на недійсний об'єкт меню C у функції xxxEnableMenuItem.
Використання вразливостей (Exp) реалізація
Загальна ідея
Розгляньте два можливі напрямки використання:
Виконання shellcode: посилання на ранні вразливості, такі як 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 ексклюзив: уразливість Microsoft 0day може зламати 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
· 14год тому
Що ти кажеш про Rust?
Переглянути оригіналвідповісти на0
StealthDeployer
· 14год тому
Вже давно перейшов на Linux, розумно.
Переглянути оригіналвідповісти на0
CryptoMotivator
· 14год тому
Знову щось не так, у Microsoft цей баг справді давня традиція.
Аналіз 0day вразливостей Windows: від підвищення привілеїв в win32k до ризиків безпеки Web3
Аналіз та експлуатація 0day вразливості системи Microsoft Windows
Нещодавно в безпековому патчі від Microsoft було виправлено уразливість підвищення привілеїв win32k, яка активно експлуатувалася. Ця уразливість в основному впливає на ранні версії системи Windows, і, здається, не може бути активована в Windows 11. У цій статті буде проаналізовано, як у нинішньому безпековому середовищі зловмисники можуть продовжувати експлуатувати такі уразливості. Наступний аналіз проведено в середовищі Windows Server 2016.
Фон вразливості
Уразливість 0day означає, що це невідкрита та неусунута безпекова уразливість, подібно до концепції торгівлі T+0 на фінансових ринках. Якщо така уразливість буде зловмисно використана, це може призвести до серйозних наслідків. Виявлена уразливість 0day у системі Windows може дозволити зловмисникам отримати повний контроль над системою, що дозволяє здійснювати такі атаки, як крадіжка інформації, знищення системи, впровадження шкідливого програмного забезпечення тощо. З точки зору Web3 це може призвести до крадіжки приватних ключів, переміщення цифрових активів, а також загрожувати цілій екосистемі Web3, основаній на інфраструктурі Web2.
Аналіз патчів
Аналіз коду патчу виявив, що він в основному виправляє проблему обробки лічильника посилань на об'єкти. З огляду на коментарі до вихідного коду win32k, можна зрозуміти, що оригінальний код лише блокував об'єкт вікна, але не блокував об'єкт меню у вікні, що могло призвести до неправильного посилання на об'єкт меню.
Доказ концепції експлуатації вразливостей ( PoC )
Аналіз показав, що функція xxxEnableMenuItem може повертати MenuItemState для головного меню вікна або підменю. Ми створили спеціальну чотирирівневу структуру меню, яка містить такі характеристики:
При спрацьовуванні вразливості, під час повернення з xxxRedrawTitle на рівень користувача, видаляється зв'язок меню C і B, а меню C звільняється. Це призводить до того, що подальше посилання на недійсний об'єкт меню C у функції xxxEnableMenuItem.
Використання вразливостей (Exp) реалізація
Загальна ідея
Розгляньте два можливі напрямки використання:
Виконання shellcode: посилання на ранні вразливості, такі як 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 ексклюзив: уразливість Microsoft 0day може зламати Web3 гру на системному + фізичному рівні]###https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(
Висновок
Microsoft використовує Rust для реконструкції коду win32k, що в майбутньому може повністю вирішити такі вразливості.
Використання таких вразливостей в основному залежить від витоку адреси десктопного стеку, що все ще становить загрозу безпеці для старих систем.
Виявлення цього вразливості, можливо, стало можливим завдяки більш досконалому контролю покриття коду.
Моніторинг аномальних розміщень пам'яті та читання/запису даних вікна допомагає виявити подібні вразливості.
Коментар до статті:
rust дійсно може врятувати win? Це просто смішно.