реклама на сайте
подробности

 
 
19 страниц V  « < 15 16 17 18 19 >  
Closed TopicStart new topic
> Защита секция кода во FLASH в ATmega, Как защититься от несанкционированного выполнения кода
Baser
сообщение Feb 19 2008, 09:19
Сообщение #241


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(galjoen @ Feb 19 2008, 00:20) *
... А это возможно, только если во всей программе ни одной потенциально опасной команды (в т.ч. и во вторых словах двухсловных команд и в таблицах) не будет. А потенциально опасными командами можно считать те, которые зацикливают (могут на wdr зациклить), в регистры пишут (например в порты), или в ОЗУ в то место где реально регистры могут оказаться (запись собственно в ОЗУ безопасна)...

Тогда давайте вообще от всех команд откажемся, они все потенциально опасные, все могут сделать что-нибудь нехорошее. Будем применять только NOP, поскольку это наш идеал smile.gif

Цитата
Пишу и думаю: всё это ещё кому нибудь интересно или нет? Я-то ко всему этому интерес стремительно теряю, т.к. все во флуд превращается. Все и саму тему-то уже давно забыли.

Сама тема не интересна. Как я уже писал, "искусство ради искусства", теоретические размышления, мало пригодные на практике. Просто иногда интересно почитать, что ещё могут придумать люди, которые тему принимают всерьез biggrin.gif Именно тему, а не саму проблему в целом, которая важна. (Это не наезд, не обижайтесь beer.gif )
Go to the top of the page
 
+Quote Post
tyro
сообщение Feb 19 2008, 10:06
Сообщение #242


Любитель Кошек
*****

Группа: Свой
Сообщений: 1 593
Регистрация: 8-06-06
Пользователь №: 17 873



Цитата(Baser @ Feb 19 2008, 12:19) *
Сама тема не интересна. Как я уже писал, "искусство ради искусства", теоретические размышления, мало пригодные на практике. Просто иногда интересно почитать, что ещё могут придумать люди, которые тему принимают всерьез biggrin.gif Именно тему, а не саму проблему в целом, которая важна. (Это не наезд, не обижайтесь beer.gif )

bb-offtopic.gif Есть отдельно взятое мнение, что если тема не интересна то:
- не читать
- и уж точно не писать (сама умрет) ну и не засорять офтом - может кому тема и интересна (мне например интересно в позновательных целях) smile.gif bb-offtopic.gif


--------------------
По современному этикету, в левой руке держат вилку, в правой - мышку.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 20 2008, 10:46
Сообщение #243


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



bb-offtopic.gifЯ тут вспомнил того мужика, который вторым на южный полюс пришёл. Пришёл, а там плакат висит "Добро пожаловать на южный полюс". Его тот, кто первым туда пришёл установил. Это я про то, что у всех потенциально опасных команд атмел старший бит =1 сделал.
А тут некоторые считают, что лучше он бы дома на диване сидел, и через интернет посты слал "не вижу смысла ходить на южный полюс".
Цитата(tyro @ Feb 19 2008, 13:06) *
(мне например интересно в позновательных целях) smile.gif

+1
Цитата(Rst7 @ Feb 15 2008, 14:03) *
Я вам больше скажу. Все эти извращения можно применять. Возможно, в каком-то очень маловероятном случае, они даже спасут.

+1
bb-offtopic.gif
А я предлагаю написать тем, кто что-то полезное для себя из темы для себя извлёк. Желательно с указанием автора и с комментариями. Но без критики. Думаю это всем полезно будет.
Вот я начинаю:
Цитата(Непомнящий Евгений @ Feb 11 2008, 22:26) *
Ну как вариант - расставить assert-ы по всей проге, для рантайм- проверки предусловий и постусловий функций. Если assert не выполняется - ахтунг.

Буду делать.
Цитата(Дон Амброзио @ Feb 14 2008, 21:45) *
У меня данные храняться в команде CPI Rd , K.
Как Вы, конечно же знаете, код этой команды 0011KKKK ddddKKKK. Отсюда 12 из 16 бит ячейки флэшь можно заюзать под данные. Т.е. 25% объёма флешь мы теряем в случае такого способа хранения данных.. Но зато !!!! Если в результате случайного джампа проц попадёт на область данных, то он просто выполнить цепочку команд CPI Rd , K а в конце области данных у меня стоит джамп JMP CRASH

Достаточно чтобы у данных в таблицах во FLASH только срарший бит в слове =0 был. Выполнять это условие всегда тяжело. Но бывает, что без разницы чему равен старший бит в слове. В этом случае буду его =0 делать.
Цитата(galjoen @ Feb 15 2008, 14:20) *
; до последней проверки
ldi R17,Tag ; что такое Tag думаю объяснять не надо
; начинается последняя проверка. В ней R17 не используется.
...
; последняя проверка закончена. Дальше пошли аварийно опасные команды.
....
; дальше пример от 'Дон Амброзио'. Чуть переделанный
OUT SPMCR , R16
; ---------------
cpi R17 , Tag
brne CRASH
;-----------------
SPM

Буду делать.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 20 2008, 11:11
Сообщение #244


кекс
******

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



Цитата(galjoen @ Feb 20 2008, 12:46) *
Это я про то, что у всех потенциально опасных команд атмел старший бит =1 сделал.

Это сугубо ваше личное мнение.
А я считаю, что любая команда потенциально опасна.
И не факт, что хитрое хранение данных (внедрение в тело команд) требующее применения сложного и медленного экстрактора будет безопаснее чем данные "как есть" с простым доступом к ним.

Хотя конечно отговаривать любителей экзотики (покорителей южного полюса) бесполезно. Делайте так как считаете нужным.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 20 2008, 11:37
Сообщение #245


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(defunct @ Feb 20 2008, 14:11) *
Это сугубо ваше личное мнение.
А я считаю, что любая команда потенциально опасна.

Согласен. Надо было написать так: у наиболее потенциально опасных.
Цитата(defunct @ Feb 20 2008, 14:11) *
И не факт, что хитрое хранение данных (внедрение в тело команд) требующее применения сложного и медленного экстрактора будет безопаснее чем данные "как есть" с простым доступом к ним.

А к этому я и не призывал. Я написал так: если это безразлично, то лучше старший бит в слове данных =0 делать.
Цитата(defunct @ Feb 20 2008, 14:11) *
Хотя конечно отговаривать любителей экзотики (покорителей южного полюса) бесполезно. Делайте так как считаете нужным.

Ну я же просил - без критики.

А вы, уважаемый 'defunct', что нибудь полезное из этой темы для себя извлекли? Если нет, то пожалуйста об этом не пишите. Тема и так за 200 постов перевалила.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Feb 20 2008, 15:02
Сообщение #246


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Лично я вывел полезного - в фоновую задачу вставить некие проверки. В принципе давно уже об этом подумываю.
Проблема только в том, как в реальном устройстве определять "правильность" работы других задач. Не всегда есть какие-то "физические" признаки правильности работы. Например, нет связи с подчиненным устройством - может накрылась задача, работающая с ним, идут неправильные запросы (или вообще нет запросов), а может просто устройства нет на линии. Т.е. для каждой задачи нужна своя логика проверки и не всегда она очевидна...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 20 2008, 15:53
Сообщение #247


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Понимаете, большинство практикующих программистов (а не программистов теоретиков) сталкиваются ежедневно с определёнными трудностями. В том числе ошибки и сбои. Они могут оценить важность того или иного события, с практической точки зрения. Это проявляется при вылизывании любого законченного проекта имеющего мало мальски приличную серию. Например в одном из моих мелкосерийно(тысячи) выпускающемся приборе - было 118 версий и изменений. Каждая из которых выстрадана. Причём обнаружена одна существенная ошибка после начала серийного выпуска и куча мелких, незаметных для потребителя.
Таким образом вероятность мелкой ошибочки программиста которая проявляется при уникальном стечении входных данных или действий - во много раз выше, чем "вероятность случайного перехода во время сбоя на область данных где по дикому стечению обстоятельств сбрасывается WDT". Это вам скажет любой самый высококлассный программист. А исходя из того, что "чем сложнее и крупнее проект тем выше вероятность ошибки программиста" (что совершенно очевидно), то и получается такое обсуждение.
Люди не хотят обсуждать гипотетические ошибки, когда во много выше вероятность обычной привнесённой ошибки.
Это с одной стороны.
Теперь с другой.
Приведу пример из области оптимизации. Представьте, что у вас две процедуры. Одна вызывается 100 тыс раз за секунду, вторая - 10 раз. При оптимизации мы выиграли 1 такт на первой и 10 на второй. Сравните результат. Таким образом оптимизировать вторую процедуру просто не имеет смысла.
Так и здесь. Для того чтобы бороться с такими событиями как сбои, помехи и т.п., необходимо ПРОАНАЛИЗИРОВАТЬ ВЕРОЯТНОСТЬ И ТИП ТЕХ ИЛИ ИНЫХ СОБЫТИЙ. Причём сделать это надо в реальном изделии в реальном месте работы. Уверяю вас, - это можно реально сделать. И получить реальные результаты, на основании которых необходимо строить средства борьбы. Одно дело, если выяснится что с вероятностью 99% портится регистр данных, а другое дело - регистр комманд. Пока же мы рассуждаем о том, "чем лечить внеземной организм при заболевании".

Вот только что выяснил, что у меня не нулевая вероятность появления пакета защищённого 8-ми битным CRC. smile.gif То есть проходит помеха (точнее идёт непрерывно) и может быть сформирована адрес сетевой + команда + CRC8. За год непрерывной работы на 5 изделиях такое произошло 2 раза. Но борьба будет аппаратной поставлю резисторы подпорки (растяжки) и терминаторы, чтобы отсечь маломощные помехи. Если это не решит проблему, то буду менять протокол.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 20 2008, 16:00
Сообщение #248


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(SasaVitebsk @ Feb 20 2008, 19:53) *
... Но борьба будет аппаратной поставлю резисторы подпорки (растяжки) и терминаторы, чтобы отсечь маломощные помехи. Если это не решит проблему, то буду менять протокол.

Полностью согласен с исключенным из цитаты.
А по поводу помех - подтяжки кажутся неправильными, даже вредными. Если хотите, откройте тему, пообсуждаем.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Serj78
сообщение Feb 21 2008, 10:36
Сообщение #249


Знающий
****

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



В свете данного обсуждения- имеются ли практические цифры, говорящие о вероятности сбоя (изменения) конкретной ячейки ОЗУ?

В устройстве имеется набор параметров, (констант) защищенных CRC и хранящихся в EEPROM, в начале работы параметры загружаются в ОЗУ. Имеет ли смысл в процессе работы если не загестрировано сброса подгружать их периодически?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 21 2008, 11:35
Сообщение #250


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Serj78 @ Feb 21 2008, 14:36) *
В свете данного обсуждения- имеются ли практические цифры, говорящие о вероятности сбоя (изменения) конкретной ячейки ОЗУ?

В устройстве имеется набор параметров, (констант) защищенных CRC и хранящихся в EEPROM, в начале работы параметры загружаются в ОЗУ. Имеет ли смысл в процессе работы если не загестрировано сброса подгружать их периодически?

Это обсуждалось в другой ветке "тестирование регистров". Я считаю что ответ - "нет".
Go to the top of the page
 
+Quote Post
Baser
сообщение Feb 21 2008, 14:30
Сообщение #251


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Serj78 @ Feb 21 2008, 12:36) *
В устройстве имеется набор параметров, (констант) защищенных CRC и хранящихся в EEPROM, в начале работы параметры загружаются в ОЗУ. Имеет ли смысл в процессе работы если не загестрировано сброса подгружать их периодически?

Цитата(SasaVitebsk @ Feb 21 2008, 13:35) *
Это обсуждалось в другой ветке "тестирование регистров". Я считаю что ответ - "нет".

Никаких практических величин вероятности у меня нет, но я параметры из EEPROM все-таки периодически подгружаю, каждые 10 сек.

Соображения тут следующие: Энергия помехи, необходимая для изменения ОЗУ, на несколько порядков меньше, чем необходимая для изменения EEPROM. Соответственно и вероятность порчи ОЗУ значительно выше. Параметры из eeprom являются константами и не изменяются в процессе работы. Все другие переменные в ОЗУ меняются несравнимо чаще, чуть-ли не все время. А чем больше время "жизни" значения в ОЗУ, тем больше вероятность его сбоя. Причем большая часть алгоритмов МК циклические, поэтому порча содержимого обычной переменной чаще всего нивелируется последующими циклами, а порча константы может изменить поведение прибора на длительное время.

Другой вариант - проверять CRC констант и в ОЗУ, и подгружать только когда есть ошибки.

Все это, конечно, чистая эмпирика, но это из той области приемов, которые я всегда применяю, в отличие от тестирования регистров и АЛУ smile.gif

p.s. Забыл уточнить, речь идет о внешней EEPROM, из внутренней копии в ОЗУ обычно не делаю, читаю напрямую.

Сообщение отредактировал Baser - Feb 21 2008, 21:05
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 21 2008, 18:40
Сообщение #252


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Тут - кто как себе разгоняет. smile.gif

Самый эффективный способ вызвать сбой - весьма прост.
1) Подключите ваше устройство ч/з не стационарный блок питания. Например ч/з свой.
2) Воткните этот БП в тройник.
3) Паралельно ему воткните устройство мощностью не менее 1.5кВт с индуктивной нагрузкой.
4) Поискрите этим устройством часа три. (В зависимости от качества БП и разводки, первые сбои пойдут через 1 - 10 мин)

Если в своём устройстве вывести индикатор или счётчик сбоев, то очень хороший отладчик получится.

Попробуйте проделать операцию с двумя вариантами программы, - получите статистику сбоев.

Если устройство намертво повисло, то значит - шляпа.
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Feb 26 2008, 13:16
Сообщение #253


Местный
***

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



Цитата(SasaVitebsk @ Feb 21 2008, 21:40) *
Если устройство намертво повисло, то значит - шляпа.

А если не зависло, то это ещё не означает, что сбоя нет lol.gif

Ибо могло пройти искажение инфы в ОЗУ от помехи.
Как напрямую, в рузультате воздействия на ячейку или шину адреса/данных во время записи,
так и косвенно, например, в результате случайного джампа выполнится код, который не должен бы выполняться, и это код запишет в ОЗУ не то, что нужно.. Получиться дезинформация, т.е. деза lol.gif

Сообщение отредактировал Дон Амброзио - Feb 26 2008, 13:21


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение May 6 2008, 19:42
Сообщение #254


Местный
***

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



Чтобы в случае случайного джампа в область данных из-за помехи не произошло ничего плохого


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 6 2008, 19:53
Сообщение #255


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Это вопрос ради вопроса? При "случайном" джампе все плохое уже случилось.

Встречный вопрос: а в каком виде писать программу, чтобы в случае "случайного" джампа в любую ее область не происходило ничего страшного?
Go to the top of the page
 
+Quote Post

19 страниц V  « < 15 16 17 18 19 >
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 14:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01529 секунд с 7
ELECTRONIX ©2004-2016