AMD potwierdziło potencjalną podatność procesorów AMD Zen 3 na atak Spectre-STL

AMD opublikowało raport analizujący bezpieczeństwo technologii optymalizacyjnej PSF (Predictive Store Forwarding) zaimplementowanej w procesorach serii Zen 3. Badanie teoretycznie potwierdziło możliwość zastosowania zidentyfikowanej w maju 4 roku metody ataku Spectre-STL (Spectre-v2018) do technologii PSF, jednak w praktyce nie odnaleziono jeszcze żadnych szablonów kodu, które mogłyby doprowadzić do ataku, a ogólne zagrożenie ocenia się jako nieistotne.

Przypomnijmy, że atak Spectre-v4 (Speculative Store Bypass) polega na przywróceniu danych, które osiadły w pamięci podręcznej procesora po odrzuceniu wyniku spekulatywnego wykonania operacji podczas przetwarzania naprzemiennych operacji zapisu i odczytu z wykorzystaniem adresowania pośredniego. Gdy operacja odczytu następuje po operacji zapisu (np. mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), przesunięcie adresu odczytu może już być znane z powodu wykonywania podobnych operacji (operacje odczytu są wykonywane znacznie częściej i odczyty mogą być wykonywane z pamięci podręcznej), a procesor może spekulacyjnie wykonywać odczyty przed zapisami, nie czekając na obliczenie pośredniego przesunięcia zapisu.

Ta funkcja umożliwia instrukcji odczytu dostęp do starej wartości pod pewnym adresem, podczas gdy operacja zapisywania nie została jeszcze ukończona. Jeżeli wystąpi błąd przewidywania, nieudana operacja spekulacyjna zostanie odrzucona, ale ślady jej wykonania pozostaną w pamięci podręcznej procesora i można je odzyskać jedną z metod określania zawartości pamięci podręcznej na podstawie analizy zmian w dostępie czas na dane buforowane i niebuforowane.

Dodany do procesorów AMD Zen 3, PSF optymalizuje STLF (Store-To-Load-Forwarding), który wykonuje operacje odczytu w sposób spekulacyjny, przewidując związek między operacjami odczytu i zapisu. Używając klasycznego STLF, procesor wykonuje operację „load” na danych przekazanych bezpośrednio z poprzedniego polecenia „store”, nie czekając na faktyczne zapisanie wyniku do pamięci, ale upewniając się, że adresy użyte w „load” i polecenia „store” są zgodne. Optymalizacja PSF sprawia, że ​​sprawdzanie adresów ma charakter spekulacyjny i wykonuje operację „ładowania” przed obliczeniem informacji adresowych, jeśli wcześniej została wykonana para przechowywania/ładowania manipulująca pojedynczym adresem. Jeśli przewidywanie się nie powiedzie, stan zostanie cofnięty, ale dane pozostaną w pamięci podręcznej.

Atak na PSF jest możliwy tylko w ramach jednego poziomu uprawnień, obejmuje jedynie bieżący kontekst procesu i jest blokowany metodami izolacji przestrzeni adresowej lub mechanizmami sprzętowego piaskownicy. W takim przypadku problem może potencjalnie dotyczyć metod piaskownicy oprogramowania w procesach. Atak stwarza zagrożenie dla systemów, takich jak przeglądarki, maszyny wirtualne wykonujące kod i zespoły JIT, które wykonują kod strony trzeciej w ramach jednego procesu (atak może pozwolić niezaufanemu kodowi z piaskownicy uzyskać dostęp do innych danych procesowych).

Firma AMD udostępniła szereg metod całkowitego lub selektywnego wyłączania PSF, ale biorąc pod uwagę znikome ryzyko dla większości aplikacji, zaleciła, aby ta optymalizacja nie była domyślnie wyłączana. Aby selektywnie chronić procesy izolujące procesy wykonujące niezaufany kod, proponuje się wyłączenie PSF poprzez ustawienie bitów MSR „SSBD” i „PSFD”, także dla poszczególnych wątków. Przygotowano poprawki dla jądra Linuksa z implementacją opcji wiersza poleceń „psfd” i „nopsfd”, które kontrolują sposób włączania i wyłączania PSF.

Źródło: opennet.ru

Dodaj komentarz