Suicide
22.06.2021, 20:42
В ядре Linux выявлена (https://www.openwall.com/lists/oss-security/2021/06/21/1) уязвимость (CVE-2021-33624 (https://security-tracker.debian.org/tracker/CVE-2021-33624)), позволяющая использовать подсистему еBPF для обхода защиты от уязвимостей класса Spectre, дающих возможность определить содержимое памяти в результате создания условий для спекулятивного выполнения определённых операций. Для атаки Spectre требуется наличие в привилегированном коде определённой последовательности команд, приводящих к спекулятивному выполнению инструкций. Через манипуляцию с передаваемыми для выполнения BPF-программами можно добиться генерации подобных инструкций в еBPF и добиться утечки по сторонним каналам содержимого памяти ядра и произвольных областей физической памяти.
Уязвимость вызвана недоработками в верификаторе, который применяется для выявления ошибок и недопустимой активности в BPF-программах. Верификатор перебирает возможные пути выполнения кода, но пропускает варианты ветвления, недопустимые с точки зрения семантики архитектуры набора команд. При выполнении же BPF программы подобные варианты ветвления, не учтённые верификатором, могут быть неверно предсказаны процессором и выполнены в спекулятивном режиме. Например, при анализе операции "load" верификатор рассчитывает, что в инструкции используется регистр с адресом, значение которого всегда находится в заданных границах, но атакующий может создать условия, при которых процессор попытается спекулятивно выполнить операцию с адресом, не соответствующим условиям проверки.
Проблема проявляется начиная с выпуска ядра 4.15 и устранена в форме патчей (1 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=d203b0fd863a2261e5d00b97f3d060c4c2a6db71), 2 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=fe9a5ca7e370e613a9a75a13008a3845ea759d6e), 3 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=9183671af6dbf60a1219371d4ed73e23f43b49db), 4 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=973377ffe8148180b2651825b92ae91988141b05)). В дистрибутивах уязвимость пока остаётся неисправленной (Debian (https://security-tracker.debian.org/tracker/CVE-2021-33624), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-33624), Ubuntu (https://ubuntu.com/security/CVE-2021-33624), Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=1974457), SUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2021-33624), Arch (https://security.archlinux.org/)).
Дополнительно можно отметить заметку (https://robert.ocallahan.org/2021/06/spectre-mitigations-murder-userspace.html) о влиянии на производительность средств для защиты от уязвимостей класса Spectre. В заметке обобщены результаты оптимизации отладчика rr (https://rr-project.org/) (Record and Replay), в своё время созданного (https://www.opennet.ru/opennews/art.shtml?num=39413) в Mozilla для отладки сложно повторяемых ошибок в Firefox. Кэширование системных вызовов, используемых для проверки существования каталогов, позволило сократить выполнение операции "rr sources" для тестового проекта с 3 минут 19 секунд до 36 секунд.
Автор оптимизации решил проверить, насколько изменится производительность после отключения защиты от Spectre. После загрузки системы с параметром "mitigations=off" время выполнения "rr sources" без оптимизации составило 2 минуты 5 секунд (в 1.6 раза быстрее), а с оптимизацией - 33 секунды (на 9% быстрее). Интересно, что отключение защиты от Spectre не только в 1.4 раза сократило время выполнения кода на уровне ядра (c 2m9s до 1m32s), но и в два раза уменьшило время выполнения в пространстве пользователя (c 1m9s до 0m33s), предположительно из-за снижения эффективности работы кэша CPU и сбросов TLB при включённой защите от Spectre.
22.06.2021
https://www.opennet.ru/opennews/art.shtml?num=55371
Уязвимость вызвана недоработками в верификаторе, который применяется для выявления ошибок и недопустимой активности в BPF-программах. Верификатор перебирает возможные пути выполнения кода, но пропускает варианты ветвления, недопустимые с точки зрения семантики архитектуры набора команд. При выполнении же BPF программы подобные варианты ветвления, не учтённые верификатором, могут быть неверно предсказаны процессором и выполнены в спекулятивном режиме. Например, при анализе операции "load" верификатор рассчитывает, что в инструкции используется регистр с адресом, значение которого всегда находится в заданных границах, но атакующий может создать условия, при которых процессор попытается спекулятивно выполнить операцию с адресом, не соответствующим условиям проверки.
Проблема проявляется начиная с выпуска ядра 4.15 и устранена в форме патчей (1 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=d203b0fd863a2261e5d00b97f3d060c4c2a6db71), 2 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=fe9a5ca7e370e613a9a75a13008a3845ea759d6e), 3 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=9183671af6dbf60a1219371d4ed73e23f43b49db), 4 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=973377ffe8148180b2651825b92ae91988141b05)). В дистрибутивах уязвимость пока остаётся неисправленной (Debian (https://security-tracker.debian.org/tracker/CVE-2021-33624), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-33624), Ubuntu (https://ubuntu.com/security/CVE-2021-33624), Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=1974457), SUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2021-33624), Arch (https://security.archlinux.org/)).
Дополнительно можно отметить заметку (https://robert.ocallahan.org/2021/06/spectre-mitigations-murder-userspace.html) о влиянии на производительность средств для защиты от уязвимостей класса Spectre. В заметке обобщены результаты оптимизации отладчика rr (https://rr-project.org/) (Record and Replay), в своё время созданного (https://www.opennet.ru/opennews/art.shtml?num=39413) в Mozilla для отладки сложно повторяемых ошибок в Firefox. Кэширование системных вызовов, используемых для проверки существования каталогов, позволило сократить выполнение операции "rr sources" для тестового проекта с 3 минут 19 секунд до 36 секунд.
Автор оптимизации решил проверить, насколько изменится производительность после отключения защиты от Spectre. После загрузки системы с параметром "mitigations=off" время выполнения "rr sources" без оптимизации составило 2 минуты 5 секунд (в 1.6 раза быстрее), а с оптимизацией - 33 секунды (на 9% быстрее). Интересно, что отключение защиты от Spectre не только в 1.4 раза сократило время выполнения кода на уровне ядра (c 2m9s до 1m32s), но и в два раза уменьшило время выполнения в пространстве пользователя (c 1m9s до 0m33s), предположительно из-за снижения эффективности работы кэша CPU и сбросов TLB при включённой защите от Spectre.
22.06.2021
https://www.opennet.ru/opennews/art.shtml?num=55371