Уязвимость в процессорах Intel, приводящая к утечке данных по сторонним каналам

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

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


В отличие от других подобных атак по сторонним каналам новый метод не анализирует изменение времени доступа к прокэшированным и не прокэшированным данным и не требует выполнения стадии со сбросом регистра EFLAGS к начальному состоянию, что затрудняет выявление и блокирование атаки. В качестве демонстрации исследователи реализовали вариант атаки Meltdown, задействовав в нём новый метод для получения информации о результате выполнения спекулятивной операции. Работа метода для организации утечки информации при проведении атаки Meltdown успешно продемонстрирована на системах с CPU Intel Core i7-6700 и i7-7700 в окружении с Ubuntu 22.04 и ядром Linux 5.15. На системе с CPU Intel i9-10980XE атаку удалось провести лишь частично.

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

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

Release. Ссылка here.