Перейти к содержанию
    

Как защититься от подделки устройства?

Насколько знаю, stm32 может исполнять код из оперативной памяти. То есть можно перегрузить туда код (расшифровав) и передать управление ему.

Сам очень мало работал с stm32 на уровне компиляции и небольшой правки чужого проекта.

Вопрос к знающим людям, это так?

 

Развиваю своё предложение, которое было сделано полушутя, но все-таки. Если есть защищенный канал (GPRS/HTTPS или др.), то можно в начале работы получать ключ, расшифровывать тело основной программы в оперативку и оттуда стартовать. Покритикуйте, пожалуйста.

 

Насчет того, что защищаться вообще не стоит, т.к. это неперспективно. Немного не понимаю эту позицию. Все-таки все мы запираем свою квартиру на ключ. На машинах у большинства сигнализации. Не смотря на то, что незапертая собственность все равно охраняется законом и за воровство положен большой срок, мы все равно стараемся свести к нулю вероятность проникновения. Если эта вероятность повышается, то человек покупает охотничье ружье, т.к. на один замок перестает полагаться. Параллель очень абстрактная, но она для иллюстрации. Математика намного надежнее дверного замка. Как когда-то сказал Джулиан Ассанж, математика -- единственная вещь, которую можно противопоставить государственной машине и она со всей своей мощью окажется бессильной (имеется в виду криптография). Наверняка, можно придумать оптимальное решение, которое сделает копирование невыгодным и в итоге неактуальным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну да, закрываем машину, закрываем квартиру... А умеющие люди приходят и открывают это всё за несколько минут. С квартирами вообще особая печаль ) Посмотрите ролики на ютуб

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если есть защищенный канал (GPRS/HTTPS или др.), то можно в начале работы получать ключ, расшифровывать тело основной программы в оперативку и оттуда стартовать. Покритикуйте, пожалуйста.

Пожалуйста, критикую: этот способ никак не защитит от клонирования устройства. То есть, если злоумышленник изготовит полную копию вашего устройства, то эта копия точно так же получит ключ и расшифрует прошивку в ОЗУ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ID у каждого процессора свой. вот по нему и иметь список разрешенных устройств. А чтобы левое устройство не подсовывало правильный номер, нужно в программе проверять целостность прошивки. По контрольной сумме всей флэш памяти. Понятно, можно дизассемблировать программу и убрать проверку. Здесь надо подумать... :-) Защита от чтения, понятно. Что еще?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если известно место хранения этой CRC, то даже дизассемблировать не надо. Изменённую прошивку нетрудно подогнать под требуемую даже CRC32. На современном ПК это займёт секунды.

Тут надо считать или CRC64 или прятать место хранения CRC.

 

Насколько знаю, stm32 может исполнять код из оперативной памяти. То есть можно перегрузить туда код (расшифровав) и передать управление ему.

Сам очень мало работал с stm32 на уровне компиляции и небольшой правки чужого проекта.

Вопрос к знающим людям, это так?

Любой ARM умеет выполнять код из ОЗУ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

здесь без чтобы, контролная сумма обязана быть

в данном случае - хэш

вообще, это относится к самому первому вопросу, который нужно решить - как вы будете обновлять прошивку, у юзера, удалённо

чтобы таких топиков не возникало

 

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я, конечно, не специалист по подобным вопросам, но почему не сделать так.

 

1. Делаем свой тщательно засекреченный кодер (на PC) который работает по тщательно засекреченному исходному бинарнику прошивки. Он считывает ID проца (используя доп. команду бутлоадера проца, или ручной ввод) и создает загружаемый индивидуальный бинарник прошивки (уже не секретный) шифруя бинарник по ID проца. Как вариант сама программа может сверять ID, но тогда кодер несколько усложняется.

 

2. Пользователям отдаем "простой" загрузчик (на PC), который просто загружает индивидуальный бинарник и сам бинарник. Загрузчик также позволяет считать ID проца.

 

3. Загрузчик проца (тщательно засекреченный) при загрузке дешифрует загружаемый файл по считанному ID проца. В дополнительных командах загрузчика - только считать и отдать ID проца. Загрузчик прошивается в проц стандартным способом прямого программирования перед всеми операциями, не перепрограммируется и защищается от считывания.

 

4. Все апгрейты генерируются пользователям по их запросам с указанием ID их проца (кодером с ручным вводом ID проца). Валидность ID проверяется по БД покупателей и запросы по неизвестным ID игнорируются. Этот ID может быть считан открытым "простым" загрузчиком (на PC). Полученный индивидуальный бинарник прошивается им же.

 

На мой взгляд, если прошивка загрузчика проца не считывается и алгоритм шифрования серьезный, то взломать это будет сложно.

 

Вариант взлома - считывание из защищенной флеши декодированной программы (+ коррекция кода если ID проверяется еще и программой). Иные варианты потребут создания клона с конкретным ID (один раз купить + считать код загрузчика проца из защищенной флеши).

 

Т.е. без чтения защищенной флеши не обойтись.

 

Поправьте если где ошибаюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуйста, критикую: этот способ никак не защитит от клонирования устройства. То есть, если злоумышленник изготовит полную копию вашего устройства, то эта копия точно так же получит ключ и расшифрует прошивку в ОЗУ.

В моем варианте с GPRS-модемом будет очень трудно получить ключ. На клон никто не будет ничего отправлять. Понятно, что не для любого устройства установка модема с сим-картой — подходящий вариант.

 

Есть еще вариант поставить ПЛИС Altera MAX10, перенести на него часть функций.

У ПЛИС есть следующее преимущество. Даже если можно считать прошивку, её непросто декомпилировать. Намного сложнее, чем прошивку процессора. И тем сложнее, чем более емкая ПЛИС. То есть в неё можно убрать какую-то криптографию.

Изменено пользователем x736C

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чтобы левое устройство не подсовывало правильный номер, нужно в программе проверять целостность прошивки. По контрольной сумме всей флэш памяти. Понятно, можно дизассемблировать программу и убрать проверку. Здесь надо подумать... :-)

Можно так.

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

Например, при проверке, с ПК идёт несколько запросов: подсчитать хэш участка с 0x1000 до 0x5000, далее с 0х2000 до 0х6000, и с 0х1800 до 0х7900. Адреса каждый раз выбирать случайным образом.

Хакнутая программа в контроллере, при всём желании не сможет дать верные ответы при таком раскладе.

 

Единственный шанс на обман будет тогда, когда у хакнутой программы будет на внешнем носителе образ "правильной" прошивки, откуда она сможет извлекать информацию для ответов ПК. Но и в этом случае можно вычислить подделку по времени отклика. Задать несколько десятков подсчётов разных участков, и если подсчёт вёлся не из внутренней памяти, а с внешнего носителя - то это займёт в 10 и более раз больше времени, т.к. последовательная память гораздо медленнее, чем внутренняя память программ контроллера (особенно STM32).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Единственный шанс на обман...

А на ПК программу, конечно, ломать не станут, да?

 

Пока у производителя есть утечки, от всех этих затей толку ноль.

 

После устранения утечек достаточно будет шифровать ПО для МК, а ключ и ПО хранить за семью замками.

От пионерского наскока защитит. А все идеи с шифрованием обмена, многофакторной аунтефикацией и т.п.

грозят выйти боком прежде всего для самого производителя и его законопослушных клиентов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ID у каждого процессора свой. вот по нему и иметь список разрешенных устройств.

Ну я собственно это и предложил выше:) Плюс шифрование обмена, чтоб протокол не сняли.

 

В моем варианте с GPRS-модемом будет очень трудно получить ключ. На клон никто не будет ничего отправлять.

А как вы отличите клон от оригинала? Другой номер модема?

 

Можно так.

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

Хороший способ, может добавить проблем взломщикам. Спасибо.

 

А на ПК программу, конечно, ломать не станут, да?

Она может просто транслировать запросы на сервер. В этом случае её ломать будет бессмысленно.

 

Пока у производителя есть утечки, от всех этих затей толку ноль.

Ну, все же надеются, что утечка была последней:)

 

После устранения утечек достаточно будет шифровать ПО для МК, а ключ и ПО хранить за семью замками.

От пионерского наскока защитит. А все идеи с шифрованием обмена, многофакторной аунтефикацией и т.п.

грозят выйти боком прежде всего для самого производителя и его законопослушных клиентов.

Насчёт шифрования обмена - не согласен. Это никак не помешает законопослушным клиентам, но зато сильно затруднит снятие протокола обмена.

 

Я, конечно, не специалист по подобным вопросам, но почему не сделать так.

Использовать ID проца для создания индивидуальной прошивки? А смысл? С тем же успехом можно шифровать все прошивки одним ключом. Если мы полагаемся на защиту от считывания, то разницы нет: в обоих случаях пользователь может получить и прошить обновление, а клонер не может считать загрузчик, поэтому не может сделать клон.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Она может просто транслировать запросы на сервер. В этом случае её ломать будет бессмысленно.

А сервер внезапно недоступен. Зато у врагов-конкурентов со сломанной программой с открученными

запросами все работает и без интернета.

 

Вай, я не заметил главного подарка врагам:

У программы ПК образец правильной прошивки, по которому она имеет возможность проверять ответы контроллера на свои запросы.

То есть просто ломаем программу и получаем в нагрузку образец правильной прошивки.

 

Насчёт шифрования обмена - не согласен. Это никак не помешает законопослушным клиентам, но зато сильно затруднит снятие протокола обмена.

Ну, с обменом еще можно согласиться.

 

Чего точно не стоит делать - городить защиты на стороне ПК. Вы много видели не поддавшихся взлому программ?

А вот какой-нибудь iPod mini не могли расковырять много лет. Ибо железка.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как вы отличите клон от оригинала? Другой номер модема?

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

Если валидную симку вставить в прибор-клон, он будет штатно работать.

 

Насчёт шифрования обмена - не согласен. Это никак не помешает законопослушным клиентам, но зато сильно затруднит снятие протокола обмена.

Тут есть угроза разных атак на ваши сервера. Например можно их дидосить, грузить запросами и т.п.

В эти моменты все ваши устройства будут беспомощными.

В IT такие грязные методы уже использовались конкурирующими инет-магазинами и прочими сервисами.

Это желательно учитывать, и быть готовым защититься от атак.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А сервер внезапно недоступен. Зато у врагов-конкурентов со сломанной программой с открученными

запросами все работает и без интернета.

Во-первых, проверка правильности ответа происходит в железке, так что открутить запросы так просто не выйдет. Во-вторых, можно отложить проверку до появления связи с сервером, потому что в конечном счёте она появится (все данные должны быть отправлены на сервер, и никакой враг-конкурент этого не в силах изменить).

Конечно я согласен, что любое такое усложнение добавляет потенциального геморроя как пользователям, так и производителю. Но делать что-то надо.

Вай, я не заметил главного подарка врагам:

У программы ПК образец правильной прошивки, по которому она имеет возможность проверять ответы контроллера на свои запросы.
То есть просто ломаем программу и получаем в нагрузку образец правильной прошивки.

Да, здесь косячок-с:) Придётся тоже перенести на сервер.

 

Чего точно не стоит делать - городить защиты на стороне ПК. Вы много видели не поддавшихся взлому программ?

А вот какой-нибудь iPod mini не могли расковырять много лет. Ибо железка.

Ну, какой-нибудь ключик типа Guardant Stealth II - это тоже железка. И ломать его весьма недёшево. Так что какую-то часть злоумышленников может отпугнуть.

 

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

Понял, вы привязываетесь к уникальному номеру сим-карты. А как сервер определяет номер сим-карты?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

А как отличить "правильную" от "неправильной"? Помнится в своё время я много сим-карт склонировал собранным на коленке простым девайсом. И образы всех этих сим-карт прошил в телефон. И так был у меня телефон то ли с 5-ю то ли с 6-ю симками :laughing:

Сим-карта - это такой же МК, с такой же прошивкой. Если допускать, что все защиты от чтения МК ломаются, то сим-ку точно так же взломают и скопируют (и копировали в реале).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...