Salamander 2 20 февраля, 2020 Опубликовано 20 февраля, 2020 (изменено) · Жалоба Коллеги, встал такой вопрос. Сразу скажу, мантру "если кому-то очень нужна прошивка, то ее считают", я знаю. Так вот я хочу лишь по максимуму усложнить задачу взломщику, а там как получится. Хочу поделиться своими мыслями и услышать от опытных людей мнение, эффективны ли будут эти меры или толку от них как от навешивания дополнительных замков на гнилые двери. Скажу сразу, что саму прошивку, как таковую, защищать не надо. Д ло в том, что эксплуатация устройства подразумевает обновление прошивки пользователем, скачивание ее из интернета и самостоятельная заливка через бутлодер. А посему первый рубеж обороны - это шифрация файла прошивки и расшифровка ее бутлодером на этапе заливки в контроллер. То есть, по сути, защищать мне придется бутлодер, ибо, если его скачать, то можно будет спокойно заливать зашифрованную прошивку в левые устройства. Однако, вот вам пример как эту защиту обошли наши хакеры https://3dtoday.ru/blogs/jmz/mks-robin-part-two-the-taming-of-the-shrew-firmware/ В чем собственно, моя идея, как я хочу усложнить жизнь нарушителям авторских прав. У меня контроллер stm сопряжен с внешней флешью. Без нее он просто не работает (скорее всего вываливается в HardFault). Есть мысль приучить программу, заливаемую в контроллер, к конкретной флешке, у нее же есть серийный номер. Тогда помимо скачивания прошивки (бутлодера), в случае успеха данного действа, ее нужно будет еще и ломать - вычислять, куда пишется серийный номер флешки, подменять его на нужный. Скажите, это уменьшит вероятность копирования устройства? Или же это второй титановый замок на гнилые двери? Можно пойти дальше - адрес, по которому записан необходимый для сверки серийный номер флешки, случайный. И информация о нем хранится не в контроллере, а во флешке. То есть, программа при загрузке обращается к флешке, узнает у нее адрес, по которому можно прочесть серийник допустимой к использованию флешки и сравнить его с номером, записанным во флеши. Это усложнит жизнь взломщику, или опять таки, это дополнительный замок на гнилые двери? В идеале хочется, чтобы конкретный контроллер работал только с конкретной флешкой. У кого какой опыт? Изменено 20 февраля, 2020 пользователем Salamander Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 37 20 февраля, 2020 Опубликовано 20 февраля, 2020 (изменено) · Жалоба 8 минут назад, Salamander сказал: Есть мысль приучить программу, заливаемую в контроллер, к конкретной флешке, у нее же есть серийный номер. Тогда помимо скачивания прошивки (бутлодера), в случае успеха данного действа, ее нужно будет еще и ломать - вычислять, куда пишется серийный номер флешки, подменять его на нужный. Любая нестандартная защита усложняет жизнь взломщику, а если это сделано с еще большими изощрениями, например серийный номер используется в алгоритмах переходов на функции, которые позволяют правильно работать программе, и при неправильном серийнике обращения уходят в "никуда" и прога виснет, но мне больше нравится несколько другой метод, проверка правильности серийников и прошивок через случайные интервалы времени в разных частях кода, и при неправильном коде программа продолжает работать, но глючит случайным образом, такая защита не столько сложна сколько бесит реверсера, т.к. прога не сразу впадает в ступор, а нужно ждать время, проверять, снова вычислять проверки и пр... Ну и главное в этом, чтоб эти проверки не обращались напрямую по адресу серийника - это отследить проще простого, а к областям памяти, где этот серийник переходит из одного адреса в другой по нетривиальным алгоритмам... Вообщем тут целое непаханное поле возможностей, пробуйте... Изменено 20 февраля, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба 8 minutes ago, Salamander said: пример как эту защиту обошли наши хакеры Можно считать, что там и не было защиты, т.к. у прошивки отсутствовала цифровая подпись. 2 minutes ago, mantech said: Любая нестандартная защита усложняет жизнь взломщику И производителю: раньше пользователь просто качал шифрованный аптейт, теперь они уникальны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 37 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба 2 минуты назад, aaarrr сказал: И производителю: Тут скорей пользователю. Если защита криво реализована, либо что-то где-то "слетает" и пользователь начинает чесать репу, почему и от чего... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 26 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба 2 минуты назад, aaarrr сказал: И производителю: раньше пользователь просто качал шифрованный аптейт, теперь они уникальны. Зачем? Открытый и закрытый ключ. Если бутлоадер считается неизвлекаемым то он и хранит ключ для дешифровки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 37 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба 4 минуты назад, MegaVolt сказал: Если бутлоадер считается неизвлекаемым то он и хранит ключ для дешифровки. Зачем тогда открытый ключ? Если есть один, он в бутлоадере, при загрузке прошивки, он ее расшировывает и кладет в память. Все эти открытые\закрытые ключи актуальны только при сертификатах, подписях и пр. Но это должно быть реализовано аппаратно в контроллере, а если там этого нет, то толку от этого ноль, только лишний гемор, проще делать код, с закладками, какие писал выше. Да и как правило все эти секьюребуты требуют NDA от производителей МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 26 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба 28 минут назад, mantech сказал: Зачем тогда открытый ключ? Можно и с одним ключом. Хорошо бы ещё иметь механизм смены ключа дабы заменять скомпрометированный ключ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба Может я чего не понимаю... причем здесь ключи? Вот есть рабочее устройство, способное принять в себя зашифрованную прошивку. Устройство скопировали. Исходный контроллер растворили, добрались до битов защиты, короче, скачали бутлодер, в котором хранится ключ, и записали в новый контроллер. Как сделать, чтоб бутлодер не работал с новым контроллером и с новой флешкой? Я предлагаю сделать проверку серийников флеши и, контроллера. Тогда мало будет извлечь бутлодер, нужно его еще и взломать, чтобы он серийники не проверял. В этом решении где слабые места? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба 1 minute ago, Salamander said: В этом решении где слабые места? 1. Отломать проверку очень просто. 2. Необходимость формирования уникальных апдейтов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба 45 minutes ago, aaarrr said: производителю: раньше пользователь просто качал шифрованный аптейт, теперь они уникальны. Уникален не апдейт. Уникален бутлодер. Апдейт просто так не установишь в контрлллер, он зашифрован, а потому его можно выкладывать в сети. Расшифровывает прошивку бутлодер, его и нужно защитить. То есть мы делаем уникальным бутлодер, причем делаем это на этапе изготовления, один раз. Спаяли плату, бутлодер считал серийники флешки и контроллера, и поженил их. То есть записал по некоему адресу контрольную сумму из этих серийников. И если контроллер вздумает совершить прелюбодеяние с другой флешкой, то... 2 minutes ago, aaarrr said: Отломать проверку очень просто. То есть имеем дамп бутлодера, дизассемблируем и отламываем? В принципе, это просто, если догадаться, что она есть. Одно дело, когда у нас на экране компа выдается требование ввести пароль и мы знаем, что отлаживать и что перехватывать. Другое дело тут. Но это вопрос времени наверное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба Ерунда все это, если загрузчик извлечен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба Ну а если крайний вариант - серийник является ключом к шифру. И апдейт уникален. Тогда что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба При взломанном загрузчике ровным счетом ничего не меняет: серийник подменяется и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 37 20 февраля, 2020 Опубликовано 20 февраля, 2020 (изменено) · Жалоба 2 часа назад, Salamander сказал: Ну а если крайний вариант - Правило тут одно - все защиты ломаются, вопрос времени и особенно - цены. Вот и счтайте, если стоимость разработки ПО, больше цены взлома, значит выбирайте криптозащищенный МК, подписывайте NDA и радуйтесь, что защита станет гораздо эффективнее, если меньше - то и не парьтесь по этому поводу, просто никто ломать и не будет, а срисуют схему и наймут индуса, который напишет аналог вашей проги и все... В последнем случае более подходит система патентования, если ваша разработка обладает какой-то уникальностью, ну и в случае копирования - суды и компенсация упущенной выгоды... ЗЫ. Насколько я понял по своему опыту - 80% ПО не обладает повышенной сложностью и уникальностью, его можно повторить, если найти более-менее опытного кодера и дать ему подробное ТЗ. А защита в данном случае нужна довольно примитивная, от обывателя-пользователя, чтоб тот просто не смог поставить прогу на чистый МК, если там потребуется перелопачивать бинарник - никто этого делать не будет.... Изменено 20 февраля, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 132 20 февраля, 2020 Опубликовано 20 февраля, 2020 · Жалоба 2 часа назад, mantech сказал: ...то и не парьтесь по этому поводу, просто никто ломать и не будет, а срисуют схему и наймут индуса, который напишет аналог вашей проги и все... ...по своему опыту - 80% ПО не обладает повышенной сложностью и уникальностью, его можно повторить, если найти более-менее опытного кодера и дать ему подробное ТЗ. А защита в данном случае нужна довольно примитивная, от обывателя-пользователя, чтоб тот просто не смог поставить прогу на чистый МК, если там потребуется перелопачивать бинарник - никто этого делать не будет... +1. Недавно нужно было сделать тестовое ПО для железки, которую изготавливает сторонний завод. Железка не сложная. В итоге, чтобы не плодить кучу ПО и не усложнять себе жизнь, девайс работает в 99% функционале боевого исполнения, но, допустим, полчаса, и потом вырубается. При этом в бинарнике не хранится в явном виде число минут/секунд/миллисекунд и производных от этого таймаута. Т.е. абстрактный дядя Вася, который заметил, что девайс начинает глючить раз в полчаса, даже имея бинарь на руках, тупым поиском в hex-редакторе не найдет, где эти самые полчаса продлить до бесконечности... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться