Аналіз та експлуатація 0day уразливості системи Microsoft Windows
Нещодавно, у безпековому патчі, випущеному Microsoft, було виправлено експлойт вразливості підвищення привілеїв win32k, яка вже використовується. Ця вразливість існує лише в ранніх версіях Windows, і її не можна активувати на Windows 11. Ця стаття проаналізує, як зловмисники продовжують експлуатувати такі вразливості на тлі постійного вдосконалення сучасних засобів захисту.
Фон вразливості
0day вразливість означає ще не оприлюднену та не виправлену безпекову вразливість, схожу на концепцію T+0 торгівлі на фінансовому ринку. Як тільки такі вразливості будуть виявлені, вони можуть бути зловмисно використані непомітно, завдаючи величезної шкоди.
Виявлений уразливість 0day у системі Windows дозволяє зловмисникам отримати повний контроль над системою. Це може призвести до витоку особистої інформації, збоїв системи, втрати даних, шкоди майну та інших серйозних наслідків. З точки зору Web3 це може призвести до крадіжки приватних ключів, переміщення цифрових активів, а також вплинути на всю екосистему Web3, що базується на інфраструктурі Web2.
Аналіз патчів
Аналіз коду патчу виявив, що проблема полягає в багаторазовій обробці рахунку посилань на об'єкти. Переглянувши ранні коментарі до коду, стало відомо, що раніше код блокував лише об'єкт вікна, не блокуючи об'єкт меню у вікні, що може призвести до неправильного посилання на об'єкт меню.
Відтворення вразливості
Аналізуючи контекст функції вразливості, було виявлено, що меню, передане в xxxEnableMenuItem(), зазвичай вже було заблоковане в верхньому функціоналі. Подальший аналіз показав, що меню, яке повертає функція MenuItemState, може бути або головним меню вікна, або підменю, або підпідменю.
Для виклику вразливості було створено спеціальну чотирирівневу меню-структуру та встановлено такі характеристики:
ID найнижчого рівня меню D повинен бути типом системного меню
Головне меню A також повинно бути системним меню, але потрібно видалити відповідний тип системного меню.
Видалити посилання меню C у меню B
Існування меню B, здається, сприяє випуску меню C.
Коли xxxRedrawTitle повертає шар користувача, видаліть відносини посилання на меню C і B та звільніть меню C. Таким чином, коли функція xxxEnableMenuItem повертається до точки, об'єкт меню C, на який посилаються, вже недійсний.
Використання вразливостей
Використання вразливостей в основному враховує два напрямки:
Виконання shellcode коду: посилання на ранні уразливості, такі як CVE-2017-0263, але в новіших версіях Windows можуть виникнути проблеми з точками входу та механізмами безпеки, такими як SMEP.
Використання примітивів читання/запису для зміни адреси токена: в останні роки є кілька публічних експериментів, на які можна посилатися, з загальною застосовністю до розташування пам'яті на робочому столі та примітивів читання/запису. Ключовим є аналіз того, як вперше контролювати cbwndextra як надвелике значення при повторному використанні пам'яті UAF.
Цей раз використовується другий варіант, весь процес поділяється на два етапи:
Використання вразливості UAF для контролю значення cbwndextra
Контроль cbwndextra для досягнення стабільних операцій читання та запису
 Перше записування даних
Після активації вразливості система може неправильно використовувати дані об'єкта вікна, що контролюється, в MNGetPopupFromMenu###( та xxxMNUpdateShownMenu)(. Ми використовуємо об'єкт назви вікна з класу вікна WNDClass, щоб зайняти звільнений об'єкт меню.
Ключовим є знайти місце в адресній структурі, яку ми можемо побудувати, де можна вільно записувати дані, навіть якщо це лише один байт. Врешті-решт було обрано варіант у функції xxxRedrawWindow, що дозволяє контролювати пам'ять попереднього об'єкта через розташування пам'яті для визначення об'єктного маркера в функції.
) стабільна пам'ять
Спроектуйте принаймні три послідовні об'єкти HWND розміром 0x250 байт, звільніть середній і займіть його об'єктом HWNDClass. Кінцеві дані попереднього об'єкта HWND використовуються для перевірки за допомогою прапора в xxxRedrawWindow, меню об'єкта наступного об'єкта HWND і об'єкт HWNDClass використовуються як остаточний медіатор для читання та запису.
Точно визначити, чи впорядковані запитані об'єкти вікна в очікуваному порядку, за адресою ядра, що витікає з пам'яті.
Читання та запис примітивів
Будь-яке читання оригінальної мови використовує GetMenuBarInfo###(, будь-яке записування оригінальної мови використовує SetClassLongPtr)(. Крім запису заміни TOKEN, інші записування здійснюються за допомогою об'єкта класу першого вікна, використовуючи зміщення для запису.
![Numen ексклюзив: уразливість Microsoft 0day може знищити Web3 гру на системному + фізичному рівні])https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(
Резюме
Вразливість win32k має давню історію, але Microsoft намагається переписати відповідний код на Rust, тому в майбутніх нових системах такі вразливості можуть бути усунені.
Процес експлуатації цієї уразливості відносно простий, основна складність полягає в тому, як контролювати перше записування. Це серйозно залежить від витоку адреси десктопного купи, що все ще є небезпекою безпеки для застарілих систем.
Виявлення цієї вразливості, можливо, стало можливим завдяки більш досконалому контролю покриття коду.
Щодо виявлення експлойтів, окрім уваги до ключових точок виклику функцій, також слід звернути увагу на аномальну структуру пам'яті та зсуви даних вікна для читання та запису.
![Numen ексклюзив: уразливість Microsoft 0day може зруйнувати Web3 гру на системному та фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(
![Numen ексклюзив: уразливість 0day Microsoft може зруйнувати Web3 гру на системному та фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
6 лайків
Нагородити
6
4
Поділіться
Прокоментувати
0/400
ChainSauceMaster
· 21год тому
Старий Він знову що? Кожного дня є вразливості.
Переглянути оригіналвідповісти на0
FloorPriceWatcher
· 21год тому
win11 минув небезпеку
Переглянути оригіналвідповісти на0
MEVSandwichVictim
· 21год тому
Уразливість упаковки, хто грає, той обдурює людей, як лохів.
Аналіз 0day вразливостей ранніх версій Windows від Microsoft: від підвищення привілеїв до повного використання
Аналіз та експлуатація 0day уразливості системи Microsoft Windows
Нещодавно, у безпековому патчі, випущеному Microsoft, було виправлено експлойт вразливості підвищення привілеїв win32k, яка вже використовується. Ця вразливість існує лише в ранніх версіях Windows, і її не можна активувати на Windows 11. Ця стаття проаналізує, як зловмисники продовжують експлуатувати такі вразливості на тлі постійного вдосконалення сучасних засобів захисту.
Фон вразливості
0day вразливість означає ще не оприлюднену та не виправлену безпекову вразливість, схожу на концепцію T+0 торгівлі на фінансовому ринку. Як тільки такі вразливості будуть виявлені, вони можуть бути зловмисно використані непомітно, завдаючи величезної шкоди.
Виявлений уразливість 0day у системі Windows дозволяє зловмисникам отримати повний контроль над системою. Це може призвести до витоку особистої інформації, збоїв системи, втрати даних, шкоди майну та інших серйозних наслідків. З точки зору Web3 це може призвести до крадіжки приватних ключів, переміщення цифрових активів, а також вплинути на всю екосистему Web3, що базується на інфраструктурі Web2.
Аналіз патчів
Аналіз коду патчу виявив, що проблема полягає в багаторазовій обробці рахунку посилань на об'єкти. Переглянувши ранні коментарі до коду, стало відомо, що раніше код блокував лише об'єкт вікна, не блокуючи об'єкт меню у вікні, що може призвести до неправильного посилання на об'єкт меню.
Відтворення вразливості
Аналізуючи контекст функції вразливості, було виявлено, що меню, передане в xxxEnableMenuItem(), зазвичай вже було заблоковане в верхньому функціоналі. Подальший аналіз показав, що меню, яке повертає функція MenuItemState, може бути або головним меню вікна, або підменю, або підпідменю.
Для виклику вразливості було створено спеціальну чотирирівневу меню-структуру та встановлено такі характеристики:
Коли xxxRedrawTitle повертає шар користувача, видаліть відносини посилання на меню C і B та звільніть меню C. Таким чином, коли функція xxxEnableMenuItem повертається до точки, об'єкт меню C, на який посилаються, вже недійсний.
Використання вразливостей
Використання вразливостей в основному враховує два напрямки:
Виконання shellcode коду: посилання на ранні уразливості, такі як CVE-2017-0263, але в новіших версіях Windows можуть виникнути проблеми з точками входу та механізмами безпеки, такими як SMEP.
Використання примітивів читання/запису для зміни адреси токена: в останні роки є кілька публічних експериментів, на які можна посилатися, з загальною застосовністю до розташування пам'яті на робочому столі та примітивів читання/запису. Ключовим є аналіз того, як вперше контролювати cbwndextra як надвелике значення при повторному використанні пам'яті UAF.
Цей раз використовується другий варіант, весь процес поділяється на два етапи:
 Перше записування даних
Після активації вразливості система може неправильно використовувати дані об'єкта вікна, що контролюється, в MNGetPopupFromMenu###( та xxxMNUpdateShownMenu)(. Ми використовуємо об'єкт назви вікна з класу вікна WNDClass, щоб зайняти звільнений об'єкт меню.
Ключовим є знайти місце в адресній структурі, яку ми можемо побудувати, де можна вільно записувати дані, навіть якщо це лише один байт. Врешті-решт було обрано варіант у функції xxxRedrawWindow, що дозволяє контролювати пам'ять попереднього об'єкта через розташування пам'яті для визначення об'єктного маркера в функції.
) стабільна пам'ять
Спроектуйте принаймні три послідовні об'єкти HWND розміром 0x250 байт, звільніть середній і займіть його об'єктом HWNDClass. Кінцеві дані попереднього об'єкта HWND використовуються для перевірки за допомогою прапора в xxxRedrawWindow, меню об'єкта наступного об'єкта HWND і об'єкт HWNDClass використовуються як остаточний медіатор для читання та запису.
Точно визначити, чи впорядковані запитані об'єкти вікна в очікуваному порядку, за адресою ядра, що витікає з пам'яті.
Читання та запис примітивів
Будь-яке читання оригінальної мови використовує GetMenuBarInfo###(, будь-яке записування оригінальної мови використовує SetClassLongPtr)(. Крім запису заміни TOKEN, інші записування здійснюються за допомогою об'єкта класу першого вікна, використовуючи зміщення для запису.
![Numen ексклюзив: уразливість Microsoft 0day може знищити Web3 гру на системному + фізичному рівні])https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(
Резюме
Вразливість win32k має давню історію, але Microsoft намагається переписати відповідний код на Rust, тому в майбутніх нових системах такі вразливості можуть бути усунені.
Процес експлуатації цієї уразливості відносно простий, основна складність полягає в тому, як контролювати перше записування. Це серйозно залежить від витоку адреси десктопного купи, що все ще є небезпекою безпеки для застарілих систем.
Виявлення цієї вразливості, можливо, стало можливим завдяки більш досконалому контролю покриття коду.
Щодо виявлення експлойтів, окрім уваги до ключових точок виклику функцій, також слід звернути увагу на аномальну структуру пам'яті та зсуви даних вікна для читання та запису.
![Numen ексклюзив: уразливість Microsoft 0day може зруйнувати Web3 гру на системному та фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(
![Numen ексклюзив: уразливість 0day Microsoft може зруйнувати Web3 гру на системному та фізичному рівнях])https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(