Атака на Intel SGX, що дозволяє отримати конфіденційні дані або виконати код в анклаві

Дослідники із Оборонного науково-технічного університету Народно-визвольної армії Китаю, Національного університету Сінгапуру та Швейцарської вищої технічної школи Цюріха розробили новий метод атаки на ізольовані анклави Intel SGX (Software Guard eXtensions). Атака отримала назву SmashEx і викликана проблемами з реєнтерабельністю при обробці виняткових ситуацій у процесі роботи runtime-компонентів для Intel SGX. Запропонований метод атаки дає можливість за наявності контролю за операційною системою визначити конфіденційні дані, які розміщені в анклаві, або організувати копіювання свого коду в пам'ять анклаву та його виконання.

Прототипи експлоїтів підготовлені для анклавів з runtime на базі Intel SGX SDK (CVE-2021-0186) та Microsoft Open Enclave (CVE-2021-33767). У першому випадку продемонстровано можливість вилучення RSA-ключа, що застосовується на web-сервері для HTTPS, а в другому вдалося визначити вміст, отриманий утилітою cURL, запущеної всередині анклаву. Уразливість вже усунена програмним шляхом у випусках Intel SGX SDK 2.13 та Open Enclave 0.17.1. Крім пакетів Intel SGX SDK та Microsoft Open Enclave вразливість також проявляється у SDK Google Asylo, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX та Veracruz.

Нагадаємо, що технологія SGX (Software Guard Extensions) з'явилася в процесорах Intel Core шостого покоління (Skylake) і пропонує серію інструкцій, що дозволяють виділяти додаткам рівня користувача закриті області пам'яті - анклави, вміст яких не може бути прочитаний і змінений навіть ядром і кодом, виконуємо у режимах ring0, SMM та VMM. Передати керування кодом в анклаві неможливо традиційними функціями переходу та маніпуляціями з регістрами та стеком - для передачі керування в анклав застосовуються спеціально створені нові інструкції EENTER, EEXIT та ERESUME, які виконують перевірку повноважень. При цьому код, що міститься в анклаві, може застосовувати класичні методи виклику для звернення до функцій всередині анклаву і спеціальну інструкцію для виклику зовнішніх функцій. Для захисту від апаратних атак, таких як підключення до модуля DRAM, використовується шифрування пам'яті анклаву.

Атака на Intel SGX, що дозволяє отримати конфіденційні дані або виконати код в анклаві

Проблема пов'язана з тим, що технологія SGX дозволяє операційній системі перервати виконання анклаву за допомогою генерації апаратного виключення, а в анклавах не реалізуються примітиви для атомарної обробки подібних винятків. На відміну від ядра операційної системи та звичайних додатків, код усередині анклавів не має доступу до примітивів для організації атомарних дій під час обробки асинхронних винятків. Без зазначених атомарних примітивів анклав може бути в будь-який час перерваний і повернутий до виконання, навіть у моменти, коли в анклаві виконуються критичні секції і він знаходиться в небезпечному стані (наприклад, коли не збережені/відновлені регістри CPU).

Атака на Intel SGX, що дозволяє отримати конфіденційні дані або виконати код в анклаві

Для нормального функціонування технологія SGX дозволяє перервати виконання анклаву апаратними винятками, що налаштовуються. Ця особливість дозволяє runtime-оточенням анклавів, реалізовувати обробку внутрішньо-анклавних винятків або обробку сигналів, але і вона може провокувати помилки реентерабельності. Атака SmashEx ґрунтується на експлуатації недоробок у SDK, через які належним чином не обробляється ситуація повторного виклику обробника виключення. Важливо, що з експлуатації вразливості атакуючий повинен мати можливість перервати виконання анклаву, тобто. має контролювати роботу системного оточення.

Після генерації виключення, атакуючий отримує невелике тимчасове вікно, протягом якого можна перехопити потік виконання через маніпуляцію з вхідними параметрами. Зокрема, за наявності доступу до системи (оточення поза анклавом) можна створити новий виняток відразу після виконання інструкції входу в анклав (EENTER), що призведе до повернення управління системі на стадії, коли ще не завершено налаштування стека для анклаву, в якому в тому У числі зберігається стан регістрів CPU.

Система потім може повернути керування назад в анклав, але так як стек анклава під час переривання не був налаштований, анклав буде виконуватися зі стеком, що знаходиться в пам'яті системи, що можна використовувати для застосування методів експлуатації на основі орієнтованого зворотного програмування (ROP - Return- Oriented Programming). При використанні техніки ROP атакуючий не намагається розмістити свій код у пам'яті, а оперує вже наявними в завантажених бібліотеках шматками машинних інструкцій, що завершуються інструкцією повернення управління (як правило, закінчення бібліотечних функцій). Робота експлоїту зводиться до побудови ланцюжка викликів подібних блоків (гаджетів) для отримання потрібної функціональності.

Атака на Intel SGX, що дозволяє отримати конфіденційні дані або виконати код в анклаві
Атака на Intel SGX, що дозволяє отримати конфіденційні дані або виконати код в анклаві


Джерело: opennet.ru

Додати коментар або відгук