informacje o nowej klasie ataków (Load Value Injection, ) na mechanizm spekulacyjnego wykonywania w procesorach Intel, które mogą być wykorzystywane do organizowania wycieków kluczy i danych poufnych z enclav Intel SGX oraz innych procesów.
Nowa klasa ataków opiera się na manipulacjach z tymi samymi mikroarchitektonicznymi strukturami, co w atakach (Microarchitectural Data Sampling), . Nowe ataki nie są blokowane przez istniejące metody ochrony przed Meltdown, Spectre, MDS i innymi podobnymi atakami. Aby skutecznie zabezpieczyć się przed LVI, konieczne są zmiany sprzętowe w CPU. Przy organizacji ochrony programowej, poprzez dodanie przez kompilator instrukcji LFENCE po każdej operacji ładowania z pamięci oraz zastąpienie instrukcji RET na POP, LFENCE i JMP, występują zbyt duże narzuty — według oceny badaczy pełna programowa ochrona prowadzi do spadku wydajności o 2-19 razy.
Częściowo trudność w zablokowaniu problemu rekompensuje fakt, że obecnie atak ma bardziej teoretyczny niż praktyczny charakter (atak jest teoretycznie możliwy, ale bardzo trudny do zrealizowania i powtarzalny tylko w syntetycznych testach).
Firma Intel problemowi umiarkowany poziom niebezpieczeństwa (5.6 w skali 10) oraz aktualizację oprogramowania układowego i SDK dla środowiska SGX, w których próbowała zablokować przeprowadzenie ataku obejściem. Proponowane metody ataków są obecnie stosowane tylko w procesorach Intel, ale nie można wykluczyć możliwości dostosowania LVI do innych procesorów, wobec których zastosowanie mają ataki klasy Meltdown.
Problem został wykryty w kwietniu ubiegłego roku przez badacza Jo Vana Bulcka z Uniwersytetu w Louvain, po czym przy udziale 9 badaczy z innych uniwersytetów opracowano pięć podstawowych metod przeprowadzania ataków, z których każda dopuszcza istnienie bardziej specyficznych . Niezależnie w lutym tego roku badacze z firmy Bitdefender również jeden z wariantów ataku LVI i poinformowali o nim Intela. Warianty ataków różnią się użyciem różnych mikroarchitektonicznych struktur, takich jak bufor pamięci (SB, Store Buffer), bufor ładowania (LFB, Line Fill Buffer), bufor kontekstu FPU i pamięć podręczna pierwszego poziomu (L1D), wcześniej stosowanych w takich atakach jak , , , , i .
Głównym LVI od ataków MDS polega na tym, że MDS manipuluje definicją zawartości struktury mikroarchitektonicznej, pozostałej w pamięci podręcznej po spekulatywnym przetwarzaniu wyjątków (fault) lub operacji load i store, podczas gdy
ataki LVI pozwalają na wstrzyknięcie danych atakującego do struktur mikroarchitektonicznych, aby wpłynąć na następne spekulatywne wykonywanie kodu ofiary. Dzięki wskazanym manipulacjom atakujący może wydobyć zawartość tajnych struktur danych w innych procesach podczas wykonywania określonego kodu na docelowym rdzeniu CPU.
Dla w kodzie procesu-ofiary specjalne sekwencje kodu (gadżety), w których ładowana jest kontrolowana przez atakującego wartość, a załadowanie tej wartości prowadzi do wystąpienia wyjątków (fault, abort lub assist), które odrzucają wynik i ponownie wykonują instrukcję. Podczas obsługi wyjątku powstaje spekulatywne okno, w którym następuje wyciek przetwarzanych w gadżecie danych. W szczególności procesor zaczyna wykonywać w trybie spekulatywnym fragment kodu (gadżet), a następnie stwierdza, że przewidywanie się nie sprawdziło, i cofa operacje do stanu początkowego, ale dane przetworzone w trakcie spekulatywnego wykonywania osiadają w pamięci podręcznej L1D i mikroarchitektonicznych buforach i są dostępne do wydobycia z nich z użyciem znanych metod ustalania pozostałych danych przez kanały boczne.
Wyjątek „assist”, w przeciwieństwie do „fault”, jest obsługiwany wewnątrz procesora bez wywoływania programowych odpowiedników. Assist może wystąpić na przykład, gdy konieczne jest zaktualizowanie bitu A (Accessed) lub D (Dirty) w tabeli stron pamięci. Główna trudność w przeprowadzeniu ataku na inne procesy polega na tym, jak zainicjować wystąpienie assist, manipulując procesem ofiary. Obecnie nie istnieją niezawodne metody, aby to osiągnąć, ale w przyszłości nie można wykluczyć ich znalezienia. Możliwość przeprowadzenia ataku została jak dotąd potwierdzona tylko dla enclave'ów Intel SGX, a inne scenariusze są teoretyczne lub reprodukowane w warunkach syntetycznych (wymaga to dodania do kodu określonych gadżetów).
Możliwe wektory ataków:
- Wycieki danych z struktur jądra do procesu na poziomie użytkownika. Ochrona jądra Linux przed atakami typu Spectre 1 oraz mechanizm ochrony SMAP (Supervisor Mode Access Prevention) znacznie zmniejszają prawdopodobieństwo ataku LVI. Wprowadzenie dodatkowej ochrony do jądra może być wymagane w przyszłości, gdy będą identyfikowane prostsze metody przeprowadzania ataków LVI.
- Wycieki danych między różnymi procesami. Do przeprowadzenia ataku wymagane jest posiadanie określonych fragmentów kodu w aplikacji oraz określenie metody generowania wyjątków w docelowym procesie.
- Wycieki danych z środowiska hosta do systemu gościa. Atak ten zaklasyfikowany jest jako zbyt skomplikowany, wymagający wykonania różnych trudnych czynności oraz przewidywania aktywności w systemie.
- Wycieki danych między procesami w różnych systemach gościa. Wektor ataku jest podobny do organizacji wycieków danych między różnymi procesami, ale dodatkowo wymaga wykonania skomplikowanych manipulacji, aby obejść izolację między systemami gościa.
Badacze opublikowali z pokazem zasad przeprowadzania ataku, ale jak na razie nie nadają się one do przeprowadzania rzeczywistych ataków. Pierwszy przykład pozwala na przekierowanie spekulacyjnego wykonania kodu w procesie-ofierze w podobny sposób do programowania opartego na zwrotach (, Return-Oriented Programming). W tym przykładzie ofiarą jest specjalnie przygotowany proces, zawierający niezbędne gadgety (zastosowanie ataku na rzeczywiste zewnętrzne procesy jest utrudnione). Drugi przykład pozwala na wniknięcie w obliczenia przy szyfrowaniu AES wewnątrz enklawy Intel SGX i zorganizowanie wycieku danych podczas spekulacyjnego wykonania instrukcji w celu odzyskania wartości klucza wykorzystywanego do szyfrowania.

Źródło: opennet.ru
