Безопасность

trdl спроектирован так, чтобы минимизировать ущерб от потенциальных атак на систему обновления. Три основных компонента, которые за это отвечают, — менеджер секретов Vault, репозиторий на основе The Update Framework и Git.

Компоненты trdl и их функции
  • Vault
    • Безопасное управление ключами шифрования.
    • Платформа для безопасного запуска trdl-сервера, которая обеспечивает конфиденциальность, целостность и доступность данных, отчетность и аутентификацию.
  • TUF-репозиторий
    • Защита от несанкционированного доступа к контенту: бинарным файлам, пакетам и другому софту.
    • Актуальность, согласованность и целостность данных.
    • Защита от компрометации и потери ключей; снижение ущерба в случае их компрометации и потери.
    • Восстановление ключей.
  • Git-репозиторий
    • Хранение кода, конфигурации сборки и каналов обновлений.
    • Хранение GPG-подписей коммитов для верификации операций.
  • Docker
    • Воспроизводимость сборки.
Итого

trdl обеспечивает безопасный канал доставки обновлений от Git-репозитория до хоста пользователя и верификацию неизменности содержимого обновлений.

  • Система защищает от подмены и компрометации Git-репозитория. Контроль основывается на Git-коммитах, что обеспечивает гарантию целостности всей истории изменений, включая все метаданные и содержимое хранилища, вплоть до начального коммита.

  • Все операции подтверждаются кворумом GPG-подписей у коммита. Подписи хранятся в Git-репозитории, публичные части допустимых GPG-ключей и минимальный набор подписей — в Vault.

  • Система защищает от отката каналов обновлений на предыдущие версии с уязвимостями. При обновлении система проверяет родство коммита последней успешной публикации с текущим. Поэтому git push --force на предыдущий подписанный коммит ни к чему не приведёт.

  • Система управляет ключами шифрования, автоматически создаёт и хранит их в Vault. Ни у кого нет доступа к ключам шифрования, никто не работает с ними.

От чего trdl не защищает
  • От угроз, связанных с физическим доступом к хосту, на котором установлен trdl-клиент.

  • От ошибок, связанных с человеческим фактором, в частности — некорректной настройки кворума GPG-подписей, сборочных инструкций, самого Vault.

Наши рекомендации
  • Отказаться от использования root-токена Vault в пользу внешнего провайдера аутентификации.
  • Организовать доступ к Vault через nginx, который обеспечивает HTTPS-соединение и предоставляет доступ только к определенным endpoint’ам Vault.
  • Запускать Docker на том же хосте, что и Vault, без доступа к нему извне.
  • Не устанавливать на виртуальной машине с Vault и плагином trdl какое-либо другое ПО.
  • Не забывать про базовые методы защиты хоста и ОС.