Уязвимости в 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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster