Аналіз і використання 0day вразливості системи Microsoft Windows
Нещодавно випущене оновлення безпеки від 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 для зайняття пам'яті звільненого об'єкта меню. Аналізуючи різні можливі точки запису, зрештою було обрано запис значення cb-extra HWNDClass за допомогою операції AND з прапором об'єкта в функції xxxRedrawWindow.
 розташування пам'яті
Ми спроектували пам'ятну структуру, що складається з трьох послідовних об'єктів HWND, середній об'єкт був звільнений і зайнятий об'єктом HWNDClass. Передні та задні об'єкти HWND використовуються відповідно для обходу перевірок і реалізації кінцевих примітивів читання/запису. Завдяки витоку адреси дескриптора ядра, ми можемо точно контролювати розташування цих об'єктів.
![Numen ексклюзив: уразливість Microsoft 0day може зламати 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 ексклюзив: уразливість Microsoft 0day може знищити Web3 гру на системному + фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
7 лайків
Нагородити
7
6
Поділіться
Прокоментувати
0/400
DeFiGrayling
· 11год тому
Майкрософт цього разу дійсно загралася -_-
Переглянути оригіналвідповісти на0
HackerWhoCares
· 11год тому
Не дивно, що мій комп'ютер такий повільний!
Переглянути оригіналвідповісти на0
ResearchChadButBroke
· 11год тому
Майкрософт цього разу програв.
Переглянути оригіналвідповісти на0
GasWrangler
· 11год тому
технічно кажучи, цей недолік в розміщенні пам'яті є субоптимальним
Уразливість 0day у системі Windows викликала загрози безпеці Web3: експерти роз'яснюють процес використання.
Аналіз і використання 0day вразливості системи Microsoft Windows
Нещодавно випущене оновлення безпеки від 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 для зайняття пам'яті звільненого об'єкта меню. Аналізуючи різні можливі точки запису, зрештою було обрано запис значення cb-extra HWNDClass за допомогою операції AND з прапором об'єкта в функції xxxRedrawWindow.
 розташування пам'яті
Ми спроектували пам'ятну структуру, що складається з трьох послідовних об'єктів HWND, середній об'єкт був звільнений і зайнятий об'єктом HWNDClass. Передні та задні об'єкти HWND використовуються відповідно для обходу перевірок і реалізації кінцевих примітивів читання/запису. Завдяки витоку адреси дескриптора ядра, ми можемо точно контролювати розташування цих об'єктів.
![Numen ексклюзив: уразливість Microsoft 0day може зламати 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 ексклюзив: уразливість Microsoft 0day може знищити Web3 гру на системному + фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(