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).
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042810370032.jpg)
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042810370004.jpg)
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.