Luki w zabezpieczeniach eBPF, które mogą ominąć ochronę przed atakiem Spectre 4

W jądrze Linuksa zidentyfikowano dwie luki, które umożliwiają podsystemowi eBPF ominięcie ochrony przed atakami Spectre v4 (SSB, Speculative Store Bypass). Korzystając z nieuprzywilejowanego programu BPF, atakujący może stworzyć warunki do spekulacyjnego wykonania pewnych operacji i określić zawartość dowolnych obszarów pamięci jądra. Podsystemy Escort eBPF w jądrze uzyskały dostęp do prototypowego exploita, który pokazuje możliwość przeprowadzenia ataków w praktyce. Problemy zostały naprawione w postaci łatek (1, 2), które będą częścią następnej aktualizacji jądra Linuksa. Aktualizacje w dystrybucjach nie zostały jeszcze utworzone (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Metoda ataku Spectre 4 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 (na przykład mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), przesunięcie adresu odczytu może być już znane z powodu wykonywania podobnych operacji (operacje odczytu są wykonywane znacznie częściej i odczyt może być wykonywany z pamięci podręcznej), a procesor może spekulacyjnie wykonać odczyt przed zapisem bez czekania na obliczenie przesunięcia kierunku zapisu.

Jeśli po obliczeniu przesunięcia zostanie wykryte przecięcie obszarów pamięci do zapisu i odczytu, procesor po prostu odrzuci otrzymany już spekulacyjnie wynik odczytu i powtórzy tę operację. Ta cecha umożliwia instrukcji odczytu dostęp do starej wartości pod jakimś adresem, gdy operacja zapisu nie została jeszcze zakończona. Po odrzuceniu nieudanej operacji spekulacyjnej w pamięci podręcznej pozostają ślady jej wykonania, po czym jedną z metod określania zawartości pamięci podręcznej na podstawie analizy zmian czasu dostępu do danych buforowanych i niebuforowanych można użyć do odzyskania To.

Pierwsza luka (CVE-2021-35477) jest spowodowana luką w mechanizmie weryfikacji programu BPF. Aby zabezpieczyć się przed atakiem Spectre 4, weryfikator dodaje do pamięci dodatkową instrukcję po potencjalnie problematycznych operacjach store, zapisując wartość zero, aby zatrzeć ślady poprzedniej operacji. Operacja zapisu zerowego miała być bardzo szybka i blokować spekulatywne wykonanie, ponieważ zależy tylko od wskaźnika do ramki stosu BPF. Okazało się jednak, że możliwe jest stworzenie warunków, w których instrukcja prowadząca do wykonania spekulacyjnego ma czas na wykonanie przed operacją magazynu z wywłaszczaniem.

Druga luka (CVE-2021-3455) związana jest z faktem, że w przypadku wykrycia potencjalnie niebezpiecznych operacji zapisywania pamięci przez weryfikator BPF, niezainicjowane obszary stosu BPF nie są brane pod uwagę, pierwsza operacja zapisu do której nie jest chroniona . Cecha ta prowadzi do możliwości wykonania spekulatywnej operacji odczytu, zależnej od niezainicjowanego obszaru pamięci, przed wykonaniem instrukcji składowania. Nowa pamięć dla stosu BPF jest przydzielana bez sprawdzania zawartości już znajdującej się w przydzielonej pamięci i istnieje sposób zarządzania zawartością obszaru pamięci, który zostanie następnie przydzielony do stosu BPF przed uruchomieniem programu BPF.

Źródło: opennet.ru

Dodaj komentarz