Atak na Intel SGX w celu wydobycia poufnych danych lub wykonania kodu w enklawie

Naukowcy z Obronnego Uniwersytetu Naukowo-Technologicznego Chińskiej Armii Ludowo-Wyzwoleńczej, Narodowego Uniwersytetu Singapuru i ETH Zurich opracowali nową metodę ataku na izolowane enklawy Intel SGX (Software Guard eXtensions). Atak został nazwany SmashEx i został spowodowany problemami z reentrancy w obsłudze wyjątków podczas działania komponentów wykonawczych dla Intel SGX. Zaproponowana metoda ataku umożliwia, w przypadku kontroli nad systemem operacyjnym, ustalenie poufnych danych znajdujących się w enklawie lub zorganizowanie skopiowania własnego kodu do pamięci enklawy i jego wykonanie.

Prototypy exploitów zostały przygotowane dla enklaw runtime w oparciu o Intel SGX SDK (CVE-2021-0186) oraz Microsoft Open Enclave (CVE-2021-33767). W pierwszym przypadku wykazano możliwość wyodrębnienia klucza RSA używanego na serwerze WWW dla HTTPS, a w drugim możliwe było określenie treści pozyskanych przez narzędzie cURL działające wewnątrz enklawy. Luka została już naprawiona programowo w wersjach Intel SGX SDK 2.13 i Open Enclave 0.17.1. Oprócz Intel SGX SDK i Microsoft Open Enclave luka pojawia się również w Google Asylo SDK, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX i Veracruz.

Przypomnijmy, że technologia SGX (Software Guard Extensions) pojawiła się w procesorach Intel Core szóstej generacji (Skylake) i oferuje szereg instrukcji pozwalających aplikacjom na poziomie użytkownika na przydzielanie zamkniętych obszarów pamięci – enklaw, których zawartości nie można odczytać ani zmienić nawet przez jądro i kod wykonywany przez w trybach ring0, SMM i VMM. Niemożliwe jest przekazanie kontroli do kodu w enklawie za pomocą tradycyjnych funkcji skoku oraz manipulacji rejestrami i stosem - specjalnie stworzone nowe instrukcje EENTER, EEXIT i ERESUME służą do przekazania kontroli do enklawy, która przeprowadza kontrolę autoryzacji. W tym przypadku kod umieszczony w enklawie może wykorzystywać klasyczne metody wywołania do wywołania funkcji wewnątrz enklawy oraz specjalną instrukcję do wywołania funkcji zewnętrznych. Szyfrowanie pamięci enklawą służy do ochrony przed atakami sprzętowymi, takimi jak połączenie DRAM.

Atak na Intel SGX w celu wydobycia poufnych danych lub wykonania kodu w enklawie

Problem polega na tym, że technologia SGX pozwala systemowi operacyjnemu na przerwanie wykonywania enklawy przez zgłoszenie wyjątku sprzętowego, a enklawy nie implementują poprawnie prymitywów do atomowej obsługi takich wyjątków. W przeciwieństwie do jądra systemu operacyjnego i normalnych aplikacji, kod wewnątrz enklaw nie ma dostępu do prymitywów do organizowania akcji atomowych podczas obsługi asynchronicznie zgłaszanych wyjątków. Bez określonych prymitywów atomowych enklawa może zostać przerwana i przywrócona do wykonania w dowolnym momencie, nawet w czasie, gdy w enklawie wykonywane są sekcje krytyczne i znajduje się ona w niebezpiecznym stanie (na przykład, gdy rejestry procesora nie są zapisywane/przywracane) .

Atak na Intel SGX w celu wydobycia poufnych danych lub wykonania kodu w enklawie

W przypadku normalnej pracy technologia SGX umożliwia przerwanie wykonywania enklawy za pomocą konfigurowalnych wyjątków sprzętowych. Ta funkcja umożliwia środowisko wykonawcze enklaw implementację obsługi wyjątków wewnątrz enklawy lub obsługi sygnałów, ale może również wprowadzać błędy ponownego wejścia. Atak SmashEx opiera się na wykorzystaniu luk w SDK, przez które sytuacja ponownego wywołania procedury obsługi wyjątków nie jest odpowiednio obsługiwana. Co ważne, aby wykorzystać podatność, atakujący musi mieć możliwość przerwania wykonywania enklawy, tj. musi kontrolować działanie środowiska systemowego.

Po rzuceniu wyjątku atakujący otrzymuje małe okienko czasowe, podczas którego możliwe jest przechwycenie przebiegu wykonania poprzez manipulację parametrami wejściowymi. W szczególności, jeśli masz dostęp do systemu (środowisko poza enklawą), możesz utworzyć nowy wyjątek natychmiast po wykonaniu instrukcji wejścia do enklawy (EENTER), który przywróci kontrolę do systemu na etapie, gdy konfiguracja stosu dla enklawy nie została jeszcze zakończona, w której ten numer przechowuje stan rejestrów CPU.

System może następnie zwrócić sterowanie z powrotem do enklawy, ale ponieważ stos enklawy nie był skonfigurowany w momencie przerwania, enklawa wykona się ze stosem rezydującym w pamięci systemowej, co może być użyte do zastosowania programowania zorientowanego na powrót (ROP ) techniki programowania zorientowanego). Wykorzystując technikę ROP, atakujący nie próbuje umieścić swojego kodu w pamięci, lecz operuje na fragmentach instrukcji maszynowych już dostępnych w załadowanych bibliotekach, kończąc na instrukcji control return (z reguły są to zakończenia bibliotek Funkcje). Działanie exploita sprowadza się do zbudowania łańcucha wywołań podobnych bloków („gadżetów”) w celu uzyskania pożądanej funkcjonalności.

Atak na Intel SGX w celu wydobycia poufnych danych lub wykonania kodu w enklawie
Atak na Intel SGX w celu wydobycia poufnych danych lub wykonania kodu w enklawie


Źródło: opennet.ru

Dodaj komentarz