Badacze z Massachusetts Institute of Technology odkryli technikę ataku TONTOU (Time-of-Neutralization to Time-of-Use), która oferuje nowy sposób wykorzystania mikroarchitektonicznych luk klasy Spectre v2. Luka ta umożliwia określenie zawartości pamięci jądra podczas wykonywania exploita w przestrzeni użytkownika. Kod mający na celu zablokowanie wykorzystania tej luki został włączony do jądra Linux 5 sierpnia i jest częścią wydań 7.1.7, 6.18.43, 6.12.102, 6.6.149, 6.1.181, 5.15.214 i 5.10.263.
Badacze pokazali możliwość przeprowadzenia ataku przez lokalnego użytkownika bez uprawnień w celu określenia hasha hasła użytkownika root, przechowywanego w pliku /etc/shadow i ładowanego do pamięci podczas realizacji autoryzacji w systemie. Udało im się uzyskać wyciek danych z pamięci jądra z wydajnością 5.47 bajtów na sekundę i dokładnością 91.97%. Z 10 testowych uruchomień exploita, które trwały średnio 18 minut, w połowie przypadków udało się skutecznie określić obecność pliku /etc/shadow w pamięci i wydobyć jego zawartość.
Exploity zademonstrowano na systemach z procesorami AMD i mogą być stosowane z CPU AMD z rodzin Zen 1-4. Na systemach Intel atak również jest możliwy, ale jego wykorzystanie jest bardziej skomplikowane. Aby chronić przed przepełnieniem stosu adresów powrotu i blokować lukę SRSO (Speculative Return Stack Overflow), procesory AMD stosują mechanizm ochrony Safe-RET, który czyści bufor predykcji przejść po każdym użyciu i ogranicza okno przeprowadzania ataku do 2 instrukcji wykonywanych w ciągu kilkudziesięciu nanosekund.
Aby obejść tę ochronę i rozszerzyć okno ataku, zastosowano technikę spowolnienia CPU, co pozwoliło wykonać podstawienie przerwania w odpowiednim momencie w celu przekierowania strumienia wykonania w jądrze oraz wykorzystania obsługi przerwania do zniekształcenia wpisu w buforze przewidywania skoków. Aby wykorzystać podatność SRSO, atakujący może stworzyć warunki, w których blok przewidywania skoków spekulatywnie wykona dużą liczbę niepoprawnie przewidzianych wywołań CALL, wystarczających do przepełnienia stosu adresów powrotu i nadpisania poprawnie przewidzianych punktów powrotu, umieszczonych na początku stosu. W rezultacie początkowe elementy stosu mogą zostać nadpisane wybranymi przez atakującego wartościami, co później doprowadzi do użycia tych zamienionych wartości podczas spekulatywnego wykonania instrukcji RET w kontekście innego procesu.
Procesor zidentyfikuje, że przewidywanie gałęzi się nie powiodło i wycofa operację do pierwotnego stanu, ale dane przetworzone w trakcie spekulatywnego wykonania osiedlą się w pamięci podręcznej i mikroarchitektonicznych buforach. Jeśli błędnie wykonany blok uzyskuje dostęp do pamięci, jego spekulatywne wykonanie doprowadzi do osadzenia w wspólnej pamięci podręcznej i danych odczytanych z pamięci. Do wydobycia informacji z pamięci podręcznej można zastosować jedną z metod analizy zmian czasu dostępu do danyche i nieprzechowywanych danych.
Źródło: opennet.ru
