Група из изследователи от американски, австралийски и израелски университети предложи нова техника за атака по странични канали с цел експлоатиране уязвимости от клас Spectre в браузерите, базирани на движка Chromium. Атаката, получила кодово име Spook.js, позволява чрез изпълнение на JavaScript код да се заобиколи механизма за изолация на сайтовете и да се прочете съдържанието на цялото адресно пространство на текущия процес, т.е. да се получи достъп до данните на страници, отворени в други табове, но обработвани в един и същ процес.
Тъй като Chrome стартира различни сайтове в различни процеси, възможността за извършване на практически атаки е ограничена от услугите, позволяващи на различни потребители да хостват своите страници. Методът позволява от страница, в която атакуващият има възможност да вгради своя JavaScript код, да определи наличието на други отворени от потребителя страници от същия сайт и да извлече от тях конфиденциална информация, например, потребителски имена или банкови данни, попълнени от системата за автоматично попълване на полета в уеб формуляри. Като демонстрация е показано как може да се атакува чужд блог в услугата Tumblr, ако собственикът му отвори в друг таб блога на злонамерените лица, хостван в същата услуга.

Друг вариант за прилагане на метода е атака на браузърските разширения, позволяваща при инсталация на разширение, контролирано от атакуващите, да се извлекат данни от други разширения. Като пример е показано как, инсталирайки зловредно разширение, може да се извлече конфиденциална информация от мениджъра на пароли LastPass.

Изследователите публикуваха прототип на експлоит, работещ в Chrome 89 на системи с CPU Intel i7-6700K и i7-7600U. При създаването на експлоита са използвани преди това публикувани от компания Google прототипи на JavaScript код за извършване на атаки от клас Spectre. Отбелязва се, че на изследователите е успяло да подготвят работещи експлоити за системи, базирани на процесори Intel и Apple M1, които позволяват организирането на четене на паметта със скорост 500 байта в секунда и точност 96%. Предполага се, че методът е приложим и за процесори AMD, но напълно работещ експлоит не е успял да бъде подготвен.
Атаката е приложима към всякакви браузъри на базата на механизма Chromium, включително Google Chrome, Microsoft Edge и Brave. Изследователите също така смятат, че методът може да бъде адаптиран за работа с Firefox, но тъй като механизмът на Firefox значително се различава от Chrome, разработката на подобен експлоит е оставена за бъдещето.
За защита от извършване на атаки чрез браузера, свързани със спекулативното изпълнение на инструкции, в Chrome е реализирана сегментацията на адресното пространство — изолацията в sandox допуска работа с JavaScript само с 32-битови указатели и разделя паметта на обработчика в непокриващи се 4GB купчини (heap). За организиране на достъп до цялото адресно пространство на процеса и заобикаляне на 32-битното ограничение изследователите са използвали техниката Type Confusion, която позволява да се принуди JavaScript двигателят да обработи обект с некоректен тип, позволяваща формирането на 64-битови указатели на основата на комбинация от две 32-битови стойности.
Същността на атаката е, че при обработката на специално оформен злонамерен обект в JavaScript двигателя се създават условия, водещи до спекулативно изпълнение на инструкции, които осъществяват достъп до масив. Обектът се подбира така, че контролируемите от атакуващите полета да са разположени в област, където се използват 64-битови указатели. Тъй като типът на злонамерения обект не съответства на типа на обработвания масив, при обичайни условия подобни действия се блокират в Chrome от механизма за деоптимизация на кода, използван за достъп до масиви. За решаване на този проблем кодът за атаката Type Confusion се изнася в условен блок "if", който не се активира при обичайни условия, но се изпълнява в спекулативен режим, при неверно предсказание от процесора за следващото разклоняване.
В крайна сметка процесорът спекулативно се обръща към създадения 64-битов указател и възстановява състоянието след определяне на неуспешна прогноза, но следите от изпълнението остават в общия кеш и могат да бъдат възстановени с помощта на методи за определяне на съдържанието на кеша през странични канали, анализиращи промяната на времето за достъп до кеширани и некеширани данни. За анализа на съдържанието на кеша при условия на недостатъчна точност на таймера, достъпен в JavaScript, се прилага предложен метод от Google, който мамят използваната в процесорите стратегия за изтласкване на данни от кеша Tree-PLRU и позволява значително увеличаване на разликата във времето при наличие и отсъствие на стойност в кеша чрез увеличаване на броя на циклите.
Източник: opennet.ru
