Nowa technika wykorzystania luk Spectre w przeglądarce Chrome

Grupa badaczy z uniwersytetów amerykańskich, australijskich i izraelskich zaproponowała nową technikę ataku typu side-channel, mającą na celu wykorzystanie luk klasy Spectre w przeglądarkach opartych na silniku Chromium. Atak o kryptonimie Spook.js pozwala ominąć mechanizm izolacji witryny poprzez uruchomienie kodu JavaScript i odczytanie zawartości całej przestrzeni adresowej bieżącego procesu, tj. uzyskać dostęp do danych ze stron działających w innych zakładkach, ale przetwarzanych w tym samym procesie.

Ponieważ Chrome uruchamia różne witryny w ramach różnych procesów, możliwość przeprowadzania praktycznych ataków ogranicza się do usług, które umożliwiają różnym użytkownikom hostowanie ich stron. Metoda pozwala ze strony, na której atakujący ma możliwość osadzenia swojego kodu JavaScript, określić obecność innych stron otwieranych przez użytkownika z tej samej witryny i wydobyć z nich poufne informacje, na przykład dane uwierzytelniające czy dane bankowe podstawione poprzez system automatycznego uzupełniania pól w formularzach internetowych. W ramach demonstracji pokazano, jak można zaatakować cudzy blog w serwisie Tumblr, jeśli jego właściciel otworzy w innej zakładce blog napastnika hostowany w tym samym serwisie.

Inną możliwością wykorzystania tej metody jest atak na dodatki do przeglądarki, który pozwala podczas instalacji dodatku kontrolowanego przez atakującego wydobyć dane z innych dodatków. Jako przykład pokazujemy, jak instalując złośliwy dodatek, możesz wyodrębnić poufne informacje z menedżera haseł LastPass.

Badacze opublikowali prototyp exploita, który działa w przeglądarce Chrome 89 na systemach z procesorami Intel i7-6700K oraz i7-7600U. Podczas tworzenia exploita do przeprowadzenia ataków klasy Spectre wykorzystano prototypy kodu JavaScript opublikowane wcześniej przez Google. Należy zauważyć, że badaczom udało się przygotować działające exploity dla systemów opartych na procesorach Intel i Apple M1, które umożliwiają zorganizowanie odczytu pamięci z szybkością 500 bajtów na sekundę i dokładnością 96%. Zakłada się, że metoda ma zastosowanie również w przypadku procesorów AMD, jednak nie udało się przygotować w pełni funkcjonalnego exploita.

Atak dotyczy dowolnej przeglądarki opartej na silniku Chromium, w tym Google Chrome, Microsoft Edge i Brave. Badacze uważają również, że metodę można dostosować do pracy z Firefoksem, jednak ponieważ silnik Firefoksa bardzo różni się od Chrome, prace nad stworzeniem takiego exploita pozostawiono na przyszłość.

Aby chronić się przed atakami z przeglądarki związanymi ze spekulatywnym wykonywaniem instrukcji, Chrome implementuje segmentację przestrzeni adresowej - izolacja piaskownicy pozwala JavaScriptowi działać tylko ze wskaźnikami 32-bitowymi i dzieli pamięć procedur obsługi na rozłączne sterty o wielkości 4 GB. Aby zapewnić dostęp do całej przestrzeni adresowej procesu i ominąć ograniczenie 32-bitowe, badacze zastosowali technikę zwaną Type Confusion, która zmusza silnik JavaScript do przetworzenia obiektu o nieprawidłowym typie, co umożliwia utworzenie 64-bitowego wskaźnik oparty na kombinacji dwóch wartości 32-bitowych.

Istota ataku polega na tym, że podczas przetwarzania specjalnie zaprojektowanego szkodliwego obiektu w silniku JavaScript tworzone są warunki, które prowadzą do spekulatywnego wykonania instrukcji uzyskujących dostęp do tablicy. Obiekt jest wybierany w taki sposób, aby pola kontrolowane przez atakującego znalazły się w obszarze, w którym używany jest 64-bitowy wskaźnik. Ponieważ typ szkodliwego obiektu nie jest zgodny z typem przetwarzanej tablicy, w normalnych warunkach takie działania są blokowane w przeglądarce Chrome przez mechanizm deoptymalizacji kodu używanego do uzyskiwania dostępu do tablic. Aby rozwiązać ten problem, kod ataku Type Confusion umieszcza się w warunkowym bloku „if”, który w normalnych warunkach nie jest aktywowany, ale jest wykonywany w trybie spekulatywnym, jeśli procesor błędnie przewidzi dalsze rozgałęzienia.

W rezultacie procesor uzyskuje spekulacyjny dostęp do wygenerowanego 64-bitowego wskaźnika i wycofuje stan po stwierdzeniu nieudanej przewidywania, ale ślady wykonania pozostają we współdzielonej pamięci podręcznej i można je odtworzyć za pomocą metod wykrywania pamięci podręcznej kanału bocznego, które analizują zmiany w czasy dostępu do danych buforowanych i niezapisanych w pamięci podręcznej. Do analizy zawartości pamięci podręcznej w warunkach niewystarczającej dokładności timera dostępnego w JavaScript wykorzystywana jest metoda zaproponowana przez Google, która oszukuje stosowaną w procesorach strategię eksmisji pamięci podręcznej Tree-PLRU i pozwala, poprzez zwiększenie liczby cykli, na znacznie zwiększyć różnicę czasu, gdy wartość jest obecna i nieobecna w pamięci podręcznej.

Źródło: opennet.ru

Dodaj komentarz