У процесорах AMD на базі мікроархітектур Zen+ та Zen 2 виявлено вразливість класу Meltdown

Група дослідників з Технічного університету Дрездена виявила вразливість (CVE-2020-12965) у процесорах AMD на базі мікроархітектур Zen+ та Zen 2, що дозволяє зробити атаку класу Meltdown. Спочатку передбачалося, що процесори AMD Zen+ і Zen 2 не схильні до вразливості Meltdown, але дослідниками була виявлена ​​особливість, що призводить до спекулятивного звернення до захищених областей пам'яті при використанні неканонічних віртуальних адрес.

Архітектура AMD64 передбачає використання тільки перших 48 біт віртуальної адреси і ігнорування 16 біт, що залишилися. При цьому визначено, що біти з 48 по 63 повинні копіювати значення 47 біта (розширення знакового біта). У разі порушення цієї умови та спроби звернення за адресою з довільними значеннями верхніх бітів процесор генерує виняток. Заповнення верхніх бітів, що повторюється, призводить до поділу доступного адресного простору на два блоки - нижній (від 0 до 00007FFFFFFFFFFF), в якому верхні біти обнулені, і верхній (від FFFF800000000000 до FFFFFFFFFFFFFFFF), в якому всі верхні біти 1.

Адреси, що підпадають під зазначені блоки, називаються канонічними, а некоректні адреси з довільним вмістом верхніх бітів — неканонічними. Нижній діапазон канонічних адрес, як правило, виділяється під дані процесу, а верхній використовується для даних ядра (доступ до зазначених адрес з простору користувача блокується на рівні поділу привілеїв).

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

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

Особливість нової вразливості, якої схильні процесори AMD Zen+ і Zen 2, в тому, що CPU допускають спекулятивне виконання операцій читання та запису, що звертаються до пам'яті з використанням неприпустимих неканонічних адрес, просто ігноруючи верхні 16 біт. Таким чином, у процесі спекулятивного виконання коду процесор завжди використовує лише нижні 48 біт, а перевірка допустимості адреси проводиться окремо. Якщо при трансляції неканонічної віртуальної адреси у фізичну адресу буфері асоціативної трансляції (TLB) буде виявлено збіг канонічної частини адреси, то спекулятивна операція load поверне значення без урахування вмісту верхніх 16 біт, що дозволяє обійти поділ пам'яті між потоками. Згодом операцію буде визнано неприпустимою та відкинуто, але звернення до пам'яті буде виконано і дані осядуть у кеші.

В ході експерименту при використанні техніки визначення вмісту кешу FLUSH+RELOAD дослідникам вдалося організувати канал для прихованої передачі зі швидкістю 125 байт в секунду. Крім чіпів AMD проблема також зачіпає і всі процесори Intel, схильні до класичної вразливості Meltdown. Для захисту від нового виду атаки можуть застосовуватися ті ж методи, що допомагають блокувати атаки Meltdown, такі як використання інструкцій LFENCE. Наприклад, якщо процесор Intel включає апаратний захист від Meltdown або в системі включений програмний захист, то подібні конфігурації не піддаються новому варіанту атаки.

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

Так як програма з без уразливості має можливість отримати доступ до своїх потоків, то з практичного боку метод представляє інтерес для обходу sandbox-ізоляції та організації втручання в роботу інших потоків у програмах, що допускають виконання стороннього коду, таких як web-браузери та JIT-движки . Дослідники вивчили схильність до атаки JavaScript-движка SpiderMonkey і ядра Linux, але не знайшли вразливих послідовностей коду, за допомогою яких можна було б зробити атаку. Крім атаки на додатки, метод також може застосовуватися для форсування неприпустимих потоків даних між мікроархітектурними елементами процесора в процесі експлуатації інших мікроархітектурних уразливостей.

Джерело: opennet.ru

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