MX_Master 0 Posted February 22, 2019 · Report post Я всё понимаю. Если бы проект отвечал за жизнь миллионов людей, то и подход был бы соответствующий. С учётом физического вскрытия и т.д. Но мне нужен именно тот уровень, который соответствует проекту Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted February 22, 2019 · Report post 2 часа назад, MX_Master сказал: Это абсурдно только на первый взгляд. Потому что всё, что может произойти - обязательно произойдёт. Мы можем только уменьшить вероятность. Для большей наглядности, предположим, что мы (или кто-то из команды) в какой-то момент забыли в коде отключить дебаг. Ну вот так получилось. Залили прошивку, выставили RDP Level 1 и отдали "хитрому" клиенту. И где-то на официальном сайте выкладываем зашифрованные прошивки. При RDP Level 1 "хитрый" клиент не видит код, но видит открытую часть ОЗУ. Ещё раз подумайте. Если кто-то подключился отладчиком к CPU, то он видит всю память, вне зависимости от того - ОЗУ это или flash. Иначе бы процессор не мог выполнять ваш код. Если кто-то подключился отладчиком, то ничего вы уже не сделаете. И если можете "забывать" отключать JTAG/SWD, то тогда просто не заморачивайтесь с шифрованием - выкладывайте открытую прошивку в открытый доступ. 2 часа назад, MX_Master сказал: В коде зашиты AES ключи и сам загрузчик, поэтому сбрасывать защиту на RDP Level 0 нельзя. Но при обновлении можно из открытой ОЗУ что-то расшифрованное вытянуть. Чтобы процессор мог выполнять вашу программу, она должна быть где-то в расшифрованном виде: в ОЗУ или во флешь программ. И как тут уже сказали - в ОЗУ даже надёжнее. Quote Ответить с цитированием Share this post Link to post Share on other sites
esaulenka 0 Posted February 22, 2019 · Report post 2 hours ago, jcxz said: Ещё раз подумайте. Если кто-то подключился отладчиком к CPU, то он видит всю память, вне зависимости от того - ОЗУ это или flash. Иначе бы процессор не мог выполнять ваш код. Ну как обычно. "Не читал, но осуждаю". Включенный Readout protection (level 1) в STM32 приводит к тому, что при подключенном отладчике любое обращение к адресам флеш приводит к хардфолту. Отладчик при этом ОЗУ видит (в состоянии на момент подключения отладчика). Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted February 22, 2019 · Report post 56 минут назад, esaulenka сказал: Включенный Readout protection (level 1) в STM32 приводит к тому, что при подключенном отладчике любое обращение к адресам флеш приводит к хардфолту. Отладчик при этом ОЗУ видит (в состоянии на момент подключения отладчика). И дальше что? Чьё обращение приводит к HF? Quote Ответить с цитированием Share this post Link to post Share on other sites
esaulenka 0 Posted February 22, 2019 · Report post И дальше всё заканчивается. Специально для Вас прочитаю официальную документацию. 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. Здесь написано, что чьё бы то ни было обращение к флеш приводит к ошибке. Ядро при этом сваливается в эксепшн, отладчик ничего прочитать не может. Ещё раз повторить, или хватит? Quote Ответить с цитированием Share this post Link to post Share on other sites
AlexandrY 0 Posted February 22, 2019 · Report post 5 minutes ago, esaulenka said: Здесь написано, что чьё бы то ни было обращение к флеш приводит к ошибке. Ядро при этом сваливается в эксепшн, отладчик ничего прочитать не может. Ещё раз повторить, или хватит? Ну эт хакеров не испугает. Благодаря последним новостям об узвимости кэша к тайминг атакам можно организовать чтение Flash не читая его напрямую Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted February 22, 2019 · Report post 26 минут назад, esaulenka сказал: Здесь написано, что чьё бы то ни было обращение к флеш приводит к ошибке. Ядро при этом сваливается в эксепшн, отладчик ничего прочитать не может. Ещё раз повторить, или хватит? Так не обращайтесь к флешь. Запишите программу в ОЗУ. Программу, которую выполнит CPU, которая скопирует содержимое флешь в ОЗУ например. Регистры CPU установить отладчиком сможете? Так чтобы он выполнил эту программу? А программу из одной функции memcpy() - осилите? А описание что такое memcpy() сможете найти в инете? Или и это тоже сложно? Quote Ответить с цитированием Share this post Link to post Share on other sites
vlad_new 0 Posted February 23, 2019 · Report post От кого шифруемся? http://www.break-ic.com :) Quote Ответить с цитированием Share this post Link to post Share on other sites
MX_Master 0 Posted February 23, 2019 · Report post Всё можно взломать. Защита, скорее от банального копирования. Залить другую прошивку никто мешать не будет. Цена устройства чуть выше китайской. Не думаю, что кто-то будет готов потратить столько времени и денег, чтобы продавать копии по более низкой цене. Quote Ответить с цитированием Share this post Link to post Share on other sites
MX_Master 0 Posted February 23, 2019 · Report post В 21.02.2019 в 19:42, jcxz сказал: Видимо не всё что нужно поместили в ОЗУ. Из ОЗУ должно нормально стираться/писаться на любом МК. Ищите какие хвосты остались во флешь. Хвосты успешно найдены Все связанные inline функции GCC при -Os сделал, всё-таки, отдельными. И они, стессна, лежали во флэхе. Доп. атрибут всё исправил __attribute__((always_inline)) Дополнительно, перед работой с внутренней флэхой из ОЗУ, на всякий случай отключаю кэш SCB_DisableICache(); SCB_DisableDCache(); После этого система с обновлением прошивки, наконец, завелась. Quote Ответить с цитированием Share this post Link to post Share on other sites
dac 0 Posted February 23, 2019 · Report post On 2/22/2019 at 2:12 PM, MX_Master said: Для большей наглядности, предположим, что мы (или кто-то из команды) в какой-то момент забыли в коде отключить дебаг. так сделайте что бы ваша прошивка сама проверяла дебаг и сама его отключала. Quote Ответить с цитированием Share this post Link to post Share on other sites
Darth Vader 0 Posted February 23, 2019 · Report post 5 hours ago, dac said: так сделайте что бы ваша прошивка сама проверяла дебаг и сама его отключала. И, как обычно, мы (или кто-то из команды) в какой-то момент забываем включить в прошивку код, проверяющий и отключающий дебаг Quote Ответить с цитированием Share this post Link to post Share on other sites
Arlleex 0 Posted February 23, 2019 · Report post Уже была тема с подобным разговором. ИМХО, можно условиться: 1. При любом подключении отладчика принимаем внешнюю персону за хацкера-кулибина и трем Flash. Ибо нефиг. 2. Если надо перепрошиться - шьемся из защищенного загрузчика. 3. Если надо считать или изменить во Flash важные таблицы, константы и т.д., то в основном ПО предусматриваем команды доступа к этим данным на чтение/запись по нужному интерфейсу (UART, SPI, и т.д.). Не больше, не меньше. 4. Про подключение отладчика "на лету" забыть - отлаживать с отладчиком надо на столе в лаборатории. В поле никаких отладчиков - пишите журналы логов в какой-нибудь NVM-накопитель (да хоть во внутреннюю Flash МК). Забыть собрать прошивку в Release - это человеческий фактор. Так можно много о чем забыть. Должно быть лицо, ответственное за сборку проекта в Release с последующей проверкой работы изделия в цикле элементарных послепроизводственных тестов, куда можно включить, собственно говоря, и проверку механизма блокировки считывания. Quote Ответить с цитированием Share this post Link to post Share on other sites
esaulenka 0 Posted February 24, 2019 · Report post On 2/22/2019 at 7:11 PM, jcxz said: Или и это тоже сложно? Объяснить человеку, для которого существуют два мнения - его и неправильное, что слово "любое" означает ЛЮБОЕ обращение к флеш, в т.ч. из программы, исполняемой ядром, - это сложно. Извините, я сдаюсь. Quote Ответить с цитированием Share this post Link to post Share on other sites
AVI-crak 0 Posted February 24, 2019 · Report post Ну, возможно он не знает про младший бит адреса для данных и команд. Quote Ответить с цитированием Share this post Link to post Share on other sites