Уязвимости в eBPF, които биха могли да заобиколят защитата от атака на Spectre 4

Бяха идентифицирани две уязвимости в ядрото на Linux, които позволяват подсистемата eBPF да бъде използвана за заобикаляне на защитата срещу атаката Spectre v4 (SSB, Speculative Store Bypass). Използвайки непривилегирована BPF програма, атакуващият може да създаде условия за спекулативно изпълнение на определени операции и да определи съдържанието на произволни области на паметта на ядрото. Поддържащите подсистемите eBPF в ядрото получиха достъп до прототип на експлоатация, който демонстрира способността за извършване на атаки на практика. Проблемите са коригирани под формата на пачове (1, 2), които ще бъдат включени в следващата актуализация на ядрото на Linux. Все още не са създадени актуализации в комплектите за разпространение (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Методът за атака на Spectre 4 се основава на възстановяване на данни, съхранени в кеша на процесора, след отхвърляне на резултата от спекулативно изпълнение на операции при обработка на редуващи се операции за запис и четене, използвайки индиректно адресиране. Когато операция за четене следва операция за запис (напр. mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), отместването на адреса за четене може вече да е известно поради извършваните подобни операции (операциите за четене са изпълнява много по-често и четенията могат да се извършват от кеша) и процесорът може спекулативно да извършва четения преди записи, без да чака да се изчисли косвеното отместване на записа.

Ако след изчисляване на отместването бъде открито пресичане на области на паметта за запис и четене, процесорът просто ще отхвърли вече спекулативно получения резултат от четене и ще повтори тази операция. Тази функция позволява инструкция за четене за достъп до стара стойност на някакъв адрес, докато операцията за съхраняване все още не е завършена. След отхвърляне на неуспешна спекулативна операция, следите от нейното изпълнение остават в кеша, след което един от методите за определяне на съдържанието на кеша може да се използва за извличането му въз основа на анализ на промените във времето за достъп до кеширани и некеширани данни.

Първата уязвимост (CVE-2021-35477) е причинена от дефект в механизма за проверка на програмата BPF. За да се предпази от атака на Spectre 4, верификаторът добавя допълнителна инструкция след потенциално проблемни запаметявания в паметта, която съхранява нулева стойност, за да измести следите от предишната операция. Очакваше се нулевата операция за запис да бъде много бърза и да блокира спекулативното изпълнение, тъй като зависи само от указател към рамката на BPF стека. Но всъщност се оказа възможно да се създадат условия, при които инструкция, водеща до спекулативно изпълнение, успява да бъде изпълнена преди операцията за превантивно съхраняване.

Втората уязвимост (CVE-2021-3455) се дължи на факта, че когато BPF верификаторът идентифицира потенциално опасни операции за запазване на паметта, той не взема предвид неинициализирани области на BPF стека, първата операция за запис в която не е защитена. Тази функция води до възможността за извършване на спекулативна операция за четене, в зависимост от неинициализирана област на паметта, преди изпълнение на инструкцията за съхраняване. Новата памет за BPF стека се разпределя, без да се проверява съдържанието, което вече е в разпределената памет, и има начин, преди BPF програмата да се изпълни, за да манипулира съдържанието на областта на паметта, която след това ще бъде разпределена за BPF стека.

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

Добавяне на нов коментар