Jump to content

    
MX_Master

STM32H750 + Ethernet + веб-загрузчик

Recommended Posts

Я всё понимаю. Если бы проект отвечал за жизнь миллионов людей, то и подход был бы соответствующий. С учётом физического вскрытия и т.д. Но мне нужен именно тот уровень, который соответствует проекту :don-t_mention:

Share this post


Link to post
Share on other sites
2 часа назад, MX_Master сказал:

Это абсурдно только на первый взгляд. Потому что всё, что может произойти - обязательно произойдёт. Мы можем только уменьшить вероятность.

Для большей наглядности, предположим, что мы (или кто-то из команды) в какой-то момент забыли в коде отключить дебаг. Ну вот так получилось. Залили прошивку, выставили RDP Level 1 и отдали "хитрому" клиенту. И где-то на официальном сайте выкладываем зашифрованные прошивки. При RDP Level 1 "хитрый" клиент не видит код, но видит открытую часть ОЗУ.

Ещё раз подумайте. Если кто-то подключился отладчиком к CPU, то он видит всю память, вне зависимости от того - ОЗУ это или flash. Иначе бы процессор не мог выполнять ваш код. Если кто-то подключился отладчиком, то ничего вы уже не сделаете. И если можете "забывать" отключать JTAG/SWD, то тогда просто не заморачивайтесь с шифрованием - выкладывайте открытую прошивку в открытый доступ.

2 часа назад, MX_Master сказал:

В коде зашиты AES ключи и сам загрузчик, поэтому сбрасывать защиту на RDP Level 0 нельзя. Но при обновлении можно из открытой ОЗУ что-то расшифрованное вытянуть.:biggrin:

Чтобы процессор мог выполнять вашу программу, она должна быть где-то в расшифрованном виде: в ОЗУ или во флешь программ. И как тут уже сказали - в ОЗУ даже надёжнее.

Share this post


Link to post
Share on other sites
2 hours ago, jcxz said:

Ещё раз подумайте. Если кто-то подключился отладчиком к CPU, то он видит всю память, вне зависимости от того - ОЗУ это или flash. Иначе бы процессор не мог выполнять ваш код.

Ну как обычно. "Не читал, но осуждаю".

Включенный Readout protection (level 1) в STM32 приводит к тому, что при подключенном отладчике любое обращение к адресам флеш приводит к хардфолту. Отладчик при этом ОЗУ видит (в состоянии на момент подключения отладчика).

Share this post


Link to post
Share on other sites
56 минут назад, esaulenka сказал:

Включенный Readout protection (level 1) в STM32 приводит к тому, что при подключенном отладчике любое обращение к адресам флеш приводит к хардфолту. Отладчик при этом ОЗУ видит (в состоянии на момент подключения отладчика).

И дальше что? Чьё обращение приводит к HF?

Share this post


Link to post
Share on other sites

И дальше всё заканчивается.

Специально для Вас прочитаю официальную документацию.

When the read protection Level 1 is set:
– No access (read, erase, program) to Flash memory can be performed while the debug feature is connected or while booting from RAM or system memory bootloader. A bus error is generated in case of read request.
– When booting from Flash memory, accesses (read, erase, program) to Flash memory from user code are allowed.

 

Здесь написано, что чьё бы то ни было обращение к флеш приводит к ошибке. Ядро при этом сваливается в эксепшн, отладчик ничего прочитать не может. Ещё раз повторить, или хватит?

Share this post


Link to post
Share on other sites
5 minutes ago, esaulenka said:

Здесь написано, что чьё бы то ни было обращение к флеш приводит к ошибке. Ядро при этом сваливается в эксепшн, отладчик ничего прочитать не может. Ещё раз повторить, или хватит?

Ну эт хакеров не испугает.
Благодаря последним новостям об узвимости кэша к тайминг атакам можно организовать чтение Flash не читая его напрямую

Share this post


Link to post
Share on other sites
26 минут назад, esaulenka сказал:

Здесь написано, что чьё бы то ни было обращение к флеш приводит к ошибке. Ядро при этом сваливается в эксепшн, отладчик ничего прочитать не может. Ещё раз повторить, или хватит?

Так не обращайтесь к флешь. Запишите программу в ОЗУ. Программу, которую выполнит CPU, которая скопирует содержимое флешь в ОЗУ например. Регистры CPU установить отладчиком сможете? Так чтобы он выполнил эту программу? А программу из одной функции memcpy() - осилите? А описание что такое memcpy() сможете найти в инете? Или и это тоже сложно?  :russian_ru:

Share this post


Link to post
Share on other sites

Всё можно взломать. Защита, скорее от банального копирования. Залить другую прошивку никто мешать не будет. Цена устройства чуть выше китайской. Не думаю, что кто-то будет готов потратить столько времени и денег, чтобы продавать копии по более низкой цене.

Share this post


Link to post
Share on other sites
В 21.02.2019 в 19:42, jcxz сказал:

Видимо не всё что нужно поместили в ОЗУ. Из ОЗУ должно нормально стираться/писаться на любом МК. Ищите какие хвосты остались во флешь.

Хвосты успешно найдены :yes:

Все связанные inline функции GCC при -Os сделал, всё-таки, отдельными. И они, стессна, лежали во флэхе. Доп. атрибут всё исправил

__attribute__((always_inline))

Дополнительно, перед работой с внутренней флэхой из ОЗУ, на всякий случай отключаю кэш

SCB_DisableICache();
SCB_DisableDCache();

После этого система с обновлением прошивки, наконец, завелась.

Share this post


Link to post
Share on other sites
On 2/22/2019 at 2:12 PM, MX_Master said:

Для большей наглядности, предположим, что мы (или кто-то из команды) в какой-то момент забыли в коде отключить дебаг.

 

так сделайте что бы ваша прошивка сама проверяла дебаг и сама его отключала.

Share this post


Link to post
Share on other sites
5 hours ago, dac said:

так сделайте что бы ваша прошивка сама проверяла дебаг и сама его отключала.

И, как обычно, мы (или кто-то из команды) в какой-то момент забываем включить в прошивку код, проверяющий и отключающий дебаг :biggrin: 

Share this post


Link to post
Share on other sites

Уже была тема с подобным разговором.

ИМХО, можно условиться:

1. При любом подключении отладчика принимаем внешнюю персону за хацкера-кулибина и трем Flash. Ибо нефиг.

2. Если надо перепрошиться - шьемся из защищенного загрузчика.

3. Если надо считать или изменить во Flash важные таблицы, константы и т.д., то в основном ПО предусматриваем команды доступа к этим данным на чтение/запись по нужному интерфейсу (UART, SPI, и т.д.). Не больше, не меньше.

4. Про подключение отладчика "на лету" забыть - отлаживать с отладчиком надо на столе в лаборатории. В поле никаких отладчиков - пишите журналы логов в какой-нибудь NVM-накопитель (да хоть во внутреннюю Flash МК).

 

Забыть собрать прошивку в Release - это человеческий фактор. Так можно много о чем забыть. Должно быть лицо, ответственное за сборку проекта в Release с последующей проверкой работы изделия в цикле элементарных послепроизводственных тестов, куда можно включить, собственно говоря, и проверку механизма блокировки считывания.

Share this post


Link to post
Share on other sites
On 2/22/2019 at 7:11 PM, jcxz said:

Или и это тоже сложно?

Объяснить человеку, для которого существуют два мнения - его и неправильное, что слово "любое" означает ЛЮБОЕ обращение к флеш, в т.ч. из программы, исполняемой ядром, - это сложно. Извините, я сдаюсь.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.