Даниэль Могими (Daniel Moghimi) из компании Google, занимающийся исследовательской деятельностью в Калифорнийском университете в Сан-Диего, выявил новую уязвимость (CVE-2022-40982) в системе спекулятивного выполнения инструкций процессоров Intel, позволяющую определить содержимое векторных регистров XMM, YMM и ZMM, до этого использованных в других процессах при выполнении инструкций AVX (Advanced Vector Extensions) на том же ядре CPU. Уязвимости присвоено имя Downfall, а техника атаки названа Gather Data Sampling (GDS).
Непривилегированный атакующий, имеющий возможность выполнить свой код в системе, может использовать уязвимость для организации утечки данных из процессов других пользователей, ядра системы, изолированных анклавов Intel SGX и виртуальных машин. Подверженные утечке векторные регистры активно применяются при шифровании, в функциях копирования памяти и при обработке строк, например, среди прочего данные регистры применяются в библиотеке Glibc в функциях memcpy, strcmp и strlen. С практической стороны уязвимость можно использовать для определения данных, обрабатываемых в инструкциях AES-NI или REP-MOVS (применяется в функции memcpy) в других процессах, что может привести к утечке ключей шифрования, конфиденциальных данных и паролей пользователей.
В качестве демонстрации работы метода опубликованы прототипы эксплоитов для извлечения криптографических ключей из процесса другого пользователя, организации утечки данных после их копирования функцией memcpy в ядре Linux и перехвата печатных символов, остающихся в векторных регистрах после работы других процессов. Например, показана возможность определения ключей AES, применяемых для шифрования данных в процессе другого пользователя, использующего библиотеку OpenSSL.
Метод показал высокую эффективность:
при проведении эксперимента со 100 различными ключами было определено 100% ключей AES-128 и 86% ключей AES-256 при продолжительности каждой попытки определения не более 10 секунд. В облачных системах атака может использоваться для определения данных, обрабатываемых в других виртуальных машинах. Не исключена возможность эксплуатации уязвимости через запуск JavaScript-кода в web-браузере.
Как и в недавно выявленной уязвимости Zenbleed, затрагивающей процессоры AMD Zen2, причиной появления уязвимости Downfall также является утечка данных из регистровых файлов (RF, Register File), которые используются для совместного хранения содержимого регистров во всех задачах на том же ядре CPU. Утечка происходит из-за спекулятивной пересылки данных при выполнении AVX2-инструкции GATHER, предназначенной для предоставления быстрого доступа к разрозненным данным в памяти. В ходе выполнения инструкции GATHER старые данные из регистрового файла используются при спекулятивном выполнении последующих инструкций. Указанные данные напрямую не отражаются в программных регистрах, но могут быть определены при помощи методов атаки по сторонним каналам, разработанных для атак класса Meltdown.
Уязвимость проявляется в процессорах Intel, имеющих поддержку расширенных наборов инструкций AVX2 и AVX-512 (c 6 “Skylake” по 11 “Tiger Lake” поколение Intel Core), т.е. в процессорах, выпускаемых с 2014 года. Процессоры Intel на базе микроархитектур Alder Lake, Raptor Lake и Sapphire Rapids проблеме не подвержены. Все ранее доступные методы защиты от атак, связанных со спекулятивным выполнением инструкций в CPU, не блокируют проблему. Средства для защиты от уязвимости Downfall предложены в свежем обновлении микрокода, но блокирование уязвимости может приводить к снижению производительности определённых видов нагрузки до 50%.
Исправления для защиты от уязвимости включён в состав обновлений ядра Linux 6.4.9, 6.1.44, 5.15.125, 5.10.189, 5.4.252, 4.19.290, 4.14.321. Для систем, для которых недоступно устранение проблемы при помощи микрокода, реализовано отключение поддержки всех расширений AVX (отдельно AVX2 и AVX512 отключить невозможно). Для управлением включением защиты добавлен параметр ядра gather_data_sampling и информационный файл “/sys/devices/system/cpu/vulnerabilities/gather_data_sampling”. Проследить за появлением защиты от уязвимости в дистрибутивах можно на следующих страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch, OpenBSD, FreeBSD, NetBSD.
Отмечается, что реализованное отключение AVX может нарушить работу некоторого кода в пространстве пользователя, который некорректно определяет наличие поддержки AVX2. В частности, проблемы возникают, если приложение проверяет только наличие поддержки AVX, но не учитывает информацию о поддержке XSAVE YMM. Судя по всему, данная логика применяется достаточно часто, так как, например, перестала работать команда ‘wc -l’.