Вразливість у процесорах Intel, що призводить до витоку даних по стороннім каналам

Група дослідників з китайських та американських університетів виявила нову вразливість у процесорах Intel, що призводить до витоку сторонніми каналами інформації про результат спекулятивного виконання операцій, яку можна використовувати, наприклад, для організації прихованого каналу зв'язку між процесами або визначення витоків при скоєнні атак класу Meltdown.

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

Вразливість у процесорах Intel, що призводить до витоку даних по стороннім каналам

На відміну від інших подібних атак по сторонніх каналах, новий метод не аналізує зміни часу доступу до прокешованих і не прокешованих даних і не вимагає виконання стадії зі скиданням регістру 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 для відтворення даних, що передаються першим процесом.

Джерело: opennet.ru

Додати коментар або відгук