Уязвимость относится к представленному год назад классу проблем MDS (Microarchitectural Data Sampling) и основывается на применении методов анализа по сторонним каналам к данным в микроархитектурных структурах. Принцип действия CROSSTalk близок к уязвимости RIDL, но отличается источником утечки. Новая уязвимость манипулирует утечкой из ранее недокументированного промежуточного буфера, который используется совместно всеми ядрами CPU.

Суть проблемы в том, что некоторые инструкции микропроцессора, включая RDRAND, RDSEED и SGX EGETKEY, реализованы с использованием внутренней микроархитекстурной операции SRR (Special Register Reads). На подверженных уязвимости процессорах данные, возвращаемые для SRR, оседают в промежуточном буфере, общем для всех ядер CPU, после чего передаются в буфер заполнения, привязанный к конкретному физическому ядру CPU на котором инициирована операция чтения. Далее, из буфера заполнения значение копируется в регистры, видимые приложениям. Размер промежуточного совместного буфера соответствует линии кеша, что обычно больше, чем размер читаемых данных и разные операции чтения затрагивают разные смещения в буфере. Так как совместный буфер копируется в буфер заполнения целиком, то перемещается не только нужная для текущей операции порция, но и данные, оставшиеся от выполнения других операций, в том числе выполненных на других ядрах CPU.

В случае успешной организации атаки, аутентифицированный в системе локальный пользователь может определить результат выполнения инструкций RDRAND, RDSEED и EGETKEY в чужом процессе или внутри анклава Intel SGX, независимо от ядра CPU, на котором выполняется код. Выявившие проблему исследователи опубликовали прототип эксплоита, демонстрирующий возможность утечки сведений о случайных значениях, получаемых через инструкции RDRAND и RDSEED, для восстановления закрытого ключа ECDSA, обрабатываемого в анклаве Intel SGX, после осуществления в системе всего одной операции с цифровой подписью.
Проблеме подвержен широкий спектр настольных, мобильных и серверных процессоров Intel, включая Core i3, i5, i7, i9, m3, Celeron (серии J, G и N), Atom (серии С, E и X), Xeon (семейства E3, E5, E7, W и D), Xeon Scalable и т.д. Примечательно, что компания Intel была уведомлена о проблеме 21 месяц назад, в 2018 году, но разработка исправления затянулась. В предложенном сегодня обновлении микрокода проблема блокирована путём изменения поведения инструкций RDRAND, RDSEED и EGETKEY для избыточной перезаписи данных в совместном буфере для недопущения оседания в нём остаточной информации. Кроме того, применена приостановка обращения к буферу до завершения операций чтения и перезаписи содержимого.
Побочным эффектом подобной защиты является увеличение задержек при выполнении RDRAND, RDSEED и EGETKEY, и сокращение пропускной способности при попытке одновременного выполнения данных инструкций на разных логических процессорах. Выполнение RDRAND, RDSEED и EGETKEY также приостанавливает доступ к памяти из других логических процессоров. Указанные особенности могут негативно повлиять на производительность некоторых серверных приложений, поэтому в прошивке предусмотрен механизм (RNGDS_MITG_DIS) для отключения защиты инструкций RDRAND и RDSEED, выполняемых вне анклава Intel SGX.
Источник: http://www.opennet.ru/opennews/art.shtml?num=53126
