|
|
  |
Защита секция кода во FLASH в ATmega, Как защититься от несанкционированного выполнения кода |
|
|
|
Feb 16 2008, 13:23
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Дон Амброзио @ Feb 16 2008, 15:44)  А если проверять перед записью не один регистр, а два, то вероятность случайной записи можно уменьшить в 65536 раз Не успеем - там 4 такта всего. А две проверки по 1 такту и два brne тоже по 1 такту =4 такта. Можно только добавить ещё один sbrc перед самим spm, и этим уменьшить вероятность ещё в 2 раза. Цитата(Дон Амброзио @ Feb 16 2008, 15:44)  Вот и посчитаёте: какова вероятность, что в обоих регистрах R17 и R18 будет записано одно и тоже число Вообще-то вероятность абсолютно такая-же, как и у того, что в один регистр будет записано какое-то определённое число. Цитата(Дон Амброзио @ Feb 16 2008, 15:44)  Потому что заказчику не объянишь, что это мол я не сделал ни каких программных защит-ловушек из -за того, что это: "слижком сложно", что "СИ-компилятор не поддерживает такие конструкции" Но зато "счастливого" владельца глючящего девайса можете утешить тем, что программа написана на языке высокого уровня СИ (во крута ) и что она переносима и не привязана к конкретным архитектурным особенностям данного процессора +1 А я вообще считаю, что для АВР смысла нет на C писать. В программах управления чем-либо (ИМХО АВР только в таких применениях с АРМ конкурентоспособен) переносимости это не добавит т.к. всё к регистрам ввода-вывода привязано. Как встроенные функции C (сделанные такими для переносимости) например с USART работают - знаете. Неужели кого-то они устраивают! Всё равно нормальные люди сами пишут. Ну и где после этого переносимость?
|
|
|
|
|
Feb 16 2008, 15:56
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 16-04-05
Из: СПб
Пользователь №: 4 208

|
Цитата(Дон Амброзио @ Feb 12 2008, 19:18)  Бывает, бывает. Молодой человек. Я написал тестовую прогу для ATmega8 которая представляет собой следующее: .cseg .org 0 ;----------------- .set Number = 0 ;----------------- Begin_Loop : .set Number = Number +1 ldi R16 , Number nop ............. nop cpi R16 , Number breq PC+0x02 rjmp Crash ;----------------------- rjmp Begin_Loop ;----------------------- Crash : ; Зажечь светодиод ... ; Остановиться ;------------------------ ... Подскажите, пожалуйста, как Вы определили, что сбился PC, а не R16?
|
|
|
|
|
Feb 16 2008, 16:48
|

Местный
  
Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528

|
Цитата(bill_vs @ Feb 16 2008, 18:56)  Подскажите, пожалуйста, как Вы определили, что сбился PC, а не R16? PC - это священная корова!!!
--------------------
Для связи email: info собака qbit.su
|
|
|
|
|
Feb 16 2008, 17:19
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(bill_vs @ Feb 16 2008, 18:56)  Подскажите, пожалуйста, как Вы определили, что сбился PC, а не R16? Ну ещё мог сбиться бит Z из регистра SREG. Для проверки чисто сбоя PC всего 1 команда нужна rjmp сам на себя. Собака есно при этом запрещена д.б. Но это ничего не меняет. Если предположить, что это R16 сбивался, то сбой регистра R30=ZL или R31=ZH перед ijmp или icall к тем-же результатам приведёт, что и сбой PC. Как и сбой в ОЗУ перед командой ret. Или сбой указателя стека. Я считаю, что тема эта гораздо шире стала, чем просто сбои PC. Тут защита от сбоев вообще рассматривается. Неправильно написал. Д.б. так - минимизация последствий аппаратных сбоев. Или минимизация вероятности того, что аппаратный сбой тяжелый урон нанесёт. Да, ещё добавить забыл, что АВР всего-лишь как пример рассматриваю. Так сказать - виртуальный микроконтроллер.
|
|
|
|
|
Feb 16 2008, 17:47
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
0. Перестаете думать, как работать со сбоящим дерьмом, так, чтобы скрыть от пользователей, что они имеют дело с дерьмом. Ознакамливаетесь c приложением. По результатам ознакомления возможны два варианта 1. Привлекаете фирму Atmel за выпуск сбоящего дерьма не соответсвующего заявленным характеристикам. 2. Собираетесь с умом и думаете о том, как вам удалось создать сбоящее дерьмо.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 16 2008, 18:08
|

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

|
Цитата(Дон Амброзио @ Feb 12 2008, 07:05)  Ибо нафига мне "суперпупернадёжная" система, у которой происходит один сбой в год, но он НЕ ОБНАРУЖИВАЕТСЯ СИСТЕМОЙ. Я лучше возьму систему, у которой сбои происходят каждый день, ну у которой эти сбои НЕ ПРОХОДЯТ НЕЗАМЕЧЕННЫМИ СИСТЕМОЙ Почитал я это все субботним вечером и даже смешно стало: Да какое потребителю дело, какое количество сбоев происходит в купленной им системе и какое количество сбоев система фиксирует. Потребителю важна только конечная работоспособность системы и отсутствие последствий внутренних сбоев. А обеспечить отсутствие последствий сбоев чисто программными методами невозможно. Гораздо дешевле и надежней аппаратные средства (внешние и внутренние блокировки). Взрослый человек утверждает, что применяет десятки различных методов программных защит, хранит несколько копий прошивки во флеш и т.д. и т.п. Напрашивается вывод: судя по всему, вам платят по часам, а не по конечному продукту и никто не ограничивает вас во времени разработки. То есть какие-нибудь бюджетные разработки. Практически искусство ради искусства. Иначе писать программы за реальное время по вашим методам просто невозможно. От реалий рынка все это крайне далеко. з.ы. хотя воды тут было вылито море, пару интересных идей пригодных для применения я все же услышал, правда больше от оппонентов Все же остальное, это, как я уже писал, или искусство ради искусства, или что-то, напоминающее маниакальную фобию.
|
|
|
|
|
Feb 16 2008, 18:36
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Baser, вот именно что, Цитата Потребителю важна только конечная работоспособность системы и отсутствие последствий внутренних сбоев. и если что то сбойнет с последствиями, то Вы долго будите колотить себя пяткой в грудь, что это было внешнее воздействие, плохое заземление, слабая защита от грозы и помехи по питанию. Цитата Гораздо дешевле и надежней аппаратные средства (внешние и внутренние блокировки). когда цена имеет значение (конкуренты не спят), то начинаешь думать как сделать по дешевле (по проще) и чтобы работало не хуже чем у конкурентов. А какие проблемы бывают на объектах здесь могут многие рассказать. Так что тема актуальна.
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
|
Feb 16 2008, 19:24
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(zltigo @ Feb 16 2008, 21:47)  0. Перестаете думать, как работать со сбоящим дерьмом... Интересно в этой связи вспомнить историю с контролем памяти в компьютерах. Память имела контрольный бит, который при неправильном чтении взводил триггер ошибки. Я собственноручно проектировал такую систему. Один триггер для ПЗУ, второй триггер для ОЗУ. Вероятность обнаружения сбоя повышалась многократно, вот она, мечта! Но стоило немного продвинуться технологии, как оказалось, что это все не нужно. Нет, конечно можно из конфетки сделать сбоящее дерьмо неграмотным проектированием и(или) желанием сэкономить, и барахтаться в этом дерьме, и есть, есть люди, готовые завести народ в этот тупик :-)
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Feb 17 2008, 07:36
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(Дон Амброзио @ Feb 16 2008, 15:44)  Но зато "счастливого" владельца глючящего девайса можете утешить тем, что программа написана на языке высокого уровня СИ (во крута ) и что она переносима и не привязана к конкретным архитектурным особенностям данного процессора Понимаете в чем проблема - чтобы кого-то утешить, надо еще этого кого-то иметь. Если я буду писать прошивку год и а потом каждой пожелание клиента вносить в нее месяц - то утешать просто некого будет. Мои девайсы не будут продаваться... Вы забываете, что есть очень разные области применения устройств. Есть устройства, которое может сглюкивать раз в день к примеру, и пользователь будет с этим мириться. Потому что устройство, которое будет вылетать раз в год, будет стоить на несколько порядков дороже и будет значительно менее гибким - т.е. внести в него пожелания пользователя крайне сложно... Я отчетливо понимаю, что есть области, где необходим такой подход, как описываете вы. Но их сравнительно немного... Цитата(galjoen @ Feb 16 2008, 16:23)  А я вообще считаю, что для АВР смысла нет на C писать. В программах управления чем-либо (ИМХО АВР только в таких применениях с АРМ конкурентоспособен) переносимости это не добавит т.к. всё к регистрам ввода-вывода привязано. Как встроенные функции C (сделанные такими для переносимости) например с USART работают - знаете. Неужели кого-то они устраивают! Всё равно нормальные люди сами пишут. Ну и где после этого переносимость? А я считаю по другому. Привязку к регистрам вполне можно "опустить" в несколько четко определенных мест и менять только их при переходе к другому процу. Мой хлеб как раз и состоит в написании программ управления чем-либо по очень разным протоколам, которые в свою очередь управляются по другим протоколам с компьютерных систем или непосредственно с пульта пользователем. И мне представляется что такие задачи очень хорошо "отвязываются" от конкретного железа и разбиваются на отдельные слабозависимые блоки. И С /С++ здесь прекрасно работают.... offtopic Кстати, что это за фольклорный персонаж "Дохтур туамосец" - тут его пару раз упоминали. Гугл выдал только пару ссылок на телесисы...
|
|
|
|
|
Feb 17 2008, 08:58
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Пока народ разогрет всем этим бредом... прошу отнестись серьезно к тому, что я хочу сказать. Хочу детально проработать вопрос по spm и целостности флеша, для чего сваять простенькую модель: Код void main(void) { avr_init(); while(1) { _IJMP(random(0xffff));// *) } return(0); } *) 0xFFFF вариант для меги 64. Для более мелких - надо учесть размер шины адреса Методика: 1. забили весь флеш, чтобы 0xFF было минимум. 2. Запомнили CRC 3. ставим эту байду на несколько часов 4. Отвечаем 2 defunct ВОПРОС О СОСТОЯТЕЛЬНОСТИ МОДЕЛИ: покакит ли это все с псевдослучайными числами с нормальным распределением? Очень жду комментариев.
|
|
|
|
|
Feb 17 2008, 09:37
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Непомнящий Евгений @ Feb 17 2008, 10:36)  Вы забываете, что есть очень разные области применения устройств. Есть устройства, которое может сглюкивать раз в день..... Устойства "сглюкивающие" раз в день не имею права на существование в принципе. Должна-же быть какая-то нижняя планка качества. Ни одно из микроконтроллерных устройств работающих в нормальной для контроллера среде не должно глючить, чаще, чем наработка на отказ отнормированная производителем. Если указанные условия не приемлимы, или не приемлимо вообще само слово отказ, то эта проблема решается совершенно другими способами. Высасывание из пальца одной из множества гипотетически возможных причин сбоя и мужественная борьба с ней софтовыми методами с принесением в жертву качества, надежности и сопровождаемости кода совершенное умопомрачение. Тут поминалась Ядерная Энергетика? Так получилось, что я с ней сталкивался. Ядерный реактор это именно тот случай, когда последствий от отказов быть не должно. Подчеркиваю - последствий а не отказов, кои нормируются. Сделать это тяжело и безумно дорого. Что касается софта, то написанного в рекламируемом здесь стиле софта там не будет близко и на пушечный выстел. Причина проста - софт должен быть верифицирован, как минимум по формальным признакам - написан с использованием инструментальных средств минимизирующих вероятность ошибки человека, в конструкциях языка не должны быть использованы выражения могущие вызывать потенциальные неоднозначности, данные должныбыть четко структурированы, инструментальные средства должны быть в свою очередь проверены временем и достаточно консервативны, разработчики софта должны, извините, соответствовать определенному образовательному цензу... При всем этом совершено очевидным является тот факт, что устройство может не выполнить свою функцию в нужный момент времени. Посему резервирование прежде всего. неезервированных вещей на энергоблоке всего несколько, практически корпус реактора и кусок трубы с клапанами  до насосов и прочего уже резервированного оборудования. Это нерезервированное оборудование и является основным ноухау, стоит сумашедших денег, защищается от внешних воздействий а внешняя среда защищается от него... Со всем остальным проще - собирается почти по месту  насосы можно взять на Украине, двигатели к ним во Франции, систему управления в Германии.... На уникальное оборудование никто старается не закладываться. Только вот резервировние там не шуточное. Например (намеренно подальше от электроники, дабы избежать скатывания в часности), для работы реактора в штатных режимах достаточно одного Главного Циркуляционного Насоса. Во всех нештатных - двух. Там их четыре. Три работают всегда, один стоит в холодном резерве, на регламентном обслуживании.... Двигатели насосов надо питать - начинаем резервировать электропитание - к энергоблоку подходят две линии электропередач от других электростанций (это не считая соседних своих энергоблоков), при каждом энергоблоке три собственных аварийных дизельгенератора (размером с дом), но для останова реактора хватит одного. Если все это хозяйство вдруг отказало, то снаружи энергоблока есть штепсель для подключения предвижного дизельгенератора, которого хватит на питание РЩУ и заглушение реактора. Если вдруг соляку из всех подвижных слили  , то на ГЦНах стоят многодесятитоные маховики - совсем уже реактор не расплавится даже при сверхаварийном останове. А если расплавится, то он стоит в Гермозоне, которая в свою очередь расплавившись стечет на 27 метров вниз в выложенный керамикой бассейн и будет там доооолго кипеть.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 17 2008, 10:11
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Да и в простой промышленности, при управлении станком, к примеру, - надо быть очень убедительным, чтобы навязать свой уникальный контроллер. Пожалуйста применяй готовый - сименс/ митсубиши... И это правильно, - поставьте себя на место директора. Людей и поставщиков тоже надо резервировать. На одного сложно полагаться. С другой стороны, совершенно не понимаю разговоров об одном глюке в день, к примеру. Мы несколько изделий в телефонии делали. Как понимаете там круглосуточное использование. Одно из самых первых при отсутствии опыта делали на х51. И WDT не ставили. Там по-моему просто не было его, а внешний ставить - тогда недоставаемо было. Как-то раз, недавно, столкнулся с одним своим изделием.  Ужасающее состояние, - весь покрыт пылью - валяется среди хлама (во включенном состоянии). Люди забыли что он у них есть. Он просто выполняет свои ф-ции и всё. Люди не задумываются как и кто это делает. Они просто привыкли что это работает. Ну я поинтересовался (вы же понимаете меня это очень интересовало), - спрашиваю а висы у вас били? Смотрят на меня - не понимают о чём я говорю. Ну я спрашиваю - приходилось из розетки вытыкать? Не могут вспомнить!!! А надо сказать, что сейчас я бы в 10 раз лучше написал. Изменились и подходы и аппаратная часть. На мой взгляд - не надо выдумывать монстров и с ними бороться. Надо просто хорошо и качественно исполнять свою работу.
|
|
|
|
|
Feb 17 2008, 11:07
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Ядерный реактор это именно тот случай, когда последствий от отказов быть не должно. И, тем не менее, если человеку очень захочется свалить такую систему - он ее свалит. Пример - ЧАЭС. А вообще, если кого интересует, есть у меня исходные технические требования (украинские, правда) к оборудованию пожарной безопасности на АЭС. Могу дать почитать, документ не секретный, может оттуда почерпнете, чего надо делать, и чего не надо...
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 17 2008, 11:31
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Rst7 @ Feb 17 2008, 14:07)  И, тем не менее, если человеку очень захочется свалить такую систему - он ее свалит. Пример - ЧАЭС. Прошло много лет со времени проектирвания системы управления ЧАЭС, да и сам реактор отличается прочти буквально как движок паравоза отличается от двигателя внутроеннего сгорания. Появилась возможность использовать более сложную дуракоустойчивую технику, свалить из штатных режимов работы оператор замучается. От действий оператора в непредсказанных аварийных режимах, естественно завист многое. Цитата А вообще, если кого интересует, есть у меня исходные технические требования (украинские, правда) к оборудованию пожарной безопасности на АЭС. Могу дать почитать, документ не секретный, может оттуда почерпнете, чего надо делать, и чего не надо... Интересует. Правда я и свои (Российские) имею, поскольку оборудование иcпользуется на трех AЭС, в том числе на Южноукраинской  и на одну проектируется. Но не систем пожаротушения. Интересует. Ну а к системам пожаротушения, правда не на энергоблоке а вообще даже за пределами Ядерного Острова я претензии имею - ложно сработала  задув газом и порошком полэтажа здания, где стояло мое оборудование. Но там что-то достаточно общепромышленное стояло. На энергоблоках совсем другие, по крайней мере управление не пласмассовая коробочка со светодиодиками на стене, а стойка высотой под метра два с немерянной красы Windows GUI.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|