Luka w mechanizmie spekulatywnego wykonywania procesorów AMD

Projekt Grsecurity opublikował szczegóły i demonstrację metody ataku na nową lukę (CVE-2021-26341) w procesorach AMD związaną ze spekulatywnym wykonywaniem instrukcji po bezwarunkowych operacjach forward. Jeśli atak się powiedzie, luka umożliwia określenie zawartości dowolnych obszarów pamięci. Badacze przygotowali na przykład exploit, który pozwala im określić układ adresów i ominąć mechanizm ochronny KASLR (randomizacja pamięci jądra), wykonując nieuprzywilejowany kod w podsystemie jądra ePBF. Nie można wykluczyć innych scenariuszy ataku, które mogłyby doprowadzić do wycieku zawartości pamięci jądra.

Luka umożliwia stworzenie warunków, w których procesor podczas wykonywania z wywłaszczaniem wykonuje spekulatywnie instrukcję bezpośrednio po instrukcji skoku do pamięci (SLS, Straight Line Speculation). Co więcej, taka optymalizacja działa nie tylko w przypadku operatorów skoków warunkowych, ale także w przypadku instrukcji, które implikują bezpośredni skok bezwarunkowy, takich jak JMP, RET i CALL. Postępując zgodnie z instrukcjami bezwarunkowego skoku, można umieścić dowolne dane, które nie są przeznaczone do wykonania. Po ustaleniu, że rozgałęzienie nie wiąże się z wykonaniem następnej instrukcji, procesor po prostu wycofuje stan i ignoruje wykonanie spekulatywne, ale ślad wykonania instrukcji pozostaje we współdzielonej pamięci podręcznej i jest dostępny do analizy przy użyciu technik wyszukiwania w kanale bocznym.

Podobnie jak w przypadku wykorzystania luki Spectre-v1, atak wymaga obecności w jądrze określonych sekwencji instrukcji (gadżetów), które prowadzą do wykonania spekulacyjnego. Zablokowanie luki w tym przypadku sprowadza się do zidentyfikowania takich gadżetów w kodzie i dodania do nich dodatkowych instrukcji, które blokują wykonanie spekulacyjne. Warunki wykonania spekulatywnego można także stworzyć wykorzystując programy nieuprzywilejowane uruchomione na maszynie wirtualnej eBPF. Aby zablokować możliwość konstruowania gadżetów przy użyciu eBPF, zaleca się wyłączenie w systemie nieuprzywilejowanego dostępu do eBPF („sysctl -w kernel.unprivileged_bpf_disabled=1”).

Podatność dotyczy procesorów opartych na mikroarchitekturze Zen1 i Zen2, w tym pierwszej i drugiej generacji procesorów AMD EPYC i AMD Ryzen Threadripper, a także AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper Procesory serii PRO i APU A. Aby zablokować spekulatywne wykonanie instrukcji, zaleca się wywoływanie instrukcji INT3 lub LFENCE po operacjach rozgałęzionych (RET, JMP, CALL).

Źródło: opennet.ru

Dodaj komentarz