La sécurité est de plus en plus présente dans les Systèmes d’Information des entreprises. La sécurité est l’affaire de tous, et elle commence au plus près de la source : le développeur.

Je vous propose de scanner les vulnérabilités de vos images Docker

Certains diront que c’est un métier, mais il faut plutôt le voir comme une culture avec laquelle il faut vivre en harmonie. Le monde de l’open-source regorge de trouvailles “gratuites” et “efficientes”, pourquoi s’en priver, surtout quand elles vous protègent et empêche des désagréments de taille.

Présentation de Trivy

Trivy est une solution open source développée par AquaSecurity.

Usage

docker pull alpine
trivy image alpine

Scanner ses images Docker et trouver les vulnérabilités n’a jamais aussi simple.

La sortie de la commande vous remonte les paquet vulnérables, c’es-a-dire qui possède une vulnérabilité connue dans les bases de données d’AquaSecurity (étroitement connectées à celle du MITRE/NVD).

Les vulnérabilité (également appelé vuln) sont catégorisées par criticité/dangerosité sur base d’un score. Le score calculé, qui est entre 0 et 10, reflète la gravité de la vulnérabilité. Plus la gravité est élevée (s’approche de 10) plus la vuln est critique.

Le score vit dans un référentiel appelé CVSS. Ce référentiel possède plusieurs versions. La version la plus pertinente (car plus précise) est la v3 (à l’heure actuelle). Le site qui suit explique et détaille le CVSS selon la version.

https://nvd.nist.gov/vuln-metrics/cvss

Détail et explications

Inspectons et détaillons ensemble le résultat obtenu pour l’image Docker python:3.11-alpine.

trivy image python:3.11-alpine

Sortie standard:

2023-12-21T23:21:01.965+0100    INFO    Vulnerability scanning is enabled
2023-12-21T23:21:01.966+0100    INFO    Secret scanning is enabled
2023-12-21T23:21:01.966+0100    INFO    If your scanning is slow, please try '--scanners vuln' to disable secret scanning
2023-12-21T23:21:01.966+0100    INFO    Please see also https://aquasecurity.github.io/trivy/v0.45/docs/scanner/secret/#recommendation for faster secret detection
2023-12-21T23:21:05.143+0100    INFO    Detected OS: alpine
2023-12-21T23:21:05.143+0100    INFO    This OS version is not on the EOL list: alpine 3.19
2023-12-21T23:21:05.143+0100    INFO    Detecting Alpine vulnerabilities...
2023-12-21T23:21:05.146+0100    INFO    Number of language-specific files: 1
2023-12-21T23:21:05.146+0100    INFO    Detecting python-pkg vulnerabilities...

python:3.11-alpine (alpine 3.19.0)

Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

2023-12-21T23:21:05.153+0100    INFO    Table result includes only package filenames. Use '--format json' option to get the full path to the package file.

Python (python-pkg)

Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 0, CRITICAL: 0)

┌────────────────┬───────────────┬──────────┬────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────┐
│    Library     │ Vulnerability │ Severity │ Status │ Installed Version │ Fixed Version │                          Title                           │
├────────────────┼───────────────┼──────────┼────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────┤
│ pip (METADATA) │ CVE-2023-5752 │ MEDIUM   │ fixed  │ 23.2.1            │ 23.3          │ pip: Mercurial configuration injectable in repo revision │
│                │               │          │        │                   │               │ when installing via pip                                  │
│                │               │          │        │                   │               │ https://avd.aquasec.com/nvd/cve-2023-5752                │
└────────────────┴───────────────┴──────────┴────────┴───────────────────┴───────────────┴──────────────────────────────────────────────────────────┘
2023-12-21T23:21:01.965+0100    INFO    Vulnerability scanning is enabled
2023-12-21T23:21:01.966+0100    INFO    Secret scanning is enabled
2023-12-21T23:21:01.966+0100    INFO    If your scanning is slow, please try '--scanners vuln' to disable secret scanning
2023-12-21T23:21:01.966+0100    INFO    Please see also https://aquasecurity.github.io/trivy/v0.45/docs/scanner/secret/#recommendation for faster secret detection
2023-12-21T23:21:05.143+0100    INFO    Detected OS: alpine
2023-12-21T23:21:05.143+0100    INFO    This OS version is not on the EOL list: alpine 3.19
2023-12-21T23:21:05.143+0100    INFO    Detecting Alpine vulnerabilities...
2023-12-21T23:21:05.146+0100    INFO    Number of language-specific files: 1
2023-12-21T23:21:05.146+0100    INFO    Detecting python-pkg vulnerabilities...

python:3.11-alpine (alpine 3.19.0)

Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

2023-12-21T23:21:05.153+0100    INFO    Table result includes only package filenames. Use '--format json' option to get the full path to the package file.

Python (python-pkg)

Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 0, CRITICAL: 0)

┌─────────┬───────────────┬──────────┬────────┬──────────────┬─────────────┬─────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Status │ Inst Version │ Fix Version │                          Title                  │
├─────────┼───────────────┼──────────┼────────┼──────────────┼─────────────┼─────────────────────────────────────────────────┤
│ pip     │ CVE-2023-5752 │ MEDIUM   │ fixed  │ 23.2.1       │ 23.3        │ pip: Mercurial configuration injectable in repo │
│         │               │          │        │              │             │ revision when installing via pip                │
│         │               │          │        │              │             │ https://avd.aquasec.com/nvd/cve-2023-5752       │
└─────────┴───────────────┴──────────┴────────┴──────────────┴─────────────┴─────────────────────────────────────────────────┘

Vous remarquerez que l’écran est découpé en section qui ont pour titre les sections suivantes :

  • python:3.11-alpine (alpine 3.19.0) : Aucune vuln
  • Python (python-pkg) : Possède 1 vuln Medium

Ce sont les Docker Layers générales qui ressortent et qui permettent de rassembler les vulns par ensemble de layers. Ce découpage permet de meixu cibler les layers à sécuriser.

La modification des layers de couche basse (les premiers layers) entrainent naturellement un changement dans les layers de couche haute. La différentiation vient de la dépendance des couches de layers.

Bibliographie