Verificar a origem do build

Os pacotes do Assured OSS são criados com compliance do nível 2 da SLSA. A origem da build é fornecida como parte dos metadados de segurança. Esta página explica como verificar os metadados de procedência do build.

Este documento se aplica ao nível sem custo financeiro. Para informações sobre a origem do build no nível premium, consulte Acessar metadados de segurança e verificar pacotes.

Antes de começar

  • Instale o cosign para verificar a assinatura na origem da build.

Configurar a autenticação

Para informações sobre como configurar a autenticação, consulte Configurar a autenticação.

Verificar a origem do build

A origem da build é assinada usando um atestado in-toto, que usa o formato de envelope dsse. Isso significa que a assinatura gerada contém a assinatura encapsulada e os dados brutos.

Como usar a ferramenta aoss-verifier

  1. Para verificar a origem da build, instale a ferramenta aoss-verifier.

  2. Exporte $(go env GOPATH)/bin e execute o comando aoss-verifier verify-package com a flag --verify_build_provenance.

    aoss-verifier verify-package \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       --artifact_path ARTIFACT_PATH \
       --verify_build_provenance \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    Substitua:

    • LANGUAGE: o idioma do pacote. O valor precisa estar em letras minúsculas.
    • PACKAGE_ID: para Java, o formato é groupId:artifactId. Para Python, o formato é packageName. O valor precisa estar em letras minúsculas.
    • VERSION: a versão do pacote.
    • ARTIFACT_PATH: o caminho para o arquivo de dados no diretório local que você quer verificar. Use as seguintes extensões de nome de arquivo:
      • Extensão de arquivo jar para um pacote Java
      • Extensão de arquivo whl para um pacote Python.

    --disable_certificate_verification é uma flag opcional que ignora a correspondência do certificado de folha com o certificado raiz pela cadeia de certificados, se usada.

    --temp_downloads_path é uma flag opcional para definir o caminho em que você quer fazer o download dos arquivos. Substitua TEMP_DOWNLOADS_DIR_PATH. Se essa flag não estiver definida, os arquivos serão baixados para a pasta tmp_downloads no diretório atual.

    --disable_deletes é uma flag opcional que mantém os arquivos baixados. Por padrão, a ferramenta limpa todos os arquivos baixados.

Para mais informações, consulte o arquivo README da ferramenta.

Verificação manual

Para verificar a origem do build, faça o seguinte:

  1. Recupera a procedência do build.

    Dependendo de como você acessa os metadados de segurança, a origem da build é acessada de maneira diferente.

    Para mais informações, consulte o seguinte snippet de metadados de exemplo:

    {
      "creationTime": "2023-03-25T05:32:23Z",
      "buildDetails": [
       {
         "packageFileName": "jackson-databind-2.13.3.jar",
         "envelope": {
         "payload": "eyJfdHlwZSI6Imh0d……………",
         "payloadType": "application/vnd.in-toto+json",
         "signatures": [
            "sig": "eyJwYXlsb2FkVHlwZSI6Im……",
            "keyid": "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains"
           }
         ]
       },
      "buildProvenance": "{\"_type\":\"https://in-toto.io/Statement/v0.1…"
    .....
    
    

    Exemplo de snippet de metadados:

    {'BuildOccurrence': name: "projects/cloud-aoss/occurrences/06c514bb-1069-4cde-8d68-b1306f19535a"
    resource_uri: "jackson-databind-2.13.3.jar@sha256:4c01a14673bc1cd4a2df337a3b4e695af0a6ed8ac6be19c9e4077377fb8adf92"
    note_name: "projects/cloud-aoss/notes/tekton-cloudbuild-intoto"
    kind: BUILD
    create_time {
      seconds: 1665556616
      nanos: 891004000
    }
    ……
    ……
    }
    envelope {
      payload: "{\"_type\":\"https://in-toto.io/Statement/v0.1\", ….."
      payload_type: "application/vnd.in-toto+json"
      signatures {
        sig: "{\"payloadType\":\"application/vnd.in-toto+json\",....."
        keyid: "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains"
      }
    }
    ,
    
    
    
  2. Recupere a assinatura de origem do build.

    A origem da build contém uma seção chamada Envelope, que contém assinaturas como EnvelopeSignature. Para recuperar a assinatura, siga estas etapas:

    1. Armazene os dados de sig em um arquivo chamado signature.txt.
    2. Verifique se os metadados foram baixados usando o script de metadados.

      Se os metadados forem baixados usando o script de metadados, modifique a assinatura e armazene-a em outro arquivo chamado signature.sig.

      Para modificar a assinatura, execute o seguinte comando:

      cat signature.txt | sed -e 's/\\"/"/g' > signature.sig
      

      Se os metadados não forem baixados usando o script de metadados, decodifique a assinatura e armazene-a em outro arquivo chamado signature.sig.

      Para decodificar a assinatura, use o seguinte comando:

      cat signature.txt | tr '\-_' '+/' | base64 -d > signature.sig
      
  3. Recupere a chave pública de procedência do build.

    A seção EnvelopeSignature na origem da build contém a referência à chave usada para assinar a origem da build. A chave é armazenada em um dos seguintes formatos:

    1. gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME
    2. gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION

      Em que KEY_NAME e KEY_VERSION são o nome e a versão da chave do Cloud Key Management Service.

    A chave pública é armazenada em um bucket do Cloud Storage de propriedade do Assured OSS.

    Recupere a chave pública usando a Google Cloud CLI. Use um dos seguintes comandos:

    • Se apenas KEY_NAME estiver presente:

      gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-public.pem PATH_TO_LOCAL_STORE
      
    • Se KEY_NAME e KEY_VERSION estiverem presentes:

      gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-KEY_VERSION-public.pem PATH_TO_LOCAL_STORE
      

    Substitua o seguinte :

    • KEY_NAME com o nome da chave do Cloud Key Management Service.
    • KEY_VERSION com a versão da chave do Cloud Key Management Service.
    • PATH_TO_LOCAL_STORE com o nome do caminho local para armazenar a chave pública.
  4. Verifique a assinatura de origem.

    1. Para verificar a assinatura, execute o seguinte comando:

      cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=false /dev/null
      

      Substitua:

      • KEY_REF: o caminho para a chave pública que você baixou na etapa anterior.
      • signature.sig: o arquivo que contém a assinatura recuperada na etapa anterior.

      A seguinte saída é retornada após a execução bem-sucedida do comando:

      Verified OK

    2. Para verificar também o hash do artefato associado à origem, use o comando a seguir:

      cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=true ARTIFACT_PATH 
      

      Substitua:

      • KEY_REF: o caminho para a chave pública que você baixou na etapa anterior.
      • signature.sig: o arquivo que contém a assinatura recuperada na etapa anterior.
      • ARTIFACT_PATH: o caminho para o artefato.

      A seguinte saída é retornada após a execução bem-sucedida do comando:

      Verified OK

A seguir