Нова техніка експлуатації вразливостей класу Spectre у Chrome

Група дослідників з американських, австралійських та ізраїльських університетів запропонувала нову техніку атаки сторонніми каналами для експлуатації вразливостей класу Spectre в браузерах на базі двигуна Chromium. Атака, яка отримала кодове ім'я Spook.js, дозволяє через запуск JavaScript-коду обійти механізм ізоляції сайтів та прочитати вміст всього адресного простору поточного процесу, тобто. отримати доступ до даних сторінок, запущених в інших вкладках, але оброблюваних в одному процесі.

Оскільки Chrome запускає різні сайти в різних процесах, можливість практичних атак обмежена сервісами, що дозволяють різним користувачам розміщувати свої сторінки. Метод дозволяє зі сторінки, в яку атакуючий має можливість вбудувати свій JavaScript-код, визначити наявність інших відкритих користувачем сторінок з того ж сайту та витягти з них конфіденційну інформацію, наприклад облікові дані або банківські реквізити, підставлені системою автозаповнення полів у web-формах. Як демонстрація показано як можна атакувати чужий блог у сервісі Tumblr, якщо його власник відкриє в іншій вкладці блог зловмисників, розміщений у тому ж сервісі.

Іншим варіантом застосування методу є атака на браузерні доповнення, що дозволяє при встановленні доповнення, підконтрольного атакуючим, отримати дані з інших доповнень. Як приклад показано як встановивши шкідливе доповнення, можна отримати конфіденційну інформацію з менеджера паролів LastPass.

Дослідниками опубліковано прототип експлоїту, що працює у Chrome 89 на системах з CPUIntel i7-6700K та i7-7600U. При створенні експлоїту використані раніше опубліковані компанією Google прототипи JavaScript-коду для атак класу Spectre. Зазначається, що дослідникам вдалося підготувати робочі експлоїти для систем на базі процесорів Intel та Apple M1, які дають можливість організувати читання пам'яті зі швидкістю 500 байт на секунду та точністю 96%. Передбачається, що метод можна застосувати і для процесорів AMD, але повністю працездатний експлоїт підготувати не вдалося.

Атака застосовна до будь-яких браузерів на базі двигуна Chromium, включаючи Google Chrome, Microsoft Edge та Brave. Дослідники також вважають, що метод можна адаптувати для роботи з Firefox, але оскільки двигун Firefox сильно відрізняється від Chrome, то робота зі створення такого експлоїту залишена на майбутнє.

Для захисту від здійснення через браузер атак, пов'язаних зі спекулятивним виконанням інструкцій, в Chrome реалізовано сегментування адресного простору - sandbox-ізоляція допускає роботу JavaScript тільки з 32-розрядними покажчиками і розділяє пам'ять обробників у купах, що не перетинаються 4ГБ (heap). Для організації доступу до всього адресного простору процесу та обходу 32-розрядного обмеження дослідники задіяли техніку Type Confusion, що дозволяє змусити JavaScript-движок обробити об'єкт з некоректним типом, що дає можливість сформувати 64-розрядний покажчик на основі комбінації з двох 32-розрядних значень.

Суть атаки в тому, що при обробці спеціально оформленого шкідливого об'єкта в JavaScript-движку створюються умови, що призводять до спекулятивного виконання інструкцій, що здійснюють доступ до масиву. Об'єкт підбирається таким чином, що контрольовані атакуючими поля розміщуються в області, де використовується 64-розрядний покажчик. Так як тип шкідливого об'єкта не відповідає типу оброблюваного масиву, у звичайних умовах подібні дії блокується в Chrome механізмом деоптимізації коду, що використовується для доступу до масивів. Для вирішення цієї проблеми код для атаки Type Confusion виноситься в умовний блок "if", який не активується за звичайних умов, але виконується в спекулятивному режимі, при неправильному передбаченні процесором подальшого розгалуження.

У результаті процесор спекулятивно звертається до сформованого 64-розрядного покажчика і відкочує стан після визначення невдалого прогнозу, але сліди виконання осідають у загальному кеші і можуть бути відновлені за допомогою методів визначення вмісту кешу по стороннім каналам, що аналізують зміну часу доступу до прокешованих і не прокеш . Для аналізу вмісту кешу в умовах недостатньої точності таймера, доступного в JavaScript, застосовується запропонований Google метод, що обманює стратегію витіснення даних з кешу Tree-PLRU, що застосовується в процесорах, і дозволяє за рахунок збільшення числа циклів значно збільшити різницю в часі за наявності і відсутності значення в кеші .

Джерело: opennet.ru

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