Jump to content

    

boorloder+Tftp защита от "чужой" прошивки

Добрый день, сделал bootloader с загрузкой через tftp, работает хорошо.

В кратце boot работает так, если перепрошивка разрешена, то при приеме любого пакета(Write Request (WRQ)) по tftp, происходит перезагрузка в  Bootloader через програмный  Reset, а дальше по таймауту  клиент отправлет этот же запрос ешё раз и тут его уже принимает bootloader и запускаеться процесс перепрошивки.

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

Что бы не плодить кучу версий bootloader сделал его один на все верии ПО. И вот тут возникают возможные грабли, при обновлении через Tftp может зашить  ПО от другой прошивки ("чужой"). Вот  подумал что при обновлении надо как-то отследить что за ПО и запретить обновлении если оно "чужое".  Самым простой способ это под каждую ПО сделать свой bootloader, и в нем проверять уникальный номер, но все же не хочется, плодить кучу версий.  Второй вариант,  проверять что за прошивка прилетела, и если это  ''чужая" прошивка то не переходить в bootloder, но тут возникает проблема, что бы при принять первый пакет с данным tftp, надо клиенту отправить ACK на запрос Write Request (WRQ) и если это сделать то в bootloader, уже не поймает запрос Write Request (WRQ), и не сможет начать процес перепрошивки.

Есть ли еще какие нибудь идеи как это можно реализовать ?

   

 

 

Edited by pokk

Share this post


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

Есть ли еще какие нибудь идеи как это можно реализовать ?

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

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

Edited by mantech

Share this post


Link to post
Share on other sites

Заголовок  есть, в  отправляемом hex файле, но  проблема в том что первый пакет по tftp идет запрос с именем файла, и там нет данных из файла ни заголовка ничего. И после ответа на этот запрос уже прийдет пакет с данными, так вот если его пронять в прошивке, а потом перезагрузиться в  bootloader, то как процесс передачи инициализировать заного от клиента?

Edited by pokk

Share this post


Link to post
Share on other sites
38 minutes ago, pokk said:

но  проблема в том что первый пакет по tftp идет запрос с именем файла, и там нет данных из файла ни заголовка ничего.

ну так закодируйте тип прошивки в имени файла.

Share this post


Link to post
Share on other sites
1 hour ago, xvr said:

ну так закодируйте тип прошивки в имени файла. 

Ну это как-то не сильно надежно, но на первый раз сгодиться благодарю!

Share this post


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

Заголовок  есть, в  отправляемом hex файле, но  проблема в том что первый пакет по tftp идет запрос с именем файла, и там нет данных из файла ни заголовка ничего. И после ответа на этот запрос уже прийдет пакет с данными, так вот если его пронять в прошивке, а потом перезагрузиться в  bootloader, то как процесс передачи инициализировать заного от клиента?

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

Share this post


Link to post
Share on other sites
7 hours ago, pokk said:

Добрый день, сделал bootloader с загрузкой через tftp, работает хорошо.

Нынче удобнее делать bootloader через MQTT брокера. Дополнительно получите плюсом преодоление всех NAT-ов.  

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now