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

В ядрото на Linux беше открита уязвимост (CVE-2021-33624), позволяваща използването на подсистемата eBPF, за да се заобиколи защита от уязвимости от клас Spectre, което предоставя възможност за определяне на съдържанието на паметта в резултат на създаване на условия за спекулативно изпълнение на определени операции. За атака от типа Spectre е необходимо в привилегирования код да се съдържа определена последователност от команди, водещи до спекулативно изпълнение на инструкции. Чрез манипулиране на предавани за изпълнение BPF програми е възможно да се генерират подобни инструкции в eBPF и да се постигне изтичане на съдържание от ядрото и произволни области на физическа памет през странични канали.

Уязвимостта е причинена от недостатъци в верификатора, който се използва за откриване на грешки и недопустима активност в BPF програмите. Верификаторът разглежда възможните пътища за изпълнение на кода, но пропуска вариантите на разклоняване, недопустими от семантична гледна точка за архитектурата на набора от команди. При изпълнение на BPF програма подобни варианти на разклоняване, които не са взети предвид от верификатора, могат да бъдат неправилно предвидени от процесора и изпълнени в спекулативен режим. Например, при анализа на операцията „load“, верификаторът изчислява, че в инструкционен регистър с адрес се използва стойност, която винаги остава в зададени граници, но атакуващият може да създаде условия, при които процесорът да се опита спекулативно да извърши операция с адрес, който не отговаря на условията за проверка.

Проблемът се проявява от версия 4.15 на ядрото и е отстранен чрез патчове (1, 2, 3, 4). В дистрибутивите уязвимостта все още остава непоправена (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Допълнително може да се отбележи бележка за влиянието върху производителността на средствата за защита от уязвимости от клас Spectre. В бележката са обобщени резултатите от оптимизацията на отладчика rr (Record and Replay), създаден в Mozilla за отстраняване на трудни за възпроизвеждане грешки в Firefox. Кеширането на системни повици, използвани за проверка на съществуването на директории, позволи да се намали времето за изпълнение на операцията „rr sources“ за тестов проект от 3 минути 19 секунди до 36 секунди.

Оптимизацията реши да провери как ще се промени производителността след деактивиране на защитата от Spectre. След стартиране на системата с параметър „mitigations=off“ времето за изпълнение на „rr sources“ без оптимизация беше 2 минути и 5 секунди (с 1.6 пъти по-бързо), а с оптимизация — 33 секунди (с 9% по-бързо). Интересно е, че деактивирането на защитата от Spectre не само че е съкратило времето за изпълнение на код на ниво ядро с 1.4 пъти (от 2m9s до 1m32s), но и е намалило времето за изпълнение в пространството на потребителя с два пъти (от 1m9s до 0m33s), вероятно поради намаляване на ефективността на работа на кеша на CPU и сбросовете на TLB при активна защита от Spectre.

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

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