Запропоновано метод атаки для віддаленого визначення фрагментів пам'яті на сервері

Група дослідників з Грацького технічного університету (Австрія), раніше відома розробкою атак MDS, NetSpectre, Throwhammer та ZombieLoad, опублікувала новий метод атаки (CVE-2021-3714) по стороннім каналам на механізм дедуплікації сторінок пам'яті (Memory-Deduplication), дозволяючи у пам'яті певних даних, організувати побайтовий витік вмісту пам'яті або визначити розклад пам'яті для обходу захисту на основі рандомізації адрес (ASLR). Від раніше демонстрованих варіантів атак на механізм дедуплікації новий метод відрізняється проведенням атаки із зовнішнього хоста з використанням як критерій зміни часу відповідей на запити, що надсилаються атакуючим, за протоколами HTTP/1 і HTTP/2. Можливість проведення атаки продемонстрована для серверів на базі Linux та Windows.

Атаки на механізм дедуплікації пам'яті використовують як канал для витоку відомостей різницю в часі обробки операції запису в ситуаціях, коли зміна даних призводить до клонування сторінки пам'яті дедуплікованої за допомогою механізму Copy-On-Write (COW). У процесі роботи ядро ​​визначає однакові сторінки пам'яті від різних процесів і об'єднує їх, відображаючи ідентичні сторінки пам'яті в одну область пам'яті для зберігання тільки одну копії. При спробі зміни одним із процесів даних, пов'язаних з дедуплікованими сторінками, виникає виняток (page fault) і за допомогою механізму Copy-On-Write автоматично створюється окрема копія сторінки пам'яті, яка закріплюється за процесом. На виконання копіювання витрачається додатковий час, що може бути ознакою зміни даних, що перетинаються з іншим процесом.

Дослідники показали, що затримки, що виникають в результаті роботи механізму COW, можна вловити не тільки локально, але й аналізуючи зміну часу доставки відповідей по мережі. Запропоновано кілька методів визначення вмісту пам'яті з віддаленого хоста через аналіз часу виконання запитів за протоколами HTTP/1 та HTTP/2. Для збереження шаблонів, що підбираються, використовуються типові web-додатки, що зберігають в пам'яті інформацію, що надходить у запитах.

Загальний принцип атаки зводиться до заповнення на сервері сторінки пам'яті даними, які потенційно повторюють вміст вже наявної на сервері сторінки пам'яті. Потім атакуючий очікує час, необхідне виконання ядром дедуплікації і об'єднання сторінки пам'яті, після чого змінює контрольований дублікат даних і оцінює час реакції визначення успішності влучення.

Запропоновано метод атаки для віддаленого визначення фрагментів пам'яті на сервері

У ході проведених експериментів максимальна швидкість витоку інформації склала 34.41 байт на годину при атаці через глобальну мережу та 302.16 байт на годину при атаці через локальну мережу, що швидше за інші методи вилучення даних по сторонніх каналах (наприклад, при атаці NetSpectre швидкість передачі даних становить 7.5 байт в годину).

Запропоновано три робочі варіанти атаки. Перший варіант дозволяє визначити дані у пам'яті web-сервера, на якому використовується Memcached. Атака зводиться до завантаження певних наборів даних у сховищі Memcached, очищення дедуплікованого блоку, повторного запису того ж елемента та створення умови для виникнення COW-копіювання через зміну вмісту блоку. В ході експерименту з Memcached вдалося за 166.51 секунди визначити версію libc, встановлену в системі, запущеній у віртуальній машині.

Другий варіант дав можливість дізнатися вміст записів в СУБД MariaDB, використовуючи сховища InnoDB, через відтворення вмісту байт за байтом. Атака здійснюється через відправлення спеціально змінених запитів, що призводять до однобайтових розбіжностей у сторінках пам'яті та аналізі часу реакції для визначення, що здогад про вміст байта була вірною. Швидкість такого витоку невелика і становить 1.5 байт на годину при атаці з локальної мережі. Плюсом методу і те, що може застосовуватися відновлення невідомого вмісту пам'яті.

Третій варіант дозволив за 4 хвилини повністю обійти механізм захисту KASLR і отримати інформацію про зміщення в пам'яті образу ядра віртуальної машини, коли адреса зміщення знаходиться в сторінці пам'яті, інші дані в якій не змінюються. Атака здійснювалася з хоста, що знаходиться за 14 транзитних переходів (hops) від системи, що атакується. Приклади коду для здійснення поданих атак обіцяють опублікувати на GitHub.

Джерело: opennet.ru

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