Вразливість у механізмі спекулятивного виконання інструкцій процесорів AMD

Проект Grsecurity опублікував деталі та демонстрацію методу атаки для нової вразливості (CVE-2021-26341) у процесорах AMD, пов'язаної зі спекулятивним виконанням інструкцій після операцій безумовного прямого переходу. У разі успішного проведення атаки вразливість дозволяє визначити вміст довільних областей пам'яті. Наприклад, дослідниками підготовлений експлоїт, що дозволяє визначити розкладку адрес та обійти механізм захисту KASLR (рандомізація пам'яті ядра) через виконання непривілейованого коду в підсистемі ядра ePBF. Не виключені й інші сценарії атак, які можуть спричинити витік вмісту пам'яті ядра.

Вразливість дозволяє створити умови, за яких процесор у ході запобіжного виконання спекулятивно обробить інструкцію, що йде у пам'яті відразу за командою переходу (SLS, Straight Line Speculation). При цьому подібна оптимізація спрацьовує не тільки для операторів умовного переходу, але і для інструкцій, що мають на увазі прямий безумовний перехід, таких як JMP, RET та CALL. Слідом за інструкціями безумовного переходу можуть розміщуватись у тому числі довільні дані, не призначені для виконання. Після визначення того, що перехід не передбачає виконання наступної інструкції, процесор просто відкочує стан і не враховує спекулятивне виконання, але слід виконання інструкції залишається в загальному кеші і доступний для аналізу з використанням методів вилучення по стороннім каналам.

Як і при експлуатації вразливості Spectre-v1 для атаки потрібна наявність в ядрі певних послідовностей інструкцій (гаджетів), що призводять до спекулятивного виконання. Блокування вразливості при цьому зводиться до виявлення подібних гаджетів у коді та додавання додаткових інструкцій, що блокують спекулятивне виконання. Умови спекулятивного виконання також можуть бути створені за допомогою непривілейованих програм, що виконуються у віртуальній машині eBPF. Для блокування можливості конструювання гаджетів за допомогою eBPF рекомендується заборонити непривілейований доступ до eBPF у системі (sysctl -w kernel.unprivileged_bpf_disabled=1).

Вразливість зачіпає процесори на базі мікроархітектури Zen1 і Zen2, включаючи перше та друге покоління процесорів AMD EPYC і AMD Ryzen Threadripper, а також процесори AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon A. Для блокування спекулятивного виконання інструкцій рекомендовано викликати інструкції INT3 або LFENCE після операцій розгалуження (RET, JMP, CALL).

Джерело: opennet.ru

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