Ми випустили мікроконтролер другого покоління RP2350 у серпні минулого року. Спираючись на успіх свого попередника, RP2040, це додає швидші процесори, більше пам’яті, нижчі стани живлення та модель безпеки, побудовану на основі Arm TrustZone для Cortex-M. Поряд із нашою власною платою Raspberry Pi Pico 2 і численними партнерськими платами, RP2350 також представлена ​​на значку DEF CON, розробленому Entropic Engineering, з мікропрограмою нашого друга Дмитра Грінберга.

The image shows two RP2350 microcontrollers. The chip on the left features the Raspberry Pi logo, a stylised raspberry with a leaf. The chip on the right shows the underside, highlighting the exposed silicon die pad and the lead frame surrounding it, indicating that these are likely surface-mount chips with a quad flat package (QFP) design.

Усі чіпи мають уразливості, і стратегія більшості постачальників полягає в тому, щоб не говорити про них. Ми вважаємо це неоптимальним, тому натомість ми долучилися до духу DEF CON, запропонувавши місячний приз у $10,000 доларів США першій особі, яка знайде секретне значення з одноразово програмованої (OTP) пам’яті пристрою. Наша мета полягала в тому, щоб завчасно виявити недоліки, щоб ми могли їх виправити до того, як RP2350 стане широко розгорнутим у безпечних програмах. Цей відкритий підхід до інженерії безпеки був загалом добре сприйнятий: назвіть його «безпека через прозорість», на відміну від філософії «безпеки через невідомість» інших постачальників.

Ніхто не претендував на приз до кінцевого терміну, тому у вересні ми продовжили термін до кінця року та подвоїли приз до 20 000 доларів США. Сьогодні ми раді повідомити, що отримали не одну, а чотири дійсні заявки, кожна з яких вимагає фізичного доступу до чіпа з різним ступенем нав’язливості. Поза конкурсом Томас “stacksmashing” Рот та команда з Hextree також виявили вразливість, яку ми описуємо нижче.

Отже, без зайвих слів презентуємо вам переможців:

“Небезпечні трійки” – Ейдан Каллен

Пам'ять OTP RP2350 є критично важливим компонентом безпеки: біти конфігурації безпеки зберігаються в OTP і зчитуються на початку процесу скидання. За ці зчитування відповідає кінцевий автомат під назвою OTP PSM. На жаль, виявилося, що OTP PSM має недолік, який можна використовувати.

Живлення блоку протизапобіжників подається через штифт USB_OTP_VDD. Для захисту від збоїв у електроживленні PSM використовує «захисні зчитування»: зчитування відомих даних дуже близьке до зчитування критичних для безпеки даних. Збій живлення повинен спричинити невідповідність відомих даних захисту, що вказує на те, що пов’язане критичне для безпеки зчитування є ненадійним. Ми використовуємо єдине захисне слово: 0x333333.

Однак OTP може зберігати останні зчитані дані під час збою живлення, а наступні зчитування повертають останні прочитані дані, коли живлення було нормальним. Це само по собі не є недоліком, але воно погано взаємодіє з вибором захисного слова. Якщо USB_OTP_VDD відкидається точно після того, як відбулося зчитування захисника, 0x333333 читатиметься до відновлення живлення. Тому зловмисник може перезаписати критично важливі для безпеки дані конфігурації цим значенням.

This is a close-up photo of an electronic circuit board (green PCB) with various surface-mounted components. In the center is a black integrated RP2350 circuit chip bearing the Raspberry Pi logo. A gold-colored probe or test pin is making contact with one of the pins on the chip, suggesting testing, debugging, or programming activity. Surrounding the main chip are small resistors, capacitors, and possibly other integrated circuits, all arranged on the green board.
Фотографія, яка була зроблена Ейданом Калленом

Якщо під час виконання OTP PSM слова CRIT0 та CRIT1 замінити на 0x333333, біти RISCV_DISABLE та ARM_DISABLE буде встановлено, а біт DEBUG_DISABLE буде очищено. ARM_DISABLE має перевагу, тому чіп залишає скидання з запущеними ядрами RISC-V і дозволеним налагодженням, незалежно від фактичної конфігурації, записаної у запобіжниках. Таким чином "дамп" секретних даних з OTP стає простим.

Більше інформації можна знайти в репозиторії Ейдана на GitHub тут і в його презентації на Chaos Communication Congress тут.

Наразі немає засобів аби прибрати цю вразливість, якій присвоєно номер помилки E16. Ймовірно, це буде розглянуто в майбутньому етапі RP2350.

Помилка однієї команди завантажувача USB із подачею напруги живлення - Маріус Мюнх.

Основною функцією безпеки RP2350 є безпечне завантаження, яке обмежує чіп виконувати лише код, підписаний певним закритим ключем. Якщо зловмисник може обійти безпечне завантаження або зламати його, він може запустити власний непідписаний код, який потенційно може скинути секретні дані з OTP.

Маріус виявив слабке місце в перезавантаженні API завантажувального ПЗУ. Це підтримує кілька різних режимів перезавантаження, один із яких REBOOT_TYPE_PC_SP, який перезавантажується та починає виконання за допомогою певного лічильника програми та вказівника стека. Це може бути викликано лише за допомогою захищеного мікропрограмного забезпечення, яке вже працює на чіпі, але якби зловмисник міг запустити цей режим завантаження зовні та з контрольованими параметрами, ми б почали виконувати код за адресою, наданою зловмисником, без перевірки підпису коду!

Але як увійти в цей режим завантаження, якщо він доступний лише для підписаної та перевіреної прошивки?

Відповідь (звичайно) полягає в ін’єкції помилок. Надаючи звичайну команду перезавантаження USB-завантажувачу та вводячи помилку (у цьому випадку через збій напруги живлення), щоб інструкція була пропущена саме в потрібний час, можна обманом змусити API перезавантаження повірити, що REBOOT_TYPE_PC_SP запитано. Якщо зловмисник заздалегідь завантажив шкідливий код в оперативну пам’ять, цей код можна виконати та використати для вилучення секрету.

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

Маріус каже: "Хоч ця перерва може здатися прямолінійною в ретроспективі, реальність зовсім інша. Виявлення та використання таких типів проблем далеко не тривіальне. Загалом, цей хакерський виклик був для мене багатомісячним проектом, з багатьма тупиками, дослідженими на цьому шляху, і незліченними ітераціями коду атак і налаштувань, щоб підтвердити або спростувати потенційні висновки. Тим не менш, я отримав багато задоволення, копаючись у глибині тонкощі нового мікроконтролера RP2350, і я хотів би подякувати Raspberry Pi і Hextree за проведення виклику!»

Проти цієї атаки доступно кілька ефективних засобів пом’якшення і покращення, яким присвоєно номер помилки E20. Найточнішим пом’якшенням є встановлення прапорця BOOT_FLAGS0.DISABLE_WATCHDOG_SCRATCH, який вимикає можливість перезавантаження певного ПК/SP, де ця функція не потрібна кодам програми.

Перевірка підпису однією інструкцією несправності з лазерною ін'єкцією - Кевін Курсес 

Кевін виявив можливу слабкість у безпечному шляху завантаження відразу після того, як мікропрограмне забезпечення, яке потрібно перевірити, було завантажено в оперативну пам’ять і безпосередньо перед обчисленням хеш-функції, необхідної для перевірки підпису. Впровадження однієї точно визначеної помилки на цьому етапі може спричинити обчислення хеш-функції над іншою частиною даних, якою керує зловмисник. Якщо ці дані є дійсною підписаною мікропрограмою, перевірка підпису пройде, і непідписана мікропрограма зловмисника буде запущена!

Фотографія, яка була зроблена Кевіном Курсесом

Найпоширеніший метод введення несправностей, який можна побачити під час атаки Маріуса, полягає в короткому зниженні напруги живлення, вводячи короткий «збій», який спричиняє неправильну поведінку цифрової логіки в мікросхемі. RP2350 містить схему детектора збоїв, яка розроблена для виявлення більшості збоїв напруги та навмисної зупинки мікросхеми у відповідь. Щоб дозволити ін’єкцію несправностей без запуску детекторів збоїв, Кевін створив спеціальну систему лазерної ін’єкції несправностей; це застосовує короткий імпульс лазерного світла до тильної сторони матриці, яка була оголена шляхом відшліфування частини упаковки. І хоча для встановлення в рамках обмеженого бюджету знадобилося кілька технічних компромісів, це спрацювало!

Більше інформації ви можете знайти у дослідженнях Кевіна тут.

Для цієї атаки, якій присвоєно номер помилки E24, пом’якшення недоступне. Ймовірно, це буде розглянуто в майбутньому етапі RP2350.

Вилучення секретів антизапобіжника з RP2350 за допомогою FIB/PVC – IOActive

Пам’ять OTP на основі антизапобіжників широко використовується для зберігання невеликих обсягів даних (таких як серійні номери, ключі та заводські налаштування) в інтегральних схемах, оскільки вони недорогі та не потребують додаткових етапів маскування для виготовлення. RP2350 використовує стандартний блок пам’яті антизапобіжника для зберігання ключів безпечного завантаження та інших конфіденційних конфігураційних даних.

Антифьюзи вважаються носієм пам’яті «високого рівня безпеки», що означає, що зловмиснику значно важче отримати дані, ніж інші типи пам’яті, такі як флеш-пам’ять або маскова ПЗУ. Однак за допомогою цієї атаки IOActive (майже) продемонструвала, що біти даних, що зберігаються в масиві пам’яті RP2350 antifuse, можна отримати за допомогою добре відомої техніки аналізу відмов напівпровідників: пасивного контрасту напруги (PVC) за допомогою сфокусованого пучка іонів (FIB).

Фотографія, що була зроблена IOActive

Поточна форма атаки відновлює порозрядне АБО двох фізично суміжних комірок пам’яті, які мають спільні контакти metal-1. Однак, доклавши певних зусиль на біт, зловмисник може розділити парні та непарні значення клітинок, скориставшись можливостями редагування схеми FIB.

IOActive ще не перевіряв цю техніку на інших IP-блоках антизапобіжника або на інших вузлах процесу. Тим не менш, вважається, що він має широке застосування для всіх запам’ятовуючих пристроїв на основі антизапобіжника. Доктор Ендрю Зоненберг, який очолював технічну групу цього проекту разом з Ентоні Муром, Деніелом Слоуном, Лейном Аганом і Маріо Копом, прокоментував: "Наша команда знайшла унікальний вектор атаки для зчитування даних із антизапобіжної пам’яті, який ми маємо намір далі розвивати. Ті, хто покладається на антизапобіжну пам’ять для забезпечення конфіденційності, повинні негайно переглянути свою безпеку".

Пропоноване пом’якшення цієї атаки полягає в застосуванні техніки «перетирання», збереження або {0, 1}, або {1, 0} у кожній парі бітових комірок, оскільки атака в її поточній формі не може розрізнити ці два стани. Щоб захиститися від гіпотетичної версії атаки, яка використовує редагування схеми для розрізнення цих станів, рекомендується зберігати ключі та інші секрети як більші блоки пошкоджених даних, з яких секрет відновлюється шляхом хешування.

Оцінка детектора збоїв і помилка читання подвійних інструкцій OTP із впровадженням EM – Hextree

Ми доручили команді Hextree оцінити безпечний процес завантаження та ефективність резервного співпроцесора (RCP) і детекторів збоїв. Вони виявили, що при найвищому налаштуванні чутливості детектори збоїв можуть виявити багато збоїв напруги; однак рівень невиявлених збоїв все ще достатньо високий, щоб зробити атаки здійсненними за певних зусиль.

Більшість їхньої роботи зосереджена на інжекції електромагнітних збоїв (EMFI), яка доставляє імпульс високої напруги до невеликої котушки на вершині чіпа. Це створює електромагнітне поле, яке згортається в чіпі, забезпечуючи введення дуже локалізованих несправностей, які не заважають детекторам збоїв. Тестування дало численні результати, пов’язані з безпекою, зокрема те, що можна пошкодити значення, зчитані з OTP, вводячи помилки на дуже ранніх стадіях процесу завантаження, і що випадкові затримки, надані RCP, сприйнятливі до вимірювань побічного каналу.

Команда також знайшла спосіб обійти аспект захисту OTP чіпа за допомогою подвійної помилки: функція s_varm_crit_nsboot, яка блокує дозволи OTP перед входом у режим BOOTSEL, має дві інструкції, які, коли обидва порушуються помилками в точно визначений час, можуть запобігти правильному блокуванню сторінки OTP, фактично дозволяючи користувачеві зчитувати OTP і писати в нього. Навіть якщо конфігурація мікросхеми це забороняє. Подвійна помилка може бути викликана з достатньою надійністю за допомогою EMFI.

Проти цієї атаки, якій присвоєно номер помилки E21, доступно кілька ефективних засобів пом’якшення. Атака відбувається, коли на пристрої працює незахищений код завантажувача, а ключі OTP витягуються через інтерфейс PICOBOOT. Завантажувач USB можна вимкнути, установивши прапорці OTP  BOOT_FLAGS0.DISABLE_BOOTSEL_USB_PICOBOOT_IFC і BOOT_FLAGS0.DISABLE_BOOTSEL_USB_MSD_IFC, що пом’якшує цю вразливість за рахунок видалення можливості оновлення мікропрограми на пристрої через USB.

Фотографія, що була зроблена NewAE та Fritz

Ми також хотіли б висловити вдячність Коліну О’Флінну та його команді з NewAE за співпрацю з нами та Томасом Ротом / Hextree у цьому поглибленому дослідженні безпеки кремнію, а також за те, що вони надали нам фантастичний набір ChipWhisperer.

Що буде далі?

Ми хочемо подякувати всім, хто брав участь у конкурсі. Незважаючи на те, що правила передбачають один приз у розмірі 20 000 доларів США за «найкращу» атаку, ми були настільки вражені якістю поданих матеріалів, що вирішили виплатити приз у повному обсязі за кожну з них.

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

І хоча цей хакерський виклик закінчився, незабаром розпочнеться інший. Будучи компонентом ширшої архітектури безпеки RP2350, ми працювали над розробкою реалізації AES, яка захищена від атак побічних каналів (зокрема, диференціального аналізу потужності), і ми ставимо перед вами завдання перемогти її. Щоб дізнатися більше, завійтайте до нас знову наступного тижня.

Усі постачальники мають уразливі місця в своїх чіпах. Ми незвичайні, тому що ми говоримо про них і прагнемо їх виправити, а не заховати під килим. Безпека через прозорість тут і надалі.