Компания Intel опубликовала сведения о новом классе уязвимостей в своих процессорах - MDS (Microarchitectural Data Sampling). Уязвимость была обнаружена учеными из Технологического университета Граца, которые и передали всю информацию в компанию Intel.

Выявленная проблема открывает возможность злоумышленникам похищать любые данные, к которым процессор недавно обращался. Проблема актуальна также и для облачных серверов, так как открывает возможность злоумышленнику украсть информацию с других виртуальных машин, работающих на одной физической системе.

Исследователи разработали несколько эксплоитов, эксплуатирующих выявленный дефект:

  • ZombieLoad - позволяет извлечь конфиденциальную информацию из других процессов, операционной системы, виртуальных машин и защищённых каналов (TEE, Trusted Execution Environment). Например, продемонстрирована возможность определения истории открытия страниц в Tor browser, запущенном в другой виртуальной машине, а также извлечения используемых в приложениях ключей доступа и паролей;
  • RIDL - позволяет организовать утечку информации между различными изолированными областями в процессорах Intel, такими как буферы заполнения, буферы хранения и порты загрузки. Примеры проведения атаки показаны для организации утечек из других процессов, операционной системы, виртуальных машин и защищённых анклавов. Например, показано как узнать содержимое хэша пароля root из /etc/shadow при периодических попытках аутентификации (атака заняла 24 часа);
  • Fallout - даёт возможность читать данные, недавно записанные операционной системой и определять раскладку памяти ОС для упрощения проведения других атак;
  • Store-To-Leak Forwarding - эксплуатирует оптимизации CPU по работе с буфером хранения и может применяться для обхода механизма рандомизации адресного пространства ядра (KASLR).

Суть выявленных проблем в возможности применения методов анализа по сторонним каналам к данным в микроархитектурных структурах, к которым приложения напрямую не имеют доступа. Речь ведётся о таких низкоуровневых структурах, как буферы заполнения (Line Fill Buffer), буферы хранения (Store Buffer) и порты загрузки (Load Port), которые являются более мелкими составными блоками, чем кэш первого уровня (L1D), кэш загрузки данных (RDCL) или L1TF (L1 Terminal Fault), и соответственно включают меньше информации и обновляются более интенсивно.

MDS concept

Атаки по сторонним каналам на микроархитектурные структуры существенно сложнее в проведении по сравнению с методами восстановления содержимого кэша и требуют отслеживания и анализа значительных объёмов данных для определения их связи с определёнными адресами в памяти (по сути, атакующий не может целенаправленно перехватить определённые данные, а может длительное время накапливать утечки и применять статистические методы для реконструкции определённых видов данных). Кроме того, атака затрагивает только данные на том же физическом ядре CPU, что и код атакующего.

Предложенные методы определения содержимого микроархитектурных структур основываются на том, что данные структуры используются при спекулятивной обработке исключений (fault) или операций load и store. При спекулятивном выполнении содержимое внутренних структур перенаправляется для обработки в регистры или кэш. Спекулятивные операции не завершаются и результат отбрасывается, но перенаправленное содержимое можно определить при помощи методов анализа кэша по сторонним каналам.

Порты загрузки используются процессором для получения данных из памяти или подсистемы ввода/вывода и предоставления полученной информации в регистры CPU. Из-за особенности реализации данные от старых операций загрузки остаются в портах до их перезаписи новыми данными, что позволяет косвенно определить состояние данных в порте загрузки при помощи манипуляций с исключениями (fault) и инструкциями SSE/AVX/AVX-512, загружающими более 64 бит данных. В подобных условиях операции загрузки спекулятивно засвечивают устаревшие значения данных из внутренних структур в зависимые операции. Похожим образом организуется утечка через буфер хранения, применяемый для ускорения записи в кэш CPU и включающий в себя таблицу адресов, значений и флагов, а также через буфер заполнения, который содержит данные, пока отсутствующие в кэше L1 (cache-miss), на время их загрузки из кэшей других уровней.

Проблема затрагивает модели процессоров Intel, выпускаемые с 2011 года (начиная с 6 поколения). При этом аппаратно уязвимости блокируются начиная с некоторых моделей 8 и 9 поколений Intel Core и 2 поколения Intel Xeon Scalable (проверить можно через бит ARCH_CAP_MDS_NO в IA32_ARCH_CAPABILITIES MSR). Уязвимости также уже устранены на уровне прошивок, микрокода и операционных систем. Многие производители серверов, ПК и ноутбуков к моменту раскрытия сведений об уязвимостях успели выпустить обновления прошивок.

По оценке Intel потеря производительности после активации исправления для большинства пользователей не превышает 3%. При отключении технологии Hyper-Threading снижение производительности может доходить до 9% в тесте SPECint_rate_base, до 11% при активных целочисленных вычислениях и до 19% при выполнении серверных Java-приложений (при включенном HT снижение производительности почти отсутствует). Исправления практически не влияют на производительность операций, связанных с вводом/выводом.