Verificar SBOM e Evidências de Checksum

CibersegurançaBeginner
Pratique Agora

Introdução

As evidências da cadeia de suprimentos só são úteis quando você as verifica antes da implantação. Um pacote de lançamento pode conter um manifesto do Kubernetes, um SBOM, metadados de imagem e um arquivo de checksum. O checksum prova que os arquivos listados não foram alterados. O SBOM e os metadados da imagem ajudam a confirmar quais evidências de imagem e pacote o lançamento afirma conter.

Neste laboratório, você validará um pacote de lançamento local com sha256sum e jq, confirmará que o SBOM e os metadados da imagem descrevem a carga de trabalho aprovada, registrará um resultado de validação em JSON compacto e implantará apenas o manifesto aprovado. Este laboratório não requer downloads externos ou ferramentas de assinatura. Ele foca no hábito central do CKS: verificar as evidências locais antes de confiar no artefato de lançamento.

Inspecionar o Pacote de Lançamento

Nesta etapa, você inspecionará o pacote de lançamento antes de executar qualquer comando de validação. Isso é importante porque os arquivos de checksum cobrem apenas os caminhos listados dentro deles. Um arquivo pode existir no pacote e ainda estar fora do conjunto de lançamento aprovado.

Comece no diretório do projeto e leia as notas:

cd /home/labex/project
sed -n '1,180p' RELEASE_VALIDATION_NOTES.md

Liste os arquivos do pacote:

find release-bundle -path release-bundle/evidence -prune -o -type f -print | sort | tee release-bundle/evidence/bundle-files.txt

Entre no pacote e inspecione o arquivo de checksum:

cd /home/labex/project/release-bundle
cat checksums.sha256 | tee evidence/checksum-file-review.txt

Você deve ver os checksums para manifests/receipt-ledger-approved.yaml, sbom.json e image-metadata.json. O manifesto não listado deve existir no pacote, mas não deve aparecer em checksums.sha256.

Verificar Checksums e Rejeitar o Candidato Não Listado

Nesta etapa, você verificará os artefatos listados com sha256sum -c. A opção -c lê os hashes esperados de um arquivo de checksum e os compara com os arquivos atuais. Um resultado bem-sucedido significa que os arquivos listados ainda correspondem aos checksums aprovados.

Execute a verificação de checksum:

sha256sum -c checksums.sha256 | tee evidence/checksum-verification.txt

Confirme que o manifesto não listado não faz parte da evidência de checksum aprovada:

if grep -q 'receipt-ledger-unlisted.yaml' checksums.sha256; then
  echo "unlisted manifest is unexpectedly approved" | tee evidence/unlisted-check.txt
else
  echo "unlisted manifest is not in the approved checksum list" | tee evidence/unlisted-check.txt
fi

O primeiro comando deve imprimir OK para os três arquivos listados. O segundo comando deve indicar que o manifesto não listado não está na lista de checksums aprovados.

Corresponder Metadados de SBOM aos Metadados de Imagem

Nesta etapa, você inspecionará o SBOM e os metadados da imagem. O checksum informa que os arquivos não foram alterados, mas não explica se o SBOM descreve a imagem que você planeja implantar. Para isso, compare o nome da imagem e o digest em ambos os arquivos.

Extraia os metadados do componente SBOM:

jq '.metadata.component' sbom.json | tee evidence/sbom-component.json

Confirme que o SBOM contém a entrada de pacote esperada:

jq '.components[] | select(.name == "busybox")' sbom.json | tee evidence/sbom-required-package.json

Inspecione os metadados da imagem:

jq . image-metadata.json | tee evidence/image-metadata-review.json

Agora, crie um JSON de validação compacto a partir das evidências que você acabou de inspecionar. As variáveis de shell leem o checksum do manifesto aprovado e o digest da imagem do pacote, em vez de codificá-los manualmente.

approved_sha="$(awk '$2=="manifests/receipt-ledger-approved.yaml" {print $1}' checksums.sha256)"
image_digest="$(jq -r '.digest' image-metadata.json)"

cat > evidence/validation.json <<EOF
{
  "checksum_status": "verified",
  "approved_manifest": "manifests/receipt-ledger-approved.yaml",
  "approved_manifest_sha256": "${approved_sha}",
  "sbom_name": "receipt-ledger",
  "sbom_version": "1.8.4",
  "sbom_image": "busybox:1.36",
  "sbom_package": "busybox",
  "image_digest": "${image_digest}",
  "rejected_manifest": "manifests/receipt-ledger-unlisted.yaml",
  "rejection_reason": "not-listed-in-checksums"
}
EOF
jq -M . evidence/validation.json

Este JSON não é um relatório em prosa. É um pequeno registro legível por máquina dos fatos de verificação que você desejaria ter antes da implantação.

Implantar Apenas o Manifesto Aprovado

Nesta etapa, você implantará apenas o manifesto que passou na validação de checksum. O candidato não listado está presente no pacote, mas não foi listado no arquivo de checksum aprovado, portanto, deve permanecer fora do cluster.

Aplique o manifesto aprovado:

kubectl apply -f manifests/receipt-ledger-approved.yaml

Aguarde a implantação (Deployment):

kubectl -n cks-prep-sbom rollout status deployment/receipt-ledger --timeout=120s

Confirme que a implantação não listada não foi criada:

if kubectl -n cks-prep-sbom get deployment receipt-ledger-unlisted >/dev/null 2>&1; then
  echo "unlisted deployment exists" | tee evidence/unlisted-deployment-check.txt
else
  echo "unlisted deployment is absent" | tee evidence/unlisted-deployment-check.txt
fi

Leia o status de tempo de execução do Pod aprovado:

pod="$(kubectl -n cks-prep-sbom get pod -l app=receipt-ledger --field-selector=status.phase=Running -o jsonpath='{.items[0].metadata.name}')"
kubectl -n cks-prep-sbom exec "$pod" -- cat /release/status.txt | tee evidence/runtime-status.txt

O status de tempo de execução deve ser:

release-status=approved

Resumo

Você inspecionou um pacote de lançamento local, verificou os checksums aprovados, confirmou que um candidato não listado estava fora do conjunto de lançamento aprovado, correspondeu os metadados do SBOM aos metadados da imagem, registrou evidências de validação em JSON compacto e implantou apenas o manifesto do Kubernetes aprovado. Este é o fluxo de trabalho central de evidências da cadeia de suprimentos: verificar a integridade e a identidade antes da implantação.