Представлен новый класс уязвимостей в процессорах Intel

Компания 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. Метод защиты строится на очистке содержимого микроархитектурных буферов в момент возвращения из ядра в пространство пользователя или при передаче управления гостевой системе, для чего используется инструкция VERW. Для работы зашиты требуется наличие поддержки режима MD_CLEAR, реализованного в свежем обновлении микрокода. Для полной защиты также рекомендуется отключить Hyper Threading. Для проверки подверженности системе уязвимости в ядро Linux добавлен обработчик «/sys/devices/system/cpu/vulnerabilities/mds». Для управления включением различных режимов блокирования уязвимости в ядро добавлен параметр «mds=», который может принимать значения «full», «full,nosmt» (отключение Hyper-Threads), «vmwerv» и «off».

Обновления пакетов уже выпущены для RHEL и Ubuntu, но пока остаются недоступны для Debian, Fedora и SUSE. Исправление для блокирования утечек данных из виртуальных машин сформировано для гипервизора Xen и VMware. Для защиты систем виртуализации, выполняющих вызов команды L1D_FLUSH перед передачей управления другой виртуальной машине, и для защиты анклавов Intel SGX достаточно обновления микрокода. Исправления также доступны для NetBSD, FreeBSD, ChromeOS, Windows и macOS (для OpenBSD исправлений ещё нет).

Источник: http://www.opennet.ru/opennews/art.shtml?num=50684

Источник: OpenNet.ru