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.
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 vulnPython (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
- Trivy source code : https://github.com/aquasecurity/trivy
- Trivy documentation : https://aquasecurity.github.io/