Группа исследователей из Грацского технического университета (Австрия), ранее известная разработкой метода эксплуатация уязвимости в DRAM-памяти через локальную сеть, опубликовала описание новой атаки NetSpectre, позволяющей инициировать утечку данных из памяти через манипуляцию с сетевыми пакетами, отправляемыми по сети.
Опасность атаки сглаживается её низкой производительностью - в оптимальных условиях предложенный метод позволяет определить 15-60 бит данных в час или 45-180 байт в день. В реальных условиях скорость значительно ниже, например, тестовая атака на окружение в Google Cloud позволила извлечь лишь 1-3 байт за 3-8 часов атаки (потребовалось выполнить около 20 млн проверок для определения одного бита). Ожидается, что со временем будут предложены методы, повышающие эффективность атаки, но в любом случае на извлечение ключа AES потребуются дни. По заявлению компании Intel атака блокируется методами защиты, предложенными для первого варианта уязвимости Spectre (CVE-2017-5753).
Метод атаки основывается на нахождении в типовых программах и ядре фрагментов кода (гаджетов), приводящих к спекулятивному обращению к областям памяти ("leak gadget") и раскрытию информации по сети ("transmit gadget"). Например, во многих приложениях встречаются конструкции вида (важно само обращение к bitstream[x] после проверки границ):
if (x < bitstream_length)
if(bitstream[x])
flag = true;
Если подобные фрагменты применяются при обработке сетевых пакетов и атакующий может сформировать запрос, в котором значение "x" выходит за пределы допустимых значений, то появляется возможность инициирования спекулятивного обращения к областям памяти вне допустимых границ. Результат данных спекулятивных операций отбрасывается процессором, но оседает в кэше и доступен для извлечения при помощи методов анализа содержимого кэша по сторонним каналам. Для успешного спекулятивного выполнения перед передачей выходящего за границы значения "x" требуется предварительно натренировать блок предсказания переходов корректными значениями, в этом случае сработает оптимизация по спекулятивному обращению к памяти до того как станет известен результат проверки условного оператора.
Для определения остаточных данных также предлагается использовать существующие фрагменты кода в приложениях или ядре ("transmit gadget"), которые активируются при поступлении определённых видов сетевых запросов. Например, для извлечения осевших в кэше данных исследователями предложена модификация метода Evict+Reload, основанного на создании условий для вытеснения данных из кэша (например, создаётся сетевая активность равномерно заполняющая кэш типовым содержимым) и обработки запросов, время выполнения которых позволяет судить о наличии данных в процессорном кэше. Скорость проведения подобной атаки по сети не превышает 15 бит в час.
Для повышения производительности до 60 бит в час исследователи предложили использовать гаджеты с инструкциями AVX2 в качестве дополнительного канала утечки информации. Метод основан на особенностях перевода блока AVX2 в режим энергосбережения. В случае неактивного использования AVX2 предусмотрен режим экономии энергии, при котором блок AVX2 продолжает работать, но снижается его производительность. В случае неактивности AVX2 в течение 1 мс процессор полностью отключает блок AVX2, что приводит к появлению заметной задержки при выполнении следующей операции.
При использовании инструкций AVX2 в гаджете спекулятивного выполнения (leak gadget) и в гаджете передачи сведений (transmit gadget) можно определить факт спекулятивного выполнения кода на основании исчезновения задержки на пробуждение блока AVX2. Указанная особенность позволяет существенно сократить число проверок для определения каждого бита информации, например, для восстановления одного байта через кэш при атаке в локальной сети требуется как миниум 30 минут, а при использовании утечки на базе AVX2 время определения можно снизить до 8 минут.
if (x < bitstream_length)
if(bitstream[x])
_mm256_instruction();
Для поиска подобных гаджетов в коде ядра, библиотек и приложений можно использовать специальную утилиту. Потенциально упомянутые фрагменты кода могут встречаться в любых сетевых приложениях, в том числе в коде http-серверов, SSH и других обработчиках сетевых пакетов. При эксплуатации гаджетов в ядре можно получить полный доступ к содержимому всей системной памяти. Тем не менее, атаку усложняет то, что из-за очень низкой скорости извлечения информации для успешного получения закрытых данных, таких как ключи шифрования, нужно точно знать их смещение в памяти (при обычном переборе на извлечение 1 Мб данных потребуется 15 лет). В качестве более реалистичного применения атаки называется определение адреса, позволяющего судить о раскладке памяти при использовании ASLR (address space layout randomization) - определение адреса занимает около двух часов.
Дополнение: Инженеры Red Hat проанализировали состав дистрибутива RHEL и не выявили в числе пользовательских компонентов подходящих для атаки фрагментов кода. Также в Red Hat организован более детальный аудит сетевого стека и всех сетевых демонов, принимающих соединения по сети.
http://www.opennet.ru/opennews/art.shtml?num=49032