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

Защита прошивки от считывания

Коллеги, встал такой вопрос.

Сразу скажу, мантру "если кому-то очень нужна прошивка, то ее считают", я знаю. Так вот я хочу лишь по максимуму усложнить задачу взломщику, а там как получится.

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

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

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

Однако, вот вам пример как эту защиту обошли наши хакеры https://3dtoday.ru/blogs/jmz/mks-robin-part-two-the-taming-of-the-shrew-firmware/  

В чем собственно, моя идея, как я хочу усложнить жизнь нарушителям авторских прав. У меня контроллер stm сопряжен с внешней флешью. Без нее он просто не работает (скорее всего вываливается в HardFault).

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

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

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

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

Это усложнит жизнь взломщику, или опять таки, это дополнительный замок на гнилые двери?

 

 

В идеале хочется, чтобы конкретный контроллер работал только с конкретной флешкой.

У кого какой опыт?

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

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


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

8 минут назад, Salamander сказал:

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

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

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

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

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


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

8 minutes ago, Salamander said:

пример как эту защиту обошли наши хакеры

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

 

2 minutes ago, mantech said:

Любая нестандартная защита усложняет жизнь взломщику

И производителю: раньше пользователь просто качал шифрованный аптейт, теперь они уникальны.

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


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

2 минуты назад, aaarrr сказал:

И производителю:

Тут скорей пользователю. Если защита криво реализована, либо что-то где-то "слетает" и пользователь начинает чесать репу, почему и от чего...:biggrin:

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


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

2 минуты назад, aaarrr сказал:

И производителю: раньше пользователь просто качал шифрованный аптейт, теперь они уникальны.

Зачем? Открытый и закрытый ключ. Если бутлоадер считается неизвлекаемым то он и хранит ключ для дешифровки.

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


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

4 минуты назад, MegaVolt сказал:

Если бутлоадер считается неизвлекаемым то он и хранит ключ для дешифровки.

Зачем тогда открытый ключ? Если есть один, он в бутлоадере, при загрузке прошивки, он ее расшировывает и кладет в память. Все эти открытые\закрытые ключи актуальны только при сертификатах, подписях и пр. Но это должно быть реализовано аппаратно в контроллере, а если там этого нет, то толку от этого ноль, только лишний гемор, проще делать код, с закладками, какие писал выше. Да и как правило все эти секьюребуты требуют NDA от производителей МК.

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


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

28 минут назад, mantech сказал:

Зачем тогда открытый ключ?

Можно и с одним ключом. Хорошо бы ещё иметь механизм смены ключа дабы заменять скомпрометированный ключ. 

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


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

Может я чего не понимаю... причем здесь ключи?

Вот есть рабочее устройство, способное принять в себя зашифрованную прошивку. Устройство скопировали. Исходный контроллер растворили, добрались до битов защиты, короче, скачали бутлодер, в котором хранится ключ, и записали в новый контроллер. Как сделать, чтоб бутлодер не работал с новым контроллером и с новой флешкой? Я предлагаю сделать проверку серийников флеши и, контроллера. Тогда мало будет извлечь бутлодер, нужно его еще и взломать, чтобы он серийники не проверял.

В этом решении где слабые места?

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


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

1 minute ago, Salamander said:

В этом решении где слабые места?

1. Отломать проверку очень просто.

2. Необходимость формирования уникальных апдейтов.

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


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

45 minutes ago, aaarrr said:

производителю: раньше пользователь просто качал шифрованный аптейт, теперь они уникальны.

Уникален не апдейт. Уникален бутлодер. Апдейт просто так не установишь в контрлллер, он зашифрован, а потому его можно выкладывать в сети. Расшифровывает прошивку бутлодер, его и нужно защитить. 

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

И если контроллер вздумает совершить прелюбодеяние с другой флешкой, то...

2 minutes ago, aaarrr said:

Отломать проверку очень просто.

То есть имеем дамп бутлодера, дизассемблируем и отламываем? В принципе, это просто, если догадаться, что она есть. Одно дело, когда у нас на экране компа выдается требование ввести пароль и мы знаем, что отлаживать и что перехватывать. Другое дело тут. Но это вопрос времени наверное.

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


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

Ну а если крайний вариант - серийник является ключом к шифру. И апдейт уникален. Тогда что?

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


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

При взломанном загрузчике ровным счетом ничего не меняет: серийник подменяется и т.д.

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


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

2 часа назад, Salamander сказал:

Ну а если крайний вариант -

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

ЗЫ. Насколько я понял по своему опыту - 80% ПО не обладает повышенной сложностью и уникальностью, его можно повторить, если найти более-менее опытного кодера и дать ему подробное ТЗ. А защита в данном случае нужна довольно примитивная, от обывателя-пользователя, чтоб тот просто не смог поставить прогу на чистый МК, если там потребуется перелопачивать бинарник - никто этого делать не будет....

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

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


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

2 часа назад, mantech сказал:

...то и не парьтесь по этому поводу, просто никто ломать и не будет, а срисуют схему и наймут индуса, который напишет аналог вашей проги и все...

...по своему опыту - 80% ПО не обладает повышенной сложностью и уникальностью, его можно повторить, если найти более-менее опытного кодера и дать ему подробное ТЗ. А защита в данном случае нужна довольно примитивная, от обывателя-пользователя, чтоб тот просто не смог поставить прогу на чистый МК, если там потребуется перелопачивать бинарник - никто этого делать не будет...

+1.

Недавно нужно было сделать тестовое ПО для железки, которую изготавливает сторонний завод. Железка не сложная.

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

При этом в бинарнике не хранится в явном виде число минут/секунд/миллисекунд и производных от этого таймаута.

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

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


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

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

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

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

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

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

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

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

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

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