SLAP & FLOP: podatności związane z mechanizmami spekulacji i predykcji w Apple Silicon

Współczesne procesory (CPU) wykorzystują mechanizmy spekulacji (ang. speculative execution)
oraz przewidywania (ang. prediction) w celu zwiększenia wydajności. Niestety optymalizacje
te wprowadzają nowe podatności związane z bezpieczeństwem. Dwa związane z nimi ataki wykorzystują predykcyjne mechanizmy Apple Silicon do wycieku wrażliwych danych poprzez wykonania spekulacyjne, są to:
- SLAP (Spekulacyjne Przewidywanie Adresu Załadowania, ang.Speculative Load Address Prediction)
- FLOP (Błędne Przewidywanie Wyniku Załadowania, ang. False Load Output Predictions)
W tym artykule omówimy te ataki, ich konsekwencje oraz możliwe metody ich ograniczania. Miłej lektury!
SLAP: Speculative Load Address Prediction
SLAP wykorzystuje mechanizm przewidywania adresów ładowania (ang. Load Address Predictor, LAP)
w procesorach Apple, który przewiduje adresy pamięci dla instrukcji załadowania na podstawie wcześniejszych wzorców dostępu. Jeśli przewidziany adres znajduje się w pamięci podręcznej (cache), procesor spekuluje i ładuje dane z tego adresu, zanim zweryfikuje rzeczywisty adres pamięci.
Odkrycie mechanizmu Load Address Predictor
Badacze z Georgia Institute of Technology oraz Ruhr University Bochum zidentyfikowali istnienie mechanizmu LAP na procesorach Apple M2, M3 oraz serii A (A15 i nowsze). Przeprowadzili eksperymenty, które wykazały znaczące przyspieszenie wykonywania kodu podczas ładowania danych w schemacie sekwencyjnym (ang. striding pattern, czyli wzrastające adresy pamięci w uporządkowany sposób). To przyspieszenie wskazuje, że LAP spekulacyjnie ładuje przewidywane adresy jeszcze przed ich rzeczywistą weryfikacją.

Źródło: http://predictors.fail/files/SLAP.pdf
Eksploitacja LAP
- Odczyty poza zakresem pamięci: Manipulując mechanizmem LAP, atakujący może oszukać CPU, aby spekulacyjnie załadowało wrażliwe dane spoza przydzielonego obszaru pamięci.
- Omijanie ASLR (Losowe Rozmieszczenie Przestrzeni Adresowej, ang. Address Space Layout Randomization): Spekulacyjne wykonanie LAP ujawnia informacje o układzie pamięci, co pozwala ominąć mechanizmy ASLR.
- Ataki na przeglądarkę (ang. Browser Attacks): Atak SLAP wykorzystujący JavaScript pozwala
na wyciąganie wrażliwych danych ze stron internetowych, wykorzystując sposób, w jaki Safari zarządza obiektami JavaScript.
Rzeczywiste skutki
SLAP może być użyty do wykradania poufnych danych z sesji przeglądarki użytkownika, takich jak e-maile z Gmaila czy dane logowania do stron internetowych. Atak jest trudny do wykrycia i działa wewnątrz zamkniętego środowiska pracy przeglądarki (ang. browser sandbox).
FLOP: False Load Output Predictions
FLOP atakuje mechanizm przewidywania wartości załadowania (ang. Load Value Predictor, LVP)
w procesorach Apple, który przewiduje wartości danych ładowanych z pamięci, aby przyspieszyć wykonywanie kodu. Gdy LVP błędnie przewidzi wartość, CPU może operować na nieprawidłowych danych, co potencjalnie prowadzi do wycieku wrażliwych informacji.
Odkrycie wykorzystania mechanizmu Load Value Predictor
Badacze zaobserwowali, że procesory Apple optymalizują zależności typu Read-After-Write (RAW)
za pomocą mechanizmu LVP. LVP uaktywnia się, gdy ta sama wartość jest wielokrotnie ładowana
z pamięci, co pozwala na spekulacyjne wykonanie kolejnych operacji z przewidywaną wartością.

Eksploitacja LVP
- Zamiana typów w Safari: Manipulując LVP, atakujący może oszukać silnik JavaScript przeglądarki Safari, aby używał przewidywanej wartości jako wskaźnika, co prowadzi do dowolnego dostępu do pamięci.
- Przejęcie wykonywania WebAssembly w Chrome: W Chrome, FLOP może błędnie przewidzieć wywołania funkcji WebAssembly, prowadząc do spekulacyjnego wykonania niepożądanych funkcji.
- Ataki na poziomie jądra: Jeśli atakujący znajdą odpowiednie mechanizmy w jądrze systemu, FLOP może zostać wykorzystany do obejścia zabezpieczeń jądra, zwiększając zakres ataku.
Rzeczywiste skutki
FLOP umożliwia atakującym wyciąganie prywatnych danych z sesji przeglądarki, takich jak historia przeglądania, tokeny uwierzytelniające, a nawet dane kart kredytowych przechowywane w aplikacjach webowych – podobnie jak SLAP. Możliwość spekulacyjnego wykonywania dowolnych funkcji czyni go poważnym wektorem ataku.
Różnice między SLAP oraz FLOP
Cecha | SLAP (Spekulacyjne Przewidywanie Adresu Załadowania) | FLOP (Błędne Przewidywanie Wyniku Załadowania) |
---|---|---|
Mechanizm | Przewiduje adresy pamięci dla operacji ładowania | Przewiduje wartości ładowanych danych |
Zakres ataku | Spekulacyjny rozkład adresów | Spekulacyjne wykonanie na nieaktualnych wartościach |
Dotknięte CPU | Apple M2, M3, A15, A16, A17 | Apple M3, M4, A17 Pro |
Kluczowy wektor ataku | Odczyty poza zakresem pamięci | Zamiana typów, przejęcie funkcji |
Przykłady ataków w przeglądarce | Eksploatacja silnika JavaScript w Safari | Przekierowanie funkcji WebAssembly w Chrome |
Strategie łagodzenia skutków ataków
Oprogramowanie
- Wyłączenie spekulacji w JavaScript: Przeglądarki mogą wdrożyć ścisłe sprawdzanie typów, aby zapobiec spekulacyjnym błędom typów.
- Wymuszenie izolacji pamięci: Przeglądarki internetowe powinny izolować obszary pamięci, aby zapobiegać spekulacyjnym wyciekom danych między domenami.
- Wykorzystanie Data-Independent Timing (DIT): Ustawienie bitu DIT w architekturze ARM ISA wyłącza LVP, zapobiegając błędnym przewidywaniom.
Sprzęt
- Bariery spekulacyjne: Apple może wprowadzić mikroarchitektoniczne bariery ograniczające spekulacyjne dostępy do pamięci.
- Ograniczenie LVP i LAP: Redukcja okna predykcji lub wdrożenie kontroli integralności dla przewidywanych adresów i wartości może złagodzić te podatności.
- Łatki naprawiające: Apple może wydać aktualizacje firmware’u modyfikujące zachowanie spekulacyjnego wykonania, zmniejszając podatność na ataki.
Podsumowanie
Ataki FLOP i SLAP stanowią poważne zagrożenie, ponieważ umożliwiają zdalne wykorzystanie podatności sprzętowych Apple bez konieczności fizycznego dostępu do urządzenia. Wystarczy odwiedzenie złośliwej strony internetowej, aby uruchomić atak i wyjść poza zamknięte środowisko pracy przeglądarki (ang. browser sandobx), ASLR oraz konwencjonalne zabezpieczenia pamięci.
Tymczasowe rozwiązanie polega na wyłączeniu JavaScript w Safari i Chrome, jednak może to zakłócić działanie wielu stron internetowych.
Więcej szczegółów można znaleźć w pełnych publikacjach badawczych:
Dodatkowe informacje, demonstracje i FAQ dostępne są na stronie: https://predictors.fail/.
Jeśli ten artykuł Cię zainteresował i chcesz poszerzyć swoją wiedzę na temat cyberbezpieczeństwa, zachęcamy do regularnego odwiedzania naszego bloga AFINE, gdzie znajdziesz więcej wartościowych informacji.
Jeśli interesuje Cię system macOS i chcesz zgłębić tematykę Apple Security, warto dodać do zakładek repozytorium Snake_Apple, gdzie znajdziesz wszystkie moje artykuły na ten temat.