Компания Google публикува няколко прототипа на експлойти, които показват възможността за експлоатация на уязвимости от клас Spectre при изпълнение на JavaScript код в браузъра, заобикаляйки преди това въведените методи за защита. Експлоитите могат да се използват за достъп до паметта на процеса, обработващ уеб съдържанието в текущия раздел. За тестване на работата на експлойта е стартиран сайтът leaky.page, а кодът с описание на логиката на работа е публикуван в GitHub.
Предложеният прототип е проектиран за извършване на атака на системи с процесори Intel Core i7-6500U в околна среда с Linux и Chrome 88. За прилагане на експлойти в други среди са необходими промени. Методът на експлоатация не е специфичен за процесорите Intel — след съответна адаптация е потвърдена работата на експлойта на системи с CPU от други производители, включително Apple M1, базиран на архитектура ARM. След незначителни корекции експлойтът е също работоспособен в други операционни системи и в други браузъри, базирани на движка Chromium.
В околна среда, базирана на стандартния Chrome 88 и процесорите Intel Skylake, е постигнато изтичане на данни от процеса, отговарящ за обработката на уеб съдържанието в текущия раздел на Chrome (renderer process), със скорост от 1 килобайт в секунда. Освен това са разработени алтернативни прототипи, например експлойт, който, при цена на намаляване на стабилността, увеличава скоростта на изтичане до 8kB/s, използвайки таймера performance.now() с точност от 5 микросекунди (0.005 милисекунди). Беше подготвен и вариант, работещ с точност на таймера от една милисекунда, който може да се използва за организиране на достъп до паметта на друг процес със скорост около 60 байта в секунда.
Публикуваният демонстрационен код се състои от три части. Първата част извършва калибровка на таймера за оценка на времето за изпълнение на операциите, необходими за възстановяване на данни, останали в кеша на процесора в резултат на спекулативното изпълнение на инструкции на CPU. Втората част определя разположението на паметта, използвана при разполагането на масива JavaScript.
Третата част директно експлоатира уязвимостта Spectre, за да определи съдържанието на паметта на текущия процес, в резултат на създаването на условия за спекулативно изпълнение на определени операции, резултатите от които процесорът отхвърля след установяване на неуспешната прогноза, но следите от изпълнението остават в общия кеш и могат да бъдат възстановени с помощта на методи за определяне на съдържанието на кеша чрез странични канали, които анализират изменението на времето за достъп до кешираните и не кешираните данни.
Предложената техника на експлоатация позволява да се избегне използването на високо прецизни таймери, достъпни чрез API performance.now(), и без поддръжка на типа SharedArrayBuffer, позволяващ създаването на масиви в споделена памет. Експлойтът включва гаджет Spectre, който предизвиква контролирано спекулативно изпълнение на код и анализатор за изтичане по странични канали, определящ кешираните данни, получени по време на спекулативното изпълнение.
Гаджетът е реализиран с помощта на масив JavaScript, в който се прави опит за достъп до област извън границите на буфера, което влияе на състоянието на блока за предсказване на преходи поради добавената от компилатора проверка на размера на буфера (процесорът предварително спекулативно изпълнява достъпа, но откатва състоянието след проверката). За анализа на съдържанието на кеша при условия на недостатъчна прецизност на таймера е предложен метод, който измамва приложената в процесорите стратегия за избутване на данни от кеша Tree-PLRU и позволява значително увеличаване на разликата във времето при отдаване на стойност от кеша и при отсъствието на стойност в кеша чрез увеличаване на броя на циклите.
Отбелязва се, че компанията Google е публикувала прототип на експлоита, за да демонстрира реалистичността на атаките с използване на уязвимости от клас Spectre и за да стимулира уеб разработчиците да прилагат техники, минимизиращи рисковете от подобни атаки. В същото време Google смята, че без съществени изменения на предложеното прототип не е възможно да се създадат универсални експлоити, готови не само за демонстрация, но и за широко приложение.
За да се намали рискът, на собствениците на уебсайтове се препоръчва да използват наскоро реализираните заглавия Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame-Options, X-Content-Type-Options и SameSite Cookie. Посочените механизми не защитават директно от атаки, но позволяват изолиране на данните на сайта от изтичане в процеси, в които може да се изпълни JavaScript код на нападателя (изтичането става от паметта на текущия процес, в който освен кода на нападателя могат да се обработват и данни от друг сайт, отворен в същата таб). Основната идея е да се раздели изпълнението на кода на сайта от страничния код, получен от ненадеждни източници, например, включван чрез iframe.

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