Перейти к содержанию
    

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jcxz said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 минут назад, esaulenka сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, esaulenka said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 минут назад, esaulenka сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 21.02.2019 в 19:42, jcxz сказал:

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

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

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

__attribute__((always_inline))

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

SCB_DisableICache();
SCB_DisableDCache();

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/22/2019 at 2:12 PM, MX_Master said:

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, dac said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/22/2019 at 7:11 PM, jcxz said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...