Исследователи Швейцарской высшей технической школы Цюриха выявили новый вариант атаки на механизм спекулятивного выполнения команд в процессорах, который позволяет извлечь информацию из памяти ядра или организовать атаку на хост-систему из виртуальных машин, пишет OpenNet. Уязвимости получили кодовое имя Retbleed.
Отличие от подобных им атак Spectre-v2 сводится к организации спекулятивного выполнения произвольного кода при обработке инструкции «ret» (return), которая извлекает адрес для перехода из стека, вместо косвенного перехода при помощи инструкции «jmp» с загрузкой адреса из памяти или регистра процессора.
Атакующий может создать условия для неверного предсказания перехода и организовать спекулятивный переход на блок кода, который не предусмотрен логикой выполнения программы. Процессор определит, что предсказание ветвления не оправдалось, и откатит операцию, но обработанные при спекулятивном выполнении данные осядут в кэше и микроархитектурных буферах. Злоумышленник может считать их с помощью методов выявления остаточных данных по сторонним каналам, например, анализировать изменения времени доступа к кэшированным и не кэшированным данным. Для защиты от атак класса Spectre в большинстве ОС применяется техника «retpoline». Она предполагает замену операций косвенного перехода на инструкцию «ret», для которой в процессорах применяется отдельный блок предсказания состояния стека, не использующий блок предсказания переходов. Авторы атаки Retbleed показали возможность создания микроархитектурных условий для инициирования спекулятивного перехода при помощи инструкции «ret» и опубликовали инструмент для выявления в ядре Linux подходящих для эксплуатации уязвимости последовательностей инструкций, в которых появляются подобные условия.
Также подготовлен эксплойт, позволяющий на системах c процессорами Intel из непривилегированного процесса в пространстве пользователя извлекать произвольные данные из памяти ядра со скоростью 219 байт в секунду и точностью 98%. На процессорах AMD эффективность эксплоита гораздо выше — 3,9 Кб в секунду. На системах с процессорами Intel атака для определения хэша пароля пользователя root была проведена за 28 минут, а системы с процессорами AMD сдались за 6 минут.