Żądny wiedzy? Wbijaj na Mega Sekurak Hacking Party w maju! -30% z kodem: majearly

GoFetch – atak typu side channel na procesory od Apple

29 marca 2024, 11:18 | W biegu | 1 komentarz

Nowoczesne procesory mają wbudowane mechanizmy pozwalające na optymalizację wydajności. Niektóre z funkcji optymalizacyjnych opierają się na wykorzystaniu dodatkowej, niewielkiej ale szybkiej pamięci cache, która w przypadku prawidłowego przewidzenia wykonania programu, znacznie obniża czas oczekiwania na dane pobierane z wolniejszych nośników. Przewidywać można nie tylko fragmenty pamięci, które mogą być zaraz potrzebne, ale też wyniki różnych operacji, np. przepływu w programie (predykcja operacji skoku). To wszystko pozwala zyskać cenne nanosekundy w czasie wykonania programu. Te z pozoru marginalne oszczędności, wykorzystywane coraz częściej dzięki statystycznej optymalizacji, potrafią w efekcie dać zauważalną różnicę. Pierwsze patche na podatności Spectre i Meltdown miały nieść za sobą stratę wydajności rzędu 30%. Na szczęście wskutek optymalizacji, dało się ten wpływ zredukować do 1-5% (w specyficznych przypadkach straty te mogą sięgać założonych 30% np. w przypadku wirtualizacji). 

Ataki bocznego kanału (ang. side channel attacks) korzystają z nieoczywistych wskaźników, takich jak zużycie energii czy czas wykonania instrukcji, w celu obejścia różnych zabezpieczeń, np. wyciągnięcia kluczy kryptograficznych. Atakujący może przeanalizować chociażby czas wykonania instrukcji dla różnych przypadków wejściowych i na podstawie tej dodatkowej, z pozoru niewiele zmieniającej informacji, wyciągnąć wnioski na temat badanego systemu. 

Tym razem pod lupę badaczy trafiły procesory zaprojektowane przez firmę Apple – ARM z rodziny M. Znaleźli oni lukę, która została określona mianem GoFetch (i jak na podatność w roku 2024 przystało posiada swoje logo-maskotkę). Podatność wynika z faktu wykorzystania memory-dependant prefetchers (DMP) czyli mechanizmów wbudowanych w procesor, które pozwalają przeglądać pamięć procesu w poszukiwaniu wartości, które mogą być adresami. W przypadku odkrycia sekwencji spełniającej założone warunki, możliwe jest pobranie fragmentu danych, do których odwołuje się odnaleziony adres, do pamięci podręcznej procesora. W efekcie nie ma potrzeby oczekiwania na wolniejsza operację kopiowania danych z pamięci operacyjnej do cache, ponieważ one już tam będą. Nie jest to pierwsza podatność dotykająca procesory Apple i niestety jak w większości przypadków nie da się jej fizycznie załatać bez wymiany CPU na taki, który nie korzysta z DMP, lub korzysta z nich w sposób bardziej restrykcyjny (jak np. Intel Raptor Lake 13th gen, co zauważają badacze w przytoczonej publikacji). Oczywiście wydane zostaną softwarowe łatki, które będą miały wpływ na wydajność procesorów. 

Badacze przyjrzeli się działaniu DMP, który jest aktywowany w każdym programie, niezależnie od trybu w jakim się uruchamia i próbuje wykonać operację dereferencji dla każdego ciągu przypominającego poprawny adres pamięci. 

Zaleceniem i dobrą praktyką w przypadku implementacji kryptografii jest constant-time programming paradigm. Jest to paradygmat, który w swoich założeniach mówi o zachowaniu takich praktyk wytwarzania oprogramowania aby czas wykonywania instrukcji był stały niezależnie od tego co dane instrukcje wykonują oraz jaki jest ich wynik. Wymaga to trzymania się rygorystycznych zasad, między innymi:

  • unikania skoków warunkowych na wrażliwych danych
  • jednorodny dostęp do pamięci (niezależny od wrażliwych danych)
  • pętle o stałej liczbie iteracji

Przez zastosowanie DMP, który optymalizuje dostępy do pamięci, przez operacje na każdym ciągu przypominającym adres, naruszona zostaje zasada sposobu wykonywania odczytów pamięci. Wykorzystanie tej własności umożliwia np. stworzenie takich danych wejściowych dla operacji kryptograficznych, że DMP będzie się uruchamiał tylko w momencie poprawnego odgadnięcia niektórych bitów sekretów. DMP stanowi tutaj swego rodzaju wyrocznię, która pozwala na weryfikację odgadniętych wartości przez monitorowanie czasu dostępów do cache. Proces ataku przebiega iteracyjnie i pozwala odzyskać klucz kawałek po kawałku.

PoC (ang. Proof-of-Concept) demonstrujący atak pozwala na ekstrakcję klucza ze znanych rozwiązań kryptograficznych zarówno klasycznych (np. OpenSSL DH KEX) czy bardziej nowoczesnych, mających na celu mitygację ataków ery komputerów kwantowych (np. CRYSTALS-Kyber). Kod exploitu zostanie opublikowany niebawem, jednak już teraz zostało umieszczone nagranie z działającej implementacji, która kradnie klucz RSA z działającego serwera. Jest to oczywiście atak lokalny, czyli atakujący musi mieć możliwość uruchomienia procesu na tym samym procesorze co ofiara. 
Zobaczcie video:

Tabela prezentująca rezultaty ataków na cztery algorytmy kryptograficzne: (źródło: gofetch)

Badania były przeprowadzone na pierwszej generacji procesorów (M1), jednak eksperymenty na nowszych wersjach (zarówno M2 jak i M3) pokazują, że być może te procesory również są podatne na atak. Procesory M3 pozwalają na wyłączenie mechanizmu DMP przy pomocy ustawienia odpowiedniego bitu (konkretnie DIT bit). Będzie to ustawienie pożądane przez developerów implementujących funkcje kryptograficzne. Ta flaga nie jest dostępna dla wcześniejszych wersji procesorów Apple. Na ten moment nie podano czy możliwe będzie zastosowanie mitygacji w postaci łatek mikrokodu. Jeśli tak, to będą one niosły za sobą ograniczenia wydajności przy niektórych operacjach. 

~fc

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Szymon

    Nic nie zrozumiałem. Chyba tłumaczone i łączone w całość na partyzanta.

    Odpowiedz

Odpowiedz