Docker Scout - Testa la sicurezza delle tue immagini

Immagine di copertina

Una delle ultime novità in casa Docker è Docker Scout: un tool per analizzare e gestire le vulnerabilità presenti nelle immagini prodotte disponibile a partire dalla versione 4.17 di Docker Desktop.

Infatti, quando creiamo delle immagini per le nostre applicazioni, stiamo utilizzando diverse immagini di partenza che, stratificandosi, creano una nuova immagine. Questo vuol dire che alcuni di questi layer potrebbe avere delle vulnerabilità di sicurezza che rendono la nostra immagine non “sicura”.

Docker Scout è un tool che permette agli utenti di essere proattivi nel lavorare sulla sicurezza dei container: eseguendo una scansione di un’immagine, analizza ogni layer presente nell’immagine e crea un elenco dettagliato delle componenti che la compongono, fornendo un Software Bill of Materials (abbreviato in SBOM).

Con questa lista, Docker Scout verifica attraverso un database di vulnerabilità note quali sono le possibili patch da applicare e le riporta all’utente.

Installazione

Questo strumento può essere usato con Docker Desktop, Docker Hub o anche attraverso la CLI di Docker, come riportato nell’esempio di seguito: eseguendo l’accesso all’account Docker e permettendo l’analisi del repository di interesse, è possibile lanciare il comando docker scout cves per analizzare l’immagine e le relative vulnerabilità.

L’unico requisito è aver installato Docker Engine: se non l’hai fatto, e sei su Ubuntu 20+, puoi usare questi comandi:

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb arch=amd64 https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
sudo usermod -aG docker $USER

Poi, per installare Docker Scout CLI, si può procedere con l’installazione a partire dal repo ufficiale di GitHub:

curl -fsSL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh -o install-scout.sh
sh install-scout.sh

Questo script scarica e installa l’ultimo file binario docker-scout nella directory dei plugin della Docker CLI. Puoi verificare l’installazione con il comando docker scout –help e poi utilizzare i diversi comandi messi a disposizione dallo strumento per analizzare un repository remoto:

docker login
docker scout repo enable --org ORG_NAME MY-ORG/MY-REPO
docker scout cves ORG_NAME/MY-REPO:1.0.0

Credits to Docker official documentation

Per eseguire invece una scansione in locale, è sufficiente specificare l’immagine e il tag, e l’output riporterà l’analisi dell’immagine e restituirà un elenco delle vulnerabilità rilevate, con relativa gravità, nome del pacchetto e identificatore CVE.

docker scout cves [YOUR_IMAGE]:[YOUR_TAG]
 
>>>
 
## Packages and Vulnerabilities
 
   2C     1H     0M     0L  expat 2.5.0-1
pkg:deb/debian/expat@2.5.0-1?os_distro=bookworm&os_name=debian&os_version=12
 
    ✗ CRITICAL CVE-2024-45492
      https://scout.docker.com/v/CVE-2024-45492
      Affected range : <2.5.0-1+deb12u1
      Fixed version  : 2.5.0-1+deb12u1
 
    ✗ CRITICAL CVE-2024-45491
      https://scout.docker.com/v/CVE-2024-45491
      Affected range : <2.5.0-1+deb12u1
      Fixed version  : 2.5.0-1+deb12u1
 
    ✗ HIGH CVE-2024-45490
      https://scout.docker.com/v/CVE-2024-45490
      Affected range : <2.5.0-1+deb12u1
      Fixed version  : 2.5.0-1+deb12u1

La scansione restituisce valori diversi. Diamo un’occhiata:

  • ID CVE: Identificativo univoco della vulnerabilità (ad esempio, CVE-2022-1234).
  • Livello: Indica il livello di rischio (BASSO, MEDIO, ALTO, CRITICO).
  • Pacchetto: Il pacchetto software interessato nell’immagine.
  • Versione: La versione del pacchetto presente nell’immagine.
  • Versione con patch: La versione in cui è stata risolta la vulnerabilità.
  • Descrizione: Breve riepilogo della vulnerabilità.

Quindi, se il risultato riporta qualcosa di simile:

...
CVE-2022-1234 | HIGH | openssl | 1.1.1f | 1.1.1g | Buffer overflow in XYZ
...

L’immagine contiene openssl versione 1.1.1f, che è vulnerabile a un buffer overflow di livello critico. Il problema è stato risolto nella versione 1.1.1 e, per risolverlo, è necessario aggiornare l’immagine di base o il pacchetto almeno alla versione 1.1.1.

E per ottenere gli aggiornamenti disponibili dell’immagine di base e suggerimenti per aggiornarla? Puoi usare il comando docker scout recommendations, in cui l’output mostra un elenco di vantaggi, come vulnerabilità di che livello, o immagini più leggere, ecc.

...
docker scout recommendations [YOUR_IMAGE]:[YOUR_TAG]
 
>>>
 
    ✓ Image stored for indexing
    ✓ Indexed 685 packages
 
    i Base image was auto-detected. To get more accurate recommendations, build images with max-mode provenance attestations.
      Review docs.docker.com ↗ for more information.
      Alternatively, use  docker scout recommendations --tag <base image tag>  to pass a specific base image tag.
 
  Target   │  [YOUR_IMAGE]:[YOUR_TAG]
    digest │  xyz
 
## Recommended fixes
 
  Base image is  python:3.10
 
  Name            │  3.10
  Digest          │  sha256:abc
  Vulnerabilities │   10C    49H    66M   107L     6?
  Pushed          │ 2 years ago
  Size            │ 375 MB
  Packages        │ 573
  Flavor          │ debian
  OS              │ 12
  Runtime         │ 3.10.12
 
 
  │ The base image is also available under the supported tag(s)  3.10-bookworm . If you want to display
  │ recommendations specifically for a different tag, please re-run the command using the  --tag  flag.
 
 
 
Refresh base image
  Rebuild the image using a newer base image version. Updating this may result in breaking changes.
 
 
            Tag            │                   Details                   │   Pushed    │          Vulnerabilities
───────────────────────────┼─────────────────────────────────────────────┼─────────────┼─────────────────────────────────────
   3.10                    │ Benefits:                                   │ 3 weeks ago │    0C     4H     5M   147L     4?
  Newer image for same tag │ • Patch runtime version update              │             │   -10    -45    -61    +40     -2
  Also known as:           │ • Newer image for same tag                  │             │
  • 3.10.17                │ • Tag was pushed more recently              │             │
  • 3.10.17-bookworm       │ • Image has similar size                    │             │
  • 3.10-bookworm          │ • Image contains similar number of packages │             │
                           │ • 3.10 was pulled 372K times last month     │             │
                           │                                             │             │
                           │ Image details:                              │             │
                           │ • Size: 376 MB                              │             │
                           │ • Flavor: debian                            │             │
                           │ • OS: 12                                    │             │
                           │ • Runtime: 3.10.17                          │             │
                           │                                             │             │
                           │                                             │             │
                           │                                             │             │
 
 
Change base image
  The list displays new recommended tags in descending order, where the top results are rated as most suitable.
 
 
              Tag              │                         Details                         │   Pushed    │          Vulnerabilities
───────────────────────────────┼─────────────────────────────────────────────────────────┼─────────────┼─────────────────────────────────────
   3.10-slim                   │ Benefits:                                               │ 3 weeks ago │    0C     1H     2M    29L
  Patch runtime version update │ • Patch runtime version update                          │             │   -10    -48    -64    -78     -6

Docker Scout può essere utilizzato senza limiti per le immagini locali, e al massimo per 3 repository remoti nel caso di un account free; per saperne di più sui prezzi delle licenze, è possibile consultare la documentazione ufficiale.

Risorse utili


🔗 Leggi anche:

Conosci meglio chi ha scritto questo articolo

Serena Sensini

Ciao! Mi chiamo Serena Sensini e sono la creatrice di @ TheRedCode.it. Ho aperto questo blog nel 2021 per raccontare il mio lavoro e il mondo dell’informatica a parole semplici, in piccole pillole e alla portata di tutte le persone.

Sono un’ingegnera informatica specializzata in ambito AI & NLP. Di giorno lavoro come CTO @ Welyk e come Innovation & Emerging Technologies Leader @ Dedalus, mentre di notte scrivo e sono autrice di 5 libri -per ora-. 🖊️

Foto di Serena Sensini

Partners

Community, aziende e persone che supportano attivamente il blog

Vuoi diventare partner?

Collaboriamo con community, aziende e strumenti del mondo tech che vogliono raggiungere la nostra community di dev ed engineer italiani. Scrivici per proporre una collaborazione.

Vuoi diventare tech content creator? 🖊️

Se ti va di raccontare la tua esperienza nel mondo tech, questo è il posto giusto.

Cerchiamo voci autentiche, esempi pratici e punti di vista utili per chi legge.

Scrivici a collaborazioni[at]theredcode.it con una proposta: idea, taglio del contenuto e una breve presentazione. Non vediamo l'ora di leggere la tua esperienza!

Invia la tua idea