PDA

Просмотр полной версии : Уязвимость в механизме спекулятивного выполнения инструкций процессоров AMD


Suicide
12.03.2022, 01:27
Проект Grsecurity опубликовал (https://grsecurity.net/amd_branch_mispredictor_part_2_where_no_cpu_has_go ne_before.php) детали и демонстрацию метода атаки для новой уязвимости (https://www.amd.com/en/corporate/product-security/bulletin/amd-sb-1026) (CVE-2021-26341 (https://security-tracker.debian.org/tracker/CVE-2021-26341)) в процессорах AMD, связанной со спекулятивным выполнением инструкций после операций безусловного прямого перехода. В случае успешного проведения атаки уязвимость позволяет определить содержимое произвольных областей памяти. Например, исследователями подготовлен эксплоит, позволяющий определить раскладку адресов и обойти механизм защиты KASLR (рандомизация памяти ядра) через выполнение непривилегированного кода в подсистеме ядра eBPF. Не исключены и другие сценарии атак, которые могут привести к утечке содержимого памяти ядра.

Уязвимость позволяет создать условия, при которых процессор в ходе упреждающего выполнения спекулятивно обработает инструкцию, следующую в памяти сразу за командой перехода (SLS (https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/Security%20Update%2008%20June%202020/Straight-line_Speculation-v1.0.pdf?revision=d7a69e60-1bb0-4dc0-b929-3685021e782a), Straight Line Speculation). При этом подобная оптимизация срабатывает не только для операторов условного перехода, но и для инструкций, подразумевающих прямой безусловный переход, таких как JMP, RET и CALL. Следом за инструкциями безусловного перехода могут размещаться в том числе произвольные данные, не предназначенные для исполнения. После определения того, что переход не подразумевает выполнение следующей инструкции, процессор просто откатывает состояние и не учитывает спекулятивное выполнение, но след от выполнения инструкции остаётся в общем кэше и доступен для анализа с использованием методов извлечения по сторонним каналам.

Как и при эксплуатации уязвимости Spectre-v1 для осуществления атаки требуется наличие в ядре определённых последовательностей инструкций (гаджетов), приводящих к спекулятивному выполнению. Блокирование уязвимости при этом сводится к выявлению подобных гаджетов в коде и добавлению в них дополнительных инструкций, блокирующих спекулятивное выполнение. Условия для спекулятивного выполнения также могут быть созданы при помощи непривилегированных программ, выполняемых в виртуальной машине eBPF. Для блокирования возможности конструирования гаджетов при помощи eBPF рекомендуется запретить непривилегированный доступ к eBPF в системе ("sysctl -w kernel.unprivileged_bpf_disabled=1").

Уязвимость затрагивает процессоры на базе микроархитектуры Zen1 и Zen2, включая первое и второе поколения процессоров AMD EPYC и AMD Ryzen Threadripper, а также процессоры AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper PRO и APU серии A. Для блокирования спекулятивного выполнения инструкций рекомендовано (https://www.amd.com/system/files/documents/software-techniques-for-managing-speculation.pdf) вызывать инструкции INT3 или LFENCE после операций ветвления (RET, JMP, CALL).

10.03.2022

https://www.opennet.ru/opennews/art.shtml?num=56835​