Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 Как прошивке проверить целостность самой себя?
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 07:33:09

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср фев 17, 2021 13:42:06 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 8
Зарегистрирован: Вт июн 03, 2008 01:39:47
Сообщений: 140
Рейтинг сообщения: 0
Есть некоторые типы устройств, к которым ГОСТы предъявляют высокие требования безопасности. Одно из требований - чтобы при запуске устройство проверяло целостность своей прошивки, и если кто-то или что-то внесло в нее несанкционированные изменения, программа не запускалась бы.

Возникают вопросы:
1. При включении устройства, первым делом программа принимается вычислять CRC самой себя - берет значение по адресу 0x8000000, потом следующее и т.д. до конца прошивки.
1а. Как надежно определить, где конец прошивки?
2. Вычислив CRC самой себя программа должна сравнить полученное значение с эталонным, и если контрольная сумма совпадает, то продолжить выполнение программы.
2а. Где хранить эталонное значение CRC, с которым нужно сравнивать вычисленное? При условии, что если это значение поместить в тело прошивки, это изменит и само значение - змея ест свой хвост.

Наверняка кто-нибудь с форума уже решал такую задачу, поделитесь опытом, как вы это делали?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср фев 17, 2021 13:53:00 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Определить конец прошивки поможет переменная из линкер-скрипта. Где-нибудь в секции text сохраняй контрольную сумму: на этапе сборки она будет равна нулю, а потом скриптом посчитаешь и впишешь (можно переводить опять). Прошивка при вычислении контрольной суммы пусть само значение суммы пропускает.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср фев 17, 2021 16:01:55 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 3474
Зарегистрирован: Пн фев 09, 2009 22:19:49
Сообщений: 17489
Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения: 0
А что мешает "левой" пришивке иметь скорректированную CRC ?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср фев 17, 2021 16:09:08 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 8
Зарегистрирован: Вт июн 03, 2008 01:39:47
Сообщений: 140
Рейтинг сообщения: 0
Определить конец прошивки поможет переменная из линкер-скрипта. Где-нибудь в секции text сохраняй контрольную сумму: на этапе сборки она будет равна нулю, а потом скриптом посчитаешь и впишешь (можно переводить опять). Прошивка при вычислении контрольной суммы пусть само значение суммы пропускает.

Спасибо. Ничего не понял.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср фев 17, 2021 16:30:02 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Солнцеворот, если ты ничего не понял из сказанного, то встает вопрос: а как ты вообще эти прошивки собираешь?

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср фев 17, 2021 16:42:28 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Где хранить эталонное значение CRC
В таблице векторов прерываний есть "пропуски". Вот там и хранить длину прошивки. CRC можно в конце, а можно там же - по вкусу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Чт фев 18, 2021 00:14:21 
Опытный кот
Аватар пользователя

Карма: 14
Рейтинг сообщений: 307
Зарегистрирован: Пт апр 09, 2010 16:06:38
Сообщений: 869
Откуда: Тула
Рейтинг сообщения: 1
2а. Где хранить эталонное значение CRC, с которым нужно сравнивать вычисленное? При условии, что если это значение поместить в тело прошивки, это изменит и само значение - змея ест свой хвост.

Храните CRC не в теле прошивки, а рядом. От самопроизвольного искажения данных во флеш это спасет (не важно, что будет искажено, прошивка или сама эталонная CRC). Если же беспокоитесь о злоумышленниках, то штатная защита от считывания не даст им модифицировать прошивку, только переписать полностью. Ну а в этом случае никакая защита не поможет. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Чт фев 18, 2021 05:47:57 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 3474
Зарегистрирован: Пн фев 09, 2009 22:19:49
Сообщений: 17489
Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения: 0
Что-то не доводилось видеть для них инкрементных обновлений....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср фев 24, 2021 09:40:05 
Опытный кот
Аватар пользователя

Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42
Сообщений: 744
Откуда: Караганда, Казахстан
Рейтинг сообщения: 1
1. Конец прошивки проще всего определить по глобальному символу. Или поместить последней секцией специальную секцию из одного слова, или сочинить скрипт для линкера, возможны варианты...
2а. Где угодно. Подобрать КС прошивки так, чтобы с учетом этой КС общая КС вышла какой-нибудь константой, например, 0xFFFF. Для многих алгоритмов CRC, если первоначально занести в ячейку для CRC ноль, дополнение этой CRC до 1, положенное в ячейку для CRC, вместо нуля, даст в итоге CRC == 0xFFFF. То есть, пускаем программу под отладчиком, вот она стала по плохой CRC, смотрим в регистре, какая получилась CRC, делаем ей NEG и полученное число заносим в ячейку для CRC. Пробуем еще раз, если что-то не сходится, разбираемся...

А что мешает "левой" пришивке иметь скорректированную CRC ?
Для этого нужно, как минимум, глубоко вникнуть в программу. Тут, конечно, возникают разные сложности. Что можно порекомендовать? Маскировка, нестандартный алгоритм CRC. Да и вообще, не допускать попадания программы в открытом виде в руки злоумышленников. Запретить считывание кода из МК, передача программы в шифрованном виде, ключ дешифровки должен лежать в нечитаемой извне флеш-памяти программы...

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср мар 03, 2021 15:44:25 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 8
Зарегистрирован: Вт июн 03, 2008 01:39:47
Сообщений: 140
Рейтинг сообщения: 0
Спасибо большое всем, кто ответил по-существу. Я когда найду достойное решение этой задачи, расскажу здесь, как в итоге сделал.
или сочинить скрипт для линкера

Можете дать ссылку, где почитать, как это делается?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср мар 03, 2021 16:18:14 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14052
Откуда: ДОНЕЦК
Рейтинг сообщения: 1
Не обязательно от злоумышленника - но в любом случае контроль случайных дефектов ПЗУ в ответственной аппаратуре.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Ср мар 03, 2021 16:59:03 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 3474
Зарегистрирован: Пн фев 09, 2009 22:19:49
Сообщений: 17489
Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения: 0
А вот в этом случае задачу надо расширять - код может слететь не только во время редкой загрузки, но более вероятен слет в памяти во время работы, особенно в шумном промышленном оборудовании.

Я длч этого периодически запускал контрольный расчет с известным результатом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Чт мар 04, 2021 09:40:47 
Опытный кот
Аватар пользователя

Карма: 14
Рейтинг сообщений: 307
Зарегистрирован: Пт апр 09, 2010 16:06:38
Сообщений: 869
Откуда: Тула
Рейтинг сообщения: 0
Я длч этого периодически запускал контрольный расчет с известным результатом.


И как, встречались прецеденты искажения прошивки ? Какие внешние условия, что за процы ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Чт мар 04, 2021 10:10:43 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14052
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Лучше заранее перестрахериться...
У Микрощипа достаточно полная документация по возможным отказам и противодействию оным.
В частности - отказы главного генератора МК (позднее даже был введен специальный аппаратный модуль для контроля).
Чем более "нежные" технологии(малое энергопотребление, уменьшение размера кристалла при повышении плотности упаковки элементов), тем выше вероятность воздействия "грубой внешней силы" - температуры, мощные внешние электростатические/электромагнитные поля, направленные потоки ВЧ излучений, ИК излучение (ИК-прозрачные корпуса)...
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Пт мар 05, 2021 08:58:05 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
Цитата:
И как, встречались прецеденты искажения прошивки ? Какие внешние условия, что за процы ?

На практике сталкивался с ситуацией, когда расшивался один бит во всей микросхеме. Случаи были единичными, но крови мне попортили много. Программеры божились, что считают КС прошивки непрерывно, но оказалось, что забыли посчитать таблицу с векторами переходов из-за чего формировались или не формировались команды управления. Расшивка происходила не сразу, а через несколько дней работы контроллера. Использовались внешние УФ и флэш микросхемы памяти. Так что для ответственных применений нужно непрерывно считать КС, а не тупо при старте контроллера. В идеале перед каждым циклом сканирования программы (терминология ПЛК) нужно проверить КС, и только потом начать выполнение программы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Сб мар 06, 2021 15:11:21 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1147
Рейтинг сообщения: 0
В частности - отказы главного генератора МК (позднее даже был введен специальный аппаратный модуль для контроля).
Это сейчас почти у каждого первого МК имеется.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 Как прошивке проверить целостность самой себя?
СообщениеДобавлено: Пн апр 19, 2021 19:09:03 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4470
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
И как, встречались прецеденты искажения прошивки ? Какие внешние условия, что за процы ?

Были случаи, когда из-за искрящих рядом с МК контактов реле, прошивка улетала в атсрал после пары переключений.
Реле располагалось рядом с МК на расстоянии 3см. В нагрузке реле был довольно мощноватый контактор.
Обмотка реле и её питание были гальванически отвязаны от питания и сигналов МК. Ну а сам МК - Atmega 16.
Дуга на контактах реле порождает хороший электромагнитный импульс,
который своей наводкой корячит заряды на плавающих затворах Flash памяти МК, портя таким образом данные.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: bob1 и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y