Naukowcy z Bitdefender
Luka należy do klasy Spectre v1 i opiera się na idei przywracania danych z pamięci podręcznej procesora pozostałej po spekulatywnym wykonaniu instrukcji. Aby poprawić wydajność, jednostki przewidywania rozgałęzień nowoczesnych procesorów korzystają z wywłaszczającego wykonywania niektórych instrukcji, które najprawdopodobniej zostaną wykonane, ale bez czekania na obliczenie wszystkich czynników determinujących ich wykonanie (na przykład, gdy warunki rozgałęzienia lub parametry dostępu nie zostały jeszcze obliczone). Jeśli przewidywanie nie zostanie potwierdzone, procesor odrzuca wynik wykonania spekulatywnego, ale dane przetworzone w jego trakcie pozostają w pamięci podręcznej procesora i można je przywrócić za pomocą metod określania zawartości pamięci podręcznej przez kanały boczne, analizując zmianę dostępu czas na dane buforowane i niebuforowane.
Osobliwością nowego ataku jest wykorzystanie wycieku, który ma miejsce podczas spekulatywnego wykonywania instrukcji SWAPGS, która jest wykorzystywana w systemach operacyjnych do zastąpienia wartości rejestru GS, gdy kontrola przechodzi z przestrzeni użytkownika do jądra systemu operacyjnego (GS wartość używana w przestrzeni użytkownika jest zastępowana wartością używaną podczas operacji w jądrze). W jądrze Linuksa GS przechowuje wskaźnik per_cpu używany do dostępu do danych jądra, a przestrzeń użytkownika przechowuje wskaźniki do TLS (Thread Local Storage).
Aby uniknąć dwukrotnego wywołania instrukcji SWAPGS podczas ponownego dostępu do jądra z przestrzeni jądra lub podczas wykonywania kodu, który nie wymaga zmiany rejestru GS, przed instrukcją wykonywane jest sprawdzenie i rozgałęzienie warunkowe. Silnik wykonywania spekulatywnego aktywnie przystępuje do wykonywania kodu za pomocą instrukcji SWAPGS, nie czekając na wynik sprawdzenia, a jeśli wybrana gałąź nie zostanie potwierdzona, odrzuca wynik. Może więc dojść do sytuacji, gdy spekulacyjnie wybrana zostanie gałąź nie obejmująca wykonania SWAPGS, lecz podczas wykonywania spekulatywnego wartość rejestru GS zostanie zmieniona instrukcją SWAPGS i wykorzystana w zależnych operacjach pamięciowych, które trafiają do pamięci podręcznej procesora.
Badacze zaproponowali dwa scenariusze ataków, dla których przygotowano prototypy exploitów. Pierwszy scenariusz opiera się na sytuacji, w której instrukcja SWAPGS nie jest wykonywana spekulatywnie, choć faktycznie jest wykorzystywana w wykonaniu, natomiast drugi jest odwrotny, gdy instrukcja SWAPGS jest wykonywana spekulatywnie, chociaż w rzeczywistości nie powinna być wykonana. W każdym scenariuszu istnieją dwie możliwości wykorzystania: osoba atakująca może określić wartość pod określonym adresem w obszarze jądra, a osoba atakująca może wyszukać określoną wartość pod losowymi adresami w jądrze. Przeprowadzenie ataku zajmuje dużo czasu, a exploit może potrzebować kilku godzin, aby zakończyć wyciek.
Wystąpił problem z jądrem Linuksa
Poprawka wymaga zainstalowania aktualizacji jądra zarówno w systemie hosta, jak i w środowisku gościa, a następnie ponownego uruchomienia systemu. Aby wyłączyć ochronę w systemie Linux, można użyć opcji „nospectre_v1”, która również wyłącza mechanizmy blokujące lukę SWAPGS. Poprawka jest dostępna jako
Według badaczy z Bitdefender, Intel został poinformowany o problemie już w sierpniu ubiegłego roku. Postanowiono rozwiązać problem programowo, w związku z czym w skoordynowane opracowanie poprawki zaangażowani byli programiści z Microsoft, Google i jądra Linuksa. Starsze procesory Intela, starsze niż Ivy Bridge, są znacznie trudniejsze do zaatakowania ze względu na brak obsługi instrukcji WRGSBASE użytej w exploitie. Problem nie dotyczy systemów ARM, POWER, SPARC, MIPS i RISC-V, ponieważ nie obsługują instrukcji SWAPGS.
Problem dotyka głównie właścicieli procesorów Intel -
Na układach AMD udało się odtworzyć jedynie drugi scenariusz ataku, który ogranicza się do spekulatywnego przetwarzania wartości bazowej rejestru GS, za pomocą której można szukać określonych wartości w obszarach pamięci losowej. Aby zablokować tę opcję ataku
Źródło: opennet.ru