@Ajex

Как защитить апдейтер программы от компроментации сервера?

Есть типичная задача, софт получает обновления с сервера обновлений. Сейчас все сделано просто - обновления загружаются по HTTP протоколу, запакованные ZIP-ом. Некоторые апдейты содержат исполняемые EXE/DLL файлы. Сейчас задумались, что в случае компроментации сервера обновлений , можно наделать бед всем нашим клиентам.
Каким образом правильно организовать работу апдейтера , чтобы он мог отличить свои апдейты от чужих?
Насколько я понимаю, здесь нужно или зашифровать файлы апдейта так, чтобы апдейтер мог их расшифровать неким ключом , при помощи которого нельзя обратно зашифровать другие данные, вытащив этот ключ из программы. Или использовать какую-то цифровую подпись, встраиваемую в файлы на сервере и проверяемые апдейтером.

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

Второй вариант можно првоернуть с использованием gpg , но нам бы хотелось обойтись без сторонних утилит.

Подскажите, как правильнее организовать весь процесс? Решение должно быть встраиваемым , без использования сторонних утилит. Заранее спасибо за помощь.
  • Вопрос задан
  • 2748 просмотров
Пригласить эксперта
Ответы на вопрос 4
gbg
@gbg Куратор тега Компьютерные сети
Любые ответы на любые вопросы
Восстановление одного из ключей пары по другому - задача, требующая для серьезных ключей (4096 бит и далее) колоссальных временных затрат.

На самом деле, вам нужно завести хороший публичный сертификат SSL и использовать SSL для передачи обновлений. Весь необходимый функционал реализован в SSL:
-Подтверждение того, что приложение соединилось с легитимным сайтом
-Защита от MiTM путем подмены сайта.
-Защита передаваемой информации.

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

В криптографии следует использовать сторонние утилиты, так как реализовать качественную защиту крайне сложно.
Ответ написан
@Ajex Автор вопроса
Вот нашел вроде бы такое решение:
Создаем подпись приватным ключом (на свой стороне) , заливаем signature MyFile.sign и MyFile.Dat
openssl dgst -sha256 -sign private_key.pem -out MyFile.sign MyFile.dat

Так (ну алгоритмически) првоеряет апдетйер
openssl dgst -sha256 -verify public_key.pem -signature MyFile.sign MyFile.dat

Приватный ключ хранится у нас, публичный зашивается в апдейтер. Таким образом злоумышленник даже проникнув на сервер обновлений не сможет подписать файлы, т.к. апдейтер не пропустит их.
Тут сходу решаются и остальные проблемы с подменой сервера , mitm и прочим.
Ответ написан
Комментировать
ifaustrue
@ifaustrue
Пишу интересное в теллеграмм канале @cooladmin
Вы защищаете передаваемые данные или сам сервер?
Если первое - переходите на SSL соединение и всё. На сервере https, на клиенте проверка серта средствами OS.

Если нужна защита сервера - то шифрование диска, вход по смарт -карте и тд.
Ответ написан
Matvey-Kuk
@Matvey-Kuk
Разработчик в Cisco, CA.
Просто подписывайте каждое обновление.

Публичный ключ лежит внутри программы, приватный только у главного программиста.

Хоть поломают разломают Ваши сервера, обновлялка когда увидит что обновление неправильно подписано, сразу отклонит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы