Verificar assinaturas no nível sem custo financeiro do Assured OSS

Para confirmar a integridade dos pacotes de código aberto selecionados, verifique a assinatura nos artefatos do Assured Open Source Software (Assured OSS).

Este documento se aplica apenas ao nível sem custo financeiro. Para o nível Premium, consulte Acessar metadados de segurança e verificar pacotes.

Verificação de pacotes

As assinaturas de pacotes são armazenadas separadamente do pacote em um bucket do Cloud Storage no formato ZIP. É possível verificar assinaturas usando a ferramenta de verificação do Assured OSS (aoss-verifier) ou um script de verificação.

Como usar a ferramenta aoss-verifier

Antes de usar essa ferramenta, verifique se o Go está instalado no sistema. Se o Go não estiver instalado, instale-o no site do Go.

  1. Para verificar a autenticidade e a integridade dos pacotes de software de código aberto, instale a ferramenta aoss-verifier.

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

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

    Substitua:

    • LANGUAGE: a linguagem do pacote de programação, java ou python. O valor precisa estar em letras minúsculas.
    • PACKAGE_ID: para Java, é groupId:artifactId e para Python é 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, se usada, pula a correspondência do certificado de folha com o certificado raiz por meio da cadeia de certificados.

    --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 for 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.

Consulte o README para mais informações.

Como usar o script de verificação

Nesta seção, descrevemos como usar um script de verificação para verificar as assinaturas de pacotes transferidos por download.

Etapa 1: acessar o URL assinado

O URL do arquivo ZIP está disponível nos metadados de segurança de cada pacote. O exemplo a seguir é uma amostra de metadados do Container Analysis.

Como mostrado no exemplo a seguir, é possível encontrar o URL do ZIP da assinatura no campo description: digestUrl.

package {
  distribution {
    cpe_uri: "cpe:2.3:a:JAVA::com.fasterxml.jackson.core:jackson-databind:2.13.3:*:*:*:*:*:*:*"
    maintainer: "<nil>"
    url: "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/fasterxml/jackson/core/jackson-databind/2.13.3/jackson-databind-2.13.3.jar"
    description: "{\n \"artifactMetadataList\": [\n {\n \"digestUrl\": \"gs://cloud-aoss/java/com.fasterxml.jackson.core:jackson-databind/2.13.3/jackson-databind-2.13.3_binary_2022-10-12T06:54:05Z.zip\"\n }\n ]\n}"
  }
  distribution {
    cpe_uri: "cpe:2.3:a:JAVA::com.fasterxml.jackson.core:jackson-databind:2.13.3:*:*:*:*:*:*:*"
    url: "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/fasterxml/jackson/core/jackson-databind/2.13.3/jackson-databind-2.13.3-sources.jar"
    description: "{\n  \"digestUrl\": \"gs://cloud-aoss/java/com.fasterxml.jackson.core:jackson-databind/2.13.3/jackson-databind-2.13.3-sources_source_2022-10-12T06:54:05Z.zip\"\n}"
  }
}

Exemplo de metadados do Cloud Storage (buildInfo.json file). Conforme mostrado no exemplo a seguir, é possível receber o URL do ZIP da assinatura no campo externalRefs : referenceLocator.

"packages": [
        {
            "SPDXID": "SPDXRef-Package-logback-core-1.2.11.jar",
            "checksums": [
                {
                    "algorithm": "SHA256",
                    "checksumValue": "c847e0e310acda8bc1347c9d9cc051e91210b9f943e131fceb5034c2f0c9a5d8"
                }
            ],
            "downloadLocation": "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/ch/qos/logback/logback-core/1.2.11/logback-core-1.2.11.jar",
            "externalRefs": [
                {
                    "referenceCategory": "SECURITY",
                    "referenceLocator": "cpe:2.3:a:*:JAVA\\:\\:ch\\.qos\\.logback\\:logback\\-core:1\\.2\\.11:*:*:*:*:*:*:*",
                    "referenceType": "cpe23Type"
                },
                {
                    "referenceCategory": "OTHER",
                    "referenceLocator": "gs://cloud-aoss/java/ch.qos.logback:logback-core/1.2.11/logback-core-1.2.11_binary_2022-10-12T14:19:11Z.zip",
                    "referenceType": "digestURL"
                }
            ],

É possível usar o ZIP de assinatura local para verificação manual ou o URL do Cloud Storage diretamente para usar o script de verificação. Para fazer o download do arquivo signature.zip, siga estas etapas:

  1. Configure a autenticação usando o Application Default Credentials (ADC).

  2. Faça o download do signature.zip usando o seguinte comando:

      gcloud storage cp SIGNATURE_ZIP_URL PATH_TO_LOCAL_STORE --recursive
    

    Substitua:

    • SIGNATURE_ZIP_URL: o URL do ZIP da assinatura.
    • PATH_TO_LOCAL_STORE: o caminho local em que você quer fazer o download do arquivo.

Etapa 2: acessar o certificado raiz

Para acessar o certificado raiz, use o seguinte URL:

https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

Você pode baixar o certificado localmente ou usar o link dele diretamente. Para fazer o download do certificado, execute o seguinte comando:

curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer fazer o download do certificado.

Etapa 3: encontrar o local do arquivo do pacote

O arquivo que será verificado é o jar para pacotes Java e o arquivo wheel para pacotes Python. Esse arquivo seria o PATH_TO_DATA_FILE para verificação.

Etapa 4: verificação

É possível verificar manualmente o ZIP da assinatura seguindo as etapas em verificação manual de assinatura ou usar o script de verificação.

Para verificar usando o script de verificação, execute os seguintes comandos:

  1. Faça o download do script de verificação e conceda as permissões.

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. Execute o script de verificação e verifique. É possível usar os URLs remotos ou os caminhos locais para o ZIP de assinatura e o certificado raiz.

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url SIGNATURE_ZIP_URL --root_cert_url ROOT_CERT_URL
    

    Substitua:

    • PATH_TO_DATA_FILE pelo caminho para o arquivo do pacote identificado na etapa 3.
    • SIGNATURE_ZIP_URL pelo URL do ZIP da assinatura obtido na etapa 1.
    • ROOT_CERT_URL pelo URL do certificado raiz recebido na etapa 2.

Verificação de metadados

Nesta seção, explicamos como verificar a assinatura nos metadados do Assured OSS acessados usando o Cloud Storage.

Usar a ferramenta aoss-verifier

Use a ferramenta aoss-verifier para verificar os metadados.

Antes de usar essa ferramenta, instale o Go.

  1. Instale a ferramenta aoss-verifier.

  2. Exporte $(go env GOPATH)/bin e execute o comando aoss-verifier verify-metadata.

    aoss-verifier verify-metadata \
       --metadata_type TYPE \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    Substitua:

    • TYPE: os valores possíveis são buildinfo, vexinfo e healthinfo.
    • LANGUAGE: a linguagem do pacote de programação, java ou python. 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.

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

    --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 for 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 README.

Como usar o script de verificação

Nesta seção, descrevemos como usar um script de verificação para verificar o arquivo de metadados de segurança.

Etapa 1: receber o arquivo ZIP de assinatura e o arquivo de metadados

É possível acessar os metadados como em Acessar metadados. O arquivo de metadados estaria presente com o arquivo signature.zip.

Exemplo: conteúdo de buildInfo.zip

buildInfo.json
signature.zip

O buildInfo.json é o arquivo de metadados que precisa ser verificado, e o signature.zip é o ZIP de assinatura.

Etapa 2: acessar o certificado raiz

Use o seguinte link de URL para receber o certificado raiz:

https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

Você pode baixar o certificado localmente ou usar o link dele diretamente. Para fazer o download do certificado, execute o seguinte comando:

curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer fazer o download do certificado.

Etapa 3: verificação

É possível verificar o signature.zip usando a verificação manual ou usando o script de verificação.

Para verificar usando o script de verificação, execute os seguintes comandos:

  1. Faça o download do script de verificação e conceda as permissões.

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. Execute o script de verificação e verifique. Use o caminho local para o ZIP da assinatura. Para o certificado raiz, use o URL ou o caminho local. O arquivo de dados seria o arquivo de metadados que estamos verificando: buildInfo.json, vexInfo.json ou healthInfo.json.

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_local_path SIGNATURE_LOCAL_PATH --root_cert_url ROOT_CERT_URL
    

    Substitua:

    • PATH_TO_DATA_FILE pelo arquivo de metadados que estamos verificando, conforme obtido na Etapa 1.

    • SIGNATURE_LOCAL_PATH pelo URL do ZIP da assinatura recebido na etapa 1.

    • ROOT_CERT_URL pelo URL do certificado raiz recebido na etapa 2.

      Se você quiser usar um certificado local que já foi baixado, use esta opção:

      --root_cert_local ROOT_CERT_LOCAL
      

      Substitua ROOT_CERT_LOCAL pelo caminho do certificado local.

Verificação de script utilitário

O Assured OSS fornece três scripts utilitários. Nesta seção, descrevemos como verificar a assinatura nesses scripts.

Gerador de Requirements.txt em Python

Acesse a assinatura deste arquivo em gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip. É possível verificar o signature.zip usando a verificação manual ou usando o script de verificação. Para verificar rapidamente a assinatura usando o script de verificação, siga estas etapas:

  1. Configure a autenticação.

  2. Se você ainda não tiver feito o download do arquivo de script do gerador requirements.txt, faça isso agora.

     gcloud storage cp "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator.sh" . --recursive
    
  3. Busque o certificado raiz. O link do URL é https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt Você pode baixar o certificado localmente ou usar o link do certificado diretamente. Para fazer o download do certificado, execute o seguinte comando:

    curl -o PATH_TO_LOCAL_STORE/ca.crt "https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt"
    

    Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer fazer o download do certificado.

  4. Faça o download do script de verificação, se ainda não tiver feito isso.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. Execute o script de verificação e verifique.

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip" --root_cert_url ROOT_CERT_URL
    

    Substitua:

    • PATH_TO_DATA_FILE pelo caminho local do script generator.sh que queremos verificar, conforme obtido na Etapa 2.
    • ROOT_CERT_URL pelo URL do certificado raiz. Se você quiser usar um certificado local já salvo, execute o seguinte comando:
    –root_cert_local ROOT_CERT_LOCAL
    

    Substitua ROOT_CERT_LOCAL pelo caminho local do certificado raiz.

Script de verificação de assinatura

Acesse a assinatura deste arquivo em gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip. É possível verificar o signature.zip usando a verificação manual ou usando o script de verificação. Para verificar rapidamente a assinatura usando o script de verificação, siga estas etapas:

  1. Configure a autenticação.

  2. Se você ainda não tiver feito o download do arquivo de script de verificação de assinatura, faça isso agora.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  3. Busque o certificado raiz. O link do URL é https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt Você pode baixar o certificado localmente ou usar o link do certificado diretamente. Comando para fazer o download do certificado:

    curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer fazer o download do certificado.

  4. Execute o script de verificação e verifique.

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip" --root_cert_url ROOT_CERT_URL
    

    Substitua:

    PATH_TO_DATA_FILE pelo caminho local do script de verificação que queremos verificar, conforme obtido na Etapa 2. ROOT_CERT_URL pelo URL do certificado raiz. Se você quiser usar um certificado local já baixado, use esta opção:

    –root_cert_local ROOT_CERT_LOCAL
    

    Substitua ROOT_CERT_LOCAL pelo caminho local do certificado raiz.

Fazer o download do script de metadados

Acesse a assinatura deste arquivo em gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip. É possível verificar o signature.zip usando a verificação manual ou usando o script de verificação. Para verificar rapidamente a assinatura usando o script de verificação, siga estas etapas:

  1. Configure a autenticação.

  2. Se você ainda não tiver feito o download do arquivo de script download_metadata.py, faça isso agora.

    gcloud storage cp "gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata.py" . --recursive
    
  3. Busque o certificado raiz. O link do URL é https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt Você pode baixar o certificado localmente ou usar o link do certificado diretamente.

    Para fazer o download do certificado, execute o seguinte comando:

    curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer fazer o download do certificado.

  4. Baixe o script de verificação.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. Execute o script de verificação e verifique.

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip --root_cert_url ROOT_CERT_URL
    

    Substitua:

    • PATH_TO_DATA_FILE pelo caminho local do script download_metadata.py que queremos verificar, conforme obtido na Etapa 2.
    • ROOT_CERT_URL pelo URL do certificado raiz. Se você quiser usar um certificado local já transferido por download, execute o seguinte comando:
    –root_cert_local ROOT_CERT_LOCAL
    

    Substitua ROOT_CERT_LOCAL pelo caminho local do certificado raiz.

A seguir