Investigar vulnerabilidades

Quando você ouve falar de uma nova vulnerabilidade, é importante agir rapidamente. Esta página fornece uma lista de chamadas de API e filtros essenciais pré-criados para você. Use essas chamadas de API para recuperar resultados de verificação da Artifact Analysis e coletar informações sobre o status dos seus artefatos.

Esse conteúdo foi desenvolvido para uso com metadados de verificação automática. Se as imagens excederem o período de 30 dias da análise contínua, execute uma nova verificação enviando para o Artifact Registry novamente.

Todos os exemplos nesta página acessam a API diretamente, mas também é possível usar as bibliotecas de cliente do Container Analysis ou os comandos da gcloud.

Permissões necessárias

Todos esses exemplos usam o método da API ListOccurrences. Para chamar esse método, você precisa do papel Visualizador de ocorrências do Container Analysis (roles/containeranalysis.occurrences.viewer) para o projeto que está analisando.

  • Se você estiver analisando projetos de sua propriedade, já terá as permissões necessárias.

  • Se você estiver analisando projetos que não são seus, use as instruções de gerenciamento de acesso do IAM para conceder permissões.

Para mais informações sobre os tipos de acesso para provedores e clientes que usam Artifact Analysis, consulte as permissões.

Ver todos os metadados de vulnerabilidade de uma imagem

Use o filtro kind=VULNERABILITY com o ID do projeto e o URL completo do recurso da imagem, incluindo https://:

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(kind=\"VULNERABILITY\" AND resourceUrl=\"RESOURCE_URL\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Em que:

  • PROJECT_ID é o ID do projeto Google Cloud .
  • RESOURCE_URL é o URL completo da imagem, no formato: https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH. O https:// precisa ser incluído no início do URL. Se você precisar encontrar o URL de uma imagem, use a chamada em Ver todos os metadados de um projeto.

A saída inclui uma lista de vulnerabilidades com detalhes como a gravidade, as opções de mitigação, se disponíveis, e o nome do pacote que contém a vulnerabilidade.

Verificar uma vulnerabilidade específica em um projeto

Na maioria dos casos, Artifact Analysis usa o ID do CVE como identificador de vulnerabilidade. No entanto, há algumas vulnerabilidades listadas no GitHub Advisory Database que não têm um ID de CVE associado. Nesse caso, Artifact Analysis usa o ID do GHSA.

O ID da vulnerabilidade está incluído como parte do campo noteName. Ele começa com o prefixo CVE para IDs de CVE e GHSA para IDs de GHSA. Considere o seguinte exemplo de saída ao executar o comando para ver todas as vulnerabilidades de uma imagem:

vulnerabilities:
  HIGH:
  - name: projects/my-project/occurrences/1234fh2c-699a-462f-b920-93a80f56f544
    resourceUri: https://my_region-docker.pkg.dev/my-project/my-repo/my-image@sha256:8a1a79b587797c5164ec95977cf7aaaa828694a615947bdaed6a327d5b6a17bb
    noteName: projects/goog-vulnz/notes/CVE-2021-32798
    kind: VULNERABILITY
    ...
  - name: projects/my-project/occurrences/OCCURRENCE_ID
    resourceUri: https://my_region-docker.pkg.dev/my-project/my-repo/my-image@sha256:8a1a79b587797c5164ec95977cf7aaaa828694a615947bdaed6a327d5b6a17bb
    noteName: projects/goog-vulnz/notes/GHSA-884p-74jh-xrg2
    kind: VULNERABILITY
    ...

Neste exemplo, a primeira vulnerabilidade tem o ID CVE-2021-32798, e a segunda tem o ID GHSA-884p-74jh-xrg2.

Depois de ter o ID da vulnerabilidade, execute o comando a seguir para recuperar uma lista de imagens afetadas no seu projeto que têm um ID de ocorrência VULN_ID:

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(noteProjectId=\"goog-vulnz\" AND noteId=\"VULN_ID\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Em que:

  • PROJECT_ID é o ID do projeto Google Cloud .
  • VULN_ID é o ID da vulnerabilidade como um ID do CVE ou um número de ID do GHSA, como CVE-2021-32798 ou GHSA-884p-74jh-xrg2.

Pesquisar vulnerabilidades em vários projetos

Use o globbing do curl para fazer consultas em projetos.

Por exemplo, o snippet a seguir define uma variável para conter dois IDs de projeto e envia uma chamada de API para cada projeto para pesquisar ocorrências.

  PROJECT_IDS="PROJECT_ID_1,PROJECT_ID_2"

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://containeranalysis.googleapis.com/v1/projects/{$PROJECT_IDS}/occurrences"

Em que:

  • PROJECT_ID_1 é o ID do projeto Google Cloud do primeiro projeto que você quer analisar.
  • PROJECT_ID_2 é o ID do projeto Google Cloud do segundo projeto que você quer analisar.

Ver todos os metadados de um projeto

Solicite todas as ocorrências associadas ao ID do projeto:

  curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Em que:

  • PROJECT_ID é o ID do projeto Google Cloud .

A saída inclui informações de vulnerabilidade e outros tipos de metadados compatíveis associados ao seu projeto. Por exemplo, seu projeto pode ter detalhes de build ou declarações.

Verificar um pacote específico em um projeto

O Artifact Analysis cria dependências de pacotes para artefatos verificados. Para encontrar todos os artefatos que têm um pacote específico como dependência, filtre pelo nome do pacote:

curl -G -H "Content-Type: application/json" \
   -H "Authorization: Bearer $(gcloud auth print-access-token)" \
--data-urlencode "filter=(dependencyPackageName=\"PACKAGE_NAME\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Em que:

  • PROJECT_ID é o ID do projeto Google Cloud .
  • PACKAGE_NAME é o nome do pacote.

Ver todos os metadados de pacote de uma imagem

Para conferir todos os tipos diferentes de metadados de pacote de uma imagem, use o filtro kind=PACKAGE_NAME com o ID do projeto e o URL completo do recurso de imagem:

 curl -G -H "Content-Type: application/json" \
   -H "Authorization: Bearer $(gcloud auth print-access-token)" \
   --data-urlencode "filter=(kind=\"PACKAGE\" AND resourceUrl=\"RESOURCE_URL\")" \
   https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Em que:

  • PROJECT_ID é o ID do projeto Google Cloud .
  • RESOURCE_URL é o URL completo da imagem, no formato https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH. O https:// precisa ser incluído no início do URL. Se você precisar encontrar o URL de uma imagem, use a chamada de Ver todos os metadados de um projeto.

A saída inclui uma lista de dependências com o nome, a versão e as informações de licença.

Consultar uma ocorrência específica para todos os detalhes disponíveis

É possível executar uma consulta para mais detalhes sobre uma ocorrência. Por exemplo, se você estiver usando o Pub/Sub para receber notificações sobre ocorrências de vulnerabilidade, ele enviará detalhes básicos para ajudar a identificar a ocorrência que mudou e quando a mudança aconteceu.

O payload inclui um ID de ocorrência. Use o ID da ocorrência para consultar detalhes que ajudam a classificar problemas e tomar medidas.

  curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID

Em que:

  • PROJECT_ID é o ID do projeto Google Cloud .
  • OCCURRENCE_ID pode ser um dos seguintes, dependendo da saída do comando em Ver todos os metadados de um projeto:

    • Um valor numérico de uma lista de ocorrências.
    • O valor numérico no final do URL de uma mensagem do Pub/Sub.

A saída inclui informações como tipo de pacote, gravidade da vulnerabilidade, pontuação do CVSS e informações sobre correções, se disponíveis.

A seguir