
В работе нет подробного описания атаки — само исследование достаточно сложно для понимания, даже на фоне и так непростых предыдущих аппаратных атак. Авторы также решили не придумывать уязвимости какое-то название и рисовать логотип. Среди важных достижений работы отметим новый метод эксфильтрации секретных данных через новый сторонний канал — регистр флагов EFLAGS.
Для сравнения: уязвимости семейства Spectre опираются на один из методов кражи данных из кэш-памяти процессора. Сценарий атаки в новом исследовании, впрочем, типичный: изучается, как код без особых привилегий может получить доступ к секретной информации, которая в нормальных условиях должна быть защищена.
Первоначальный доступ к информации происходит за счет спекулятивного выполнения инструкций. Эта стандартная фича любого современного процессора может быть задействована таким образом, что чтение данных, к которым у атакующей программы нет доступа, все же происходит. В нормальной ситуации такие вычисления отбрасываются, и данные не передаются. Но если информация сохранилась в кэш-памяти самого процессора, появляется возможность ее оттуда вытащить по тем самым сторонним каналам.
«Спекулятивная» часть атаки в работе не рассматривается. Авторы просто использовали атаку
Процесс схематично показан на графике в начале статьи. Если коротко, код атаки сначала обращается к необходимым данным, затем производит операцию сравнения с неким значением. А потом происходит самое интересное: выполняется инструкция перехода в зависимости от результата предыдущего вычисления из набора команд Jcc (JZ). Результат сравнения сохраняется в регистре флагов EFLAGS (ZF).
Напомним, все эти инструкции выполняются спекулятивно, наш атакующий код не видит результат напрямую. Суть уязвимости заключается в том, что время выполнения команды из набора Jcc зависит от состояния флага ZF. Измеряя время выполнения инструкции, мы узнаем результат сравнения с известным нам числом (совпало или нет), а значит — можем побитно вытаскивать секретные данные.
У метода есть достаточно много ограничений, начиная с необходимости использовать атаку Meltdown. Естественно, работает она только на уязвимых процессорах. В исследовании тестировались Intel Core i7 шестого и седьмого поколения: на них секретную информацию удалось прочитать со 100%-ной надежностью. Очевидно, что на более современном процессоре (проверялось на Intel десятого поколения) такая атака не работает. Но задержка при выполнении инструкции Jcc присутствует и там, что теоретически дает шанс на разработку соответствующего метода и для новых процессоров.
И все же даже этот половинчатый результат был получен в «лабораторных условиях». Не факт, что с использованием данной уязвимости удастся провести реальную атаку: слишком много условий должно совпасть, включая подходящие особенности работы атакуемого программного обеспечения. Если на атакуемой системе в принципе можно выполнить какой-то вредоносный код, даже не имеющий привилегий, есть масса более простых способов повысить уровень доступа. Еще одно ограничение заключается в том, что команда Jcc должна быть выполнена сразу после спекулятивного обращения к данным. Через 6–9 циклов использовать этот канал будет невозможно, поскольку не получится надежно зафиксировать отличие по времени выполнения. Как и в случае других аппаратных уязвимостей, данная проблема может быть исправлена в следующих версиях процессоров с помощью обновления микрокода или путем внедрения контрмер в программном обеспечении.
Что еще произошло:
В утилите Google Authenticator внедрили фичу резервного копирования данных в облако (то есть в учетку Google). Впрочем, эксперты тут же
Эксперты «Лаборатории Касперского» опубликовали интересный
Компания Google в ежегодном отчете
Активно