Разработчики серверного и облачного ПО любят Docker и контейнеры, но при этом немало обеспокоены их безопасностью. В новейшем релизе Docker 1.8 эта проблема решается с помощью Docker Content Trust (DCT).
Диого Моника, главный специалист по безопасности Docker, заявил в интервью ZDNet: «Благодаря Docker Content Trust разработчики и администраторы имеют простое в использовании решение для обеспечения безопасности. Оно встроено в Docker, поэтому его можно использовать без длительного обучения... Когда оно задействовано, Docker работает только с внушающими доверие данными и образами».
Моника пояснил: «Основные команды Docker push, pull, build, create и run будут применяться только к образам, имеющим либо подписанный контент, либо явные хэши контента. В результате сотрудники ИТ-подразделений получают гарантию, что в их производственной инфраструктуре используется только подписанный контент. Используя такую реализацию доверенного контента, Docker будет подписывать Docker Hub Official Repos, обеспечивая пользователей доверенным набором базовых образов, которые они могут применять для создания распределенных приложений».
DCT использует инфраструктуру публичных ключей (PKI). Программа защиты имеет два различных ключа — офлайновый (базовый) и ключ-метку репозитория. Они генерируются, когда издатель впервые распространяет образ, и хранятся у клиента. У каждого репозитория свой уникальный ключ-метка, что позволяет владельцу ставить электронную подпись на образах Docker для конкретного репозитория. Ключ-метка применяется каждый раз, когда новый контент добавляется в репозиторий или удаляется из него. Поскольку ключ-метка доступен через Интернет, он уязвим для взлома. При наличии DCT издатель сможет блокировать контент со взломанными ключами, используя офлайновый ключ, который должен храниться в надежном месте, недоступном через Интернет.
Программа генерирует также ключ с меткой времени, защищающий от повторных атак. Это не позволяет атакующим заставить вас использовать подписанный, но устаревший контент. Таким образом, сказал Моника, если кто-то пытался вынудить вас использовать устаревшее приложение, обладающее известными уязвимостями, должным образом реализованное DCT вас защитит.
В настоящее время ключом с меткой времени управляет Docker. Компания утверждает, что это уменьшает хлопоты, связанные с постоянным обновлением контента у клиента.
Чтобы все это заработало, DCT применяет Notary. Это проект компании Docker с открытым исходным кодом, который создает инфраструктуру для распространения безопасного и доверенного контента. Предприятие, которое ведет собственный частный реестр или применяет решение стороннего разработчика, может интегрировать его с Notary, после чего его репозитории будут работать с DCT.
Сам проект Notary создан на базе The Update Framework (TUF). Это механизм защиты при обновлении ПО. В основе TUF лежит использование разнообразных криптографических ключей для подписывания и верификации контента. TUF создан, чтобы противостоять различного рода атакам. По умолчанию TUF применяет вероятностную систему подписей RSA (Probabilistic Signature Scheme, RSASSA-PSS) и алгоритм электронной подписи на основе эллиптических кривых, созданный на базе переплетающихся кривых Эдвардса (ed25519).
DCT встроено в Docker Engine 1.8, так что вы можете немедленно приступать к его использованию. Если вы применяете Docker в производстве, настоятельно рекомендую начать применять DCT.
Docker 1.8 обладает также следующими новыми функциями:
- Docker Toolbox. Новый установщик для разработчика приложений для Mac OS X и Windows.
- Поддержка базовых функций хранения Docker. Теперь тома Docker могут поддерживаться системами хранения сторонних производителей. Имеются плагины, разработанные такими партнерами по экосистеме как Blockbridge, Ceph, ClusterHQ, EMC и Portworx.
- Docker Registry 2.1. Обеспечивает более быстрое и безопасное извлечение образов. Кроме того, позволяет просматривать список ваших репозиториев с помощью API-интерфейса. Наконец, образы могут теперь храниться не только в Amazon S3 и Azure, но также в OpenStack Swift, Ceph Rados и Aliyun OSS.