Suicide
02.08.2021, 22:09
В ядре Linux выявлены (https://www.openwall.com/lists/oss-security/2021/08/01/3) две уязвимости, позволяющие использовать подсистему еBPF для обхода защиты от атаки Spectre v4 (https://www.opennet.ru/opennews/art.shtml?num=48639) (SSB (https://en.wikipedia.org/wiki/Speculative_Store_Bypass), Speculative Store Bypass). При помощи непривилегированной BPF-программы атакующий может создать условия для спекулятивного выполнения определённых операций и определить содержимое произвольных областей памяти ядра. Сопровождающие подсистемы eBPF в ядре получили доступ к прототипу эксплоита, демонстрирующего возможность совершения атак на практике. Проблемы устранены в форме патчей (1 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=2039f26f3aca5b0e419b98f65dd36481337b86ee), 2 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=f5e81d1117501546b7be050c5fbafa6efd2c722c)), которые войдут в состав ближайшего обновления ядра Linux. Обновления в дистрибутивах пока не сформированы (Debian (https://security-tracker.debian.org/tracker/CVE-2021-34556), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-34556), SUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2021-34556), Arch (https://security.archlinux.org/CVE-2021-34556), Fedora (https://bodhi.fedoraproject.org/updates/?releases=F34&type=security), Ubuntu (https://ubuntu.com/security/CVE-2021-34556)).
Метод атаки Spectre 4 базируется на восстановлении осевших в процессорном кэше данных после отбрасывания результата спекулятивного выполнения операций при обработке чередующихся операций записи и чтения с использованием косвенной адресации. Когда операция чтения следует за операцией записи (например, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), смещение адреса для чтения уже может быть известно из-за выполнения похожих операций (операции чтения выполняются значительно чаще и чтение может быть выполнено из кэша) и процессор может спекулятивно выполнить чтение раньше записи, не дожидаясь пока будет вычислено смещение косвенной адресации для записи.
Если после вычисления смещения выявлено пересечение областей памяти для записи и чтения, процессор просто отбросит уже спекулятивно полученный результат чтения и повторит эту операцию. Данная особенность позволяет инструкции чтения получить доступ к старому значению по некоторому адресу во время пока операция сохранения ещё не завершена. После отбрасывания неудачной спекулятивной операции в кэше остаются следы от её выполнения, после чего для его извлечения может применяться один из способов определения содержимого кэша на основе анализа изменения времени доступа к прокэшированным и не прокэшированным данным.
Первая уязвимость (CVE-2021-35477 (https://security-tracker.debian.org/tracker/CVE-2021-35477)) вызвана недоработкой в механизме проверки программ BPF. Для защиты от атаки Spectre 4 верификатор добавляет после потенциально проблемных операций сохранения в память дополнительную инструкцию, сохраняющую нулевое значение для вытеснения следов прошлой операции. Предполагалось, что операция записи нуля выполнится очень быстро и блокирует спекулятивное выполнение, так как она зависит только от указателя на кадр стека BPF. Но на деле, оказалось возможным создание условий, при которых инструкция, приводящая к спекулятивному выполнению, успевает выполниться до операции вытесняющего сохранения.
Вторая уязвимость (CVE-2021-3455 (https://security-tracker.debian.org/tracker/CVE-2021-3455)) связана с тем, что при выявлении верификатором BPF потенциально опасных операций сохранения в память, не учитываются неинициализированные области стека BPF, первая операция записи в которые не защищается. Подобная особенность приводит к возможности совершения спекулятивной операции чтения, зависимой от неинициализированной области памяти, перед выполнением инструкции сохранения. Новая память для BPF-стека выделяется без проверки содержимого, уже имеющегося в выделяемой памяти, и на стадии до запуска BPF-программы имеется способ управления содержимым области памяти, которая затем будет выделена под стек BPF.
02.08.2021
https://www.opennet.ru/opennews/art.shtml?num=55576
Метод атаки Spectre 4 базируется на восстановлении осевших в процессорном кэше данных после отбрасывания результата спекулятивного выполнения операций при обработке чередующихся операций записи и чтения с использованием косвенной адресации. Когда операция чтения следует за операцией записи (например, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), смещение адреса для чтения уже может быть известно из-за выполнения похожих операций (операции чтения выполняются значительно чаще и чтение может быть выполнено из кэша) и процессор может спекулятивно выполнить чтение раньше записи, не дожидаясь пока будет вычислено смещение косвенной адресации для записи.
Если после вычисления смещения выявлено пересечение областей памяти для записи и чтения, процессор просто отбросит уже спекулятивно полученный результат чтения и повторит эту операцию. Данная особенность позволяет инструкции чтения получить доступ к старому значению по некоторому адресу во время пока операция сохранения ещё не завершена. После отбрасывания неудачной спекулятивной операции в кэше остаются следы от её выполнения, после чего для его извлечения может применяться один из способов определения содержимого кэша на основе анализа изменения времени доступа к прокэшированным и не прокэшированным данным.
Первая уязвимость (CVE-2021-35477 (https://security-tracker.debian.org/tracker/CVE-2021-35477)) вызвана недоработкой в механизме проверки программ BPF. Для защиты от атаки Spectre 4 верификатор добавляет после потенциально проблемных операций сохранения в память дополнительную инструкцию, сохраняющую нулевое значение для вытеснения следов прошлой операции. Предполагалось, что операция записи нуля выполнится очень быстро и блокирует спекулятивное выполнение, так как она зависит только от указателя на кадр стека BPF. Но на деле, оказалось возможным создание условий, при которых инструкция, приводящая к спекулятивному выполнению, успевает выполниться до операции вытесняющего сохранения.
Вторая уязвимость (CVE-2021-3455 (https://security-tracker.debian.org/tracker/CVE-2021-3455)) связана с тем, что при выявлении верификатором BPF потенциально опасных операций сохранения в память, не учитываются неинициализированные области стека BPF, первая операция записи в которые не защищается. Подобная особенность приводит к возможности совершения спекулятивной операции чтения, зависимой от неинициализированной области памяти, перед выполнением инструкции сохранения. Новая память для BPF-стека выделяется без проверки содержимого, уже имеющегося в выделяемой памяти, и на стадии до запуска BPF-программы имеется способ управления содержимым области памяти, которая затем будет выделена под стек BPF.
02.08.2021
https://www.opennet.ru/opennews/art.shtml?num=55576