|
|
  |
Защита секция кода во FLASH в ATmega, Как защититься от несанкционированного выполнения кода |
|
|
|
Feb 13 2008, 12:25
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(defunct @ Feb 13 2008, 15:13)  Так красиво ответить на хамские посты, глубочайший respect! А кто хамил? И где? И почему бы Вам свои благодарности было не написать в привате? Зачем тему-то замусоривать?
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 13 2008, 12:47
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Дон Амброзио @ Feb 12 2008, 01:31)  2) Что можно применить кроме WDT высказлся только Непомнящий Евгений, а что же остальные? Вы же и так все знаете, зачем Вам еще что-то советовать?! Цитата Но это я конечно погорячился, но если встанет такая дилема - я пойду на это Горячий испанский парень. Цитата Вот Вам ответ.. От себя лишь добавллю термин "счётчик-ограничитель количества итераций цикла" Вам о чём-нибудь говорит? это еще что за зверь такой "счетчик ограничитель". В RTOS каждая задача - это бесконечный цикл. Цитата Мне это хорошо известно.. Но я с такими пока не работал... Слова дойстойные анекдота.  Цитата Тема то у нас гораздо шире.. Или просто никто больше не знает других методов "борьбы" с явлением, указанном в названии темы? тема ваша тупая на самом деле, и в том виде в каком задача поставлена в первом посте - не имеет решения вообще. Цитата Не звизди.. Куда смотрят модераторы?! Пора бы немного остудить гарячего парня. Цитата ( я последнее время больше программером работаю, хотя я могу и платы разводить, и схемы проектировать). 50% боксер / 50% сторожевая собака © какой-то мультик Цитата Чуть-чуть пошевелить мозгами для Вас мучение? опять хамство. Цитата У меня наприммер в моих программах работающих в среде моей же RTOS  Цитата Спасибо Вам большое...Я давно уже хотел Вам это предложить... Да стеснялся.. Боялся Вас обидеть... полное хамство. Цитата А кто хамил? И где? И почему бы Вам свои благодарности было не написать в привате? Зачем тему-то замусоривать? Вы. В каждом посте. Потому что меня Ваша манера ведения дискуссии просто бесит. Пришел всезнающий барин, и давай всем объяснять какаие они л...и., какой уж тут приват. Тему эту уже не замусоришь, она и так замусорена вашими постами "от и до".
|
|
|
|
|
Feb 13 2008, 13:20
|
Группа: Новичок
Сообщений: 9
Регистрация: 12-02-08
Пользователь №: 34 985

|
Цитата(Дон Амброзио @ Feb 13 2008, 14:09)  Оно и понятно. А Вы как решаете проблему обнаружения в программе несанкционированных переходов? Я использую и STATE, и WDT, и программные таймауты. А вообще стараюсь писать, чтобы была однозначность во всех ситуациях. А что касается несанкционированных помех и т.д., то эти вопросы лучше решать другими способами (экранами, фильтрами, убрать подальше от источника помех.....).
|
|
|
|
|
Feb 13 2008, 13:50
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Недавно дорабатывал текстовое информационное табло. Разработчиком была допущена ошибка в проектировании ПП, в результате табло "ловило" помехи очень стабильно. Инженерам приходилось выезжать на место и пересбрасывать питание.
Во-первых, доработал программу. Табло реализовывало динамическую развертку (100Гц). В разверточном прерывании вставил WDR после проверки нескольких таймаутов. Логика такая: 1. Разверточное прерывание нужно всегда, т.е. это гарантированная точка входа с частотой 100Гц. Его задача разворачивать ВидеоОЗУ; 2. Поставил таймаут на прием данных по последовательному интерфейсу. Задача приемника принять данные и поместить их в буфер; 3. Поставил таймаут в MAINLOOP. В главном цикле проверялось пришли ли новые данные и при необходимости записывалось ВидеоОЗУ; 4. В разверточном прерывании проверял таймауты от приемника и главного цикла, если они не истекли, то сбрасывал сторожевой таймер.
Таким образом, я гарантировал, что разверточное прерывание будет всегда; не зависнет конечный автомат приемника (таймаут приемника) и принятые данные попадут в буфер; в главном цикле принятые данные из буфера перепишутся в ВидеоОЗУ, развертка которого гарантирована.
Табло, по-прежнему, прекрасно ловило все помехи, но не уходило в ступор (инженерам не приходится ездить и пересбрасывать питание). После аппаратных доделок табло перестало ловить помехи.
Вот.
|
|
|
|
|
Feb 13 2008, 14:34
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Rst7 @ Feb 13 2008, 15:50)  У меня стандарт на оборудование (EN54) требует не сбиваться, максимум - кратковременное нарушение индикации (ну типа, когда статразряд влетает в светодиод, он подмигивает  ). И работает. Рискну предположить, что у вас всё работает из-за того, что всё это достаточно большое, и в железном корпусе. Я это условие как-то в том посте упустил. У меня-то пластмассовый корпус 120*60*32 мм. И когда они этот гвоздик, в котором 8 кВ за единицы наносекунд нарастает, к корпусу подносят (к разным местам), то до процессора и других микросхем - от него менее 15 мм расстояние. Это почище той зажигалки, которой Дон Амброзио свои процессоры тестирует. Пробовали экраны металлические делать - эффект 0-й, а удорожание не 0-е. И всё равно это не поможет т.к. кабеля-то наружу торчат. От них тоже сбивается. Но всё само восстанавливается (класс B ) Цитата(defunct @ Feb 13 2008, 17:09)  Представим, что у нас в МК прошит бутлоадер. В нем есть потенциально фатальная для девайса команда стирания страницы флеш, тогда единственным направлением для защиты от "случайных прыжков" - будет правильное проектирование ПП и снижение уровня помех. У меня тоже бутлоадер есть в области загрузчика. Перед тем как программировать я CRC переменных проверяю. Согласен, что защита не 100%. Может ведь и после проверки прыгнуть. Но 99.9%. А если быть точным - то отношение кол-ва команд с которых бутлоадер несанкционированно запустится к 65536 (столько слов у AVR с 128 в конце).
|
|
|
|
|
Feb 13 2008, 15:12
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(galjoen @ Feb 13 2008, 16:34)  Может ведь и после проверки прыгнуть. Но 99.9%. А если быть точным - то отношение кол-ва команд с которых бутлоадер несанкционированно запустится к 65536 (столько слов у AVR с 128 в конце). угу, прыжек же "случайный" можно папасть в любую точку, по законам Мерфи попадем ровно на erase sequence после всех проверок. Защититься тут никак нельзя, а вот предотвратить "командировку для устранения последствий" - можно. Например, можно хранить копию основной прошивки во внешней eeprom'ке, при старте бутлоадером проверить CRC прошивки, если не совпадает - то попытаться загрузить прошивку из внешней eeprom. Я собсно хочу отметить, что задача автора ветки - нерешаемая. Ее можно только обойти, но не решить.
|
|
|
|
|
Feb 13 2008, 15:51
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(defunct @ Feb 13 2008, 18:12)  угу, прыжек же "случайный" можно папасть с любую точку, по законам Мерфи попадем ровно на erase sequence после всех проверок. Ага.. Но у меня в конце каждой итерации записи страницы стоит тоже проверка "а была ли действительно санкционирована запись" и если нет - восстанавливаем странцу из копии программы (у меня в флэшаке всегда храниться 3 копии программы: одна активированная, а 2 в дезактивированном виде) Так что.. Опять мимо Цитата(defunct @ Feb 13 2008, 17:09)  Представим, что у нас в МК прошит бутлоадер. В нем есть потенциально фатальная для девайса команда стирания страницы флеш Надо проектировать программу так, чтобы стирание одной единственной страницы флэш не было фатальным . Как? Смотрите выше А вообще я не спорю, что всегда существует вероятность такого сбоя когда никакие программные извраты не помогут предотвратить нехорошие последствия этого сбоя.. Против лома, как говориться , нет приёма..Только другой лом Но как я уже писал и другие говорили, что какая бы высокая надёжность не обеспечивалась граммотным проектированием железа применяя программные методы можно увеличить это надёжность ещё больше
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 13 2008, 15:53
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Rst7 @ Feb 13 2008, 17:41)  И в подобных корпусах есть приборчики. Там система будь-здоров, всяких разных приблуд и в пластмассовых корпусах и в металлических - дофига. Все работает. У меня есть знакомый. Очень уважаемый человек! Он всегда рассказывает, что огородом совсем не занимается, а там у него все очень хорошо растёт. При этом он явно даёт понять, что у него все растения так хорошо растут просто из уважения к нему. Надеюсь, вы Rst7, не такой уважаемый человек. Объясните, как-же у вас в таких корпусах от наносекундных помех ничего не сбивается? Вы экраны ставите? Или как вы этого добиваетесь? Только без обид. Rst7, заранее извиняюсь! Простите, что первое на ум пришло написал. А стирать жалко.
|
|
|
|
|
Feb 13 2008, 16:08
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(defunct @ Feb 13 2008, 15:47)  это еще что за зверь такой "счетчик ограничитель". "На свете есть много такого, мой друг, Горацио, что и не снилось нашим мудрецам"(С) Цитата(defunct @ Feb 13 2008, 18:12)  Я собсно хочу отметить, что задача автора ветки - нерешаемая. Ее можно только обойти, но не решить. ПринимаетсяЯ немного неправильно сформулировал задачу. Я написал в исходном сообщении: А кто как защищает код в MCU от несанкционированного выполнения в результате случайного перехода из одной точки программы в другую от воздействия помехонесущего электромагнитного поля (искажения записанного в счётчике команд значения). А? А правильно бы надо было так (ведь именно это меня и интересует): А кто как организует код программы, чтобы программа детектировала (обнаруживала) случайные переходы из одной точки программы в другую, вызванные воздействием помехонесущего электромагнитного поля (искажения записанного в счётчике команд значения) т.е. переходы, не предусмотренные на этапе проектирования программыЦитата(galjoen @ Feb 13 2008, 17:34)  Согласен, что защита не 100%. Вот я и говорю, что не 100% но всё же эффект ведь налицо от применения "программных методов" Что эти Господа так упираются против использования программных методов обнаружения сбоев? Не понимаю Цитата(mig2002 @ Feb 13 2008, 16:20)  А что касается несанкционированных помех и т.д., то эти вопросы лучше решать другими способами (экранами, фильтрами, убрать подальше от источника помех.....). Конечно лучше... И плюс для подстраховки рассыпать в проге код обнаружения случайных джампов...Так...На всякий пожарный
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 13 2008, 17:16
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Дон Амброзио @ Feb 13 2008, 17:51)  (у меня в флэшаке всегда храниться 3 копии программы: одна активированная, а 2 в дезактивированном виде)
Так что.. Опять мимо А почему Вы восприняли это на свой счет?  Я же не знал, что и как у Вас реализовано, и соотв. не мог критиковать вашу реализацию. А вот сейчас уже могу  - что делать если основная прошивка занимает >50% флеша? На этом форуме вообще-то не принято друг-друга подкалывать. Тему можно сделать интересной, и без скандальных постов.
|
|
|
|
|
Feb 13 2008, 18:35
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(defunct @ Feb 13 2008, 20:16)  Я же не знал, что и как у Вас реализовано, и соотв. не мог критиковать вашу реализацию.А вот сейчас уже могу  - что делать если основная прошивка занимает >50% флеша? 1)Использовать другой MCU с бОльшим количеством FLASH 2)Уменьшить программу 3) Придумать что-то ещё(например выделить во FLASH какой-нибудь буфер страницы на 4; пишем новую страницу туда; пишем ещё одну копию новой страницы в буфер; затем считываем в ОЗУ содержимое старой страницы, которую хочем изменить; пишем её в буфер; ещё раз считываем в ОЗУ содержимое старой страницы; пишем её в буфер; далее стираем требуемую страницу и пишем новое содержимое ТАКИМ ОБРАЗОМ СТИРАНИЕ ОДНОЙ СТРАНИЦЫ FLASH НЕ БУДЕТ ФАТАЛЬНЫМ Цитата(defunct @ Feb 13 2008, 20:16)  На этом форуме вообще-то не принято друг-друга подкалывать. И не думал. Ведь я как никто заинтересован этой темой и в нормальных ответах в ней, а не в обсуждении моей персоны Цитата(Дон Амброзио @ Feb 13 2008, 21:22)  1)Использовать другой MCU с бОльшим количеством FLASH 2)Уменьшить программу 3) Придумать что-то ещё(например выделить во FLASH какой-нибудь буфер страницы на 4; пишем новую страницу туда; пишем ещё одну копию новой страницы в буфер; затем считываем в ОЗУ содержимое старой страницы, которую хочем изменить; пишем её в буфер; ещё раз считываем в ОЗУ содержимое старой страницы; пишем её в буфер; далее стираем требуемую страницу и пишем новое содержимое ТАКИМ ОБРАЗОМ СТИРАНИЕ ОДНОЙ СТРАНИЦЫ FLASH НЕ БУДЕТ ФАТАЛЬНЫМ И не думал. Ведь я как никто заинтересован этой темой и в нормальных ответах в ней, а не в обсуждении моей персоны К тому же между установкой бита SPMEN и командой SPM даётся 4 такта на "раздумье". Туда можно засунуть код: OUT SPMCR , R16 ; --------------- SBRS R17 , 7 RJMP CRASH ;----------------- SPM Цитата(Дон Амброзио @ Feb 13 2008, 21:31)  ТАКИМ ОБРАЗОМ СТИРАНИЕ ОДНОЙ СТРАНИЦЫ FLASH НЕ БУДЕТ ФАТАЛЬНЫМ Разумеетцо если сбои не сыпяться слишком часто. К примеру не чаще чем раз в секунду. В противном случае (т.е. если частота сбоев в программе из-за помех больше чем раз в секунду) можно смело отправлять девайс на помойку
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|