← К программе курса

Модуль 14 / 18

Supply chain: SBOM, сканирование, подпись и provenance

DOCKER

Содержание
01

1. Цели и цепочка доверия

После модуля вы сможете связать digest, SBOM, vulnerability report, provenance, signature и admission policy.

  • digest фиксирует bytes
  • SBOM перечисляет компоненты
  • scanner сопоставляет advisories
  • provenance описывает сборку
  • signature связывает digest с identity
  • policy принимает или отклоняет artifact
02

2. Теория: угрозы supply chain

Риски возникают в source, dependency, builder, registry и deployment: dependency confusion, подмена tag, утечка secret, compromised runner и неподписанный artifact.

Один scanner или private registry не создаёт доверия. Нужны минимальные права, изолированная сборка, immutable digest, attestations и проверка policy перед запуском.

03

3. Теория: SBOM и VEX

SBOM в SPDX или CycloneDX описывает packages, versions, licenses и relationships. Это inventory, а не доказательство безопасности и не vulnerability report.

VEX сообщает, затрагивает ли уязвимость конкретный продукт. Статус требует обоснования, срока пересмотра и подписи; VEX не должен скрывать CVE без evidence.

04

4. Теория: vulnerability scanning

Scanner сопоставляет SBOM с advisory database. Результат зависит от свежести базы, distro backports, package detection и reachability. Severity поставщика важнее совпадения только по upstream version.

Gate задают по контексту: fix available, exploitability, age и environment. False positive документируют как исключение с владельцем и expiration.

05

5. Теория: provenance и SLSA

BuildKit создаёт SLSA provenance: builder, parameters, materials и timestamps. mode=max раскрывает больше деталей и требует проверки на sensitive build args.

Attestations прикрепляются к image index как OCI manifests. Classic image store их не сохраняет; используйте registry, containerd image store или OCI output.

06

6. Теория: подпись и verification

Cosign подписывает digest, а keyless flow связывает подпись с OIDC identity и transparency log. Verification обязана ограничивать issuer и точную identity, а не только проверять наличие любой подписи.

Ключи защищают KMS/HSM, rotation и revocation. Подпись уязвимого образа подтверждает автора, но не делает образ безопасным.

07

7. Методические указания

  • Собирайте и продвигайте по digest
  • Генерируйте SBOM и provenance в CI
  • Не помещайте secrets в ARG/provenance
  • Сканируйте OS и application dependencies
  • Фиксируйте scanner DB timestamp
  • Проверяйте issuer и identity подписи
  • Делайте policy исключения срочными
  • Храните evidence рядом с release
08

8. Лабораторная работа: OCI attestations

Создайте изолированный builder и OCI archive с SBOM и max provenance.

terminal
mkdir -p /tmp/docker-module-14/out
printf '%s\n' '# syntax=docker/dockerfile:1' 'FROM alpine:3.21' 'RUN apk add --no-cache ca-certificates' 'USER 65532:65532' 'CMD ["/bin/true"]' > /tmp/docker-module-14/Dockerfile
docker buildx create --name docker-m14-builder --driver docker-container --use --bootstrap
docker buildx inspect docker-m14-builder
terminal
docker buildx build --builder docker-m14-builder --sbom=true --provenance=mode=max --output type=oci,dest=/tmp/docker-module-14/image.tar /tmp/docker-module-14
sha256sum /tmp/docker-module-14/image.tar | tee /tmp/docker-module-14/image.tar.sha256
tar -tf /tmp/docker-module-14/image.tar | sort | head -30
tar -xf /tmp/docker-module-14/image.tar -C /tmp/docker-module-14/out
jq . /tmp/docker-module-14/out/index.json

Найдите in-toto predicates, attestation reference и resolved materials.

terminal
find /tmp/docker-module-14/out/blobs/sha256 -maxdepth 1 -type f -print0 | xargs -0 grep -l 'https://spdx.dev/Document'
find /tmp/docker-module-14/out/blobs/sha256 -maxdepth 1 -type f -print0 | xargs -0 grep -l 'https://slsa.dev/provenance'
grep -Rhl 'SPDXRef-DOCUMENT' /tmp/docker-module-14/out/blobs/sha256 | head -1 | xargs jq '{predicateType,subject,predicate:{name:.predicate.name,packages:(.predicate.packages|length)}}'
grep -Rhl '"predicateType":"https://slsa.dev/provenance' /tmp/docker-module-14/out/blobs/sha256 | head -1 | xargs jq '{predicateType,subject,predicate:{buildType:.predicate.buildDefinition.buildType,materials:.predicate.buildDefinition.resolvedDependencies}}'
grep -Rhl 'vnd.docker.reference.digest' /tmp/docker-module-14/out/blobs/sha256 | head -1 | xargs jq '{annotations,layers}'
terminal
base_ref=$(grep -Rho 'pkg:docker/alpine@[^" ]*' /tmp/docker-module-14/out/blobs/sha256 | head -1)
printf 'resolved_material=%s\n' "$base_ref"
sha256sum --check /tmp/docker-module-14/image.tar.sha256
docker buildx imagetools inspect alpine:3.21
docker buildx imagetools inspect alpine:3.21 --raw | jq '.mediaType, (.manifests | length)'

Критерий: archive checksum валиден; найдены SPDX и SLSA predicates; attestation descriptor и base material адресованы digest.

09

9. Диагностика supply-chain gate

При отказе разделите artifact resolution, attestation discovery, cryptographic identity, freshness и policy evaluation.

terminal
docker buildx inspect docker-m14-builder
docker buildx du --builder docker-m14-builder
jq . /tmp/docker-module-14/out/index.json
find /tmp/docker-module-14/out/blobs/sha256 -type f -printf '%f %s bytes\n' | sort
sha256sum --check /tmp/docker-module-14/image.tar.sha256
  • tag разрешить в digest
  • проверить subject digest
  • найти SBOM/provenance media types
  • проверить signature issuer/identity
  • проверить advisory DB freshness
  • прочитать точное policy rule
  • не обходить gate случайным tag
10

10. Контроль и cleanup

  • Что доказывает digest?
  • Чего не доказывает SBOM?
  • Зачем VEX?
  • Почему scanner ошибается?
  • Что содержит provenance?
  • Почему classic store теряет attestations?
  • Что проверять в keyless signature?
  • Почему signed не значит safe?
terminal
docker buildx rm docker-m14-builder
rm -rf /tmp/docker-module-14/out
rm -f /tmp/docker-module-14/Dockerfile /tmp/docker-module-14/image.tar /tmp/docker-module-14/image.tar.sha256
rmdir /tmp/docker-module-14
docker buildx ls

Модуль освоен, если вы проверяете artifact как набор digest + identity + attestations + policy evidence.