14.3.4. Примітка про захист від зчитування флеш-пам’яті¶
За замовчуванням мікропрограма на поставленій камері OpenMV доступна для зчитування будь-кому, хто має фізичний доступ до пристрою. Зловмисник, який тримає камеру в руках, може підключити зонд SWD до заголовка налагодження, взаємодіяти з інтерфейсом налагодження мікроконтролера та зробити дамп флеш-пам’яті, який містить усі заморожені модулі Python і вміст розділу ROMFS. Стандартна мікропрограма OpenMV не вмикає захист від зчитування флеш-пам’яті за замовчуванням.
Ця сторінка документує це явно, щоб команда, яка постачає продукт, знала, де лежить відповідальність.
14.3.4.1. Що камера робить за замовчуванням¶
Завантажувач і середовище виконання камери не вмикають жодної функції захисту від зчитування базового мікроконтролера. Інтерфейс налагодження залишається відкритим, флеш-пам’ять залишається доступною для зчитування, а збірка працює так само, як і на лаві розробника. Це правильне значення за замовчуванням для навчальної аудиторії: камера, що поставляється із увімкненим захистом від зчитування, – це камера, яку неможливо перепрошити через IDE, яку неможливо перевстановити після невдалого розгортання і яку ніхто, крім команди збірки, не зможе відновити.
Компроміс змінюється, коли камера переходить від «пристрою розробника» до «продукту». Продукт, цінність якого залежить від конфіденційності коду застосунку, має самостійно ввімкнути захист; мікропрограма OpenMV цього не робить.
14.3.4.2. Що робить команда розробників продукту¶
Кожен виробник мікроконтролерів пропонує механізм захисту від зчитування. Деталі відрізняються – запобіжники на рівні бітів, одноразові переходи між стадіями життєвого циклу, підписані образи флеш-пам’яті – але загальна схема така:
Специфічний для виробника біт (або набір бітів) фіксується в кристалі, зазвичай через утиліту виробника, яка востаннє звертається до порту налагодження мікроконтролера.
Після фіксації порт налагодження відмовляється зчитувати флеш-пам’ять. Камера продовжує завантажуватися і виконувати застосунок; вона просто більше не відкриває свій вміст зонду.
Фіксація є незворотною. Немає способу повернути камеру в стан, придатний для налагодження, не знищивши її.
Налаштування цього залежить від мікроконтролера, а кроки залежать від конкретного мікроконтролера на захищеній камері. Довідковий посібник виробника є джерелом істини; підтримка виробника – канал для правильного налаштування на виробничій лінії.
Це легка частина.
Складна частина – закрити кожен інший шлях, яким зловмисник може виконати код на камері або прочитати дані застосунку. Захист від зчитування лише зупиняє зонд налагодження від дампу флеш-пам’яті. Камері ще потрібно закрити:
MicroPython REPL. REPL, підключений через USB, приймає довільний Python. Захист від зчитування це не змінює. Сеанс REPL може читати RAM, викликати функції, викрадати все, що бачить запущений застосунок – по суті, досяжний REPL обходить усе, що дає захист від зчитування. Вимкнення доступу до REPL – це зміна збірки мікропрограми, якою володіє команда розробників продукту.
Завантаження скрипту через IDE. Шлях IDE «запустити цей скрипт на камері» використовує ту саму поверхню USB-протоколу, що й REPL. Закриття REPL закриває й це; залишення будь-якого з них відкритим залишає канал виконання довільного коду на камері.
Захоплення точки входу з файлової системи. Вже закрите, коли застосунок постачається через Вбудовування скриптів у мікропрограму – середовище виконання знаходить заморожені
boot.pyіmain.pyперед будь-якою копією у файловій системі, тому нічого, скинуте на флеш або SD, не може їх замінити. Цей захист безкоштовний, як тільки застосунок включено до збірки.Зовнішня флеш-пам’ять на нових камерах. Камери, які зберігають образ застосунку у зовнішній флеш-пам’яті, розміщують його на чипі, що лежить на виду на платі; чип можна випаяти та прочитати безпосередньо за допомогою загальнодоступних інструментів або прочитати на місці, зондуючи шину. Для захисту потрібно ввімкнути вбудоване апаратне забезпечення, яке розшифровує вміст флеш-пам’яті під час зчитування, згенерувати ключ шифрування, підготувати цей ключ для камери та незворотно записати його у одноразово програмовану пам’ять мікроконтролера. Кожна з цих операцій є окремою одноразовою дією, і будь-яка помилка на виробничому блоці виводить його з ладу.
Кожен пункт у цьому списку – це окремий стек роботи зі збіркою мікропрограми, кроків виробничої лінії та незворотних фіксацій. Справжній захищений продукт – це налаштована збірка мікропрограми, налаштований завантажувач, виробничий процес, який постачає ключі для кожного блоку, і набір тестів, що доводять, що захист справді закритий до того, як блок покине лінію. Це місяці роботи, а не дні, і незворотність означає, що помилки коштують цілих блоків.
Чому за замовчуванням відкрито
Цей список також пояснює, чому стандартна мікропрограма OpenMV поставляється без увімкненого захисту від зчитування. Камера із закритим REPL, вимкненим завантаженням скриптів через IDE і заблокованою мікропрограмою – це камера, на якій взагалі не можна розробляти: робочий процес, що робить камери OpenMV придатними для використання, просто зник би. За замовчуванням все відкрито; команда розробників продукту вибирає, які частини закрити на шляху до поставки.
14.3.4.3. Що дає фізичний доступ¶
Навіть з увімкненим захистом від зчитування зловмисник, який тримає камеру, може зробити чимало:
Відтворити мережевий трафік камери, перехоплюючи її виведення.
Спостерігати за видимою поведінкою та робити висновки про реакцію на вхідні дані.
У деяких випадках відновити секрети за допомогою атак з ін’єкцією збоїв або атак за побічними каналами, спрямованих проти захищеного мікроконтролера.
Захист від зчитування підвищує вартість доступу до вихідного коду застосунку. Він не усуває цю вартість. «Фізичний доступ = компрометація» – це робоче припущення, з якого має починатися перевірка безпеки; механізм захисту лише визначає, скільки ця компрометація коштує в часі та обладнанні.
14.3.4.4. З чим поставляється мікропрограма OpenMV¶
Короткий підсумок для наочності:
Захист від зчитування не ввімкнено за замовчуванням.
Жодного прапора збірки у стандартній мікропрограмі, який би його вмикав.
Жодного API на рівні застосунку для виклику з MicroPython.
Продукт, якому потрібен захист, поставляється з налаштованою мікропрограмою. Це налаштування знаходиться в завантажувачі плати та виробничому процесі і знаходиться поза кодовою базою OpenMV. Команди, які роблять це вперше, повинні планувати це в розкладі розробки як окремий обсяг роботи, а не як щось, що додається наприкінці – незворотність робить підхід «додамо пізніше» дорогим.