Захист AVR спалаху від читання через ISP?


15

Я намагаюся захистити весь спалах від читання через ISP. Він має завантажувач, здатний самостійно розділити програму застосування.

Встановлення байта блокування на:

LB1/LB2 не дозволить користувачу використовувати завантажувач для завантаження нової прошивки.

BLB12/BLB11і BLB01&BLB02не завадить читати спалах через ISP, якщо я не помиляюся.

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

Відповіді:


18

Ви не вказали чіп, наступне здебільшого орієнтоване на 8-бітні пристрої atmega, але це загальна інформація. Прочитайте розділ «Програмування пам’яті» для конкретної таблиці даних чіпа для отримання більш конкретної інформації!

Як було сказано, і, як ви вже сказали, всі пристрої AVR містять два біти блокування з назвою LB1 та LB2. Програмування цих (до 0, низький) забезпечить захист вмісту, записаного у Flash та EEPROM-пам'ять, відповідно до таблиці нижче. Рівень захисту розділений на три режими, коли режим 1 не забезпечує захисту, а режим 3 забезпечує максимальний захист. Перейти до вищого режиму захисту можна просто перепрограмувавши біти блокування.

AVR дозволяє змінювати "високі" біти на "низькі", але не навпаки. Неможливо змінити "низький" біт блокування на "високий", таким чином знизити рівень захисту неможливо. Для очищення бітів блокування потрібне повне видалення мікросхем, яке стирає флеш-пам'ять.

Бітова таблиця блокування AVR

Ці два біт блокування (LB1 і LB2) при низькому рівні запобігають крадіжці вашої прошивки 99,9% людей! Ймовірно, більше 99,9%. Зменшити інженерний код майже завжди буде простіше.

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

Наскільки мені відомо (я можу помилитися, але, думаю, я мав би проблеми з цим раніше) на пристроях, які мають запобіжники захисту завантажувача (BLB12 і BLB11), ви можете заблокувати власний розділ завантажувача , відключити SPI і бути захищений від 97-98% людей.

Однак, коли жоден з бітів блокування не запрограмований, функцій блокування пам'яті не ввімкнено !!! Відключення провайдера достатньо лише для блокування 70% людей.

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

Лінійка AVR Atmel не є пристроями підвищеної безпеки (якщо прямо не зазначено!), І вони як такої абсолютно не мають гарантії безпеки коду, а також не повинні! Як і всі незахищені пристрої (і, на жаль, навіть деякі безпечні), вони схильні до поширених атак!


Редагувати

Я поставлю на борт заголовок інтерфейсу програмування HV. Але чи може хтось використовувати програміст HV для читання спалаху? Я знаю, що програміст HV може стерти мікросхему, навіть ISP / Jtag відключені.

Я не думаю, що ви повинні включати програміста HV у свій дизайн плати, якщо це абсолютно не потрібно, і ви точно знаєте, що це нічого не спричинить. Сигналізатори високого струму (12-вольтові сигнали) доступні лише як міра безпеки для програмованих фіксованих (переважно заблокованих помилок) мікросхем. Теоретично це означає лише програмування пристрою, який нічого не читає. І я ніколи не чув про подвиг, який би дозволяв читати.

Для оновлення завантажувача (періодично) я буду класти заголовок інтерфейсу програмування на борт. Але чи може хтось використовувати програміст HV для читання спалаху? Я знаю, що програміст HV може стерти мікросхему, навіть ISP / Jtag відключені.

Я думаю, що може бути спосіб оновити заблокований спалах за допомогою завантажувача, (щось стосується внутрішнього прапора для запису та / або ISR, можливо ???) Але мені доведеться шукати свої замітки і, можливо, доведеться перевірити його. Я не зможу це зробити протягом ~ 20 годин; тому я настійно рекомендую задавати нове запитання, орієнтоване лише на це та на згаданий вами процесор. Це дуже гарне запитання !


+1 для останнього коментаря, якщо все інше не вдасться, будь-який блокер може просто знешкодити мікросхему і приклеїти нам нас AVR-відладчик / програміст, щоб скинути біти блокування, і ваша безпека зникла.
helloworld922

@Garrett Fogerlie: не впевнений, що спонукає тебе думати, що я намагаюся вкрасти код, дай мені знати, і я виправлю своє запитання, щоб інші не думали так само. Я намагаюся забезпечити мінімальний захист власного коду, власного завантажувача. У будь-якому разі, ще кілька питань з цього приводу. Чіп - це ATMega328, подумав, що сім'я матиме спільне використання біт блокування. Ви пояснили LB1і LB2, що я описав в моєму питанні , як обмежує можливість використовувати завантажувач для поновлення цілей. Тож це не варіант. Щодо BLB12і BLB11- це те, чого я не розумію. (продовження)
Пабло

Встановлення цих бітів НЕ перешкоджатиме нікому читати спалах (додаток + завантажувач) ззовні. З таблиці видно, що ці біти будуть просто блокувати команди LPM / SPM, але послідовний програміст не використовує її. Щодо відключення послідовного програмування та jtag, це ще одне велике питання для мене. Для оновлення завантажувача (періодично) я буду класти заголовок інтерфейсу програмування на борт. Але чи може хтось використовувати програміст HV для читання спалаху? Я знаю, що програміст HV може стерти мікросхему, навіть ISP / Jtag відключені.
Пабло

@pablo, вибач, я не мав на увазі образи. Коли я вперше побачив ваше запитання, ідея крадіжки мені не виникла; і я писав написав відповідь, яка була дещо зосереджена на пошуку заблокованого коду. Однак я був на роботі і перед тим, як подати відповідь, у мене була пауза ~ дві години. Потім, коли я повернувся, я помітив, що відповіді все ще немає і трохи здивувався, тоді, перечитавши ваше запитання, я подумав, що "крадіжка", можливо, була причиною. Я взагалі не винна, я відмовився від відповідальності. Модель процесора була потрібна через відмінності, наведені в цій таблиці, і тому, що є
8/16/32 біт

1
ʺГаррет Фогерлі: Я не хотів ставити програміста HV на борт, просто заголовка :) Але я зрозумів, що це не потрібно, тому що біти блокування спрацювали, і на всякий випадок я можу використовувати заголовок ISP, щоб стерти чип і переписати весь флеш на пристрій. Отже, підсумовуючи відповідь на моє первісне запитання - встановлення LB1 та LB2 не дозволить комусь прочитати всю область спалаху І в той же час не завадить мені записати програмну пам'ять через завантажувач.
Пабло

3

Ви можете використовувати біти блокування на деяких пристроях ATMega і все одно оновлювати код за допомогою завантажувача.

Я запрограмував LB1 і LB2 на ATMega 328. Потім попросив завантажувач, оновив основну програму - все працювало чудово.

ISP не може ні читати, ні записувати будь-який спалах / eeprom / запобіжники, але завантажувач все ще може записати розділ програми.

Счищення мікросхем з ISP очистить біти блокування (LB1 та LB2), але також видалить весь flash / eeprom, таким чином ви можете захистити свій код (однак, ви повинні запевнити, що завантажувач не може бути зламаний)


3
Як це покращується на момент прийнятої відповіді?
Ігнасіо Васкес-Абрамс

Зауважте, що якщо у вас є стандартний резидент завантажувача в стилі Arduino, блокування перезавантаження буде майже безглуздим, оскільки сам завантажувач має можливість перезавантажити, якщо ви не використовуєте розширений режим 328P, який вимикає завантажувач LPM в пам'ять додатків. В іншому випадку вам потрібно буде змінити завантажувач, щоб його видалити, ціною того, що більше не зможете перевірити програмування. (Ви потенційно можете створити інший механізм підтвердження, але це буде нестандартно, вимагаючи також змінити / замінити avrdude)
Chris Stratton
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.