Подпись зависимостей и артефактов
Проверка происхождения с помощью SLSA и Sigstore
«Подпись зависимостей и артефактов» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Почему важно происхождение
SBOM сообщает, что входит в состав артефакта. Происхождение сообщает, откуда он взялся и как был собран. Подписание связывает артефакт с проверяемым источником, чтобы потребители могли отклонить всё, что было создано не вашим доверенным конвейером.
Без сведений о происхождении злоумышленник, заменивший архив tarball в вашем реестре, неотличим от легитимного выпуска.
Дайджесты, а не теги
Основа целостности — адресация по содержимому. Криптографический хэш (дайджест) артефакта однозначно идентифицирует именно этот набор байтов. Изменяемые теги, такие как latest, можно перенаправить на другое содержимое, а дайджест — нельзя.
# pull by immutable digest, not a tag
docker pull my-app@sha256:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613f
# compute a file digest
sha256sum release-1.4.0.tar.gzОсновы цифровых подписей
Цифровая подпись использует закрытый ключ для подписания хэша артефакта; любой, у кого есть соответствующий открытый ключ, может проверить подпись. Это обеспечивает две гарантии:
- Целостность — артефакт не изменялся после подписания
- Подлинность — его подписал владелец закрытого ключа
Сложность не в математике, а в управлении ключами и распространении доверия: как проверяющий узнает, какому открытому ключу доверять?
Подписание без ключей с помощью Sigstore
Традиционное подписание заставляет команды защищать закрытые ключи с длительным сроком действия, а такие ключи могут утечь. Sigstore предлагает подписание без ключей: он выдает краткосрочный сертификат, связанный с идентификацией OIDC (например, рабочей нагрузкой CI или адресом электронной почты разработчика), подписывает артефакт и записывает событие в общедоступный журнал прозрачности под названием Rekor.
Ключа с длительным сроком действия, который можно украсть, нет, а каждую подпись можно проверить публично.
Подписание с помощью Cosign
Cosign — инструмент Sigstore для подписания образов контейнеров и других артефактов. В режиме без ключей он использует токен OIDC конвейера, поэтому файл ключа не хранится на диске.
# keyless sign in CI (uses ambient OIDC identity)
COSIGN_EXPERIMENTAL=1 cosign sign my-registry/my-app@sha256:1d5283...
# verify, asserting the expected signer identity
cosign verify my-registry/my-app@sha256:1d5283... \
--certificate-identity-regexp '.*@my-org\.com' \
--certificate-oidc-issuer https://accounts.google.comЖурнал прозрачности
Sigstore записывает каждое событие подписания в Rekor — общедоступный журнал с защитой от незаметного изменения и режимом только добавления. Это эффективный инструмент выявления нарушений:
- Вы можете доказать, когда что-либо было подписано
- Злоумышленник, укравший идентификационные данные, не может подписать что-либо тайно — событие будет записано в общедоступный журнал
- Аномальные подписи (неожиданная идентификация, необычное время) становятся обнаружимыми
Прозрачность превращает незаметную компрометацию в наблюдаемое свидетельство.
SLSA: уровни целостности сборки
SLSA (уровни цепочки поставок для программных артефактов) — это платформа, которая оценивает надежность процесса сборки. Более высокие уровни требуют более сильных гарантий защиты от подмены.
- L1 — сведения о происхождении существуют и задокументированы
- L2 — подписанные сведения о происхождении от размещенной службы сборки
- L3 — усиленные изолированные сборки; сведения о происхождении невозможно подделать даже сотруднику конвейера
SLSA — это план развития: выберите целевой уровень и устраните пробелы.
Аттестации происхождения сборки
Аттестация происхождения — это подписанное заявление с описанием процесса сборки артефакта: фиксация исходного кода, идентификация сборщика, параметры сборки и входные данные. Формат in-toto стандартизирует такие сведения.
# generate and attach SLSA provenance for an image
cosign attest --type slsaprovenance \
--predicate provenance.json \
my-registry/my-app@sha256:1d5283...
# verify provenance matches expected source repo
cosign verify-attestation --type slsaprovenance my-registry/my-app@sha256:1d5283...Проверка подписей при допуске
Подписание полезно только в том случае, если что-либо отклоняет неподписанные артефакты. В Kubernetes контроллер допуска может заблокировать любой образ, у которого отсутствуют действительная подпись и сведения о происхождении от вашей доверенной идентификации.
- Контроллеры политик проверяют подписи cosign до запуска пода
- Отклоняют образы, подписанные неожиданными идентификационными данными
- Требуют сведений о происхождении, указывающих на утвержденный репозиторий исходного кода
Это замыкает цепочку: ненадежные артефакты никогда не запускаются.
Подписание зависимостей на ранних этапах
Сведения о происхождении наиболее ценны, когда распространяются и на то, что вы используете, а не только на то, что поставляете. Экосистемы добавляют встроенные механизмы подписания и подтверждения происхождения:
- Происхождение npm связывает опубликованный пакет с его фиксацией исходного кода и запуском CI
- Базовые образы контейнеров всё чаще поставляются с подписями cosign
- Реестры языковых пакетов проводят пробную проверку на основе Sigstore
Отдавайте предпочтение зависимостям с проверяемыми сведениями о происхождении и проверяйте их во время установки, если это поддерживается.
Проверка прежде всего
Практичная стратегия подписания многоуровневая и предусматривает проверку от начала до конца:
- Закрепляйте входные данные по дайджесту
- Подписывайте артефакты без ключей и прикрепляйте SBOM и аттестации происхождения
- Записывайте всё в журнал прозрачности
- Обеспечивайте проверку при развертывании с помощью политики допуска
Цепочка надежна лишь настолько, насколько надежно ее самое слабое непроверенное звено, поэтому проверяйте каждый артефакт в каждой точке использования.
Быстрая проверка: подписание без ключей
Объясните, почему подписание без ключей повышает безопасность цепочки поставок.
Повторение: подписание зависимостей и артефактов
Вы научились подтверждать происхождение и обеспечивать его проверку.
- Закрепляйте артефакты по дайджесту, а не по изменяемым тегам
- Цифровые подписи обеспечивают целостность и подлинность; сложность заключается в управлении ключами
- Sigstore + cosign обеспечивают подписание без ключей с общедоступным журналом прозрачности Rekor
- SLSA оценивает целостность сборки; аттестации происхождения фиксируют способ сборки артефактов
- Политики допуска отклоняют неподписанные и ненадежные объекты во время развертывания
Далее: усиление защиты конвейера CI/CD, создающего эти артефакты.
Часто задаваемые вопросы
Урок «Подпись зависимостей и артефактов» бесплатный?
Да — полный текст урока «Подпись зависимостей и артефактов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «Подпись зависимостей и артефактов»?
Проверка происхождения с помощью SLSA и Sigstore Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Подпись зависимостей и артефактов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Угрозы цепочке поставок
- Перечень компонентов программного обеспечения (SBOM)
- Подпись зависимостей и артефактов
- Защита конвейеров CI/CD