|
|
  |
stm32F10x- защита от чтения , использование flash как eeprom и собственный бутлоадер, нюансы реализации. |
|
|
|
Apr 18 2013, 19:24
|

Гуру
     
Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463

|
В этих процах этот бит не совсем бит защиты памяти, скорее защита от доступа отладочных средств. Это позволяет под защитой, своим загрузчиком, получить новую программу и записать ее в память программы и стартануть. Эта запись во флеш возможна как изнутри, так и снаружи посредстовм своей программы которая внутри проца под защитой.
В вашем случае, вами писанный загрузчик, обеспечит решение задачи, штатный бутлоадер не годиться. А собственный загрузчик можно написать таким образом, что последней командой он поставит коде протект, то есть своего рода "захлопнет дверь изнутри" для доступа отладочных средств и программаторов. Криптование программы на ваше усмотрение, я это делаю регулярно и давно. И пояснил ранее вам почему. Выбор крипто алгоритма за вами, там ничего сложного нет.
За последние лет 10 не припомню случая, чтобы кто-то вскрыл мою криптованную программу. Хотя знаю, что это задача решаемая, но недешево. Поскольку есть детерминанта определяемая ограниченностью кода, состоящим из команд и данных, стартового адреса, размерами и длинами регистров и тп. Как тут советовали перестановочный метод, можно применять, но он больше подходит к читаемым текстам, инструкциям, а не к загружаемому коду программы. Использовать пустые коды, циклы, многие коды будут запускаться и работать, только делать фигню... и тп - ну---у совсем несерьёзно для ARM.
|
|
|
|
|
Apr 19 2013, 03:05
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Всем привет. почитал тему, сейчас как раз занимаюсь написанием загрузчика, который по езернет будет обновлять прошивку. Если я все верно понимаю, выглядеть это будет так: 1) загрузчик стартует первым из 0x08000000 2) загрузчик снимает защиту с области памяти, необходимой для прошивки, стирает необходимые страницы флэш 3) принимает новый код, дешифровывая его на лету и записывая во флэш по кусочкам по 512 байт 4) после заливки последнего кусочка закрывает флэш установкой битов защиты. с этим вроде все понятно, но есть вопросики: 1) изначально область загрузчика должна быть закрыта битами защиты, что бы его не могли считать средствами отладки и левой прогой во флэш. как называются эти биты в stm32f4 и можно ли их устанавливать не на всю флэш а на определенные области? 2) при снятии защиты с области памяти основной прошивки, не сотрется ли вся флэш, включая загрузчик? 3) stm32f4 умеет декриптить AES, DES алгоритмами, думаю их и заюзать. какой алгоритм лучше заюзать? 4) ну допустим контроллер я научу расшифровывать, вопрос чем и как (имеет ввиду на пк) предварительно зашифровать прошивку ?
Сообщение отредактировал k000858 - Apr 19 2013, 03:10
|
|
|
|
|
Apr 19 2013, 05:31
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(aoreh @ Apr 18 2013, 13:35)  а зачем сложно подписывать, если программа зашифрована? расшифровать и зашифровать свое ведь и так никто не сможет (в разумное время/деньги)? а загрузчик должен работать только с шифрованными данными ну и какой-нибудь црц, что бы убедиться, что распаковано верно. Подпись дает бОльшую гарантию, чем CRC. А так как и она и шифрование основаны на одном и том же коде - то накладные расходы минимальны Цитата(Aner @ Apr 18 2013, 23:24)  За последние лет 10 не припомню случая, чтобы кто-то вскрыл мою криптованную программу. Неуловимый Джо?  Цитата Хотя знаю, что это задача решаемая, но недешево. Поскольку есть детерминанта определяемая ограниченностью кода... На самом деле за какую-то вполне разумную денежку можно считать программу из залоченного процессора. Дальше загрузчик дизасемблируется, из него выдирается алгоритм и ключи. Другое дело, что часто за эти деньги дешевле написать программу с нуля и получить поддерживаемый код на ЯВУ, а не дизасм... Цитата(k000858 @ Apr 19 2013, 07:05)  1) изначально область загрузчика должна быть закрыта битами защиты, что бы его не могли считать средствами отладки и левой прогой во флэш. как называются эти биты в stm32f4 и можно ли их устанавливать не на всю флэш а на определенные области? 2) при снятии защиты с области памяти основной прошивки, не сотрется ли вся флэш, включая загрузчик? Я делал для сотых stm, там есть защита на чтение и защита на запись. Защита на чтение препятствует чтению и записи флеша извне (и при ее снятии флеш стирается). Защита на запись препятствует записи откуда угодно (и она постраничная) - но это что-то вроде страховки от случайного переписывания - ее можно ставить и снимать без стирания флеша. Детали стоит почитать в Flash programming manual для вашей модели процессора. Цитата 3) stm32f4 умеет декриптить AES, DES алгоритмами, думаю их и заюзать. какой алгоритм лучше заюзать? aes более новый и по идее более защищенный, чем DES. Возможно и более тормозной... Цитата 4) ну допустим контроллер я научу расшифровывать, вопрос чем и как (имеет ввиду на пк) предварительно зашифровать прошивку ? Напишешь программу для ПК. На каком-нить питоне скажем в стандартной библиотеке есть алгоритмы шифрования. Для С/С++ надо поискать библиотеку - их полно
|
|
|
|
|
Apr 19 2013, 08:16
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(Aner @ Apr 18 2013, 23:24)  Использовать пустые коды, циклы, многие коды будут запускаться и работать, только делать фигню... и тп - ну---у совсем несерьёзно для ARM. я имел ввиду что если переставлять не по байтно а по словам, то вы не нарушите коды команд, смените их последовательность. А если переставлять с правильным выравниванием то можно делать так что командам будут подпихиваться не верные аргументы, это все создаст запускаемые коды, но работающие не правильно... только это и имел ввиду... У меня другой вопрос, неужели ваши прошивки действительно столь ценны, что их надо защищать такими силами? В приборе кроме прошивки есть еще куча всего, да туже 4 слойную плату под БГА корпуса фиг так просто скопируешь, а потом надо еще найти кучу микросхем, номиналы, и так далее... я не утверждаю, но мне кажется это параноя, по моему легче повторить прибор, чем его копировать, ведь это дает еще возможность модификаций и поддержки....
|
|
|
|
|
Apr 19 2013, 13:44
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 16-06-11
Пользователь №: 65 731

|
Цитата(Непомнящий Евгений @ Apr 19 2013, 08:31)  Подпись дает бОльшую гарантию, чем CRC. гараинтию чего? того, что код закриптован именно вами?  Цитата(Непомнящий Евгений @ Apr 19 2013, 08:31)  А так как и она и шифрование основаны на одном и том же коде - то накладные расходы минимальны минимальны, но и смысл в них сомнительный или вы думаете, что ключ к коду сломали, а подпись не получится?
Сообщение отредактировал aoreh - Apr 19 2013, 13:45
|
|
|
|
|
Apr 19 2013, 14:06
|

Гуру
     
Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463

|
QUOTE (k000858 @ Apr 19 2013, 06:05)  Всем привет. почитал тему, сейчас как раз занимаюсь написанием загрузчика, который по езернет будет обновлять прошивку. Если я все верно понимаю, выглядеть это будет так: 1) загрузчик стартует первым из 0x08000000 ... 4) ну допустим контроллер я научу расшифровывать, вопрос чем и как (имеет ввиду на пк) предварительно зашифровать прошивку ? С Ethernet есть свои особенности. В сотой серии это 107. В этой теме про сотые спрашивали. Есть несколько разных сценариев для старта загрузчика, например если есть битовый свободный порт, можно его опрашивать и стартовать. Подумайте над вариантом, если произошел сбой в процессе загрузки, в любом месте, или не совпала контрольная сумма, и тп то как откатиться назад к предыдущей прошивке. Кусочки можно и поменьше делать от 256 до 32. Думаю, что не все понятно как писать абдейт под Ethernet. Например желательна внешняя память, поскольку в загрузчике иметь дубль TCP/IP стека под 40...60K как то избыточно и много для загрузчика. Затем абдейт можно делат как по UDP, так и по TCP, так и по HTTP. Лучший алгоритм крипт/декрипт-овки, это проверенный вам. Можно и другие использовать не только AES, DES. Программу загрузчика когда пишите, обычно на C/C++, тогда и крипт/декрипт пишите, да и по-тестить можете. Если пользовать уровень HTTP, то по мне - на Java, будет универсальнее.
|
|
|
|
|
Apr 19 2013, 14:26
|

Знающий
   
Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499

|
Цитата(Aner @ Apr 18 2013, 23:24)  В этих процах этот бит не совсем бит защиты памяти, скорее защита от доступа отладочных средств. Это позволяет под защитой, своим загрузчиком, получить новую программу и записать ее в память программы и стартануть. Эта запись во флеш возможна как изнутри, так и снаружи посредстовм своей программы которая внутри проца под защитой.
В вашем случае, вами писанный загрузчик, обеспечит решение задачи, штатный бутлоадер не годиться. А собственный загрузчик можно написать таким образом, что последней командой он поставит коде протект, то есть своего рода "захлопнет дверь изнутри" для доступа отладочных средств и программаторов. Я усматриваю тут "подводный камень" 1. Если мы не завершили программирование и загрузчик еще не установил бит защиты от чтения - и сняли питание- программа у нас почти зашита, а бит защиты от чтения- нет. 2. встроенным загрузчиком кажется, можно стирать память постранично- это работает в случае установленного бита защиты от чтения? записать какой либо кусок встроенным загрузчиком после записи бита защиты от чтения, получается, нельзя- это потенциальные ворота для ввоза троянского коня.. Цитата(Golikov A. @ Apr 19 2013, 12:16)  У меня другой вопрос, неужели ваши прошивки действительно столь ценны, что их надо защищать такими силами? В приборе кроме прошивки есть еще куча всего, да туже 4 слойную плату под БГА корпуса фиг так просто скопируешь, а потом надо еще найти кучу микросхем, номиналы, и так далее... я Есть много вещей где схемотехника очень проста, все сигналы цифровые.. А потом, все равно все компоненты устанавливаются снаружи платы а не внутри
|
|
|
|
|
Apr 19 2013, 14:32
|

Гуру
     
Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463

|
Цитата(Golikov A. @ Apr 19 2013, 11:16) я имел ввиду что если переставлять не по байтно а по словам, то вы не нарушите коды команд, смените их последовательность. А если переставлять с правильным выравниванием то можно делать так что командам будут подпихиваться не верные аргументы, это все создаст запускаемые коды, но работающие не правильно... только это и имел ввиду... это заблуждение, познакомтесь сперва с ARM-ами. ... запускаемые коды, но работающие не правильно... могут выжечь порт, сделать неработающем устройство. Зачем это нужно? Цитата(Golikov A. @ Apr 19 2013, 11:16) У меня другой вопрос, неужели ваши прошивки действительно столь ценны, что их надо защищать такими силами? В приборе кроме прошивки есть еще куча всего, да туже 4 слойную плату под БГА корпуса фиг так просто скопируешь, а потом надо еще найти кучу микросхем, номиналы, и так далее... я не утверждаю, но мне кажется это параноя, по моему легче повторить прибор, чем его копировать, ведь это дает еще возможность модификаций и поддержки.... [CENSORED] Прошивку закрывают от конкурентов примерно на "время жизни продкута" на рынке от полугода до пару-тройки лет. Силы не такие уж чтобы и большие, но зато даром получить открытый код не просто. Да еще, ... и дизассемблирование кода ARMа может мало что дать, тут еще нужно понимать какой стиль в написании программы использовался. 4-8 слойку под БГА корпуса без особых проблем, под рентген, коих много на тест контроле сборочного пр-ва. Вы еще не знаете что китайцы творят! Копируют чипы брендов и улучшают параметры. Повторить прибор можно, конкуренты так и делают с некоторым опозданием и затратами, изучая програмный код конкурента. Мир тут пёстр, каждому своё.
Сообщение отредактировал IgorKossak - Apr 19 2013, 17:43
|
|
|
|
|
Apr 19 2013, 14:34
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(Aner @ Apr 19 2013, 18:06)  С Ethernet есть свои особенности. В сотой серии это 107. В этой теме про сотые спрашивали. Есть несколько разных сценариев для старта загрузчика, например если есть битовый свободный порт, можно его опрашивать и стартовать. Подумайте над вариантом, если произошел сбой в процессе загрузки, в любом месте, или не совпала контрольная сумма, и тп то как откатиться назад к предыдущей прошивке. Кусочки можно и поменьше делать от 256 до 32. Думаю, что не все понятно как писать абдейт под Ethernet. Например желательна внешняя память, поскольку в загрузчике иметь дубль TCP/IP стека под 40...60K как то избыточно и много для загрузчика. Затем абдейт можно делат как по UDP, так и по TCP, так и по HTTP. Лучший алгоритм крипт/декрипт-овки, это проверенный вам. Можно и другие использовать не только AES, DES. Программу загрузчика когда пишите, обычно на C/C++, тогда и крипт/декрипт пишите, да и по-тестить можете. Если пользовать уровень HTTP, то по мне - на Java, будет универсальнее. загрузчик у меня уже написан, все работает, прошивку принимает по TFTP, вопросы остались только по битам защиты и криптованию
|
|
|
|
|
Apr 19 2013, 14:36
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(aoreh @ Apr 19 2013, 17:44)  гараинтию чего? того, что код закриптован именно вами?  ага После дешифровки надо как-то убедиться, что получен осмысленный результат. Шансы на то, что случайно совпадет CRC больше, чем подпись. Цитата или вы думаете, что ключ к коду сломали, а подпись не получится? Нет, я так не думаю. Хотя ключи там другие, и если ключ именно ломали (а не дизасемблировали выдранный из проца загрузчик), то придется ломать еще раз
|
|
|
|
|
Apr 19 2013, 14:43
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
Цитата(Aner @ Apr 19 2013, 18:06)  Подумайте над вариантом, если произошел сбой в процессе загрузки, в любом месте, или не совпала контрольная сумма, и тп то как откатиться назад к предыдущей прошивке. Например, у нас для таких целей будет сервер, висящий в интернете, т.к. устройства могут находиться даже в другой стране. Получается если bootloader узрел в прошивке неладное, то конектится к серверу и тянет нужную прошивку. Цитата(Aner @ Apr 19 2013, 18:06)  Думаю, что не все понятно как писать абдейт под Ethernet. Например желательна внешняя память, поскольку в загрузчике иметь дубль TCP/IP стека под 40...60K как то избыточно и много для загрузчика. Что у вас за стеки такие? У меня bootloader с uip стеком весит 17кБ и при этом умеет отзываться по UDP, перепрошиваться по TCP, получать IP по DHCP и получать IP сервера по его имени от DNS.
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Apr 19 2013, 15:04
|

Знающий
   
Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499

|
Цитата(Aner @ Apr 18 2013, 23:24)  В этих процах этот бит не совсем бит защиты памяти, скорее защита от доступа отладочных средств. Это позволяет под защитой, своим загрузчиком, получить новую программу и записать ее в память программы и стартануть. Эта запись во флеш возможна как изнутри, так и снаружи посредстовм своей программы которая внутри проца под защитой.
В вашем случае, вами писанный загрузчик, обеспечит решение задачи, штатный бутлоадер не годиться. А собственный загрузчик можно написать таким образом, что последней командой он поставит коде протект, то есть своего рода "захлопнет дверь изнутри" для доступа отладочных средств и программаторов. Я усматриваю тут "подводный камень" 1. Если мы не завершили программирование и загрузчик еще не установил бит защиты от чтения - и сняли питание- программа у нас почти зашита, а бит защиты от чтения- нет. 2. встроенным загрузчиком кажется, можно стирать память постранично- это работает в случае установленного бита защиты от чтения? записать какой либо кусок встроенным загрузчиком после записи бита защиты от чтения, получается, нельзя- это потенциальные ворота для ввоза троянского коня.. Цитата(Golikov A. @ Apr 19 2013, 12:16)  У меня другой вопрос, неужели ваши прошивки действительно столь ценны, что их надо защищать такими силами? В приборе кроме прошивки есть еще куча всего, да туже 4 слойную плату под БГА корпуса фиг так просто скопируешь, а потом надо еще найти кучу микросхем, номиналы, и так далее... я Есть много вещей где схемотехника очень проста, все сигналы цифровые.. А потом, все равно все компоненты устанавливаются снаружи платы а не внутри
|
|
|
|
|
Apr 19 2013, 15:18
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(Aner @ Apr 19 2013, 18:32)  [CENSORED]. Прошивку закрывают от конкурентов примерно на "время жизни продкута" на рынке от полугода до пару-тройки лет. Силы не такие уж чтобы и большие, но зато даром получить открытый код не просто. Да еще, ... и дизассемблирование кода ARMа может мало что дать, тут еще нужно понимать какой стиль в написании программы использовался. 4-8 слойку под БГА корпуса без особых проблем, под рентген, коих много на тест контроле сборочного пр-ва. Вы еще не знаете что китайцы творят! Копируют чипы брендов и улучшают параметры. Повторить прибор можно, конкуренты так и делают с некоторым опозданием и затратами, изучая програмный код конкурента. Мир тут пёстр, каждому своё. [CENSORED]Для общего развития: если устройство при попытке получить прошивку физически уничтожается (сгорает), мне кажется это наилучший из вариантов защиты. Я вот делал ренген 6 слойной под БГА, а вы?...
Сообщение отредактировал IgorKossak - Apr 19 2013, 17:41
|
|
|
|
|
Apr 19 2013, 15:20
|

Гуру
     
Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463

|
QUOTE (k000858 @ Apr 19 2013, 17:34)  загрузчик у меня уже написан, все работает, прошивку принимает по TFTP, вопросы остались только по битам защиты и криптованию ... по TFTP я не подписался, из-за отсутствия проверок, низкой надежности. Он же совсем маленький, ну ...для AVR может и подойдет, ресурсов мало, но не для ARM.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|