Nowa technika eksploatacji luk klasy Spectre w Chrome

Grupa badawcza z amerykańskich, australijskich i izraelskich uniwersytetów zaproponowała nową technikę ataku z wykorzystaniem kanałów bocznych do eksploatacji podatności klasy Spectre w przeglądarkach opartych na silniku Chromium. Atak, który otrzymał kodową nazwę Spook.js, umożliwia, poprzez uruchomienie kodu JavaScript, ominięcie mechanizmu izolacji stron i odczytanie zawartości całej przestrzeni adresowej bieżącego procesu, tzn. uzyskanie dostępu do danych stron uruchomionych w innych zakładkach, ale przetwarzanych w jednym procesie.

Ponieważ Chrome uruchamia różne strony w różnych procesach, możliwość przeprowadzenia praktycznych ataków jest ograniczona do usług, które umożliwiają różnym użytkownikom publikowanie swoich stron. Metoda pozwala ze strony, w którą atakujący ma możliwość wbudowania swojego kodu JavaScript, zidentyfikować obecność innych otwartych przez użytkownika stron z tej samej witryny i wydobyć z nich poufne informacje, takie jak dane logowania czy dane bankowe wprowadzone przez system automatycznego uzupełniania pól w formularzach internetowych. Jako demonstrację pokazano, jak można zaatakować obcy blog na platformie Tumblr, jeśli jego właściciel otworzy w innej zakładce blog oszusta umieszczony w tej samej usłudze.

Odtwarzaj wideo

Inną możliwością zastosowania metody jest atak na dodatki przeglądarki, który pozwala przy instalacji dodatku kontrolowanego przez atakujących na wydobycie danych z innych dodatków. Jako przykład pokazano, jak instalując złośliwy dodatek, można wydobyć poufne informacje z menedżera haseł LastPass.

Odtwarzaj wideo

Badacze opublikowali prototyp exploita działającego w Chrome 89 na systemach z procesorami CPU Intel i7-6700K i i7-7600U. Przy tworzeniu exploita wykorzystano wcześniej opublikowane przez firmę Google prototypy kodu JavaScript do przeprowadzania ataków klasy Spectre. Zauważono, że badaczom udało się przygotować działające exploity dla systemów opartych na procesorach Intel i Apple M1, które umożliwiają organizację odczytu pamięci z prędkością 500 bajtów na sekundę i dokładnością 96%. Zakłada się, że metoda jest również stosowalna dla procesorów AMD, ale nie udało się przygotować w pełni działającego exploita.

Atak dotyczy wszystkich przeglądarek opartych na silniku Chromium, w tym Google Chrome, Microsoft Edge i Brave. Badacze uważają również, że metodę można zaadoptować do pracy z Firefoxem, jednak ze względu na znaczne różnice w silniku Firefox prace nad stworzeniem podobnego exploita zostały pozostawione na przyszłość.

Aby chronić przed atakami związanymi ze spekulacyjnym wykonaniem instrukcji przez przeglądarkę, w Chrome wprowadzono segmentację adresowego przestrzeni — izolacja sandbox pozwala na pracę JavaScript tylko z 32-bitowymi wskaźnikami i dzieli pamięć obsługującą w nieprzecinających się 4 GB stertach (heap). Aby zorganizować dostęp do całej przestrzeni adresowej procesu i obejść 32-bitowe ograniczenie, badacze wykorzystali technikę Type Confusion, która zmusza silnik JavaScript do przetwarzania obiektu z nieprawidłowym typem, co umożliwia utworzenie 64-bitowego wskaźnika na podstawie kombinacji dwóch 32-bitowych wartości.

Istotą ataku jest to, że podczas przetwarzania specjalnie skonstruowanego złośliwego obiektu w silniku JavaScript tworzone są warunki prowadzące do spekulacyjnego wykonania instrukcji uzyskujących dostęp do tablicy. Obiekt jest wybierany w taki sposób, że pola kontrolowane przez atakujących są umieszczane w obszarze, gdzie używany jest 64-bitowy wskaźnik. Ponieważ typ złośliwego obiektu nie odpowiada typowi przetwarzanej tablicy, w normalnych warunkach takie działania są blokowane w Chrome mechanizmem deoptymalizacji kodu stosowanym do uzyskiwania dostępu do tablic. Aby rozwiązać ten problem, kod ataku Type Confusion zostaje umieszczony w warunkowym bloku „if”, który nie jest aktywowany w normalnych warunkach, lecz jest wykonywany w trybie spekulacyjnym, przy błędnym przewidywaniu dalszego rozgałęziania przez procesor.

W rezultacie procesor spekulacyjnie odwołuje się do utworzonego 64-bitowego wskaźnika i przywraca stan po ustaleniu nieudanej prognozy, ale ślady wykonania osiadają w ogólnym buforze i mogą być odzyskane za pomocą metod określania zawartości bufora poprzez kanały boczne, analizujących zmianę czasu dostępu do danych buforowanych i niebuforowanych. Do analizy zawartości bufora w warunkach niedostatecznej precyzji zegara dostępnego w JavaScript stosuje się zaproponowaną przez Google metodę, która oszukuje stosowaną w procesorach strategię wypierania danych z bufora Tree-PLRU i pozwala na znaczące zwiększenie różnicy czasu przy obecności i braku wartości w buforze dzięki zwiększeniu liczby cykli.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster