Confira Quem Aprovou a Atualização do Guia

CibersegurançaBeginner
Pratique Agora

Introdução

A Waymark publica um guia de passeios de um festival. Um fornecedor entregou vários pacotes de atualização. Sua tarefa é aceitar a versão solicitada pelo organizador sem confiar em um pacote apenas porque sua soma de verificação corresponde.

Você usará uma chave pública do publicador fornecida de forma independente, verificará uma assinatura real com Cosign, comparará o produto e a versão solicitados e verificará o resumo criptográfico do arquivo. Você precisa de conhecimentos básicos de terminal e caminhos; não é necessário programar nem ter uma conta de nuvem. Este laboratório seleciona uma atualização. O próximo laboratório guiado transforma essas decisões em um receptor reutilizável.

Comece pelo Guia do Festival e pela Solicitação de Atualização

Nesta etapa, você verá o serviço funcionando e encontrará a solicitação do organizador antes de escolher uma atualização. Abra a aba Event Guide. A edição atual de event-guide é 2.0. Abra Old Mill Walk: o encontro é às 11:00. Use o link All walks da página para voltar e baixe a planilha de trajetos. O site e o CSV descrevem os mesmos dois passeios.

A página inicial do guia identifica a edição acima do título e mostra o horário de encontro de cada passeio no respectivo cartão:

O guia Waymark funcionando antes da atualização

Agora mude para Workspace. Este terminal compartilha o mesmo contêiner do guia; as abas são entradas diferentes, não máquinas diferentes. cd muda o diretório atual do terminal. O caminho absoluto funciona a partir de qualquer diretório:

cd /home/labex/project/waymark

cat exibe um pequeno arquivo de texto. Leia a solicitação fornecida pelo organizador independentemente dos pacotes entregues:

cat /opt/labex-waymark/trust/request.json

O objeto JSON tem dois campos nomeados:

{
  "product": "event-guide",
  "version": "2.1"
}

Um produto identifica qual guia será atualizado; uma versão identifica a edição solicitada. Uma edição anterior autêntica não é esta atualização. A chave pública fixada de forma independente é /opt/labex-waymark/trust/publisher.pub. Mantenha essa chave e a solicitação inalteradas.

ls lista as entradas de um diretório. Inspecione o diretório de entregas:

ls candidates

Os pacotes têm rótulos de entrega como parcel-101; seus nomes não são evidência de aprovação. Cada um contém manifest.json, manifest.sigstore.json, guide.tar.gz e SHA256SUMS. O manifesto descreve o produto, a versão e o resumo criptográfico do arquivo. O bundle contém uma assinatura. O arquivo compactado contém os arquivos reais do guia. Mantenha intactos os pacotes originais, o guia atual, as versões anteriores e o aviso aos visitantes. Você colocará uma cópia do pacote selecionado em accepted/.

Se um comando informar No such file or directory, execute o comando cd absoluto acima, use ls candidates para conferir a grafia e tente novamente. Nada neste laboratório exige uma reinicialização do ambiente.

Entenda o que uma Soma de Verificação Correspondente Pode Indicar

Nesta etapa, você comparará dois pacotes que passam na verificação de suas respectivas somas adjacentes. Permaneça em Workspace.

Um resumo SHA-256 é uma impressão digital calculada a partir dos bytes de um arquivo. Impressões digitais correspondentes ajudam a detectar alterações nos bytes, desde que a própria impressão digital esperada seja confiável. sha256sum -c lê uma lista de somas de verificação e compara os arquivos nomeados com ela. Aqui, -c significa “verificar”. Execute-o dentro do pacote porque a lista usa um nome de arquivo relativo:

cd candidates/parcel-103
sha256sum -c SHA256SUMS

Espere guide.tar.gz: OK. Volte ao projeto e teste outro pacote:

cd /home/labex/project/waymark/candidates/parcel-104
sha256sum -c SHA256SUMS

Mais uma vez, espere guide.tar.gz: OK. As duas listas vieram na mesma entrega que seus arquivos. Alguém que substituísse um arquivo também poderia calcular uma nova soma adjacente. OK comprova a concordância entre esses dois arquivos; não identifica seu publicador nem comprova que esta é a atualização solicitada.

Volte ao projeto:

cd /home/labex/project/waymark

A seguir, você verificará o manifesto com a chave pública em que o organizador já confia. O resumo esperado do arquivo virá então desse manifesto verificado, em vez da lista adjacente sem assinatura.

Verifique o Publicador com uma Chave Pública Independente

Nesta etapa, você distinguirá uma assinatura autêntica de uma assinatura feita com uma chave não aprovada. Comece em Workspace, em /home/labex/project/waymark.

Um publicador assina um arquivo com uma chave privada. A chave pública correspondente permite que um destinatário verifique essa assinatura e detecte alterações no arquivo assinado. A chave pública precisa chegar por um canal em que você já confia. Um pacote não pode aprovar sua própria chave. Este exercício fixa uma chave de publicador sintética fornecida separadamente em /opt/labex-waymark/trust/; a chave privada do publicador não é fornecida a você.

Cosign é a ferramenta de assinatura já preparada. verify-blob verifica um arquivo; --key seleciona a chave pública confiável; --bundle seleciona o bundle de assinatura. O último argumento nomeia o manifesto exato cujos bytes foram assinados.

Esses pacotes sintéticos foram assinados sem um registro público de transparência. --insecure-ignore-tlog ignora deliberadamente a verificação de inclusão no registro. Ainda exige uma assinatura válida sob a chave selecionada. Este exercício local não verifica uma identidade OIDC pública, um serviço de certificados ou um registro de transparência; não copie essa exceção para uma política que exija esses serviços.

O pacote a seguir foi assinado com outra chave. Espere que esta verificação falhe, com um status de saída diferente de zero e um erro de verificação de assinatura:

/opt/labex-waymark/bin/cosign verify-blob --key /opt/labex-waymark/trust/publisher.pub --bundle candidates/parcel-102/manifest.sigstore.json --insecure-ignore-tlog candidates/parcel-102/manifest.json

echo exibe um valor; $? é o status de saída do comando imediatamente anterior. Zero significa sucesso e um número diferente de zero significa falha. Confira-o imediatamente:

echo $?

Agora verifique um pacote assinado pelo publicador fixado:

/opt/labex-waymark/bin/cosign verify-blob --key /opt/labex-waymark/trust/publisher.pub --bundle candidates/parcel-104/manifest.sigstore.json --insecure-ignore-tlog candidates/parcel-104/manifest.json

Espere o aviso sobre o registro de transparência e Verified OK:

WARNING: Skipping tlog verification is an insecure practice that lacks transparency and auditability verification for the blob.
Verified OK

Confira o status imediatamente anterior:

echo $?

Espere 0. O manifesto foi assinado pela chave confiável. Essa é uma decisão; você ainda precisa verificar o que o manifesto autoriza.

Confira o Produto, a Versão e o Resumo do Arquivo Assinados

Nesta etapa, você usará o manifesto verificado para decidir se um pacote autêntico é a versão solicitada. Permaneça em Workspace.

Primeiro, verifique uma versão anterior autêntica. Este comando deve ter sucesso:

/opt/labex-waymark/bin/cosign verify-blob --key /opt/labex-waymark/trust/publisher.pub --bundle candidates/parcel-101/manifest.sigstore.json --insecure-ignore-tlog candidates/parcel-101/manifest.json

jq lê JSON. O filtro .product, .version exibe os dois campos nomeados. As aspas simples preservam o filtro como um único argumento, impedindo que o shell interprete sua pontuação:

jq '.product, .version' candidates/parcel-101/manifest.json

Espere "event-guide" e "2.0". Este é um guia autêntico, mas não é o 2.1 solicitado. Uma assinatura não torna automaticamente uma versão antiga adequada.

Inspecione o candidato verificado na etapa anterior:

cat candidates/parcel-104/manifest.json

Seu produto e sua versão correspondem à solicitação independente. O campo sha256 é um resumo hexadecimal de 64 caracteres de guide.tar.gz; não o memorize. jq -r exibe um campo sem as aspas do JSON. Exiba esse resumo esperado:

jq -r .sha256 candidates/parcel-104/manifest.json

Agora calcule o resumo do arquivo real:

sha256sum candidates/parcel-104/guide.tar.gz

O primeiro campo deve corresponder ao resumo do manifesto verificado. O nome de arquivo exibido depois dele não faz parte do resumo.

O arquivo alterado que você inspecionou antes também tem um manifesto assinado autêntico, mas seus bytes atuais já não correspondem ao manifesto. Confirme isso verificando o manifesto e, depois, comparando os dois resumos:

/opt/labex-waymark/bin/cosign verify-blob --key /opt/labex-waymark/trust/publisher.pub --bundle candidates/parcel-103/manifest.sigstore.json --insecure-ignore-tlog candidates/parcel-103/manifest.json
jq -r .sha256 candidates/parcel-103/manifest.json
sha256sum candidates/parcel-103/guide.tar.gz

A assinatura passa, mas os resumos diferem. Rejeite esse pacote. Agora você tem três decisões separadas: signatário confiável, produto/versão solicitados e bytes do arquivo correspondentes. Uma falha em qualquer uma significa que a atualização não está pronta para ser aceita.

Aceite o Pacote Solicitado sem Alterar o Guia em Produção

Nesta etapa, você salvará o pacote solicitado e verificado para entrega à próxima etapa. Comece em Workspace, em /home/labex/project/waymark.

accepted/ já existe. cp copia arquivos; o último argumento é o diretório de destino. Copie o manifesto, o bundle de assinatura e o arquivo compactado que você verificou:

cp candidates/parcel-104/manifest.json candidates/parcel-104/manifest.sigstore.json candidates/parcel-104/guide.tar.gz accepted/

A cópia fornece um conjunto separado de arquivos. Verifique esse conjunto, em vez de presumir que uma verificação anterior se aplica a uma cópia posterior:

/opt/labex-waymark/bin/cosign verify-blob --key /opt/labex-waymark/trust/publisher.pub --bundle accepted/manifest.sigstore.json --insecure-ignore-tlog accepted/manifest.json
jq '.product, .version' accepted/manifest.json
jq -r .sha256 accepted/manifest.json
sha256sum accepted/guide.tar.gz

Espere uma assinatura válida, event-guide, 2.1 e resumos correspondentes do arquivo. A autoverificação preparada, somente de leitura, usa esses arquivos reais, a chave/solicitação independentes e o conteúdo esperado do guia:

python3 /opt/labex-waymark/verify.py selected

Espere:

The accepted parcel is the independently signed, requested release with matching archive bytes.

Se falhar, confira qual das três decisões falhou; depois repita a cópia do pacote original correto e verifique a cópia novamente. Mantenha inalterados os arquivos de confiança independentes. A verificação não seleciona um pacote por você nem o implanta.

Mude para Event Guide e atualize a página. Ela ainda deve mostrar a edição 2.0, e Old Mill Walk ainda deve ter encontro às 11:00. Abra Visitor notice e confirme que as orientações práticas originais permanecem. Esta unidade aceita uma entrega para encaminhamento; publicar a atualização é uma operação separada, ensinada a seguir.

Resumo

Você aceitou uma entrega com assinatura real combinando uma chave de publicador confiável de forma independente, a solicitação de produto/versão do organizador e o resumo do arquivo real. Também viu por que uma soma de verificação adjacente, uma assinatura válida em uma versão antiga ou um manifesto assinado ao lado de bytes alterados são insuficientes isoladamente.

O guia atual continua disponível. No próximo laboratório guiado, você incluirá essas decisões em um receptor reutilizável e garantirá que apenas os bytes verificados do arquivo cheguem ao guia em execução.