Firma Intel aktualizacja mikrofonu, eliminująca (CVE-2019-14607), poprzez manipulacje mechanizmem dynamicznego zarządzania napięciem i częstotliwością w CPU inicjować uszkodzenie zawartości komórek z danymi, w tym w obszarach używanych w obliczeniach w izolowanych enklawach Intel SGX. Atak nosi nazwę Plundervolt i potencjalnie umożliwia lokalnemu użytkownikowi podniesienie swoich uprawnień w systemie, spowodowanie awarii oraz uzyskanie dostępu do poufnych danych.
Atak stanowi zagrożenie tylko w kontekście manipulacji obliczeniami w enklawach SGX, ponieważ wymaga posiadania uprawnień root w systemie. W najprostszym przypadku atakujący może spowodować zniekształcenia informacji przetwarzanej w enklawie, ale w bardziej skomplikowanych scenariuszach nie można wykluczyć możliwości odtworzenia kluczy prywatnych przechowywanych w enklawie, używanych do szyfrowania z wykorzystaniem algorytmów RSA-CRT i AES-NI. Technika ta może być również wykorzystywana do generowania błędów w pierwotnie poprawnych algorytmach w celu wywołania wystąpienia luk w pamięci, na przykład w celu organizacji dostępu do obszaru poza przydzielonym buforem.
Prototyp kodu do przeprowadzenia ataku na GitHubie
Istota metody polega na stworzeniu warunków do wystąpienia nieprzewidzianych zniekształceń danych podczas obliczeń w SGX, przed którymi nie chroni zastosowanie szyfrowania i uwierzytelniania pamięci w enklawie. Do wprowadzania zniekształceń można wykorzystać standardowe interfejsy programistyczne do zarządzania częstotliwością i napięciem, zazwyczaj stosowane do obniżania zużycia energii podczas bezczynności systemu oraz aktywacji maksymalnej wydajności przy wykonywaniu intensywnych prac. Charakterystyki częstotliwości i napięcia obejmują cały chip, wpływając również na realizację obliczeń w izolowanej enklawie.
Zmieniając napięcie, można doprowadzić do warunków, w których ładunku jest niewystarczająco do regeneracji komórki pamięci wewnątrz CPU, co skutkuje zmianą jej wartości. Kluczową różnicą w porównaniu do ataku to jest to, co RowHammer pozwala na modyfikację zawartości poszczególnych bitów w pamięci DRAM, poprzez cykliczne odczytywanie danych z sąsiednich komórek, podczas gdy Plundervolt umożliwia zmianę bitów wewnątrz CPU, gdy dane zostały już załadowane z pamięci do wykonania obliczeń. Taka cecha pozwala na ominięcie mechanizmów kontroli integralności i szyfrowania danych w pamięci stosowanych w SGX, ponieważ wartości w pamięci pozostają poprawne, ale mogą ulec zniekształceniu podczas operacji na nich, zanim wynik zostanie zapisany w pamięci.
Jeśli ta zmieniona wartość jest używana w procesie mnożenia podczas szyfrowania, to na wyjściu otrzymuje się niepoprawny szyfrogram. Mając możliwość odwołań do procesora w SGX w celu szyfrowania swoich danych, atakujący może, wywołując awarie, gromadzić statystyki o zmianach szyfrogramu na wyjściu i w ciągu kilku minut odzyskać wartość klucza przechowywanego w enklawie. Tekst źródłowy na wejściu i poprawny szyfrogram na wyjściu są znane, klucz nie zmienia się, a niepoprawny szyfrogram na wyjściu świadczy o zniekształceniu któregoś bitu na przeciwne wartości.
Analizując zebrane podczas różnych awarii pary wartości poprawnych i zniekształconych szyfrogramów, za pomocą metod analizy różnicowej usterek (DFA, ) można prawdopodobne klucze stosowane do symetrycznego szyfrowania AES, a następnie, analizując przecięcia kluczy w różnych zestawach, określić poszukiwany klucz.

Problem dotyczy różnych modeli procesorów Intel, w tym CPU Intel Core z 6
po 10 generację, a także piątą i szóstą generację Xeon E3, pierwszą i drugą generację Intel Xeon Scalable, Xeon D,
Xeon W oraz Xeon E.
Przypomnijmy, że technologia SGX () pojawiła się w procesorach Intel Core szóstej generacji (Skylake) i serii instrukcji, które pozwalają aplikacjom na poziomie użytkownika na przydzielanie zamkniętych obszarów pamięci — enklaw, których zawartość nie może być odczytana ani zmieniona nawet przez jądro i kod działający w trybie ring0, SMM i VMM. Przekazanie kontroli do kodu w enklawie jest niemożliwe za pomocą tradycyjnych funkcji przejścia i manipulacjami z rejestrami i stosem — do przekazywania kontroli do enklawy stosuje się specjalnie utworzoną nową instrukcję, która wykonuje weryfikację uprawnień. Przy tym kod umieszczony w enklawie może korzystać z klasycznych metod wywołania w celu uzyskania dostępu do funkcji wewnątrz enklawy oraz specjalnej instrukcji do wywoływania funkcji zewnętrznych. W celu ochrony przed atakami sprzętowymi, takimi jak podłączenie do modułu DRAM, stosuje się szyfrowanie pamięci enklawy.
Źródło: opennet.ru
