Esaminare le vulnerabilità

Quando si viene a conoscenza di una nuova vulnerabilità, è importante agire rapidamente. Questa pagina fornisce un elenco di chiamate API e filtri essenziali predefiniti per te. Utilizza queste chiamate API per recuperare i risultati della scansione da Artifact Analysis e raccogliere informazioni sullo stato dei tuoi artefatti.

Questi contenuti sono progettati per essere utilizzati con i metadati di scansione automatica. Se le tue immagini hanno superato la finestra di analisi continua di 30 giorni, puoi eseguire una nuova scansione eseguendo nuovamente il push in Artifact Registry.

Tutti gli esempi in questa pagina accedono direttamente all'API, ma puoi anche utilizzare le librerie client Container Analysis o i comandi gcloud.

Autorizzazioni obbligatorie

Tutti questi esempi utilizzano il metodo API ListOccurrences. Per chiamare questo metodo, devi disporre del ruolo Container Analysis Occurrences Viewer (roles/containeranalysis.occurrences.viewer) per il progetto che stai analizzando.

  • Se stai analizzando progetti di tua proprietà, disponi già delle autorizzazioni necessarie.

  • Se analizzi progetti di cui non sei proprietario, utilizza le istruzioni per la gestione dell'accesso IAM per concedere le autorizzazioni.

Per ulteriori informazioni sui tipi di accesso per i fornitori e i clienti che utilizzano Artifact Analysis, consulta Autorizzazioni.

Visualizza tutti i metadati delle vulnerabilità per un'immagine

Utilizza il filtro kind=VULNERABILITY con l'ID progetto e l'URL completo della risorsa per l'immagine, incluso 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

Dove:

  • PROJECT_ID è l' Google Cloud ID progetto.
  • RESOURCE_URL è l'URL completo dell'immagine, nel formato: https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH. https:// deve essere incluso all'inizio dell'URL. Se devi trovare l'URL di un'immagine, puoi utilizzare la chiamata in Visualizza tutti i metadati di un progetto.

L'output include un elenco di vulnerabilità con dettagli quali la gravità, le opzioni di mitigazione, se disponibili, e il nome del pacchetto che contiene la vulnerabilità.

Controllare la presenza di una vulnerabilità specifica in un progetto

Nella maggior parte dei casi, Artifact Analysis utilizza l'ID CVE come identificatore della vulnerabilità. Tuttavia, nel database GitHub Advisory sono elencate alcune vulnerabilità che non hanno un ID CVE associato. In questo caso, Artifact Analysis utilizza l'ID GHSA.

L'ID vulnerabilità è incluso nel campo noteName. Inizia con il prefisso CVE per gli ID CVE e GHSA per gli ID GHSA. Considera il seguente output di esempio dell'esecuzione del comando per visualizzare tutte le vulnerabilità di un'immagine:

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

In questo esempio, la prima vulnerabilità ha l'ID CVE-2021-32798 e la seconda vulnerabilità ha l'ID GHSA-884p-74jh-xrg2.

Dopo aver ottenuto l'ID vulnerabilità, puoi eseguire il seguente comando per recuperare un elenco delle immagini interessate nel tuo progetto che hanno un ID occorrenza di 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

Dove:

  • PROJECT_ID è l' Google Cloud ID progetto.
  • VULN_ID è l'ID della vulnerabilità come ID CVE o numero ID GHSA, ad esempio CVE-2021-32798 o GHSA-884p-74jh-xrg2.

Cercare vulnerabilità in più progetti

Utilizza il globbing di curl per eseguire query in più progetti.

Ad esempio, il seguente snippet imposta una variabile in modo che contenga due ID progetto, poi invia una chiamata API per ogni progetto per cercare le occorrenze.

  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"

Dove:

  • PROJECT_ID_1 è l'ID progetto Google Cloud per il primo progetto che vuoi esaminare.
  • PROJECT_ID_2 è l'ID progetto Google Cloud del secondo progetto che vuoi esaminare.

Visualizzare tutti i metadati di un progetto

Richiedi tutte le occorrenze associate al tuo ID progetto:

  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

Dove:

  • PROJECT_ID è l' Google Cloud ID progetto.

L'output include informazioni sulle vulnerabilità e altri tipi di metadati supportati associati al tuo progetto. Ad esempio, il progetto potrebbe contenere dettagli di build o attestazioni.

Controllare la presenza di un pacchetto specifico in un progetto

Artifact Analysis crea dipendenze dei pacchetti per gli artefatti scansionati. Per trovare tutti gli artefatti che hanno un pacchetto specifico come dipendenza, puoi filtrare in base al nome del pacchetto:

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

Dove:

  • PROJECT_ID è l' Google Cloud ID progetto.
  • PACKAGE_NAME è il nome del pacchetto.

Visualizza tutti i metadati del pacchetto per un'immagine

Per visualizzare tutti i diversi tipi di metadati del pacchetto per un'immagine, utilizza il filtro kind=PACKAGE_NAME con l'ID progetto e l'URL completo della risorsa immagine:

 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

Dove:

  • PROJECT_ID è l' Google Cloud ID progetto.
  • RESOURCE_URL è l'URL completo dell'immagine, nel formato https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH. https:// deve essere incluso all'inizio dell'URL. Se devi trovare l'URL di un'immagine, puoi utilizzare la chiamata da Visualizza tutti i metadati di un progetto.

L'output include un elenco di dipendenze con il nome, la versione e le informazioni sulla licenza.

Esegui una query su un'occorrenza specifica per tutti i dettagli disponibili

Puoi eseguire una query per ulteriori dettagli su un'occorrenza. Ad esempio, se utilizzi Pub/Sub per ricevere notifiche relative alle occorrenze di vulnerabilità, Pub/Sub invia dettagli di base per aiutarti a identificare l'occorrenza modificata e quando è avvenuta la modifica.

Il payload include un ID occorrenza. Puoi utilizzare l'ID occorrenza per eseguire query per i dettagli che ti aiutano a stabilire la priorità dei problemi e a intervenire.

  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

Dove:

  • PROJECT_ID è l' Google Cloud ID progetto.
  • OCCURRENCE_ID può essere uno dei seguenti valori, a seconda dell'output del comando di Visualizzare tutti i metadati di un progetto:

    • Un valore numerico di un elenco di occorrenze.
    • Il valore numerico alla fine dell'URL di un messaggio Pub/Sub.

L'output include informazioni quali tipo di pacchetto, gravità della vulnerabilità, punteggio CVSS e informazioni sulle correzioni, se disponibili.

Passaggi successivi