Представлен новый класс уязвимостей в процессорах Intel
14 мая 2019 года
Компания Intel опубликовала сведения о новом классе уязвимостей в своих процессорах - MDS (Microarchitectural Data Sampling). Как и прошлые атаки класса Spectre новые проблемы могут привести к утечке закрытых данных операционной системы, виртуальных машин и чужих процессов. Утверждается, что проблемы сперва были выявлены сотрудниками и партнёрами Intel в ходе внутреннего аудита. В июне и августе 2018 года информацию о проблемах в Intel также передали независимые исследователи, после чего почти год велась совместная работа с производителями и разработчиками операционных систем по определению возможных векторов атак и доставке исправлений. Процессоры AMD и ARM проблеме не подвержены.
На основе выявленных проблем исследователями из Грацского технического университета (Австрия) разработано несколько практических атак по сторонним каналам:
- ZombieLoad ( PDF, прототип эксплоитов для Linux и Windows) - позволяет извлечь конфиденциальную информацию из других процессов, операционной системы, виртуальных машин и защищённых анклавов (TEE, Trusted Execution Environment). Например, продемонстрирована возможность определения истории открытия страниц в Tor browser, запущенном в другой виртуальной машине, а также извлечения используемых в приложениях ключей доступа и паролей;
- RIDL ( PDF, код для проверки) - позволяет организовать утечку информации между различными изолированными областями в процессорах Intel, такими как буферы заполнения, буферы хранения и порты загрузки. Примеры проведения атаки показаны для организации утечек из других процессов, операционной системы, виртуальных машин и защищённых анклавов. Например, показано как узнать содержимое хэша пароля root из /etc/shadow при периодических попытках аутентификации (атака заняла 24 часа);
Кроме того показан пример проведения атаки с использованием JavaScript и WebAssembly при открытии вредоносной страницы в движке SpiderMonkey (в современных полноценных браузерах подобная атака маловероятна из-за ограничения точности таймера и мер для защиты от Spectre). Представители проекта Chromium считают, что добавления дополнительной защиты в браузер не требуется и можно обойтись исправлениями на уровне ОС.
- Fallout ( PDF) - даёт возможность читать данные, недавно записанные операционной системой и определять раскладку памяти ОС для упрощения проведения других атак;
- Store-To-Leak Forwarding - эксплуатирует оптимизации CPU по работе с буфером хранения и может применяться для обхода механизма рандомизации адресного пространства ядра (KASLR), для мониторинга состояния операционной системы или для организации утечек в комбинации с гаджетами на базе методов Spectre.
Выявленные уязвимости:
- CVE-2018-12126 - MSBDS (Microarchitectural Store Buffer Data Sampling), восстановление содержимого буферов хранения. Используется в атаке Fallout. Степень опасности определена в 6.5 баллов (CVSS);
- CVE-2018-12127 - MLPDS (Microarchitectural Load Port Data Sampling), восстановление содержимого портов загрузки. Используется в атаке RIDL. CVSS 6.5;
- CVE-2018-12130 - MFBDS (Microarchitectural Fill Buffer Data Sampling), восстановление содержимого буферов заполнения. Используется в атаках ZombieLoad и RIDL. CVSS 6.5;
- CVE-2019-11091 - MDSUM (Microarchitectural Data Sampling Uncacheable Memory), восстановление содержимого некэшируемой памяти. Используется в атаке RIDL. CVSS 3.8.
Суть выявленных проблем в возможности применения методов анализа по сторонним каналам к данным в микроархитектурных структурах, к которым приложения напрямую не имеют доступа. Речь ведётся о таких низкоуровневых структурах, как буферы заполнения (Line Fill Buffer), буферы хранения (Store Buffer) и порты загрузки (Load Port), которые являются более мелкими составными блоками, чем кэш первого уровня (L1D), кэш загрузки данных (RDCL) или L1TF (L1 Terminal Fault), и соответственно включают меньше информации и обновляются более интенсивно.
Атаки по сторонним каналам на микроархитектурные структуры существенно сложнее в проведении по сравнению с методами восстановления содержимого кэша и требуют отслеживания и анализа значительных объёмов данных для определения их связи с определёнными адресами в памяти (по сути, атакующий не может целенаправленно перехватить определённые данные, а может длительное время накапливать утечки и применять статистические методы для реконструкции определённых видов данных). Кроме того, атака затрагивает только данные на том же физическом ядре 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). Уязвимости также уже устранены на уровне прошивок, микрокода и операционных систем. Многие производители серверов, ПК и ноутбуков к моменту раскрытия сведений об уязвимостях успели выпустить обновления прошивок (например, Lenovo).
По оценке Intel потеря производительности после активации исправления для большинства пользователей не превышает 3%. При отключении технологии Hyper-Threading снижение производительности может доходить до 9% в тесте SPECint_rate_base, до 11% при активных целочисленных вычислениях и до 19% при выполнении серверных Java-приложений (при включенном HT снижение производительности почти отсутствует). Исправления практически не влияют на производительность операций, связанных с вводом/выводом. В macOS отмечается провал производительности многопоточных приложений при отключении hyper-threading до 40%.
В ядре Linux защита от MDS добавлена в сегодняшних обновлениях 5.1.2, 5.0.16, 4.19.43, 4.14.119 и 4.9.176. Метод защиты строится (Архивная копия от 21 октября 2020 на Wayback Machine) на очистке содержимого микроархитектурных буферов в момент возвращения из ядра в пространство пользователя или при передаче управления гостевой системе, для чего используется инструкция VERW. Для работы защиты требуется наличие поддержки режима MD_CLEAR, реализованного в свежем обновлении микрокода. Для полной защиты также рекомендуется отключить Hyper Threading. Для проверки подверженности системе уязвимости в ядро Linux добавлен обработчик "/sys/devices/system/cpu/vulnerabilities/mds". Для управления включением различных режимов блокирования уязвимости в ядро добавлен параметр "mds=", который может принимать значения "full", "full,nosmt" (отключение Hyper-Threads), "vmwerv" и "off".
Обновления пакетов уже выпущены для RHEL, CentOS 6 и Ubuntu, но пока остаются недоступны для
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.