W procesorach AMD opartych na mikroarchitekturach Zen+ i Zen 2 wykryto podatność klasy Meltdown

Grupa badaczy z Politechniki Drezdeńskiej zidentyfikowała lukę (CVE-2020-12965) w procesorach AMD opartych na mikroarchitekturach Zen+ i Zen 2, która umożliwia atak klasy Meltdown. Początkowo zakładano, że procesory AMD Zen+ i Zen 2 nie są podatne na lukę Meltdown, jednak badacze zidentyfikowali funkcję, która prowadzi do spekulacyjnego dostępu do chronionych obszarów pamięci w przypadku korzystania z niekanonicznych adresów wirtualnych.

Architektura AMD64 wykorzystuje tylko pierwsze 48 bitów adresu wirtualnego i ignoruje pozostałe 16 bitów. Określono, że bity od 48 do 63 muszą zawsze kopiować wartość bitu 47 (rozszerzenie bitu znaku). Jeżeli ten warunek zostanie naruszony i nastąpi próba dostępu do adresu z dowolnymi wartościami górnych bitów, procesor generuje wyjątek. Wielokrotne wypełnianie górnych bitów powoduje podzielenie dostępnej przestrzeni adresowej na dwa bloki - dolny (od 0 do 00007FFFFFFFFFFFFFF), w którym górne bity ustawione są na 800000000000, oraz górny (od FFFF1 do FFFFFFFFFFFFFFFF), w którym wszystkie górne bity są ustawione na XNUMX.

Adresy mieszczące się w określonych blokach nazywane są kanonicznymi, a adresy nieprawidłowe z dowolną zawartością górnych bitów nazywane są niekanonicznymi. Dolny zakres adresów kanonicznych jest zazwyczaj przydzielany dla danych procesowych, natomiast górny zakres jest wykorzystywany dla danych jądra (dostęp do tych adresów z przestrzeni użytkownika jest blokowany na poziomie separacji uprawnień).

Klasyczna podatność Meltdown polega na tym, że podczas spekulacyjnego wykonywania instrukcji procesor może uzyskać dostęp do prywatnego obszaru danych, a następnie odrzucić wynik, ponieważ ustawione uprawnienia zabraniają takiego dostępu z procesu użytkownika. W programie wykonywany spekulatywnie blok jest oddzielony od kodu głównego gałęzią warunkową, która w rzeczywistych warunkach zawsze uruchamia się, jednak ze względu na to, że instrukcja warunkowa wykorzystuje obliczoną wartość, której procesor nie zna podczas wyprzedzającego wykonywania kodu, wszystkie opcje oddziałów realizowane są spekulacyjnie.

Ponieważ operacje wykonywane spekulacyjnie korzystają z tej samej pamięci podręcznej, co instrukcje wykonywane normalnie, podczas wykonywania spekulatywnego możliwe jest ustawienie w pamięci podręcznej znaczników odzwierciedlających zawartość poszczególnych bitów w obszarze pamięci prywatnej, a następnie w normalnie wykonywanym kodzie określenie ich wartości poprzez synchronizację analiza dostępu do danych buforowanych i niebuforowanych.

Cechą nowej luki wpływającej na procesory AMD Zen+ i Zen 2 jest to, że procesory umożliwiają spekulatywne operacje odczytu i zapisu, które uzyskują dostęp do pamięci przy użyciu nieprawidłowych, niekanonicznych adresów, po prostu ignorując górne 16 bitów. Zatem podczas wykonywania kodu spekulatywnego procesor zawsze wykorzystuje tylko dolne 48 bitów, a ważność adresu jest sprawdzana osobno. Jeśli podczas tłumaczenia niekanonicznego adresu wirtualnego na adres fizyczny w buforze translacji asocjacyjnej (TLB) zostanie wykryte dopasowanie w części kanonicznej adresu, wówczas operacja spekulatywnego ładowania zwróci wartość bez uwzględnienia zawartości górnych 16 bitów, co umożliwia ominięcie współdzielenia pamięci pomiędzy wątkami. Następnie operacja zostanie uznana za nieważną i odrzucona, ale dostęp do pamięci zostanie zakończony, a dane znajdą się w pamięci podręcznej.

W trakcie eksperymentu, wykorzystując technikę określania zawartości pamięci podręcznej FLUSH+RELOAD, badaczom udało się zorganizować kanał do ukrytego przesyłania danych z szybkością 125 bajtów na sekundę. Oprócz chipów AMD problem dotyczy także wszystkich procesorów Intela, które są podatne na klasyczną lukę Meltdown. Do ochrony przed nowym typem ataku można zastosować te same techniki, które pomagają blokować ataki Meltdown, takie jak użycie instrukcji LFENCE. Przykładowo, jeśli procesor Intel posiada sprzętową ochronę przed Meltdown lub system ma włączoną ochronę programową, to takie konfiguracje nie są podatne na nowy wariant ataku.

Jednocześnie badacze zauważają, że w porównaniu do procesorów Intela architektura procesorów AMD ogranicza możliwość przeprowadzania realnych ataków, ale nie wyklucza zastosowania nowej metody w połączeniu z innymi atakami mikroarchitekturowymi w celu zwiększenia ich efektywności. W szczególności proponowany atak nie pozwala na ustalenie zawartości obszarów pamięci jądra i innych procesów, lecz ogranicza się do możliwości uzyskania dostępu do innych wątków tego samego programu działającego w tej samej przestrzeni pamięci wirtualnej.

Ponieważ program pozbawiony luki ma możliwość uzyskania dostępu do swoich wątków, z praktycznego punktu widzenia metoda jest interesująca w celu ominięcia izolacji piaskownicy i zorganizowania ingerencji w pracę innych wątków w programach, które umożliwiają wykonywanie zewnętrznych kod, taki jak przeglądarki internetowe i silniki JIT. Badacze sprawdzili podatność silnika JavaScript SpiderMonkey i jądra Linuksa na atak, ale nie znaleźli podatnych na ataki sekwencji kodu, które można by wykorzystać do przeprowadzenia ataku. Oprócz atakowania aplikacji metodę tę można również wykorzystać do wymuszenia niedopuszczalnego przepływu danych pomiędzy elementami mikroarchitektury procesora, wykorzystując jednocześnie inne luki w zabezpieczeniach mikroarchitektury.

Źródło: opennet.ru

Dodaj komentarz