Компании Red Hat и Google совместно с Университетом Пердью основали проект Sigstore, нацеленный на создание инструментов и сервисов для верификации программного обеспечения при помощи цифровых подписей и ведения публичного лога для подтверждения подлинности (transparency log). Проект будет развиваться под эгидой некоммерческой организации Linux Foundation.
Предложенный проект позволит повысить безопасность каналов распространения программ и защититься от атак, нацеленных на подмену программных компонентов и зависимостей (supply chain). Одной из ключевых проблем с безопасностью в открытом ПО называется сложность проверки источника получения программы и верификации процесса сборки. Например, для проверки целостности релиза большинство проектов используют хеши, но часто необходимая для проверки подлинности информация хранится на незащищенных системах и в общих репозиториях с кодом, в результате компрометации которых атакующие могут подменить необходимые для верификации файлы и, не вызывая подозрений, внедрить вредоносные изменения.
Лишь незначительная часть проектов использует цифровые подписи при распространении релизов из-за сложностей в управлении ключами, распространении открытых ключей и отзыве скомпрометированных ключей. Для того, чтобы верификация имела смысл, также требуется организовать надёжный и безопасный процесс распространения открытых ключей и контрольных сумм. Даже при наличии цифровой подписи многие пользователи игнорируют проверку, так как необходимо потратить время на изучение процесса верификации и понять, какой ключ заслуживает доверия.
Sigstore преподносится как аналог Let’s Encrypt для кода, предоставляющий сертификаты для заверения кода цифровыми подписями и инструментарий для автоматизации проверки. При помощи Sigstore разработчики смогут формировать цифровые подписи для связанных с приложением артефактов, таких как файлы с релизами, образы контейнеров, манифесты и исполняемые файлы. Особенностью Sigstore является то, что используемый для подписи материал отражается в защищённом от внесения изменений публичном логе, который можно использовать для проверки и аудита.
Вместо постоянных ключей в Sigstore применяются короткоживущие эфемерные ключи, которые генерируются на основе полномочий, подтверждённых провайдерами OpenID Connect (на момент генерации ключей для цифровой подписи разработчик идентифицирует себя через провайдера OpenID с привязкой к email). Подлинность ключей проверяется по публичному централизованному логу, который позволяет убедиться, что автор подписи именно тот, за кого себя выдаёт, и подпись сформирована тем же участником, что отвечал за прошлые релизы.
Sigstore предоставляет как готовый сервис, которым уже можно пользоваться, так и набор инструментов, позволяющих развернуть аналогичные сервисы на своём оборудовании. Сервис бесплатен для всех разработчиков и поставщиков ПО, и развёрнут на нейтральной площадке - Linux Foundation. Все компоненты сервиса являются открытыми, написаны на языке Go и распространяются под лицензией Apache 2.0.
Из развиваемых компонентов можно отметить:
Предложенный проект позволит повысить безопасность каналов распространения программ и защититься от атак, нацеленных на подмену программных компонентов и зависимостей (supply chain). Одной из ключевых проблем с безопасностью в открытом ПО называется сложность проверки источника получения программы и верификации процесса сборки. Например, для проверки целостности релиза большинство проектов используют хеши, но часто необходимая для проверки подлинности информация хранится на незащищенных системах и в общих репозиториях с кодом, в результате компрометации которых атакующие могут подменить необходимые для верификации файлы и, не вызывая подозрений, внедрить вредоносные изменения.
Лишь незначительная часть проектов использует цифровые подписи при распространении релизов из-за сложностей в управлении ключами, распространении открытых ключей и отзыве скомпрометированных ключей. Для того, чтобы верификация имела смысл, также требуется организовать надёжный и безопасный процесс распространения открытых ключей и контрольных сумм. Даже при наличии цифровой подписи многие пользователи игнорируют проверку, так как необходимо потратить время на изучение процесса верификации и понять, какой ключ заслуживает доверия.
Sigstore преподносится как аналог Let’s Encrypt для кода, предоставляющий сертификаты для заверения кода цифровыми подписями и инструментарий для автоматизации проверки. При помощи Sigstore разработчики смогут формировать цифровые подписи для связанных с приложением артефактов, таких как файлы с релизами, образы контейнеров, манифесты и исполняемые файлы. Особенностью Sigstore является то, что используемый для подписи материал отражается в защищённом от внесения изменений публичном логе, который можно использовать для проверки и аудита.
Вместо постоянных ключей в Sigstore применяются короткоживущие эфемерные ключи, которые генерируются на основе полномочий, подтверждённых провайдерами OpenID Connect (на момент генерации ключей для цифровой подписи разработчик идентифицирует себя через провайдера OpenID с привязкой к email). Подлинность ключей проверяется по публичному централизованному логу, который позволяет убедиться, что автор подписи именно тот, за кого себя выдаёт, и подпись сформирована тем же участником, что отвечал за прошлые релизы.
Sigstore предоставляет как готовый сервис, которым уже можно пользоваться, так и набор инструментов, позволяющих развернуть аналогичные сервисы на своём оборудовании. Сервис бесплатен для всех разработчиков и поставщиков ПО, и развёрнут на нейтральной площадке - Linux Foundation. Все компоненты сервиса являются открытыми, написаны на языке Go и распространяются под лицензией Apache 2.0.
Из развиваемых компонентов можно отметить:
- Rekor - реализация лога для хранения заверенных цифровыми подписями метаданных, отражающих информацию о проектах. Для обеспечения целостности и защиты от искажения данных задним числом применяется древовидная структура "дерево Меркла" (Merkle Tree), в которой каждая ветка верифицирует все нижележащие ветки и узлы благодаря совместному (древовидному) хешированию. Имея конечный хеш, пользователь может удостовериться в корректности всей истории операций, а также в корректности прошлых состояний БД (корневой проверочный хеш нового состояния базы вычисляется с учётом прошлого состояния). Для верификации и добавления новых записей предоставляется RESTful API, а также интерфейс командной строки.
- Fulcio (SigStore WebPKI) - система для создания удостоверяющих центров (root CA), выдающих короткоживущие сертификаты на основе email, аутентифицированного через OpenID Connect. Время жизни сертификата составляет 20 минут, за которые разработчик должен успеть сформировать цифровую подпись (если в дальнейшем сертификат попадёт к руки злоумышленника, то он уже будет просрочен).
- Сosign (Container Signing) - инструментарий для формирования подписей к контейнерам, проверки подписей и размещения подписанных контейнеров в репозиториях, совместимых с OCI (Open Container Initiative).