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

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

Сейчас ещё одна мысль в голову пришла.

 

Можно пойти дальше подсчёта хэша: сделать в прошивке команду "выполнить подпрограмму". По этой команде контроллер должен загрузить принятый код в ОЗУ и передать на него управление. Это позволит считывать разные полезные данные о прошивке и микроконтроллере. В частности, ID процессора, его тип, размер памяти и прочие данные, полезные для идентификации процессора.

Коды подпрограмм можно подгружать с сервера. Ответы отправлять туда же. Здесь уже не поможет образ прошивки.

 

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

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


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

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

Сразу два метода:

1. Заполнить перед тестом внутренне ОЗУ случайными данными (известными серверу) также, как это сделано для пустующего места в памяти программ. И после это "попросить" МК посчитать хэш в том числе и содержимого ОЗУ в этих адресах. Тогда не будет возможности "кэшировать" данные с внешнего носителя.

2. Можно ещё больше затруднить работу поддельной прошивке тем, что в ОЗУ загрузить кусок случайных данных + саму программку тестирования, и тем самым лишить возможности разместить в ОЗУ аналогичную программу от хакеров. Тогда взломанная прошивка будет выполняться только из внутренней флеш, и проиграет ещё больше времени оригинальной программе (т.к. она работает из ОЗУ).

 

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

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


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

Из внутренней памяти, за это-же время можно извлечь 30Мб.

Если при тестировании заставить подсчитать хэш 1Гб, то оригинальная прошивка выполнит эту работу за 34 секунды, а поддельная за 1066 секунд, или за 17 минут.

Вы о каких ГБ говорите??? У Вас на дворе какой год? :rolleyes: У меня вот например 2017. И в нём ещё нету МК со встроенной флешь больше 2МБ.

И даже если предположить, что наш пациент - именно такой МК и в нём используется вся флешь, то на кой злоумышленникам всю оригинальную прошивку читать из внешней? Ведь разговор же идёт о том, что злоумышленники стырили оригинальную прошивку (старой версии) и хотят обновить её до новой, обманув наш бдительный сервер, работающий по Вашему методу. А значит им нужно подкорректировать оригинальную прошивку, подкорректировать, Карл(!) а не переписать полностью. А для этого достаточно изменить только несколько участков оригинальной. Только чтобы вытянуть новую прошивку. А для этого достаточно на месте ненужных функций оригинальной прошивки расположить патч, в котором описать весь функционал работы с флешь, новые функции подсчёта хеша (берущие байты изменённых участков под патчем(ами) из внешней флешь (или даже ОЗУ)), а всю остальную массу байтов - из внутренней флешь.

Даже я в своё время писал такие патчи :biggrin: - сложного нет ничего.

 

Но и кроме этого. ОЗУ у STM32 меньше чем память программ, и в ней можно разместить только часть образа прошивки.

А зачем нам вся прошивка в ОЗУ? Достаточно куска, занятого патчами (неск. сотен байт максимум). Этот кусок можно сразу прочитать из внешней флешь в ОЗУ при соединении с сервером. И дело в шляпе :laughing:

 

Сразу два метода:

1. Заполнить перед тестом внутренне ОЗУ случайными данными (известными серверу) также, как это сделано для пустующего места в памяти программ.

Это как это, позвольте?? :wacko:

Во-первых: если заполнить всё ОЗУ, то где извините сама программа работать будет? для TCP-стека знаете ли - прилично ОЗУ надо. В нём одних только буферов всяких дофига. А всего лишь убрав один из буферов для Ethernet-кадра (минимум 576 байт), можно освободить места достаточно для грязных целей, при этом никак не нарушив функционирование TCP-стека.

Во-вторых: если случайные данные "известны серверу", то это уже либо не случайные данные (а псевдослучайные, которые легко генерятся "на лету"), либо они лежат во флешь (откуда их легко читаются :biggrin:

 

Для определённости возьму следующее: МК STM32F429 (стандартный SPI-порт), SCLK=45МГц, макс.частота доступа CPU к внутренней памяти программ 30МГц. Сама программа выполняется в ОЗУ для макс.быстродействия, а из внутр.флеш берутся только данные для теста (в оригинальной прошивке). В качестве внешней SPI-флеш - микросхема IS25WP016. Макс.частота 133 мГц.

Есть SPI-флешки, позволяющие во-первых - перейти в режим ускоренного чтения - передаётся только адрес, без команды и dummy-байтов.

Есть SPI-флешки, работающие в режиме quad-SPI и в режиме DDR.

Для quad-SPI DDR надо выставить '1' на SCLK, считать тетраду, выставить '0' на SCLK считать вторую тетраду (и получить байт). Ну или что-то типа того.

Теперь посчитайте сколько надо тактов чтобы ногодрыгом прочитать несколько байт по quad-SPI DDR, особенно если писать на асме?

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


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

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

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

вопрос ведь не в защите ради защиты, а в том, как это сделать просто и надёжно

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

 

 

Сейчас ещё одна мысль в голову пришла.

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

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

 

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


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

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

 

Вот у меня к ТСу вопрос, уже столько тут всего понаписано, что утекли прошивки и т.п. Что сделать, чтоб никто ничего не скопировал... У вас что там такое изобретено, искусственный интеллект или какой-то инопланетный алгоритм расчетов, чтоб конкуренты просто не смогли сделалать подобное свое устройство, просто без ваших прошивок и программ. Сейчас это не так сложно, можно даже свою ось сделать за несколько месяцев. По-моему, пока мы тут обсуждаем, как защитить эти мегапрограммы, конкуренты уже скоро сделают аналог :biggrin:

ЗЫ. Вообще, самое лучшее - оригинальные защиты, в этом случае, алгоритм защиты может быть и простым, но кто об этом догадается? всякие стандартные ключи и шифры - это первое, о чем подумает взломщик, а простейшее прибавление какого-либо числа к соотв. блоку кода - вот тут, как раз может быть для него засада.

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

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

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


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

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

Вам нужно читать внимательнее. Всё это уже есть. Прошивка утекла вместе с одним нехорошим человеком.

 

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

Ну и ну, ось за несколько месяцев. Можете привести пример? (Болгенос - не принимается :)).

 

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

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


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

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

 

Тут имхо защита должна быть из расчета что проще, сломать защиту, или продолжить уже свои наработки по прошивке. И может быть вполне возможным, что уже вам придется ломать прошивку конкурентов на предмет, что они там нового сделали, что стало лучше чем в оригинале.

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


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

Вы о каких ГБ говорите??? У Вас на дворе какой год? :rolleyes: У меня вот например 2017. И в нём ещё нету МК со встроенной флешь больше 2МБ.

Для этого подойдёт флеш любого размера. Просто "по кругу" считается хэш памяти до тех пор, пока не наберётся 1 Гб.

 

...на кой злоумышленникам всю оригинальную прошивку читать из внешней? Ведь разговор же идёт о том, что злоумышленники стырили оригинальную прошивку (старой версии) и хотят обновить её до новой, обманув наш бдительный сервер, работающий по Вашему методу. А значит им нужно подкорректировать оригинальную прошивку, подкорректировать, Карл(!) а не переписать полностью. А для этого достаточно изменить только несколько участков оригинальной. Только чтобы вытянуть новую прошивку. А для этого достаточно на месте ненужных функций оригинальной прошивки расположить патч, в котором описать весь функционал работы с флешь, новые функции подсчёта хеша (берущие байты изменённых участков под патчем(ами) из внешней флешь (или даже ОЗУ)), а всю остальную массу байтов - из внутренней флешь.

Полностью с этим согласен. Поэтому тестов несколько:

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

2. Тест выборочными блоками - в нём как раз можно обнаружить разницу во времени доступа к отдельным областям памяти. Наличие таких областей будет означать подделку (т.к. в оригинальной прошивке вся память читается с одной скоростью).

И ещё есть варианты.

Во-первых: если заполнить всё ОЗУ, то где извините сама программа работать будет?

................

Во-вторых: если случайные данные "известны серверу", то это уже либо не случайные данные (а псевдослучайные, которые легко генерятся "на лету"), либо они лежат во флешь (откуда их легко читаются :biggrin:

На время теста у устройства будет объявлен "перекур": выключены прерывания, ОЗУ заполнено с ПК псевдослучайными данными, известными серверу (кусок MP3 или JPEG файла к примеру). Сгенерировать такие данные не получится. Записывать их во флеш, чтобы занять это место другим данными из флеш - не имеет смысла, т.к. они равноценны для теста.

А после теста сброс контроллера, переинициализация ОЗУ, и возврат к работе.

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


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

Вам нужно читать внимательнее. Всё это уже есть. Прошивка утекла вместе с одним нехорошим человеком.

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

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

 

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

 

Тем более, как я понял, старые версии серверного ПО и клоны устройств-клиентов у конкурентов есть и никто им не сможет помешать применять их и дальше.

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

 

И это если утекла только прошивка. Если утекут исходные тексты - то уже ничего не поможет, только демпинг цен.

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


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

На время теста у устройства будет объявлен "перекур": выключены прерывания, ОЗУ заполнено с ПК псевдослучайными данными, известными серверу (кусок MP3 или JPEG файла к примеру).

Ну если у устройства будет перекур, то задача тем более упрощается:

Так как устройство не выполняет более никаких функций, то функция обмена по этому протоколу элементарно реализуется на другом МК с бОльшим объёмом памяти (SDRAM например). Или вообще на компе.

Или под симулятором. Да ещё 1000+1 способов. И спокойно вытягивается прошивка. :laughing:

Проходим все проверки и спокойно получаем прошивку.

Все Ваши методы нереальны, потому что не удовлетворяют ключевому правило для таких вещей:

"Сложность взлома защиты должна быть во много раз выше сложности её реализации". А у Вас настолько сложной реализация защиты окажется, что взлом её будет гораздо проще. И при этом крайне ненадёжной.

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


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

ПЛИС достаточно надёжно защищаются, может их использовать? Хотя бы ту же маленькую CPLDшку.

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


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

Ну и ну, ось за несколько месяцев.

 

Не рекламы ради, делал ось для ПЛК собственной разработки на МХ6 процессоре. Поддерживаются все основные функции: ДОС, ГУИ, запуск программ, виртуальная машина с несколькими задачами и поддержкой потоков, сетевой стек, различные интерфейсы и т.п. Полтора года используется для внутреннего применения, планируется беспл. демо и платный релиз. Основные работы были сделаны за 8 мес. Плюс время на доки, но в сл. ТСа, у него они есть в открытом доступе, как я понял.

 

По поводу защиты - она есть, метод - подпись загрузчика, несколько ловушек, которые приводят к глюкам через непредсказуемые интервалы времени. Кажется, что взломано и работает, но не тут-то было :biggrin:

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

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


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

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

А если взломать и сразу обновить через официальный канал на оригинальную? :biggrin:

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


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

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

Да я собственно, к этому и сколняюсь.

 

Тем более, как я понял, старые версии серверного ПО и клоны устройств-клиентов у конкурентов есть и никто им не сможет помешать применять их и дальше.

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

Обновим протокол, перешьём устройства.

 

И это если утекла только прошивка. Если утекут исходные тексты - то уже ничего не поможет, только демпинг цен.

Да нет, даже в этом случае смена протокола отсечёт клоны. Но вроде бы исходники не утекли.

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


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

Вам нужно читать внимательнее. Всё это уже есть. Прошивка утекла вместе с одним нехорошим человеком.

и зачем тогда задавать технические вопросы, если проблема лежит в административной плоскости ?

 

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

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


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

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

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

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

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

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

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

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

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

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