Grupa badaczy z Uniwersytetu Wolnego w Amsterdamie przedstawiła nową technikę ataku SLAM (Spectre Linear Address Masking), oferującą nowy sposób wykorzystania mikroarchitektonicznych podatności klasy Spectre, w którym wyciek danych następuje podczas translacji niekanonicznych adresów, a do obejścia weryfikacji kanoniczności wykorzystywane są w nowych procesorach rozszerzenia do maskowania adresów liniowych. Badacze opublikowali narzędzie z realizacją metody i zaproponowali demonstrację, pokazującą jak można wydobyć z pamięci jądra dane odpowiadające określonej masce (pokazano jak w ciągu kilku dziesiątek sekund na Ubuntu wydobyć z pamięci jądra ciąg z hashem hasła użytkownika root).

Atak może być przeprowadzony na systemach z procesorami Intel obsługującymi rozszerzenie LAM (Linear Address Masking), procesorami AMD z rozszerzeniem UAI (Upper Address Ignore) oraz procesorami ARM z rozszerzeniem TBI (Top Byte Ignore). Wskazane rozszerzenia pozwalają wykorzystać część bitów 64-bitowych wskaźników do przechowywania niepowiązanych z adresowaniem metadanych (dla zwykłych programów nie jest wymagana taka pamięć, która może adresować 64-bitowe wskaźniki, dlatego górne bity mogą być wykorzystywane do np. zabezpieczeń). Co ciekawe, procesory Intel, AMD i ARM z obsługą LAM, UAI i TBI są dopiero zapowiadane, ale nie są jeszcze masowo produkowane, co czyni SLAM pierwszą spekulatywną atakiem na przyszłe CPU. Atak może być także przeprowadzony na starszych CPU AMD Zen+ i Zen 2, podatnych na podatność CVE-2020-12965.
Podobnie jak w przypadku wykorzystania luk Spectre, do przeprowadzenia ataku SLAM konieczna jest obecność w jądrze określonych sekwencji instrukcji (gadżetów), które prowadzą do spekulatywnego wykonania instrukcji. Takie instrukcje prowadzą do spekulatywnego odczytu danych z pamięci w zależności od warunków zewnętrznych, na które może wpływać atakujący. Po ustaleniu błędnego prognozowania wynik spekulatywnego wykonania jest odrzucany, ale przetworzone dane pozostają w cache'u i mogą być później odzyskane poprzez analizę po bocznych kanałach. Aby wydobyć dane, które osiadły w cache'u, badacze wykorzystali metodę Evict+Reload, opartą na stworzeniu warunków do wypchnięcia danych z cache'a (na przykład tworzona jest aktywność, która równomiernie zapełnia cache typową zawartością) oraz wykonywaniu operacji, których czas wykonania pozwala ocenić obecność danych w cache'u procesora.
Do przeprowadzenia ataku SLAM wykorzystywane są gadżety oparte na kodzie, w którym kontrolowane przez atakującego dane (poniżej zmienna „secret”) są używane jako wskaźnik. Na przykład: void unmasked_gadget(long **secret) { **secret; }
Zauważono, że podobne wzorce kodu często występują w programach; na przykład w jądrze Linux zidentyfikowano dziesiątki tysięcy takich gadżetów, z których co najmniej kilkaset nadaje się do użycia w exploitach. Utrata danych może być zablokowana poprzez dodanie dodatkowych instrukcji do takich gadżetów, blokujących spekulatywne wykonanie. Firma Intel zamierza dostarczyć programowy sposób blokowania wycieku przed rozpoczęciem dostaw procesorów obsługujących LAM. Firma AMD zaleciła korzystanie z istniejących metod blokowania ataków z klasy Spectre v2. Twórcy jądra Linux zdecydowali się na wyłączenie wsparcia dla LAM domyślnie, aż do opublikowania zaleceń firmy Intel dotyczących blokowania tej luki.
Źródło: opennet.ru
