Nowy atak na struktury mikroarchitektoniczne procesorów Intel i AMD

Grupa badaczy z Uniwersytetów Wirginii i Uniwersytetu Kalifornijskiego przedstawiła nowy rodzaj ataku na struktury mikroarchitektoniczne procesorów Intel i AMD, zidentyfikowany podczas inżynierii wstecznej nieudokumentowanych możliwości procesorów. Proponowana metoda ataku polega na wykorzystaniu pośredniej pamięci podręcznej mikrooperacji w procesorach, która może zostać wykorzystana do odzyskania informacji zgromadzonych podczas spekulatywnego wykonywania instrukcji.

W celach optymalizacyjnych procesor rozpoczyna wykonywanie niektórych instrukcji w trybie spekulatywnym, nie czekając na zakończenie poprzednich obliczeń, a jeśli następnie uzna, że ​​przewidywanie nie było uzasadnione, przywraca operację do stanu pierwotnego, ale dane przetworzone podczas wykonanie spekulacyjne jest przechowywane w pamięci podręcznej, której zawartość można określić.

Należy zauważyć, że nowa metoda znacznie przewyższa atak Spectre v1, sprawia, że ​​atak jest trudny do wykrycia i nie jest blokowany przez istniejące metody ochrony przed atakami typu side-channel, mające na celu blokowanie podatności spowodowanych spekulatywnym wykonywaniem instrukcji (na przykład użycie instrukcji LFENCE blokuje wycieki w ostatnich etapach realizacji spekulatywnej, ale nie chroni przed wyciekami przez struktury mikroarchitektoniczne).

Metoda dotyczy modeli procesorów Intel i AMD wypuszczanych od 2011 roku, w tym serii Intel Skylake i AMD Zen. Nowoczesne procesory dzielą złożone instrukcje procesora na prostsze mikrooperacje podobne do RISC, które są buforowane w osobnej pamięci podręcznej. Ta pamięć podręczna różni się zasadniczo od pamięci podręcznych wyższego poziomu, nie jest bezpośrednio dostępna i działa jako bufor strumieniowy umożliwiający szybki dostęp do wyników dekodowania instrukcji CISC na mikrorozkazy RISC. Badacze znaleźli jednak sposób na stworzenie warunków powstających w przypadku konfliktów w dostępie do pamięci podręcznej i umożliwienie oceny zawartości pamięci podręcznej mikrooperacji poprzez analizę różnic w czasie wykonywania określonych działań.

Nowy atak na struktury mikroarchitektoniczne procesorów Intel i AMD

Pamięć podręczna mikrooperacji w procesorach Intela jest segmentowana względem wątków procesora (Hyper-Threading), natomiast procesory AMD Zen wykorzystują współdzieloną pamięć podręczną, co stwarza warunki do wycieku danych nie tylko w obrębie jednego wątku wykonawczego, ale także pomiędzy różnymi wątkami w SMT (możliwy wyciek danych pomiędzy kodem działającym na różnych logicznych rdzeniach procesora).

Badacze zaproponowali podstawową metodę wykrywania zmian w pamięci podręcznej mikrooperacji oraz kilka scenariuszy ataków, które pozwalają na utworzenie ukrytych kanałów transmisji danych i wykorzystanie podatnego kodu do wycieku poufnych danych, zarówno w ramach jednego procesu (na przykład do wycieku danych procesowych podczas wykonywania kodu strony trzeciej w silnikach z JIT i na maszynach wirtualnych) oraz pomiędzy jądrem a procesami w przestrzeni użytkownika.

Organizując wariant ataku Spectre z wykorzystaniem pamięci podręcznej mikrooperacji, badacze byli w stanie osiągnąć wydajność 965.59 Kb/s przy poziomie błędów 0.22% i 785.56 Kb/s przy zastosowaniu korekcji błędów w przypadku zorganizowania wycieku w obrębie tego samego adresu przestrzeń i poziom uprawnień. W przypadku wycieku obejmującego różne poziomy uprawnień (między jądrem a przestrzenią użytkownika) wydajność wyniosła 85.2 Kb/s po dodaniu korekcji błędów i 110.96 Kb/s przy współczynniku błędów 4%. Podczas atakowania procesorów AMD Zen, powodując wyciek pomiędzy różnymi logicznymi rdzeniami procesora, wydajność wynosiła 250 Kb/s przy współczynniku błędów 5.59% i 168.58 Kb/s z korekcją błędów. W porównaniu do klasycznej metody Spectre v1, nowy atak był 2.6 razy szybszy.

Oczekuje się, że ochrona przed atakiem na pamięć podręczną mikrooperacji będzie wymagała zmian, które zmniejszą wydajność bardziej niż w przypadku włączenia ochrony przed atakami Spectre. Jako optymalny kompromis proponuje się blokowanie takich ataków nie poprzez wyłączenie buforowania, ale na poziomie monitorowania anomalii i identyfikowania stanów pamięci podręcznej typowych dla ataków.

Podobnie jak w przypadku ataków Spectre, zorganizowanie wycieku z jądra lub innych procesów wymaga wykonania określonej sekwencji poleceń (gadżetów) po stronie procesów ofiary, co prowadzi do spekulatywnego wykonania instrukcji. W jądrze Linuksa odnaleziono około 100 podobnych gadżetów, które zostaną usunięte, ale okresowo pojawiają się obejścia ich generowania, na przykład związane z uruchamianiem w jądrze specjalnie zaprojektowanych programów BPF.

Źródło: opennet.ru

Dodaj komentarz