Нещодавно Про це повідомили інженери Google відомості про критичну вразливість, визначену як CVE-2024-56161. Хрещений під ім'ям с EntrySign, ця невдача дозволяє обійти механізм перевірки цифрового підпису під час оновлення мікрокоду на процесорах AMD, які використовують перші чотири покоління мікроархітектури Zen.
EntrySign впливає на широкий спектр процесорів, дозволяє зловмиснику обійти засоби безпеки, які забезпечують цілісність мікрокоду, потенційно відкриваючи двері для зловмисних модифікацій поведінки апаратного забезпечення.
Про вразливість
Походження цієї вразливості полягає у використанні алгоритму AES-CMAC під час перевірки цифрового підпису замість довіреної хеш-функції. AMD використовувала цей алгоритм для підпису мікрокоду, використовуючи приватний ключ RSA та додаючи відкритий ключ до патча.
Процес перевірки передбачає порівняння процесором хешу відкритого ключа, вбудованого під час виробництва, з хешем ключа, зазначеного в патчі. однак, оскільки використовувався CMAC, який насправді є не хеш-функцією, а кодом автентифікації передавання повідомлень, відкрито порушення безпеки.
CMAC заснований на алгоритмі AES і використовує операції XOR для об’єднання блоків даних, але оскільки він не розроблений, щоб бути стійким до зіткнень, він дозволяє зловмиснику, який знає ключ шифрування, обчислювати проміжні значення, які компенсують зміни у вхідних даних, залишаючи результат операції незмінним.
І Intel, і AMD розробили унікальні набори інструкцій мікрокоду на основі RISC, обидва незадокументовані, але концептуально подібні до інших наборів інструкцій RISC, таких як ARM або RISC-V. Як і програмне забезпечення, правильна реалізація складного апаратного забезпечення є проблемою; Історично це призвело до багатьох відомих помилок, таких як помилка Intel FDIV у Pentium у 1994 році.
AMD надає один ключ шифрування для AES-CMAC у всіх своїх процесорах від Zen 1 до Zen 4, що означає, що якщо хтось витягне цей ключ з одного процесора, він зможе застосувати його до всіх інших. Насправді дослідники виявили, що ці процесори використовують відомий ключ, узятий із прикладу в рекомендаціях NIST SP 800-38B.
Теоретично це дозволило створювати помилкові патчі шляхом заміни відкритого ключа патча на той, який створює той самий хеш, і виберіть колізії для цифрового підпису. Такі зіткнення досягаються шляхом додавання додаткового блоку, здавалося б, випадкових даних до мікрокоду, щоб модифікований патч зберігав оригінальний цифровий підпис AMD.
Для вирішення цієї проблемиЩоб дослідити нові способи маніпулювання мікрокодом у процесорах AMD, інженери Google Вони розробили Zentool, набір комбінованих інструментів для перевірки мікрокодових патчів, включаючи обмежене розбирання, створення мікрокодових патчів за допомогою обмеженої кількості зворотного проектування складання.
Zentool був розроблений для полегшення аналізу та модифікації мікрокоду, що пропонує серію команд, які дозволяють від редагування параметрів і заміни інструкцій до завантаження зміненого мікрокоду в ЦП і виправлення цифрового підпису патча.
Наприклад, команда «zentool edit» дозволяє редагувати параметри у файлах мікрокоду, а «zentool print» відображає детальну інформацію про внутрішню структуру мікрокоду. Також «zentool load» завантажує мікрокод в процесор, а «zentool resign» перераховує цифровий підпис з урахуванням внесених змін. Крім того, пакет містить такі утиліти, як mcas і mcop, які надають функції асемблера та дизассемблера для роботи безпосередньо з мікрокодом.
Можливості Zentool дозволяє розробникам готувати та застосовувати власні патчі на процесорах AMD Zen Як ілюстративний приклад підготовлено патч, який змінює логіку інструкції RDRAND. Після застосування цього патча інструкція RDRAND припиняє генерувати псевдовипадкові послідовності та починає постійно повертати число 4, таким чином демонструючи силу модифікації мікрокоду та зміни очікуваної поведінки процесора.
Варто зазначити це З Zentool постачається докладний посібник про мікроархітектуру RISC86, яка використовується в мікрокоді AMD, а також інструкцію, яка пояснює, як створити власний мікрокод. Посібник показує, серед іншого, як розробити нові інструкції процесора, змінити поведінку існуючих інструкцій і завантажити ці зміни безпосередньо в ЦП.
Нарешті, якщо вам цікаво дізнатися більше про це, ви можете ознайомитися з деталями в наступне посилання.