Аналіз нульових вразливостей системи Windows від Microsoft: може суттєво вплинути на екосистему Web3
Минулого місяця безпекове оновлення Microsoft виправило вразливість підвищення привілеїв у ядрі Windows, яка активно експлуатувалася зловмисниками. Ця вразливість в основному впливає на старі версії системи Windows, Windows 11, здається, не піддається впливу. У цій статті буде проаналізовано, яким чином зловмисники можуть продовжувати використовувати такі вразливості в умовах постійного посилення заходів безпеки.
Ми завершили всі аналітичні роботи в середовищі Windows Server 2016.
Нульовий експлойт - це вразливість системи, яка ще не була виявлена та виправлена, подібно до концепції торгівлі T+0 на фінансових ринках. Як тільки нульовий експлойт буде зловмисно використаний, він зазвичай може завдати значної шкоди. Виявлена вразливість нульового дня в системі Windows дозволяє зловмисникам отримати повний контроль над системою.
Серйозні наслідки контролю системи зловмисниками, включаючи, але не обмежуючись, витоком особистої інформації, крахом системи, втратою даних, фінансовими втратами, впровадженням шкідливого програмного забезпечення тощо. Для окремих користувачів це може призвести до викрадення приватних ключів криптовалюти та перенесення цифрових активів; з більш широкої перспективи, ця уразливість може навіть вплинути на всю екосистему Web3, яка базується на інфраструктурі Web2.
Аналіз патчів
Аналізуючи патч, ми виявили, що проблема, здається, полягає лише в тому, що лічильник посилань на один об'єкт був оброблений занадто багато разів. Оскільки win32k є раннім кодом, ми можемо знайти деякі ранні коментарі в вихідному коді, які вказують на те, що попередній код лише блокував об'єкт вікна, не блокуючи об'єкт меню в об'єкті вікна, що могло призвести до неправильного посилання на об'єкт меню.
Доказ концепції експлуатації вразливості ( PoC ) реалізація
Аналізуючи контекст функції вразливості, ми виявили, що меню, передане xxxEnableMenuItem(), зазвичай вже заблоковано в верхньому функціональному рівні. Так яке саме меню-об'єкт потрібно захистити?
Подальший аналіз обробки об'єкта меню в xxxEnableMenuItem показує, що функція MenuItemState повертає меню з двома можливими варіантами: головне меню вікна або підменю, навіть підпідменю (.
У PoC ми побудували спеціальну чотирирівневу структуру меню, де сусідні меню знаходяться у відносинах батька і сина. Ці меню мають певні специфічні ознаки, щоб проходити перевірку та оцінку у функції xxxEnableMenuItem.
Коли xxxRedrawTitle повертає користувацький шар, ми видалили зв'язок меню C та меню B, успішно звільнивши меню C. Врешті-решт, коли функція xxxEnableMenuItem в ядрі повертається до функції xxxRedrawTitle, об'єкт меню C, на який посилаються, вже недійсний.
![Numen ексклюзив: уразливість 0day Microsoft може знищити Web3 гру на системному та фізичному рівні])https://img-cdn.gateio.im/webp-social/moments-171ea7cb7c6f7190c3f49a2b914eed04.webp(
Вразливість ) Експлуатація ( реалізація
Перед визначенням підходу до використання, ми зазвичай проводимо деякі теоретичні попередні оцінки, щоб уникнути витрат часу на непрактичні варіанти. Ця експлуатація вразливостей головним чином розглядає два напрямки:
Виконання shellcode коду: посилання на ранні CVE-2017-0263 та CVE-2016-0167. Але в новіших версіях Windows цей спосіб може зіткнутися з деякими важко вирішуваними проблемами.
Використання примітивів читання та запису для зміни адреси токена: в останні роки вже з'явилися публічні способи для посилання. Макет пам'яті на робочому столі та примітиви читання та запису мають тривалу універсальність. Нам головним чином потрібно проаналізувати, як вперше контролювати cbwndextra у випадку повторного використання пам'яті UAF до надзвичайно великого значення.
Ми розділяємо весь процес експлуатації на два питання: як використати вразливість UAF для контролю значення cbwndextra, а також як реалізувати стабільні операції читання та запису після контролю значення cbwndextra.
![Numen ексклюзив: уразливість 0day Microsoft може зламати Web3 гру на системному + фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-66af34ab04bec21e27be99bbe29c552a.webp(
Врешті-решт, ми вирішили записати cb-extra HWNDClass через операцію AND 2 з прапорцем у функції xxxRedrawWindow. Це пов'язано з тим, що зміщення cb-extra HWNDClass невелике, ми можемо контролювати пам'яткові дані попереднього об'єкта через розташування пам'яті, тим самим визначаючи прапори об'єкта у функції xxxRedrawWindow.
Для досягнення стабільного розташування пам'яті ми спроектували принаймні три послідовні об'єкти HWND по 0x250 байт. Після звільнення проміжного об'єкта використовується об'єкт HWNDClass по 0x250 байт для зайняття цієї позиції. Кінцеві дані попереднього об'єкта HWND використовуються для перевірки за допомогою позначки xxxRedrawWindow, а об'єкти меню наступного об'єкта HWND та об'єкт HWNDClass слугують медіатором для остаточних операцій читання/запису.
![Numen ексклюзив: уразливість Microsoft 0day може зламати Web3 гру на системному та фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-1cc94ddafacec491507491eef9195858.webp01
Ми намагаємося зберегти розмір об'єкта вікна та об'єкта HWNDClass однаковим і переконатися, що розширені дані об'єкта вікна достатньо великі. За адресою ядрового дескриптора, що витікає в пам'яті купи, ми можемо точно визначити, чи розташовані запитувані об'єкти вікна в очікуваному порядку.
У читанні та запису первісних даних ми використовуємо GetMenuBarInfo() для реалізації довільного читання, а SetClassLongPtr() для реалізації довільного запису. Крім заміни операції запису TOKEN, яка залежить від класу другого вікна, всі інші записи здійснюються за допомогою класу першого вікна через зміщення.
Підсумок
стан win32k: Microsoft намагається переписати відповідний код ядра в попередній версії Windows 11 за допомогою Rust, нова система в майбутньому може усунути такі уразливості.
Процес експлуатації уразливості відносно простий: окрім того, як контролювати перший запис, що вимагає ретельних спроб, в основному не потрібно використовувати нові технології експлуатації. Цей тип уразливостей серйозно залежить від витоку адрес десктопного купи.
Виявлення вразливостей: припускається, що це може залежати від більш досконалого моніторингу покриття коду. Як тільки системний API зможе досягти найглибших вразливих точок у виконанні цільової функції, і об'єкт вікна знаходиться у стані багатократного вкладеного посилання, ця вразливість може бути виявлена за допомогою фузз-тестування.
Інші способи виявлення: окрім виявлення ключових точок функцій, що активують вразливості, перевірка незвичних розташувань пам'яті та виявлення аномальних зсувів читання/запису додаткових даних вікон або класів вікон також можуть бути одним із способів виявлення подібних вразливостей.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
12 лайків
Нагородити
12
2
Поділіться
Прокоментувати
0/400
AltcoinHunter
· 19год тому
Дивитися, але не говорити, я вже старий невдаха в криптосвіті
Аналіз нульового дня Windows: екосистема Web3 може зазнати значного впливу
Аналіз нульових вразливостей системи Windows від Microsoft: може суттєво вплинути на екосистему Web3
Минулого місяця безпекове оновлення Microsoft виправило вразливість підвищення привілеїв у ядрі Windows, яка активно експлуатувалася зловмисниками. Ця вразливість в основному впливає на старі версії системи Windows, Windows 11, здається, не піддається впливу. У цій статті буде проаналізовано, яким чином зловмисники можуть продовжувати використовувати такі вразливості в умовах постійного посилення заходів безпеки.
Ми завершили всі аналітичні роботи в середовищі Windows Server 2016.
Нульовий експлойт - це вразливість системи, яка ще не була виявлена та виправлена, подібно до концепції торгівлі T+0 на фінансових ринках. Як тільки нульовий експлойт буде зловмисно використаний, він зазвичай може завдати значної шкоди. Виявлена вразливість нульового дня в системі Windows дозволяє зловмисникам отримати повний контроль над системою.
Серйозні наслідки контролю системи зловмисниками, включаючи, але не обмежуючись, витоком особистої інформації, крахом системи, втратою даних, фінансовими втратами, впровадженням шкідливого програмного забезпечення тощо. Для окремих користувачів це може призвести до викрадення приватних ключів криптовалюти та перенесення цифрових активів; з більш широкої перспективи, ця уразливість може навіть вплинути на всю екосистему Web3, яка базується на інфраструктурі Web2.
Аналіз патчів
Аналізуючи патч, ми виявили, що проблема, здається, полягає лише в тому, що лічильник посилань на один об'єкт був оброблений занадто багато разів. Оскільки win32k є раннім кодом, ми можемо знайти деякі ранні коментарі в вихідному коді, які вказують на те, що попередній код лише блокував об'єкт вікна, не блокуючи об'єкт меню в об'єкті вікна, що могло призвести до неправильного посилання на об'єкт меню.
Доказ концепції експлуатації вразливості ( PoC ) реалізація
Аналізуючи контекст функції вразливості, ми виявили, що меню, передане xxxEnableMenuItem(), зазвичай вже заблоковано в верхньому функціональному рівні. Так яке саме меню-об'єкт потрібно захистити?
Подальший аналіз обробки об'єкта меню в xxxEnableMenuItem показує, що функція MenuItemState повертає меню з двома можливими варіантами: головне меню вікна або підменю, навіть підпідменю (.
У PoC ми побудували спеціальну чотирирівневу структуру меню, де сусідні меню знаходяться у відносинах батька і сина. Ці меню мають певні специфічні ознаки, щоб проходити перевірку та оцінку у функції xxxEnableMenuItem.
Коли xxxRedrawTitle повертає користувацький шар, ми видалили зв'язок меню C та меню B, успішно звільнивши меню C. Врешті-решт, коли функція xxxEnableMenuItem в ядрі повертається до функції xxxRedrawTitle, об'єкт меню C, на який посилаються, вже недійсний.
![Numen ексклюзив: уразливість 0day Microsoft може знищити Web3 гру на системному та фізичному рівні])https://img-cdn.gateio.im/webp-social/moments-171ea7cb7c6f7190c3f49a2b914eed04.webp(
Вразливість ) Експлуатація ( реалізація
Перед визначенням підходу до використання, ми зазвичай проводимо деякі теоретичні попередні оцінки, щоб уникнути витрат часу на непрактичні варіанти. Ця експлуатація вразливостей головним чином розглядає два напрямки:
Виконання shellcode коду: посилання на ранні CVE-2017-0263 та CVE-2016-0167. Але в новіших версіях Windows цей спосіб може зіткнутися з деякими важко вирішуваними проблемами.
Використання примітивів читання та запису для зміни адреси токена: в останні роки вже з'явилися публічні способи для посилання. Макет пам'яті на робочому столі та примітиви читання та запису мають тривалу універсальність. Нам головним чином потрібно проаналізувати, як вперше контролювати cbwndextra у випадку повторного використання пам'яті UAF до надзвичайно великого значення.
Ми розділяємо весь процес експлуатації на два питання: як використати вразливість UAF для контролю значення cbwndextra, а також як реалізувати стабільні операції читання та запису після контролю значення cbwndextra.
![Numen ексклюзив: уразливість 0day Microsoft може зламати Web3 гру на системному + фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-66af34ab04bec21e27be99bbe29c552a.webp(
Врешті-решт, ми вирішили записати cb-extra HWNDClass через операцію AND 2 з прапорцем у функції xxxRedrawWindow. Це пов'язано з тим, що зміщення cb-extra HWNDClass невелике, ми можемо контролювати пам'яткові дані попереднього об'єкта через розташування пам'яті, тим самим визначаючи прапори об'єкта у функції xxxRedrawWindow.
Для досягнення стабільного розташування пам'яті ми спроектували принаймні три послідовні об'єкти HWND по 0x250 байт. Після звільнення проміжного об'єкта використовується об'єкт HWNDClass по 0x250 байт для зайняття цієї позиції. Кінцеві дані попереднього об'єкта HWND використовуються для перевірки за допомогою позначки xxxRedrawWindow, а об'єкти меню наступного об'єкта HWND та об'єкт HWNDClass слугують медіатором для остаточних операцій читання/запису.
![Numen ексклюзив: уразливість Microsoft 0day може зламати Web3 гру на системному та фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-1cc94ddafacec491507491eef9195858.webp01
Ми намагаємося зберегти розмір об'єкта вікна та об'єкта HWNDClass однаковим і переконатися, що розширені дані об'єкта вікна достатньо великі. За адресою ядрового дескриптора, що витікає в пам'яті купи, ми можемо точно визначити, чи розташовані запитувані об'єкти вікна в очікуваному порядку.
У читанні та запису первісних даних ми використовуємо GetMenuBarInfo() для реалізації довільного читання, а SetClassLongPtr() для реалізації довільного запису. Крім заміни операції запису TOKEN, яка залежить від класу другого вікна, всі інші записи здійснюються за допомогою класу першого вікна через зміщення.
Підсумок
стан win32k: Microsoft намагається переписати відповідний код ядра в попередній версії Windows 11 за допомогою Rust, нова система в майбутньому може усунути такі уразливості.
Процес експлуатації уразливості відносно простий: окрім того, як контролювати перший запис, що вимагає ретельних спроб, в основному не потрібно використовувати нові технології експлуатації. Цей тип уразливостей серйозно залежить від витоку адрес десктопного купи.
Виявлення вразливостей: припускається, що це може залежати від більш досконалого моніторингу покриття коду. Як тільки системний API зможе досягти найглибших вразливих точок у виконанні цільової функції, і об'єкт вікна знаходиться у стані багатократного вкладеного посилання, ця вразливість може бути виявлена за допомогою фузз-тестування.
Інші способи виявлення: окрім виявлення ключових точок функцій, що активують вразливості, перевірка незвичних розташувань пам'яті та виявлення аномальних зсувів читання/запису додаткових даних вікон або класів вікон також можуть бути одним із способів виявлення подібних вразливостей.