Автоматическое обновление: безопасно ли это?

Автоматическое обновление Dot Net

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

Вот шаги:

  • Клиентское программное обеспечение заполняется открытым ключом и URI для опроса.
  • Клиент проверяет URI для файла манифеста.
  • Манифест загружается, и подпись (в отдельной ".ignign" ) используется для проверки того, что манифест действителен.
  • Список ожидающих обновлений анализируется из манифеста (для показа пользователю).
  • Файл установщика загружается и снова проверяется с соответствующим файлом .signature. (загруженный файл будет защищен ACL)
  • Выполняется установка.

Смягченные угрозы:

  • Подпись манифеста должна предотвращать любые вредоносные загрузки ( " ковровая бомба" )
  • Подпись установщика должна предотвратить любые атаки MITM от отправки вредоносных инсталляторов.
  • Защита загруженного установщика с помощью списков ACL должна предотвращать любые локальные атаки на эскалацию.

Уничтоженные угрозы:

  • A MITM атаковать, где злоумышленник всегда сообщает "нет доступных обновлений". (Может содержать клиента в уязвимой версии)

Ссылки:


Что я пропустил?


Ответы

Ответ 1

У Дэна Камински есть хороший набор рекомендаций для обновления:

Чтобы преуспеть, пакет обновления должен быть:

  • Подпись.
  • Подписано вами.
  • Подписанный вами, используя правильный EKU (Использование расширенного ключа)
  • Подпись с помощью невозвращенной подписи
  • Будьте тем же продуктом
  • Будь новой версией

Из вашего описания в этом вопросе, кажется, что у вас есть первые 3.

Ответ 2

Создав собственный развертыватель в корпоративной среде, вот несколько примеров использования, которые мне нужно было адресовать:

  • поддержка цифровой подписи

  • поддержка всех типов прокси. Некоторые крупные корпуса имеют сложные конфигурации прокси (например, с использованием сценариев конфигурации прокси). Вы должны поддержать все эти.

  • поддержка шифрования. Вероятно, ваши клиенты захотят использовать развернутые файлы на веб-сервере и не хотят управлять какой-либо проверкой подлинности или контролем доступа; но они не хотят, чтобы неавторизованные пользователи загружали двоичные файлы. Простым решением является шифрование двоичных файлов и их развертывание.

  • поддержка дополнительных дополнительных шагов. Обычно корпоративным клиентам не очень удобно пользоваться автоматически развернутыми инструментами. Они хотят большего контроля. Как правило, позволяя им выполнять настраиваемые этапы (например, антивирусные проверки и т.д.), Поможет

  • поддержка различных версий программного обеспечения на основе потребительской идентичности. Это часто необходимо в корпоративных средах, когда вы хотите быстро обновить копии конкретного потребителя (исправить ошибку или добавить дополнительную функцию), не запуская весь ваш процесс Q & A (в этой ситуации вы хотите ограничить обновление этого конкретного потребителя)

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

  • ваш инструмент должен быть подписан сильным центром сертификации.

Что касается упомянутой вами атаки MITM, ее легко решить с помощью публичной криптографии (как отмечено неизвестно)

Ответ 3

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

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

Ответ 4

Не значит быть троллем здесь, но вы пытаетесь решить уже решенную проблему. Использование SSL было бы намного лучшим выбором. Это решит все проблемы, перечисленные в вашем вопросе.

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

Не забывайте: "Сложность - это враг безопасности".

Ответ 5

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

Добавлено:

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

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

Ответ 6

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

Ответ 7

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

ПРИМЕЧАНИЕ. Если клиент может принять несанкционированный сертификат, атака MiTM может быть успешной, поэтому не предоставляйте эту возможность клиенту.

Изменить: я думаю, что SSL-сертификат может быть сам подписан в этом случае.