GNU/Linux >> Linux Esercitazione >  >> Linux

DevSecOps:scansione delle immagini nelle pipeline utilizzando lo scanner quay.io

Secondo il Sysdig 2021 Container Security and Usage Report, la sicurezza dei container è una preoccupazione crescente per molte organizzazioni. Tuttavia, ci sono ancora alcune lacune. La scansione delle immagini dei container e i container privilegiati sono due degli aspetti più cruciali.

I container rootless Podman (vedi Esecuzione di Podman rootless come utente non root e Container rootless con Podman:nozioni di base) e OpenShift Container Platform implementano entrambi il principio del privilegio minimo per impostazione predefinita, che aiuta gli amministratori a far rispettare le migliori pratiche di sicurezza. Le offerte di registro dei container di Red Hat quay.io e Red Hat quay aiutano gli amministratori e gli sviluppatori a incorporare la scansione delle vulnerabilità delle immagini nelle loro pipeline CI/CD.

[ Potresti anche divertirti a leggere: Integrazione di sistema migliorata con Podman 2.0 ]

Red Hat gestisce quay.io, un registro container pubblico ospitato. Gli individui o le imprese possono utilizzare il registro per archiviare e condividere le immagini del contenitore (all'interno di un'organizzazione o al pubblico in generale). Red Hat Universal Base Images (UBI) si basa su RHEL e offre un modo per creare e condividere liberamente le immagini delle tue applicazioni.

Il registro dispone di uno scanner di sicurezza integrato che verifica la presenza di vulnerabilità nelle immagini, fornisce dettagli sui pacchetti nell'immagine e identifica le vulnerabilità con le correzioni associate. Organizza le vulnerabilità in categorie di gravità Bassa, Media e Alta. Fornisce anche metadati come il numero CVE e un collegamento agli errata relativi alle vulnerabilità. Man mano che le immagini del contenitore invecchiano, vengono scoperti nuovi CVE, quindi per questo articolo daremo un'occhiata a una versione precedente di UBI. Ad esempio, al momento della stesura di questo articolo, una delle build specifiche di ubi8 (8.2-299) ha il seguente output che evidenzia 178 pacchetti (10 pacchetti ad alto impatto) e 38 vulnerabilità (10 alti).

L'interfaccia utente di quay.io fornisce le informazioni relative alle vulnerabilità in un formato intuitivo. È possibile sfogliare l'elenco dei pacchetti, controllare i pacchetti interessati e visualizzare i dettagli della vulnerabilità. Tuttavia, con le organizzazioni incentrate su DevSecOps, è utile ottenere queste informazioni al volo e utilizzarle prima di ogni distribuzione per garantire che solo immagini sicure arrivino all'ambiente di produzione.

Questo articolo presuppone una certa familiarità di base con i concetti di quay.io come repository, account robot e attività generali come build di immagini (usando DockerFiles) e tagging di immagini. Se sei interessato a saperne di più su questi concetti, puoi fare riferimento alle Guide per l'utente di quay.io.

Per ottenere le informazioni sulla scansione tramite la riga di comando, utilizza skopeo e jq comandi. Skopeo consente agli utenti non solo di ispezionare le immagini senza prima scaricarle su una macchina locale, ma supporta anche la copia di immagini da un repository (locale o remoto) a un altro.

Il comando seguente recupererà i metadati dell'immagine simili a docker inspect comando eseguito su un'immagine locale:

# IMAGE_NAME='app-sre/ubi8-ubi'
# IMAGE_TAG='8.2-299'
# skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG

Per ottenere il digest univoco dell'immagine, possiamo analizzare l'output json ricevuto usando il jq comando.

# IMAGE_DIGEST=`skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG | jq -r .Digest`

Con il digest, puoi ottenere il rapporto sulla sicurezza per l'immagine interrogando le API di quay.io. Possiamo memorizzare l'output (file json) in un file locale e utilizzare jq per filtrare il contenuto desiderato.

# curl -o `basename $IMAGE_NAME`.json https://quay.io/api/v1/repository/$IMAGE_NAME/manifest/$IMAGE_DIGEST/security?vulnerabilities=true

Ad esempio, per ottenere le informazioni relative alle vulnerabilità di gravità elevata con l'ID di avviso, l'URL di avviso, il nome del pacchetto, la versione interessata e la versione che contiene le correzioni associati, è possibile utilizzare il comando seguente:

jq '.data.Layer.Features[]' `basename $IMAGE_NAME`.json | jq -c '{"Name":.Name,"Version":.Version,"Advisory":.Vulnerabilities[]} | select(.Advisory.Severity=="High") | {"Advisory":.Advisory.Name,"Link":.Advisory.Link,"PACKAGE":.Name,"CURRENT VERSION":.Version,"FIXED IN VERSION":.Advisory.FixedBy }'

Il comando produce un output come il seguente che indica che questa immagine UBI (app-sre/ubi8-ubi) ha 10 notifiche di avviso:

{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-tools","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-libs","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-common","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-daemon","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:2755","Link":"https://access.redhat.com/errata/RHSA-2020:2755","PACKAGE":"libnghttp2","CURRENT VERSION":"1.33.0-1.el8_0.1","FIXED IN VERSION":"0:1.33.0-3.el8_2.1"}
{"Advisory":"RHSA-2020:5476","Link":"https://access.redhat.com/errata/RHSA-2020:5476","PACKAGE":"openssl-libs","CURRENT VERSION":"1:1.1.1c-15.el8","FIXED IN VERSION":"1:1.1.1g-12.el8_3"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"python3-librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:2637","Link":"https://access.redhat.com/errata/RHSA-2020:2637","PACKAGE":"gnutls","CURRENT VERSION":"3.6.8-10.el8_2","FIXED IN VERSION":"0:3.6.8-11.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}

[ Corso gratuito:Panoramica tecnica di Red Hat Satellite. ] 

Concludi

Nella parte successiva di questa serie di articoli, incorporo le informazioni di questo articolo in una pipeline di esempio per prendere decisioni informate sull'opportunità di procedere con questa immagine e distribuire le applicazioni in produzione.


Linux
  1. Costruisci il tuo container su Linux

  2. Velocizzare le build di immagini del contenitore con Buildah

  3. Trovare dispositivi canaglia nella tua rete usando Nmap

  4. Aggiungi questi 4 strumenti alla tua cassetta degli attrezzi del contenitore Linux

  5. Cosa c'è all'interno di un'immagine/contenitore Docker?

Gestisci i tuoi giochi usando Lutris in Linux

Utilizzo di Telnet per la risoluzione dei problemi del sistema di posta

Costruire un container Linux a mano usando gli spazi dei nomi

Un'introduzione al registro dei container Quay

Come ridimensionare le immagini usando Python

Skanlite – Un semplice strumento di scansione delle immagini per Linux