Procesory Apple Silicon mają lukę sprzętową umożliwiającą wykradzenie kluczy szyfrujących – atak GoFetch
Nie tak dawno zachwycałem się postkwantowym protokołem kryptograficznym zaimplementowanym przez Apple w iMessage i nagle okazuje się, że wszystko jak krew w piach. Co gorsza, problem leży w sprzęcie: dokładniej w procesorach Apple Silicon z serii M.
Naukowcy z różnych amerykańskich placówek badawczych opublikowali informacje na temat potencjalnego ataku pozwalającego ewentualnym agresorom niemal dosłownie wydobyć z zaatakowanej maszyny Apple klucze szyfrujące. Zagrożenie dotyczy wszystkich używanych algorytmów i kluczy zarówno tych klasycznych z kryptografii klucza publicznego (np. OpenSSL Diffie-Hellman, Go RSA), jak i kryptografii postkwantowej, takich jak Dilithium czy Kyber (m.in. Kyber jest wykorzystywany w algorytmie postkwantowym PQ3, o którym pisałem.
iMessage z PQ3 to sensacja – aktualizacja wprowadza postkwantowy protokół kryptograficzny
Nie chcąc nadmiernie epatować technologicznym żargonem postaram się rzecz wyjaśnić prosto. Generalnie nowoczesne procesory wykorzystują tak zwane prefetchery, czyli moduły pobierania wstępnego. Czym są te moduły? Chodzi o wydajność. Mimo rozwoju mikroarchitektury współczesnych procesorów wciąż wąskim gardłem pozostaje komunikacja pomiędzy procesorem a pamięcią. Prefetcher, czy też moduł pobierania wstępnego to sprzętowa sztuczka polegająca na tym, że procesor próbuje pobrać wstępnie z pamięci niewielkie (relatywnie) porcje danych, których może potrzebować kod, który za chwilę zostanie uruchomiony. To tak w wielkim skrócie i uproszczeniu. Prefetchery są stosowane w procesorach od dawna i już dawno też zaobserwowano pewne potencjalne zagrożenia bezpieczeństwa danych wynikające z ich stosowania.
Jednak przez lata wypracowano pewne metody pozwalające uniknąć wykradzenia kodu pobranego przez prefetcher, poprzez np. tzw. programowanie o czasie stałym. Chodzi o taki algorytm, którego czas wykonania nie zależy od rozmiaru danych wejściowych. W kontekście kryptografii, a dokładniej kryptoanalizy, ma to o tyle znaczenie, że znane od dawna są ataki na klucze szyfrujące, polegające na analizie zmian czasu przetwarzania fragmentów kodu. Programowanie o czasie stałym pozwala wyeliminować to zagrożenie, gdyż – teoretycznie – algorytm o czasie stałym nie pozwala na wyśledzenie przez potencjalnego agresora interesujących porcji kodu na podstawie zmian czasu wykonania, bo takich zmian po prostu w algorytmach o czasie stałym nie powinno być. Mam nadzieję, że nadążacie.
Problem jednak polega na tym, że mikroarchitektura chipu Apple Silicon M1 (na nim bazowali wspomniani badacze) ma wadę. Wadę polegającą na tym, że korzysta z nowych modułów prefetcherów, tzw. DMP (prefetcher zależny od pamięci danych; Data Memory-Dependent Prefetcher).
Wspomniani badacze przeprowadzili inżynierię wsteczną modułów DMP i zaobserwowali, że wykonują one coś, czego nie powinny robić w kontekście algorytmów o czasie stałym: mieszają dane i zmieniają ich czas wykonania. W efekcie badacze opracowali atak o nazwie GoFetch, który pozwala agresorowi dosłownie bit po bicie odczytać z zawartości pamięci przetwarzanej przez moduły DMP klucze szyfrujące obecne na danej maszynie. Poniżej fragment z artykułu-opisu ataku GoFetch, opublikowanego przez Georgia Institute of Technology:
Aby wykorzystać DMP, tworzymy wybrane dane wejściowe do operacji kryptograficznych w taki sposób, że wartości przypominające wskaźniki pojawiają się tylko wtedy, gdy poprawnie odgadliśmy niektóre fragmenty tajnego klucza. Weryfikujemy te przypuszczenia, monitorując, czy DMP wykonuje dereferencję poprzez analizę czasu pamięci podręcznej. Kiedy już poprawnie zgadniemy, przystępujemy do odgadywania kolejnej partii kluczowych bitów. Korzystając z tego podejścia, pokazujemy kompleksowe ataki polegające na ekstrakcji klucza na popularne implementacje o stałym czasie klasycznej (OpenSSL Diffie-Hellman Key Exchange, deszyfrowanie Go RSA) i kryptografii postkwantowej (CRYSTALS-Kyber i CRYSTALS-Dilithium).
Istotny jest też kolejny fragment:
Naszym kluczowym spostrzeżeniem jest to, że chociaż DMP usuwa jedynie referencje ze wskaźników, osoba atakująca może stworzyć dane wejściowe programu w taki sposób, że gdy te dane wejściowe zostaną zmieszane z sekretami kryptograficznymi, powstały stan pośredni można zaprojektować tak, aby wyglądał jak wskaźnik wtedy i tylko wtedy, gdy sekret zadowala atakującego. Na przykład wyobraźmy sobie, że program ma sekret s, pobiera x jako dane wejściowe, oblicza, a następnie zapisuje y = s ⊕ x w swojej pamięci programu. Osoba atakująca może stworzyć różne x i wywnioskować częściowe (lub nawet pełne) informacje o s, obserwując, czy DMP jest w stanie wyłuskać y. Najpierw używamy tej obserwacji, aby złamać gwarancje standardowego prymitywu wymiany o stałym czasie, zalecanego do stosowania w implementacjach kryptograficznych. Następnie pokażemy, jak złamać kompletne implementacje kryptograficzne zaprojektowane tak, aby zabezpieczyć się przed atakami z wybranymi danymi wejściowymi.
No dobrze, jest jakiś zaawansowany atak, w czym problem, Apple wypuści łatkę i będzie dobrze, prawda? Cóż, finalnie Apple będzie musiało coś zrobić i najprawdopodobniej już nad tym pracuje, ale zwracam uwagę, że w tym przypadku atak opiera się na luce sprzętowej, a nie podatności w jakimkolwiek kodzie. Innymi słowy: luka tkwi w samej mikroarchitekturze procesorów Apple Silicon M1. Zresztą, nie tylko ich. Badacze twierdzą, że procesory M2 i M3 również mają tę samą podatność, ze względu na fakt, że również korzystają z analogicznej mikroarchitektury i modułów DMP. Klops.
Na pocieszenie mogę dodać, że tę lukę da się załatać. Apple wie o ataku GoFetch od 5 grudnia 2023 roku. Badacze poinformowali korporację na 107 dni przed publikacją swojej pracy naukowej. Jednak poprawka, która ma mieć wpływ na zmianę pracy modułów DMP będzie mieć również wpływ na wydajność całego układu.. Wszak to właśnie zwiększenie wydajności jest kluczową funkcją wykorzystywania prefetcherów.
Brak aktualizacji oznacza tylko tyle, że odpowiednio zdeterminowany agresor z wystarczającą wiedzą, kapitałem i innymi zasobami, może tą drogą wyłuskać z komputera Apple najtajniejsze informacje. Co gorsza, niezależnie od tego jakim kluczem szyfrującym są chronione dane, luka w DMP pozwala poznać sekret w czasie rzędu zaledwie kilka godzin.
Jeżeli jesteście zainteresowani szerszym ujęciem, odsyłam do wspomnianego artykułu na temat ataku GoFetch. A jeżeli jesteście NAPRAWDĘ zainteresowani szczegółami technicznymi, to opublikowany przez wspomnianych badaczy artykuł naukowy (format PDF, język angielski) pt. GoFetch: Breaking Constant-Time Cryptographic Implementations Using Data Memory-Dependent Prefetchers, będzie w sam raz dla was