Spectre na Apple M1 i nieskuteczne łatki: Google prezentuje atak kanałem bocznym w praktyce

Podatności w kanale bocznym może i istnieją, ale pokażcie praktyczny przykład ich wykorzystania, zdawali się mówić sceptycy. No więc Google pokazał, i to w spektakularnym stylu.

Spectre na Apple M1 i nieskuteczne łatki: Google prezentuje atak kanałem bocznym w praktyce
Piotr Urbaniak

14.03.2021 20:55

Leaky.page to stworzona przez inżynierów Google strona internetowa, która na żywym organizmie pokazuje, jak można wyciągnąć dane kanałem bocznym z prędkością około 1 kB/s, wykorzystując JavaScript. Kod powstał z myślą o przeglądarce Chrome i procesorach Intel Skylake, ale działa także na innych konfiguracjach, w tym nowych Macach z procesorem Apple M1.

Nawiasem, ta ostatnia informacja jest o tyle ważna, że wcześniej o sprzętowych podatnościach M1 mówiono głównie w charakterze domysłu. A tu proszę, mamy obrazowy dowód. Co zaś dodatkowo warte podkreślenia, Google wspomina o możliwości nawet ośmiokrotnego zwiększenia szybkości transferu, aczkolwiek kosztem precyzji.

Spectre V1, ale od innej strony

Z technicznego punktu widzenia, test Google bazuje na podatności Spectre V1. W telegraficznym skrócie polega więc na zmanipulowaniu procesora tak, żeby odczytać zawartość pamięci L1, a nieco konkretniej intencjonalnie doprowadzić do błędnego przewidywania i właśnie tym sposobem wykonać zapis do kanału bocznego (ang. Bounds Check Bypass – BCB). Nie chodzi tu jednakowoż o sam atak, a bardziej kontekst.

O samym Spectre wiemy już od 2018 r. Wiemy też, że aby skutecznie wykonać tego rodzaju atak, należy przede wszystkim określić, które adresy odnoszą się do pamięci podręcznej, a które nie. Implikując, możemy wnioskować, czy dana pula angażowana jest podczas wykonywania spekulatywnego. Zatem, w czym rzecz?

Spectre JS Demo

Jak wiadomo, pamięć podręczna L1 nie jest interfejsowana, czyli programista nie może uzyskać do niej bezpośredniego dostępu. Niemniej, dzięki umieszczeniu w bezpośrednim sąsiedztwie rdzenia, cechuje się zdecydowanie największą szybkością. Idąc tym tropem, chcąc wybadać przepływ danych, wystarczy zmierzyć czas dostępu. Podkreślmy, że wynika to wprost ze specyfiki warstwy sprzętowej i inaczej literalnie nie będzie.

Ale dlatego też, walcząc ze Spectre, twórcy oprogramowania zaczęli od obniżenia precyzji licznika czasu, co dotknęło m.in. funkcji performance.now () w Performance API.

Tymczasem Google stara się przekonać, że takie podejście jest niedostateczne. W prezentacji nie używa bowiem prostego timera, lecz analizuje działanie algorytmu Pseudo-LRU (Pseudo Least Recently Used), który odpowiada za optymalizację przepływu danych poprzez czyszczenie strony używanej najdawniej. Jak udowadnia firma z Mountain View, licznik czasu nie jest potrzebny, bo szybkość pamięci można czytać w cyklach zegarowych.

Administratorze, miej się na baczności

W abstrakcie opublikowanym na łamach Google Security Blog, zespół ds. bezpieczeństwa platformy internetowej Chrome apeluje do administratorów, aby ślepo nie ufali dotychczasowym mitygacjom kanału bocznego. Opierając się na przedstawionym dowodzie koncepcji, zwraca szczególną uwagę na wzajemną izolację zasobów pochodzących z różnych źródeł, a zwłaszcza politykę cross-origin i kwestię dostępu do procesu renderera.

Słowem, nawet dysponując załatanym procesorem, należy mieć się na baczności. Niestety, w tym przypadku sam użytkownik niewiele może zrobić.

Programy

Zobacz więcej
Wybrane dla Ciebie
Komentarze (25)