Jump to content

    
Sign in to follow this  
Salamander

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

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

 

 

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

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

Edited by Salamander

Share this post


Link to post
Share on other sites
8 минут назад, Salamander сказал:

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

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

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

Edited by mantech

Share this post


Link to post
Share on other sites
8 minutes ago, Salamander said:

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

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

 

2 minutes ago, mantech said:

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

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

Share this post


Link to post
Share on other sites
2 минуты назад, aaarrr сказал:

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

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

Share this post


Link to post
Share on other sites
2 минуты назад, aaarrr сказал:

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

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

Share this post


Link to post
Share on other sites
4 минуты назад, MegaVolt сказал:

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

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

Share this post


Link to post
Share on other sites
28 минут назад, mantech сказал:

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
45 minutes ago, aaarrr said:

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

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

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

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

2 minutes ago, aaarrr said:

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

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

Share this post


Link to post
Share on other sites
2 часа назад, Salamander сказал:

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

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

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

Edited by mantech

Share this post


Link to post
Share on other sites
2 часа назад, mantech сказал:

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

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

+1.

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this