Зависимость времени выполнения инструкций от данных на CPU ARM и Intel

Эрик Биггерс (Eric Biggers), один из разработчиков шифра Adiantum и мэйнтейнер подсистемы ядра Linux fscrypt, предложил набор патчей для блокирования проблем с безопасностью, возникающих из-за особенности процессоров Intel, не гарантирующей постоянное время выполнения инструкций для разных обрабатываемых данных. В процессорах Intel проблема проявляется начиная с семейства Ice Lake. Аналогичная проблема наблюдается и в процессорах ARM.

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

Потенциально зависимость времени выполнения от данных также может использоваться для организации атак по определению данных ядра из пространства пользователя. По заявлению Эрика Биггерса, постоянное время выполнения по умолчанию не обеспечивается даже для инструкций, выполняющих операции сложения и XOR, а также для специализированных инструкций AES-NI (информация не подтверждена тестами, по другим данным при умножении векторов и подсчёте битов возникает задержка на один цикл).

Для отключения рассматриваемого поведения компании Intel и ARM предложили новые флаги: PSTATE-бит DIT (Data Independent Timing) для CPU ARM и MSR-бит DOITM (Data Operand Independent Timing Mode) для CPU Intel, возвращающие старое поведение с постоянным временем выполнения. Компании Intel и ARM рекомендуют включать защиту по мере необходимости для особо важного кода, но на деле важные вычисления могут встречаться в любых частях ядра и пространства пользователя, поэтому рассматривается возможность постоянной активации режимов DOITM и DIT для всего ядра.

Для процессоров ARM в ветку ядра Linux 6.2 уже приняты патчи, меняющие поведение для ядра, но данные патчи рассматриваются как недостаточные, так как они охватывают только код ядра и не меняют поведение для пространства пользователя. Для процессоров Intel включение защиты пока находится только на стадии рецензирования. Измерение влияния патча на производительность пока не проводилось, но по данным из документации Intel включение режима DOITM снижает производительность (например, из-за отключения некоторых оптимизаций, таких как специфичная для определённых данных упреждающая загрузка) и в будущих моделях процессоров снижение производительности может усилиться.

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

Добавить комментарий