Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:docker3:drf06 [2021/12/29 10:33] adminelearning:workbooks:docker3:drf06 [2024/02/21 13:40] (Version actuelle) admin
Ligne 1: Ligne 1:
- 
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2022.01**+Version : **2024.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
Ligne 16: Ligne 15:
     * LAB #3 - Le Script docker-bench-security.sh     * LAB #3 - Le Script docker-bench-security.sh
     * LAB #4 - Sécurisation de la Configuration de l'Hôte Docker     * LAB #4 - Sécurisation de la Configuration de l'Hôte Docker
-      * 4.1 - [WARN] 1.2.1 - Ensure a separate partition for containers has been created 
-      * 4.2 - [WARN] 1.2.3 - Ensure auditing is configured for the Docker daemon 
     * LAB #5 - Sécurisation de la Configuration du daemon Docker     * LAB #5 - Sécurisation de la Configuration du daemon Docker
-      * 5.1 - [WARN] 2.1 - Ensure network traffic is restricted between containers on the default bridge +      * 5.1 - Le Fichier /etc/docker/daemon.json
-      * 5.2 - [WARN] 2.8 - Enable user namespace support +
-      * 5.3 - [WARN] 2.11 - Ensure that authorization for Docker client commands is enabled +
-      * 5.4 - [WARN] 2.12 - Ensure centralized and remote logging is configured +
-      * 5.5 - [WARN] 2.14 - Ensure Userland Proxy is Disabled +
-      * 5.6 - [WARN] 2.17 - Ensure containers are restricted from acquiring new privileges +
-      * 5.7 - Le Fichier /etc/docker/daemon.json+
     * LAB #6 - Sécurisation des Images et les Fichiers de Construction     * LAB #6 - Sécurisation des Images et les Fichiers de Construction
-      * 6.1 - [WARN] 4.1 - Ensure a user for the container has been created 
-      * 6.2 - [WARN] 4.5 - Ensure Content trust for Docker is Enabled 
-      * 6.3 - [WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images 
     * LAB #7 - Sécurisation du Container Runtime     * LAB #7 - Sécurisation du Container Runtime
-      * 7.1 - [WARN] 5.1 - Ensure AppArmor Profile is Enabled 
-      * 7.2 - [WARN] 5.2 - Ensure SELinux security options are set, if applicable 
-      * 7.3 - [WARN] 5.10 - Ensure memory usage for container is limited 
-      * 7.4 - [WARN] 5.11 - Ensure CPU priority is set appropriately on the container 
-      * 7.5 - [WARN] 5.12 - Ensure the container's root filesystem is mounted as read only 
-      * 7.6 - [WARN] 5.14 - Ensure 'on-failure' container restart policy is set to '5' 
-      * 7.7 - [WARN] 5.25 - Ensure the container is restricted from acquiring additional privileges 
-      * 7.8 - [WARN] 5.26 - Ensure container health is checked at runtime 
-      * 7.9 - [WARN] 5.28 - Ensure PIDs cgroup limit is used 
     * LAB #8 - Sécurisation des Images avec Docker Content Trust     * LAB #8 - Sécurisation des Images avec Docker Content Trust
       * 8.1 - DOCKER_CONTENT_TRUST       * 8.1 - DOCKER_CONTENT_TRUST
Ligne 99: Ligne 78:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez l'utilisation du caractère **-** à la fin de la ligne. Celui-ci indique à la commande **docker secret** de lire le contenu du secret pg_user à partir de l'entrée standard. **Important** : Notez l'utilisation du caractère **-** à la fin de la ligne. Celui-ci indique à la commande **docker secret** de lire le contenu du secret pg_user à partir de l'entrée standard.
 </WRAP> </WRAP>
Ligne 111: Ligne 90:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que la colonne **DRIVER** est vide. Ceci indique que le gestion des secrets est accomplie par Docker lui-même au lieu d'être déléguée à un plugin tiers. **Important** : Notez que la colonne **DRIVER** est vide. Ceci indique que le gestion des secrets est accomplie par Docker lui-même au lieu d'être déléguée à un plugin tiers.
 </WRAP> </WRAP>
Ligne 124: Ligne 103:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez qu'un secret Docker est immuable. **Important** : Notez qu'un secret Docker est immuable.
 </WRAP> </WRAP>
Ligne 158: Ligne 137:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : On peut constater dans la sortie de cette commande la valeur **CreatedAt** qui correspond à la date de création du secret ainsi que **UpdatedAt** qui correspond à la date de modification du secret. **Important** : On peut constater dans la sortie de cette commande la valeur **CreatedAt** qui correspond à la date de création du secret ainsi que **UpdatedAt** qui correspond à la date de modification du secret.
 </WRAP> </WRAP>
Ligne 231: Ligne 210:
 </file> </file>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Le terme **externe** indique que les secrets ne seront pas stockés dans l'image construite mais **uniquement** dans le conteneur créé. **Important** : Le terme **externe** indique que les secrets ne seront pas stockés dans l'image construite mais **uniquement** dans le conteneur créé.
 </WRAP> </WRAP>
Ligne 246: Ligne 225:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez a présence de l'erreur **Ignoring unsupported options: restart**. Celle-ci est due au fait que la directive **restart** est compatible avec la commande **docker-compose** mais pas avec la commande **docker stack**. La directive qui aurait du être utilisée dans le fichier est **restart_policy:**. **Important** : Notez a présence de l'erreur **Ignoring unsupported options: restart**. Celle-ci est due au fait que la directive **restart** est compatible avec la commande **docker-compose** mais pas avec la commande **docker stack**. La directive qui aurait du être utilisée dans le fichier est **restart_policy:**.
 </WRAP> </WRAP>
Ligne 315: Ligne 294:
 <code> <code>
 trainee@manager:~$ su - trainee@manager:~$ su -
-Mot de passe : fenestros+Password: fenestros 
 root@manager:~# git clone https://github.com/docker/docker-bench-security.git root@manager:~# git clone https://github.com/docker/docker-bench-security.git
-Clonage dans 'docker-bench-security'...+Cloning in 'docker-bench-security'...
 remote: Enumerating objects: 18, done. remote: Enumerating objects: 18, done.
 remote: Counting objects: 100% (18/18), done. remote: Counting objects: 100% (18/18), done.
 remote: Compressing objects: 100% (16/16), done. remote: Compressing objects: 100% (16/16), done.
 remote: Total 1921 (delta 5), reused 6 (delta 2), pack-reused 1903 remote: Total 1921 (delta 5), reused 6 (delta 2), pack-reused 1903
-Réception d'objets: 100% (1921/1921), 2.90 MiB | 908.00 KiB/s, fait+Receiving objects: 100% (1921/1921), 2.90 MiB | 908.00 KiB/s, done
-Résolution des deltas: 100% (1339/1339), fait.+Delta resolution: 100% (1339/1339), done.
 </code> </code>
  
Ligne 330: Ligne 310:
 <code> <code>
 root@manager:~# cd docker-bench-security/ root@manager:~# cd docker-bench-security/
 +
 root@manager:~/docker-bench-security# ./docker-bench-security.sh root@manager:~/docker-bench-security# ./docker-bench-security.sh
-# ------------------------------------------------------------------------------ +-------------------------------------------------------------------------------------------- 
-# Docker Bench for Security v1.3.5+# Docker Bench for Security v1.6.0
 # #
-# Docker, Inc. (c) 2015-+# Docker, Inc. (c) 2015-2023
 # #
 # Checks for dozens of common best-practices around deploying Docker containers in production. # Checks for dozens of common best-practices around deploying Docker containers in production.
-Inspired by the CIS Docker Benchmark v1.2.0. +Based on the CIS Docker Benchmark 1.6.0. 
-# ------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------
  
-Initializing vendredi 8 novembre 2019, 12:12:03 (UTC+0100)+Initializing 2023-12-17T14:22:08+01:00
  
  
-[INFO] 1 Host Configuration+Section A Check results
  
-[INFO] 1.1 - General Configuration +[INFO] 1 - Host Configuration 
-[NOTE] 1.1.1  - Ensure the container host has been Hardened +[INFO] 1.1 - Linux Hosts Specific Configuration 
-[INFO] 1.1.2  - Ensure Docker is up to date+[WARN] 1.1.1 - Ensure a separate partition for containers has been created (Automated) 
 +[INFO] 1.1.2 - Ensure only trusted users are allowed to control Docker daemon (Automated) 
 +[INFO]       * Users: trainee 
 +[WARN] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated) 
 +[WARN] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) 
 +[WARN] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated) 
 +[WARN] 1.1.6 - Ensure auditing is configured for Docker files and directories - /etc/docker (Automated) 
 +[WARN] 1.1.7 - Ensure auditing is configured for Docker files and directories - docker.service (Automated) 
 +[INFO] 1.1.8 - Ensure auditing is configured for Docker files and directories - containerd.sock (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.9 - Ensure auditing is configured for Docker files and directories - docker.socket (Automated) 
 +[WARN] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated) 
 +[INFO] 1.1.11 - Ensure auditing is configured for Dockerfiles and directories - /etc/docker/daemon.json (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.12 - 1.1.12 Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated) 
 +[INFO] 1.1.13 - Ensure auditing is configured for Docker files and directories - /etc/sysconfig/docker (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated) 
 +[WARN] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated) 
 +[INFO] 1.1.16 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v1 (Automated) 
 +[INFO]         * File not found 
 +[INFO] 1.1.17 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v2 (Automated) 
 +[INFO]         * File not found 
 +[WARN] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated) 
 +[INFO] 1.2 - General Configuration 
 +[NOTE] 1.2.1 - Ensure the container host has been Hardened (Manual) 
 +[PASS] 1.2.2 - Ensure that the version of Docker is up to date (Manual)
 [INFO]        * Using 19.03.4, verify is it up to date as deemed necessary [INFO]        * Using 19.03.4, verify is it up to date as deemed necessary
-[INFO]        * Your operating system vendor may provide support and security maintenance for Docker 
  
-[INFO] 1.2 - Linux Hosts Specific Configuration +[INFO] 2 - Docker daemon configuration 
-[WARN] 1.2.1 - Ensure a separate partition for containers has been created +[NOTE] 2.- Run the Docker daemon as a non-root user, if possible (Manual) 
-...+[WARN] 2.2 - Ensure network traffic is restricted between containers on the default bridge (Scored) 
 +[PASS] 2.3 - Ensure the logging level is set to 'info' (Scored) 
 +[PASS] 2.4 - Ensure Docker is allowed to make changes to iptables (Scored) 
 +[PASS] 2.5 - Ensure insecure registries are not used (Scored) 
 +[PASS] 2.6 - Ensure aufs storage driver is not used (Scored) 
 +[INFO] 2.7 - Ensure TLS authentication for Docker daemon is configured (Scored) 
 +[INFO]      * Docker daemon not listening on TCP 
 +[INFO] 2.8 - Ensure the default ulimit is configured appropriately (Manual) 
 +[INFO]      * Default ulimit doesn't appear to be set 
 +[WARN] 2.9 - Enable user namespace support (Scored) 
 +[PASS] 2.10 - Ensure the default cgroup usage has been confirmed (Scored) 
 +[PASS] 2.11 - Ensure base device size is not changed until needed (Scored) 
 +[WARN] 2.12 - Ensure that authorization for Docker client commands is enabled (Scored) 
 +[WARN] 2.13 - Ensure centralized and remote logging is configured (Scored) 
 +[WARN] 2.14 - Ensure containers are restricted from acquiring new privileges (Scored) 
 +[WARN] 2.15 - Ensure live restore is enabled (Scored) 
 +[WARN] 2.16 - Ensure Userland Proxy is Disabled (Scored) 
 +[PASS] 2.17 - Ensure that a daemon-wide custom seccomp profile is applied if appropriate (Manual) 
 +[PASS] 2.18 - Ensure that experimental features are not implemented in production (Scored) 
 + 
 +[INFO] 3 - Docker daemon configuration files 
 +[PASS] 3.- Ensure that the docker.service file ownership is set to root:root (Automated) 
 +[PASS] 3.2 - Ensure that docker.service file permissions are appropriately set (Automated) 
 +[PASS] 3.3 - Ensure that docker.socket file ownership is set to root:root (Automated) 
 +[PASS] 3.4 - Ensure that docker.socket file permissions are set to 644 or more restrictive (Automated) 
 +[PASS] 3.5 - Ensure that the /etc/docker directory ownership is set to root:root (Automated) 
 +[PASS] 3.6 - Ensure that /etc/docker directory permissions are set to 755 or more restrictively (Automated) 
 +[INFO] 3.7 - Ensure that registry certificate file ownership is set to root:root (Automated) 
 +[INFO]      * Directory not found 
 +[INFO] 3.8 - Ensure that registry certificate file permissions are set to 444 or more restrictively (Automated) 
 +[INFO]      * Directory not found 
 +[INFO] 3.9 - Ensure that TLS CA certificate file ownership is set to root:root (Automated) 
 +[INFO]      * No TLS CA certificate found 
 +[INFO] 3.10 - Ensure that TLS CA certificate file permissions are set to 444 or more restrictively (Automated) 
 +[INFO]       * No TLS CA certificate found 
 +[INFO] 3.11 - Ensure that Docker server certificate file ownership is set to root:root (Automated) 
 +[INFO]       * No TLS Server certificate found 
 +[INFO] 3.12 - Ensure that the Docker server certificate file permissions are set to 444 or more restrictively (Automated) 
 +[INFO]       * No TLS Server certificate found 
 +[INFO] 3.13 - Ensure that the Docker server certificate key file ownership is set to root:root (Automated) 
 +[INFO]       * No TLS Key found 
 +[INFO] 3.14 - Ensure that the Docker server certificate key file permissions are set to 400 (Automated) 
 +[INFO]       * No TLS Key found 
 +[PASS] 3.15 - Ensure that the Docker socket file ownership is set to root:docker (Automated) 
 +[PASS] 3.16 - Ensure that the Docker socket file permissions are set to 660 or more restrictively (Automated) 
 +[INFO] 3.17 - Ensure that the daemon.json file ownership is set to root:root (Automated) 
 +[INFO]       * File not found 
 +[INFO] 3.18 - Ensure that daemon.json file permissions are set to 644 or more restrictive (Automated) 
 +[INFO]       * File not found 
 +[PASS] 3.19 - Ensure that the /etc/default/docker file ownership is set to root:root (Automated) 
 +[PASS] 3.20 - Ensure that the /etc/default/docker file permissions are set to 644 or more restrictively (Automated) 
 +[INFO] 3.21 - Ensure that the /etc/sysconfig/docker file permissions are set to 644 or more restrictively (Automated) 
 +[INFO]       * File not found 
 +[INFO] 3.22 - Ensure that the /etc/sysconfig/docker file ownership is set to root:root (Automated) 
 +[INFO]       * File not found 
 +[PASS] 3.23 - Ensure that the Containerd socket file ownership is set to root:root (Automated) 
 +[PASS] 3.24 - Ensure that the Containerd socket file permissions are set to 660 or more restrictively (Automated) 
 + 
 +[INFO] 4 - Container Images and Build File 
 +[INFO] 4.1 - Ensure that user for the container has been created (Automated) 
 +[INFO]      * No containers running 
 +[NOTE] 4.2 - Ensure that containers use only trusted base images (Manual) 
 +[NOTE] 4.3 - Ensure that unnecessary packages are not installed in the container (Manual) 
 +[NOTE] 4.4 - Ensure images are scanned and rebuilt to include security patches (Manual) 
 +[WARN] 4.5 - Ensure Content trust for Docker is Enabled (Automated) 
 +[WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images (Automated) 
 +[WARN]      * No Healthcheck found: [nginx:latest] 
 +[WARN]      * No Healthcheck found: [alpine:latest] 
 +[WARN]      * No Healthcheck found: [ubuntu:latest] 
 +[WARN]      * No Healthcheck found: [centos:latest] 
 +[PASS] 4.7 - Ensure update instructions are not used alone in the Dockerfile (Manual) 
 +[NOTE] 4.8 - Ensure setuid and setgid permissions are removed (Manual) 
 +[PASS] 4.9 - Ensure that COPY is used instead of ADD in Dockerfiles (Manual) 
 +[NOTE] 4.10 - Ensure secrets are not stored in Dockerfiles (Manual) 
 +[NOTE] 4.11 - Ensure only verified packages are installed (Manual) 
 +[NOTE] 4.12 - Ensure all signed artifacts are validated (Manual) 
 + 
 +[INFO] 5 - Container Runtime 
 +[INFO]   * No containers running, skipping Section 5 
 + 
 +[INFO] 6 - Docker Security Operations 
 +[INFO] 6.1 - Ensure that image sprawl is avoided (Manual) 
 +[INFO]      * There are currently: 4 images 
 +[INFO]      * Only 0 out of 4 are in use 
 +[INFO] 6.2 - Ensure that container sprawl is avoided (Manual) 
 +[INFO]      * There are currently a total of 0 containers, with 0 of them currently running 
 + 
 +[INFO] 7 - Docker Swarm Configuration 
 +[WARN] 7.1 - Ensure swarm mode is not Enabled, if not needed (Automated) 
 +[PASS] 7.2 - Ensure that the minimum number of manager nodes have been created in a swarm (Automated) (Swarm mode not enabled) 
 +[PASS] 7.3 - Ensure that swarm services are bound to a specific host interface (Automated) (Swarm mode not enabled) 
 +[PASS] 7.4 - Ensure that all Docker swarm overlay networks are encrypted (Automated) 
 +[PASS] 7.5 - Ensure that Docker's secret management commands are used for managing secrets in a swarm cluster (Manual) (Swarm mode not enabled) 
 +[PASS] 7.6 - Ensure that swarm manager is run in auto-lock mode (Automated) (Swarm mode not enabled) 
 +[PASS] 7.7 - Ensure that the swarm manager auto-lock key is rotated periodically (Manual) (Swarm mode not enabled) 
 +[PASS] 7.8 - Ensure that node certificates are rotated as appropriate (Manual) (Swarm mode not enabled) 
 +[PASS] 7.9 - Ensure that CA certificates are rotated as appropriate (Manual) (Swarm mode not enabled) 
 +[PASS] 7.10 - Ensure that management plane traffic is separated from data plane traffic (Manual) (Swarm mode not enabled) 
 + 
 + 
 +Section C - Score 
 + 
 +[INFO] Checks: 86 
 +[INFO] Score: 1
 </code> </code>
  
Ligne 370: Ligne 479:
 ... ...
 [INFO] 1 - Host Configuration [INFO] 1 - Host Configuration
- +[INFO] 1.1 - Linux Hosts Specific Configuration 
-[INFO] 1.1 - General Configuration +[WARN] 1.1.1 - Ensure a separate partition for containers has been created (Automated) 
-[NOTE] 1.1.1  - Ensure the container host has been Hardened +[INFO] 1.1.2 - Ensure only trusted users are allowed to control Docker daemon (Automated) 
-[INFO] 1.1.2  - Ensure Docker is up to date +[INFO]       Users: trainee 
-[INFO]        * Using 19.03.4, verify is it up to date as deemed necessary +[WARN] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated) 
-[INFO]        * Your operating system vendor may provide support and security maintenance for Docker +[WARN] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) 
- +[WARN] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated) 
-[INFO] 1.2 - Linux Hosts Specific Configuration +[WARN] 1.1.6 - Ensure auditing is configured for Docker files and directories - /etc/docker (Automated) 
-[WARN] 1.2.1 - Ensure a separate partition for containers has been created +[WARN] 1.1.7 - Ensure auditing is configured for Docker files and directories - docker.service (Automated) 
-[INFO] 1.2.2  - Ensure only trusted users are allowed to control Docker daemon +[INFO] 1.1.8 - Ensure auditing is configured for Docker files and directories - containerd.sock (Automated)
-[INFO]        docker:x:999:trainee +
-[WARN] 1.2.3  - Ensure auditing is configured for the Docker daemon +
-[WARN] 1.2.4  - Ensure auditing is configured for Docker files and directories - /var/lib/docker +
-[WARN] 1.2.5  - Ensure auditing is configured for Docker files and directories - /etc/docker +
-[WARN] 1.2.6  - Ensure auditing is configured for Docker files and directories - docker.service +
-[WARN] 1.2.7  - Ensure auditing is configured for Docker files and directories - docker.socket +
-[WARN] 1.2.8  - Ensure auditing is configured for Docker files and directories - /etc/default/docker +
-[INFO] 1.2.9  - Ensure auditing is configured for Docker files and directories - /etc/sysconfig/docker+
 [INFO]        * File not found [INFO]        * File not found
-[INFO] 1.2.10  - Ensure auditing is configured for Docker files and directories - /etc/docker/daemon.json+[WARN] 1.1.9 - Ensure auditing is configured for Docker files and directories - docker.socket (Automated) 
 +[WARN] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated) 
 +[INFO] 1.1.11 - Ensure auditing is configured for Dockerfiles and directories - /etc/docker/daemon.json (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.12 - 1.1.12 Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated) 
 +[INFO] 1.1.13 - Ensure auditing is configured for Docker files and directories - /etc/sysconfig/docker (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated) 
 +[WARN] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated) 
 +[INFO] 1.1.16 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v1 (Automated)
 [INFO]         * File not found [INFO]         * File not found
-[WARN] 1.2.11  - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd +[INFO] 1.1.17 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v2 (Automated)
-[INFO] 1.2.12  Ensure auditing is configured for Docker files and directories /usr/sbin/runc+
 [INFO]         * File not found [INFO]         * File not found
 +[WARN] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated)
 +[INFO] 1.2 - General Configuration
 +[NOTE] 1.2.1 - Ensure the container host has been Hardened (Manual)
 +[PASS] 1.2.2 - Ensure that the version of Docker is up to date (Manual)
 +[INFO]        * Using 19.03.4, verify is it up to date as deemed necessary
 ... ...
 </file> </file>
Ligne 399: Ligne 513:
 Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**. Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-====4.1 - [WARN] 1.2.1 - Ensure a separate partition for containers has been created====+====[WARN] 1.1.1 - Ensure a separate partition for containers has been created (Automated)====
  
 Par défaut, tous les fichiers de Docker sont stockés dans le répertoire **/var/lib/docker**, y compris toutes les images, tous les conteneurs et tous les volumes. Sur un système hôte n'ayant qu'une seule partition il y a un risque, tous comme le risque lié au répertoire **/var/log/**, que le disque devient saturé. Par défaut, tous les fichiers de Docker sont stockés dans le répertoire **/var/lib/docker**, y compris toutes les images, tous les conteneurs et tous les volumes. Sur un système hôte n'ayant qu'une seule partition il y a un risque, tous comme le risque lié au répertoire **/var/log/**, que le disque devient saturé.
  
-====4.2 - [WARN] 1.2.3  - Ensure auditing is configured for the Docker daemon====+====[WARN] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated)====
  
 <file> <file>
-[WARN] 1.2.4  - Ensure auditing is configured for Docker files and directories - /var/lib/docker +[WARN] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) 
-[WARN] 1.2.5  - Ensure auditing is configured for Docker files and directories - /etc/docker +[WARN] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated) 
-[WARN] 1.2.6  - Ensure auditing is configured for Docker files and directories - docker.service +[WARN] 1.1.- Ensure auditing is configured for Docker files and directories - /etc/docker (Automated) 
-[WARN] 1.2.7  - Ensure auditing is configured for Docker files and directories - docker.socket +[WARN] 1.1.- Ensure auditing is configured for Docker files and directories - docker.service (Automated) 
-[WARN] 1.2.8  - Ensure auditing is configured for Docker files and directories - /etc/default/docker +[WARN] 1.1.- Ensure auditing is configured for Docker files and directories - docker.socket (Automated) 
-[WARN] 1.2.11  - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd+[WARN] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated) 
 +[WARN] 1.1.12 - Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated) 
 +[WARN] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated) 
 +[WARN] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated) 
 +[WARN] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated)
 </file> </file>
  
 Ces avertissements sont présents parce que **auditd** n'est pas installé et parce qu'il n'y a pas de règles spécifiques au daemon Docker et ses répertoires et fichiers associés.  Ces avertissements sont présents parce que **auditd** n'est pas installé et parce qu'il n'y a pas de règles spécifiques au daemon Docker et ses répertoires et fichiers associés. 
 +
 +Editez le fichier **/etc/apt/sources.list** selon l'exemple suivant :
 +
 +<code>
 +root@manager:~/docker-bench-security# vi /etc/apt/sources.list
 +
 +root@manager:~/docker-bench-security# cat /etc/apt/sources.list
 +deb http://archive.debian.org/debian/ stretch main
 +deb-src http://archive.debian.org/debian/ stretch main
 +deb http://archive.debian.org/debian-security stretch/updates main
 +deb-src http://archive.debian.org/debian-security stretch/updates main
 +deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
 +</code>
 +
 +Exécutez la commande **apt-update** :
 +
 +<code>
 +root@manager:~/docker-bench-security# apt update
 +Ign:1 http://archive.debian.org/debian stretch InRelease
 +Atteint:2 http://archive.debian.org/debian-security stretch/updates InRelease
 +Atteint:3 http://archive.debian.org/debian stretch Release
 +Réception de:4 https://download.docker.com/linux/debian stretch InRelease [44,8 kB]
 +44,8 ko réceptionnés en 0s (107 ko/s)                     
 +Lecture des listes de paquets... Fait
 +Construction de l'arbre des dépendances       
 +Lecture des informations d'état... Fait
 +254 packages can be upgraded. Run 'apt list --upgradable' to see them.
 +</code>
  
 Pour installer auditd, utilisez **apt-get** :  Pour installer auditd, utilisez **apt-get** : 
  
 <code> <code>
-root@manager:~/docker-bench-security# apt-get install auditd+root@manager:~/docker-bench-security# apt-get install auditd -y
 </code> </code>
  
Ligne 426: Ligne 572:
 <code> <code>
 root@manager:~/docker-bench-security# vi /etc/audit/rules.d/audit.rules root@manager:~/docker-bench-security# vi /etc/audit/rules.d/audit.rules
 +
 root@manager:~/docker-bench-security# cat /etc/audit/rules.d/audit.rules root@manager:~/docker-bench-security# cat /etc/audit/rules.d/audit.rules
 ## First rule - delete all ## First rule - delete all
Ligne 451: Ligne 598:
 -w /usr/bin/docker-runc -p wa -w /usr/bin/docker-runc -p wa
 -w /usr/bin/containerd -p wa -w /usr/bin/containerd -p wa
 +-w /run/containerd -p wa
 +-w /etc/containerd/config.toml -p wa
 +-w /usr/bin/containerd-shim -p wa
 +-w /usr/bin/runc -p wa
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : L'option **-w** indique **watch** et concerne le fichier qui suit. L'option **-p** journalise les modifications éventuelles. **Important** : L'option **-w** indique **watch** et concerne le fichier qui suit. L'option **-p** journalise les modifications éventuelles.
 </WRAP> </WRAP>
Ligne 482: Ligne 633:
 -w /usr/bin/docker-runc -p wa -w /usr/bin/docker-runc -p wa
 -w /usr/bin/containerd -p wa -w /usr/bin/containerd -p wa
 +-w /run/containerd -p wa
 +-w /etc/containerd/config.toml -p wa
 +-w /usr/bin/containerd-shim -p wa
 +-w /usr/bin/runc -p wa
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** - Pour plus d'information concernant la création de règles personalisées avec auditd, consultez cette **[[https://www.linux.com/tutorials/customized-file-monitoring-auditd/|page]]**. **Important** - Pour plus d'information concernant la création de règles personalisées avec auditd, consultez cette **[[https://www.linux.com/tutorials/customized-file-monitoring-auditd/|page]]**.
 </WRAP> </WRAP>
Ligne 493: Ligne 648:
 root@manager:~/docker-bench-security# ./docker-bench-security.sh  root@manager:~/docker-bench-security# ./docker-bench-security.sh 
 ... ...
-[PASS] 1.2.4  - Ensure auditing is configured for Docker files and directories - /var/lib/docker +[PASS] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) 
-[PASS] 1.2.5  - Ensure auditing is configured for Docker files and directories - /etc/docker +[PASS] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated) 
-[PASS] 1.2.6  - Ensure auditing is configured for Docker files and directories - docker.service +[PASS] 1.1.- Ensure auditing is configured for Docker files and directories - /etc/docker (Automated) 
-[PASS] 1.2.7  - Ensure auditing is configured for Docker files and directories - docker.socket +[PASS] 1.1.- Ensure auditing is configured for Docker files and directories - docker.service (Automated) 
-[PASS] 1.2.8  - Ensure auditing is configured for Docker files and directories - /etc/default/docker +[PASS] 1.1.- Ensure auditing is configured for Docker files and directories - docker.socket (Automated) 
-... +[PASS] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated) 
-[PASS] 1.2.11  - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd+[PASS] 1.1.12 - Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated) 
 +[PASS] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated) 
 +[PASS] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated) 
 +[PASS] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated)
 ... ...
 </code> </code>
Ligne 510: Ligne 668:
 ... ...
 [INFO] 2 - Docker daemon configuration [INFO] 2 - Docker daemon configuration
-[WARN] 2.1  - Ensure network traffic is restricted between containers on the default bridge +[NOTE] 2.1 - Run the Docker daemon as a non-root user, if possible (Manual) 
-[PASS] 2.2  - Ensure the logging level is set to 'info' +[WARN] 2.2 - Ensure network traffic is restricted between containers on the default bridge (Scored) 
-[PASS] 2.3  - Ensure Docker is allowed to make changes to iptables +[PASS] 2.- Ensure the logging level is set to 'info' (Scored) 
-[PASS] 2.4  - Ensure insecure registries are not used +[PASS] 2.- Ensure Docker is allowed to make changes to iptables (Scored) 
-[PASS] 2.5  - Ensure aufs storage driver is not used +[PASS] 2.- Ensure insecure registries are not used (Scored) 
-[INFO] 2.6  - Ensure TLS authentication for Docker daemon is configured+[PASS] 2.- Ensure aufs storage driver is not used (Scored) 
 +[INFO] 2.- Ensure TLS authentication for Docker daemon is configured (Scored)
 [INFO]      * Docker daemon not listening on TCP [INFO]      * Docker daemon not listening on TCP
-[INFO] 2.7  - Ensure the default ulimit is configured appropriately+[INFO] 2.- Ensure the default ulimit is configured appropriately (Manual)
 [INFO]      * Default ulimit doesn't appear to be set [INFO]      * Default ulimit doesn't appear to be set
-[WARN] 2.8  - Enable user namespace support +[WARN] 2.- Enable user namespace support (Scored) 
-[PASS] 2.9  - Ensure the default cgroup usage has been confirmed +[PASS] 2.10 - Ensure the default cgroup usage has been confirmed (Scored) 
-[PASS] 2.10  - Ensure base device size is not changed until needed +[PASS] 2.11 - Ensure base device size is not changed until needed (Scored) 
-[WARN] 2.11  - Ensure that authorization for Docker client commands is enabled +[WARN] 2.12 - Ensure that authorization for Docker client commands is enabled (Scored) 
-[WARN] 2.12  - Ensure centralized and remote logging is configured +[WARN] 2.13 - Ensure centralized and remote logging is configured (Scored) 
-[PASS] 2.13  - Ensure live restore is Enabled (Incompatible with swarm mode+[WARN] 2.14 - Ensure containers are restricted from acquiring new privileges (Scored) 
-[WARN] 2.14  - Ensure Userland Proxy is Disabled +[WARN] 2.15 - Ensure live restore is enabled (Scored
-[PASS] 2.15  - Ensure that a daemon-wide custom seccomp profile is applied if appropriate +[WARN] 2.16 - Ensure Userland Proxy is Disabled (Scored) 
-[PASS] 2.16  - Ensure that experimental features are not implemented in production +[PASS] 2.17 - Ensure that a daemon-wide custom seccomp profile is applied if appropriate (Manual) 
-[WARN] 2.17  - Ensure containers are restricted from acquiring new privileges+[PASS] 2.18 - Ensure that experimental features are not implemented in production (Scored)
 ... ...
 </file> </file>
Ligne 534: Ligne 693:
 Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**. Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-====5.1 - [WARN] 2.1  - Ensure network traffic is restricted between containers on the default bridge====+====[WARN] 2.- Ensure network traffic is restricted between containers on the default bridge (Scored)====
  
 Par défaut Docker permet un trafic réseau sans restrictions entre des conteneurs sur le même hôte. Il est cependant possible de modifier la configuration par défaut. Pour empêcher ceci, il faut fixer la valeur de **icc** à **false**. De cette façon, docker crée des conteneurs qui peuvent communiquer entre eux **uniquement** s'il existe un lien. Par défaut Docker permet un trafic réseau sans restrictions entre des conteneurs sur le même hôte. Il est cependant possible de modifier la configuration par défaut. Pour empêcher ceci, il faut fixer la valeur de **icc** à **false**. De cette façon, docker crée des conteneurs qui peuvent communiquer entre eux **uniquement** s'il existe un lien.
Ligne 540: Ligne 699:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/|page]]**.
  
-====5.2 - [WARN] 2.8  - Enable user namespace support====+====[WARN] 2.- Enable user namespace support (Scored)====
  
 Cet avertissement nous indique que l'utilisation des **user namespaces** n'est pas activée. Le support des **user namespaces** du noyau Linux permet d'attribuer une plage d'UIDs et de GIDs unique à un processus et donc à un conteneur, en dehors de la plage traditionnelle utilisée par l'hôte Docker. L'avantage ici est que les processus ayant l'UID de root dans le conteneur seront mappés à un UID sans privilèges dans l'hôte Docker. Pour utiliser user namespace, il faut fixer la valeur de **userns-remap** à **default**. Dans ce cas précis Docker crée un utilisateur dénommé **dockremap**. Notez qu'il est aussi possible de fixer vos propres valeurs avec **"userns-remap": "user:group"**. Cet avertissement nous indique que l'utilisation des **user namespaces** n'est pas activée. Le support des **user namespaces** du noyau Linux permet d'attribuer une plage d'UIDs et de GIDs unique à un processus et donc à un conteneur, en dehors de la plage traditionnelle utilisée par l'hôte Docker. L'avantage ici est que les processus ayant l'UID de root dans le conteneur seront mappés à un UID sans privilèges dans l'hôte Docker. Pour utiliser user namespace, il faut fixer la valeur de **userns-remap** à **default**. Dans ce cas précis Docker crée un utilisateur dénommé **dockremap**. Notez qu'il est aussi possible de fixer vos propres valeurs avec **"userns-remap": "user:group"**.
Ligne 546: Ligne 705:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/userns-remap/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/userns-remap/|page]]**.
  
-====5.3 - [WARN] 2.11  - Ensure that authorization for Docker client commands is enabled====+====[WARN] 2.12 - Ensure that authorization for Docker client commands is enabled (Scored)====
  
 Par défaut, Docker permet un accès sans restrictions aux daemon Docker. Il est possible de restreindre l'accès à des utilisateurs authentifiés en utilisant un plug-in. Cette ligne est sans importance parce que l'accès au socket local Docker est limité aux membres du groupe **docker** (voir DOF202 - La Sécurité de la Configuration de l'Hôte Docker) Par défaut, Docker permet un accès sans restrictions aux daemon Docker. Il est possible de restreindre l'accès à des utilisateurs authentifiés en utilisant un plug-in. Cette ligne est sans importance parce que l'accès au socket local Docker est limité aux membres du groupe **docker** (voir DOF202 - La Sécurité de la Configuration de l'Hôte Docker)
Ligne 552: Ligne 711:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/extend/plugins_authorization/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/extend/plugins_authorization/|page]]**.
  
-====5.4 - [WARN] 2.12  - Ensure centralized and remote logging is configured====+====[WARN] 2.13 - Ensure centralized and remote logging is configured (Scored)====
  
 Cet avertissement indique que la configuration de rsyslog ne permet pas l'envoie des traces vers un serveur de journalisation distant. Elle indique aussi que la valeur de **log-driver** n'a pas été spécifiée. Pour activer cette configuration, il faut fixer la valeur de **log-driver** à **syslog** puis configurer **syslog** ainsi que la valeur de **log-opts** correctement. Cet avertissement indique que la configuration de rsyslog ne permet pas l'envoie des traces vers un serveur de journalisation distant. Elle indique aussi que la valeur de **log-driver** n'a pas été spécifiée. Pour activer cette configuration, il faut fixer la valeur de **log-driver** à **syslog** puis configurer **syslog** ainsi que la valeur de **log-opts** correctement.
Ligne 558: Ligne 717:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/admin/logging/overview/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/admin/logging/overview/|page]]**.
  
-====5.- [WARN] 2.14  - Ensure Userland Proxy is Disabled====+====[WARN] 2.14 Ensure containers are restricted from acquiring new privileges (Scored)==== 
 + 
 +Par défaut un conteneur peut obtenir une escalade de privilèges en utilisant les binaires setuid ou setgid. Pour interdire ceci il faut fixer la valeur de **no-new-privileges** à **true**. 
 + 
 +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**. 
 + 
 +====[WARN] 2.15 - Ensure live restore is enabled (Scored)==== 
 + 
 +L'option --live-restore permet une prise en charge complète des conteneurs sans démon dans Docker. Elle garantit que Docker n'arrête pas les conteneurs lors de l'arrêt ou de la restauration et qu'il se reconnecte correctement au conteneur lors du redémarrage. 
 + 
 +====[WARN] 2.16 - Ensure Userland Proxy is Disabled (Scored)====
  
 Il existe deux méthodes pour qu'un conteneur puisse router vers l'extérieur : Il existe deux méthodes pour qu'un conteneur puisse router vers l'extérieur :
Ligne 569: Ligne 738:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**.
  
-====5.6 - [WARN] 2.17  - Ensure containers are restricted from acquiring new privileges==== +====5.- Le Fichier /etc/docker/daemon.json ====
- +
-Par défaut un conteneur peut obtenir une escalade de privilèges en utilisant les binaires setuid ou setgid. Pour interdire ceci il faut fixer la valeur de **no-new-privileges** à **true**. +
- +
-Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**. +
- +
-====5.7 - Le Fichier /etc/docker/daemon.json ====+
  
 Créez le fichier **/etc/docker/daemon.json** :  Créez le fichier **/etc/docker/daemon.json** : 
Ligne 581: Ligne 744:
 <code> <code>
 root@manager:~/docker-bench-security# vi /etc/docker/daemon.json root@manager:~/docker-bench-security# vi /etc/docker/daemon.json
 +
 root@manager:~/docker-bench-security# cat /etc/docker/daemon.json root@manager:~/docker-bench-security# cat /etc/docker/daemon.json
 { {
Ligne 591: Ligne 755:
 } }
 </code> </code>
- 
-Notez ici que **live-restore** est fixé à **true**. Ceci permet aux conteneurs de continuer à fonctionner même quand le daemon Docker ne fonctionne pas. Ceci est utile pendant la mise-à-jour de Docker. 
  
 Re-démarrez le service Docker : Re-démarrez le service Docker :
Ligne 610: Ligne 772:
  
 <code> <code>
-root@manager:~# cd docker-bench-security/ 
 root@manager:~/docker-bench-security# ./docker-bench-security.sh  root@manager:~/docker-bench-security# ./docker-bench-security.sh 
 ... ...
-[PASS] 2.1  - Ensure network traffic is restricted between containers on the default bridge +[PASS] 2.- Ensure network traffic is restricted between containers on the default bridge (Scored) 
-... +[PASS] 2.3 - Ensure the logging level is set to 'info' (Scored) 
-[PASS] 2.8  - Enable user namespace support +[PASS] 2.4 - Ensure Docker is allowed to make changes to iptables (Scored) 
-... +[PASS] 2.5 - Ensure insecure registries are not used (Scored) 
-[WARN] 2.11  - Ensure that authorization for Docker client commands is enabled +[PASS] 2.6 - Ensure aufs storage driver is not used (Scored) 
-[PASS] 2.12  - Ensure centralized and remote logging is configured +[PASS] 2.- Enable user namespace support (Scored) 
-... +[PASS] 2.10 - Ensure the default cgroup usage has been confirmed (Scored) 
-[PASS] 2.14  - Ensure Userland Proxy is Disabled +[PASS] 2.11 - Ensure base device size is not changed until needed (Scored) 
-... +[PASS] 2.13 - Ensure centralized and remote logging is configured (Scored) 
-[PASS] 2.17  - Ensure containers are restricted from acquiring new privileges+[PASS] 2.14 - Ensure containers are restricted from acquiring new privileges (Scored) 
 +[PASS] 2.15 - Ensure live restore is enabled (Scored) 
 +[PASS] 2.16 - Ensure Userland Proxy is Disabled (Scored) 
 +[PASS] 2.17 - Ensure that a daemon-wide custom seccomp profile is applied if appropriate (Manual) 
 +[PASS] 2.18 - Ensure that experimental features are not implemented in production (Scored)
 ... ...
 </code> </code>
Ligne 633: Ligne 798:
  
 <code> <code>
 +root@manager:~/docker-bench-security# apt install  --only-upgrade docker-ce
 +Lecture des listes de paquets... Fait
 +Construction de l'arbre des dépendances       
 +Lecture des informations d'état... Fait
 +Le paquet suivant a été installé automatiquement et n'est plus nécessaire :
 +  libsasl2-modules
 +Veuillez utiliser « apt autoremove » pour le supprimer.
 +Les paquets suivants seront mis à jour :
 +  docker-ce
 +1 mis à jour, 0 nouvellement installés, 0 à enlever et 252 non mis à jour.
 +Il est nécessaire de prendre 22,7 Mo dans les archives.
 +Après cette opération, 497 ko d'espace disque supplémentaires seront utilisés.
 +Réception de:1 https://download.docker.com/linux/debian stretch/stable amd64 docker-ce amd64 5:19.03.15~3-0~debian-stretch [22,7 MB]
 +22,7 Mo réceptionnés en 0s (26,0 Mo/s)
 +Lecture des fichiers de modifications (« changelog »)... Terminé
 +(Lecture de la base de données... 112865 fichiers et répertoires déjà installés.)
 +Préparation du dépaquetage de .../docker-ce_5%3a19.03.15~3-0~debian-stretch_amd64.deb ...
 +Dépaquetage de docker-ce (5:19.03.15~3-0~debian-stretch) sur (5:19.03.4~3-0~debian-stretch) ...
 +Paramétrage de docker-ce (5:19.03.15~3-0~debian-stretch) ...
 +Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u14) ...
 +
 root@manager:~/docker-bench-security# docker container run -d --name mysql -e MYSQL_ROOT_PASSWORD=password mysql root@manager:~/docker-bench-security# docker container run -d --name mysql -e MYSQL_ROOT_PASSWORD=password mysql
 Unable to find image 'mysql:latest' locally Unable to find image 'mysql:latest' locally
 latest: Pulling from library/mysql latest: Pulling from library/mysql
-80369df48736: Pull complete  +e9f2695d7e5b: Pull complete  
-e8f52315cb10: Pull complete  +80c6055edb33: Pull complete  
-cf2189b391fc: Pull complete  +c646ab461d8b: Pull complete  
-cc98f645c682: Pull complete  +012006c6a591: Pull complete  
-27a27ac83f74: Pull complete  +929d5fa34b95: Pull complete  
-fa1f04453414: Pull complete  +17e0243877fa: Pull complete  
-d45bf7d22d33: Pull complete  +1850b459cd2f: Pull complete  
-3dbac26e409c: Pull complete  +8dceaed53baf: Pull complete  
-9017140fb8c1: Pull complete  +197b834ea1cd: Pull complete  
-b76dda2673ae: Pull complete  +8df78c25b227: Pull complete  
-bea9eb46d12a: Pull complete  +Digest: sha256:ceb98918916bd5261b3e9866ac8271d75d276b8a4db56f1dc190770342a77a9b
-e1f050a38d0f: Pull complete  +
-Digest: sha256:7345ce4ce6f0c1771d01fa333b8edb2c606ca59d385f69575f8e3e2ec6695eee+
 Status: Downloaded newer image for mysql:latest Status: Downloaded newer image for mysql:latest
-54606c03c52c5e3ec0328029d69b869d4b285fb433015576dedc8b8dd4ad0494+e503dd98f88992ae6ed5ec4dcaa2e18982ade8ec74966869515a120763418f74 
 root@manager:~/docker-bench-security# docker ps -a root@manager:~/docker-bench-security# docker ps -a
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                 NAMES +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES 
-54606c03c52c        mysql               "docker-entrypoint.s…"   5 seconds ago       Up 4 seconds               3306/tcp, 33060/tcp   mysql+e503dd98f889        mysql               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        3306/tcp, 33060/tcp   mysql
 </code> </code>
  
Ligne 662: Ligne 847:
 ... ...
 [INFO] 4 - Container Images and Build File [INFO] 4 - Container Images and Build File
-[WARN] 4.1  - Ensure a user for the container has been created+[WARN] 4.1 - Ensure that a user for the container has been created (Automated)
 [WARN]      * Running as root: mysql [WARN]      * Running as root: mysql
-[NOTE] 4.2  - Ensure that containers use only trusted base images +[NOTE] 4.2 - Ensure that containers use only trusted base images (Manual) 
-[NOTE] 4.3  - Ensure that unnecessary packages are not installed in the container +[NOTE] 4.3 - Ensure that unnecessary packages are not installed in the container (Manual) 
-[NOTE] 4.4  - Ensure images are scanned and rebuilt to include security patches +[NOTE] 4.4 - Ensure images are scanned and rebuilt to include security patches (Manual) 
-[WARN] 4.5  - Ensure Content trust for Docker is Enabled +[WARN] 4.5 - Ensure Content trust for Docker is Enabled (Automated) 
-[WARN] 4.6  - Ensure that HEALTHCHECK instructions have been added to container images +[WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images (Automated)
-[WARN]      * No Healthcheck found: [alpine:latest]+
 [WARN]      * No Healthcheck found: [mysql:latest] [WARN]      * No Healthcheck found: [mysql:latest]
-[INFO] 4.7  - Ensure update instructions are not use alone in the Dockerfile +[PASS] 4.7 - Ensure update instructions are not used alone in the Dockerfile (Manual) 
-[INFO]      * Update instruction found: [mysql:latest] +[NOTE] 4.8 - Ensure setuid and setgid permissions are removed (Manual) 
-[NOTE] 4.8  - Ensure setuid and setgid permissions are removed +[PASS] 4.9 - Ensure that COPY is used instead of ADD in Dockerfiles (Manual) 
-[PASS] 4.9  - Ensure that COPY is used instead of ADD in Dockerfiles +[NOTE] 4.10 - Ensure secrets are not stored in Dockerfiles (Manual) 
-[NOTE] 4.10  - Ensure secrets are not stored in Dockerfiles +[NOTE] 4.11 - Ensure only verified packages are installed (Manual) 
-[NOTE] 4.11  - Ensure only verified packages are installed+[NOTE] 4.12 - Ensure all signed artifacts are validated (Manual)
 ... ...
 </code> </code>
  
-====6.1 - [WARN] 4.1  - Ensure a user for the container has been created====+====[WARN] 4.1 - Ensure that a user for the container has been created (Automated)====
  
 Les processus dans le conteneur **mysql** tourne sous l'UID de root. Ceci est l'action par défaut de Docker. Les processus dans le conteneur **mysql** tourne sous l'UID de root. Ceci est l'action par défaut de Docker.
Ligne 686: Ligne 870:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/security/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/security/|page]]**.
  
-====6.2 - [WARN] 4.5  - Ensure Content trust for Docker is Enabled====+====[WARN] 4.5 - Ensure Content trust for Docker is Enabled (Automated)====
  
 Cette ligne indique que le support de Content trust n'a pas été activé. Content trust permet de s'assurer de la provenance des images utilisées car celles-ci sont signées. Cette ligne indique que le support de Content trust n'a pas été activé. Content trust permet de s'assurer de la provenance des images utilisées car celles-ci sont signées.
Ligne 695: Ligne 879:
 root@manager:~/docker-bench-security# echo "DOCKER_CONTENT_TRUST=1" | sudo tee -a /etc/environment root@manager:~/docker-bench-security# echo "DOCKER_CONTENT_TRUST=1" | sudo tee -a /etc/environment
 DOCKER_CONTENT_TRUST=1 DOCKER_CONTENT_TRUST=1
 +
 root@manager:~/docker-bench-security# source /etc/environment root@manager:~/docker-bench-security# source /etc/environment
 </code> </code>
Ligne 701: Ligne 886:
  
 <code> <code>
-root@manager:~/docker-bench-security# docker container start mysql+root@manager:~/docker-bench-security# reboot 
 +Connection to 10.0.2.62 closed by remote host. 
 +Connection to 10.0.2.62 closed. 
 + 
 +root@debian11:~# ssh -l trainee 10.0.2.62 
 +trainee@10.0.2.62's password: trainee 
 +Linux manager.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 
 + 
 +The programs included with the Debian GNU/Linux system are free software; 
 +the exact distribution terms for each program are described in the 
 +individual files in /usr/share/doc/*/copyright. 
 + 
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
 +permitted by applicable law. 
 +Last login: Sun Dec 17 18:39:07 2023 from 10.0.2.46 
 + 
 +trainee@manager:~$ su - 
 +Mot de passe : fenestros 
 + 
 +root@manager:~# cd docker-bench-security/ 
 + 
 +root@manager:~/docker-bench-security# 
 + 
 +root@manager:~/docker-bench-security# docker start mysql
 mysql mysql
-root@manager:~/docker-bench-security# docker ps -a 
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES 
-54606c03c52c        mysql               "docker-entrypoint.s…"   10 minutes ago      Up 2 seconds        3306/tcp, 33060/tcp   mysql 
 </code> </code>
  
Ligne 714: Ligne 919:
 ... ...
 [INFO] 4 - Container Images and Build File [INFO] 4 - Container Images and Build File
-[WARN] 4.1  - Ensure a user for the container has been created+[WARN] 4.1 - Ensure that a user for the container has been created (Automated)
 [WARN]      * Running as root: mysql [WARN]      * Running as root: mysql
-[NOTE] 4.2  - Ensure that containers use only trusted base images +[NOTE] 4.2 - Ensure that containers use only trusted base images (Manual) 
-[NOTE] 4.3  - Ensure that unnecessary packages are not installed in the container +[NOTE] 4.3 - Ensure that unnecessary packages are not installed in the container (Manual) 
-[NOTE] 4.4  - Ensure images are scanned and rebuilt to include security patches +[NOTE] 4.4 - Ensure images are scanned and rebuilt to include security patches (Manual) 
-[PASS] 4.5  - Ensure Content trust for Docker is Enabled +[PASS] 4.5 - Ensure Content trust for Docker is Enabled (Automated) 
-[WARN] 4.6  - Ensure that HEALTHCHECK instructions have been added to container images +[WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images (Automated)
-[WARN]      * No Healthcheck found: [alpine:latest]+
 [WARN]      * No Healthcheck found: [mysql:latest] [WARN]      * No Healthcheck found: [mysql:latest]
-[INFO] 4.7  - Ensure update instructions are not use alone in the Dockerfile +[PASS] 4.7 - Ensure update instructions are not used alone in the Dockerfile (Manual) 
-[INFO]      * Update instruction found: [mysql:latest] +[NOTE] 4.8 - Ensure setuid and setgid permissions are removed (Manual) 
-[NOTE] 4.8  - Ensure setuid and setgid permissions are removed +[PASS] 4.9 - Ensure that COPY is used instead of ADD in Dockerfiles (Manual) 
-[PASS] 4.9  - Ensure that COPY is used instead of ADD in Dockerfiles +[NOTE] 4.10 - Ensure secrets are not stored in Dockerfiles (Manual) 
-[NOTE] 4.10  - Ensure secrets are not stored in Dockerfiles +[NOTE] 4.11 - Ensure only verified packages are installed (Manual) 
-[NOTE] 4.11  - Ensure only verified packages are installed+[NOTE] 4.12 - Ensure all signed artifacts are validated (Manual)
 ... ...
 </code> </code>
Ligne 734: Ligne 938:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/trust/content_trust/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/trust/content_trust/|page]]**.
  
-====6.3 - [WARN] 4.6  - Ensure that HEALTHCHECK instructions have been added to container images====+====[WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images====
  
 Quand une image est construite il est possible d'y mettre un **HEALTHCHECK** dont le statut peut être vérifié par Docker afin de relancer le conteneur si nécessaire.  Quand une image est construite il est possible d'y mettre un **HEALTHCHECK** dont le statut peut être vérifié par Docker afin de relancer le conteneur si nécessaire. 
Ligne 756: Ligne 960:
 ... ...
 [INFO] 5 - Container Runtime [INFO] 5 - Container Runtime
-[WARN] 5.1  - Ensure that, if applicable, an AppArmor Profile is enabled +[WARN] 5.1 - Ensure that, if applicable, an AppArmor Profile is enabled (Automated)
 [WARN]      * No AppArmorProfile Found: mysql [WARN]      * No AppArmorProfile Found: mysql
-[WARN] 5.2  - Ensure that, if applicable, SELinux security options are set+[WARN] 5.2 - Ensure that, if applicable, SELinux security options are set (Automated)
 [WARN]      * No SecurityOptions Found: mysql [WARN]      * No SecurityOptions Found: mysql
-[PASS] 5.3  - Ensure Linux Kernel Capabilities are restricted within containers +[PASS] 5.3 - Ensure that Linux kernel capabilities are restricted within containers (Automated) 
-[PASS] 5.4  - Ensure that privileged containers are not used +[PASS] 5.4 - Ensure that privileged containers are not used (Automated) 
-[PASS] 5.5  - Ensure sensitive host system directories are not mounted on containers +[PASS] 5.5 - Ensure sensitive host system directories are not mounted on containers (Automated) 
-[PASS] 5.6  - Ensure sshd is not run within containers +[PASS] 5.6 - Ensure sshd is not run within containers (Automated) 
-[PASS] 5.7  - Ensure privileged ports are not mapped within containers +[PASS] 5.7 - Ensure privileged ports are not mapped within containers (Automated) 
-[NOTE] 5.8  - Ensure that only needed ports are open on the container +[PASS] 5.8 - Ensure that only needed ports are open on the container (Manual) 
-[PASS] 5.9  - Ensure the host's network namespace is not shared +[PASS] 5.9 - Ensure that the host's network namespace is not shared (Automated) 
-[WARN] 5.10  - Ensure that the memory usage for containers is limited +[WARN] 5.10 - Ensure that the memory usage for containers is limited (Automated) 
-[WARN]      * Container running without memory restrictions: mysql +[WARN]       * Container running without memory restrictions: mysql 
-[WARN] 5.11  - Ensure CPU priority is set appropriately on the container +[WARN] 5.11 - Ensure that CPU priority is set appropriately on containers (Automated) 
-[WARN]      * Container running without CPU restrictions: mysql +[WARN]       * Container running without CPU restrictions: mysql 
-[WARN] 5.12  - Ensure that the container's root filesystem is mounted as read only +[WARN] 5.12 - Ensure that the container's root filesystem is mounted as read only (Automated) 
-[WARN]      * Container running with root FS mounted R/W: mysql +[WARN]       * Container running with root FS mounted R/W: mysql 
-[PASS] 5.13  - Ensure that incoming container traffic is bound to a specific host interface +[PASS] 5.13 - Ensure that incoming container traffic is bound to a specific host interface (Automated) 
-[WARN] 5.14  - Ensure that the 'on-failure' container restart policy is set to '5' +[WARN] 5.14 - Ensure that the 'on-failure' container restart policy is set to '5' (Automated) 
-[WARN]      * MaximumRetryCount is not set to 5: mysql +[WARN]       * MaximumRetryCount is not set to 5: mysql 
-[PASS] 5.15  - Ensure the host's process namespace is not shared +[PASS] 5.15 - Ensure that the host's process namespace is not shared (Automated) 
-[PASS] 5.16  - Ensure the host's IPC namespace is not shared +[PASS] 5.16 - Ensure that the host's IPC namespace is not shared (Automated) 
-[PASS] 5.17  - Ensure that host devices are not directly exposed to containers +[PASS] 5.17 - Ensure that host devices are not directly exposed to containers (Manual) 
-[INFO] 5.18  - Ensure that the default ulimit is overwritten at runtime if needed +[INFO] 5.18 - Ensure that the default ulimit is overwritten at runtime if needed (Manual) 
-[INFO]      * Container no default ulimit override: mysql +[INFO]       * Container no default ulimit override: mysql 
-[PASS] 5.19  - Ensure mount propagation mode is not set to shared +[PASS] 5.19 - Ensure mount propagation mode is not set to shared (Automated) 
-[PASS] 5.20  - Ensure the host's UTS namespace is not shared +[PASS] 5.20 - Ensure that the host's UTS namespace is not shared (Automated) 
-[PASS] 5.21  - Ensure the default seccomp profile is not Disabled +[PASS] 5.21 - Ensure the default seccomp profile is not Disabled (Automated) 
-[NOTE] 5.22  - Ensure docker exec commands are not used with privileged option +[NOTE] 5.22 - Ensure that docker exec commands are not used with the privileged option (Automated) 
-[NOTE] 5.23  - Ensure that docker exec commands are not used with the user=root option +[NOTE] 5.23 - Ensure that docker exec commands are not used with the user=root option (Manual) 
-[PASS] 5.24  - Ensure that cgroup usage is confirmed +[PASS] 5.24 - Ensure that cgroup usage is confirmed (Automated) 
-[WARN] 5.25  - Ensure that the container is restricted from acquiring additional privileges +[PASS] 5.25 - Ensure that the container is restricted from acquiring additional privileges (Automated) 
-[WARN]      * Privileges not restricted: mysql +[WARN] 5.26 - Ensure that container health is checked at runtime (Automated) 
-[WARN] 5.26  - Ensure that container health is checked at runtime +[WARN]       * Health check not set: mysql 
-[WARN]      * Health check not set: mysql +[INFO] 5.27 - Ensure that Docker commands always make use of the latest version of their image (Manual) 
-[INFO] 5.27  - Ensure that Docker commands always make use of the latest version of their image +[WARN] 5.28 - Ensure that the PIDs cgroup limit is used (Automated) 
-[WARN] 5.28  - Ensure that the PIDs cgroup limit is used +[WARN]       * PIDs limit not set: mysql 
-[WARN]      * PIDs limit not set: mysql +[INFO] 5.29 - Ensure that Docker's default bridge 'docker0' is not used (Manual) 
-[INFO] 5.29  - Ensure that Docker's default bridge 'docker0' is not used +[INFO]       * Container in docker0 network: mysql 
-[INFO]      * Container in docker0 network: mysql +[PASS] 5.30 - Ensure that the host's user namespaces are not shared (Automated) 
-[PASS] 5.30  - Ensure that the host's user namespaces are not shared +[PASS] 5.31 - Ensure that the Docker socket is not mounted inside any containers (Automated)
-[PASS] 5.31  - Ensure that the Docker socket is not mounted inside any containers+
 ... ...
 </code> </code>
Ligne 803: Ligne 1006:
 Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**. Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-====7.1 - [WARN] 5.1  - Ensure AppArmor Profile is Enabled====+====[WARN] 5.1 - Ensure that, if applicable, an AppArmor Profile is enabled (Automated)====
  
 Cet avertissement est présent parce que le conteneur n'utilise pas AppArmor. Cet avertissement est présent parce que le conteneur n'utilise pas AppArmor.
Ligne 809: Ligne 1012:
 Pour plus d'informations, consultez cette **[[https://cloud.google.com/container-optimized-os/docs/how-to/secure-apparmor|page]]**. Pour plus d'informations, consultez cette **[[https://cloud.google.com/container-optimized-os/docs/how-to/secure-apparmor|page]]**.
  
-====7.2 - [WARN] 5.2  - Ensure SELinux security options are set, if applicable====+====[WARN] 5.2 - Ensure that, if applicable, SELinux security options are set (Automated)====
  
 Cet avertissement est présent parce que le conteneur n'utilise pas SELinux. Cet avertissement est présent parce que le conteneur n'utilise pas SELinux.
Ligne 815: Ligne 1018:
 Pour plus d'informations, consultez cette **[[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/container_security_guide/docker_selinux_security_policy|page]]**. Pour plus d'informations, consultez cette **[[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/container_security_guide/docker_selinux_security_policy|page]]**.
  
-====7.3 - [WARN] 5.10  - Ensure memory usage for container is limited====+====[WARN] 5.10 - Ensure that the memory usage for containers is limited (Automated)====
  
 Cet avertissement est du au fait que les conteneurs ont automatiquement accès à la totalité de la RAM de l'hôte Docker : Cet avertissement est du au fait que les conteneurs ont automatiquement accès à la totalité de la RAM de l'hôte Docker :
Ligne 831: Ligne 1034:
  
 <code> <code>
-root@manager:~# docker ps -a +root@manager:~/docker-bench-security# docker run -d -p 8081:80 nginx 
-CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                        PORTS                  NAMES +Unable to find image 'nginx:latest' locally 
-b04b2a6f0dd9        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute             0.0.0.0:8081->80/tcp   dazzling_blackburn +sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee: Pulling from library/nginx 
-5b31fe1e13bc        ubuntu              "bash -c ':() { : | …"   14 minutes ago       Exited (254) 13 minutes ago                          pensive_fermat +1f7ce2fa46ab: Pull complete  
-7788c67c3b69        mysql               "docker-entrypoint.s…"   About an hour ago    Exited (255) 18 minutes ago   3306/tcp, 33060/tcp    mysql +9b16c94bb686: Pull complete  
-root@manager:~# docker rm -f b0 +9a59d19f9c5b: Pull complete  
-b0 +9ea27b074f71: Pull complete  
-root@manager:~# docker run -d -p 8081:80 --memory="256m" nginx +c6edf33e2524: Pull complete  
-095472e5096a57277230ff94822d9bd0ad479ad26a33cbf83ec381cdb02910e1 +84b1ff10387b: Pull complete  
-root@manager:~# docker stats +517357831967: Pull complete  
-CONTAINER ID        NAME                     CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS +Digest: sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee 
-095472e5096a        affectionate_goldstine   0.00%               1.805MiB / 256MiB   0.70%               2.38kB / 0B         0B / 0B             2+Status: Downloaded newer image for nginx@sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee 
 +Tagging nginx@sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee as nginx:latest 
 +e14d5112c2feb71e6f37252bcf99d03603d6b7a3e200bff0d55611a0e9a25e2b 
 + 
 +root@manager:~/docker-bench-security# docker stats 
 +CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS 
 +e14d5112c2fe        strange_bassi       0.00%               2.215MiB / 1.957GiB   0.11%               2.16kB / 0B         0B / 0B             2 
 +e503dd98f889        mysql               0.51%               351.3MiB / 1.957GiB   17.53%              5.54kB / 0B         167MB / 118MB       37 
 +^C 
 +</code> 
 + 
 +Supprimez le conteneur et re-créez-le avec une limite de mémoire : 
 + 
 +<code> 
 +root@manager:~/docker-bench-security# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES 
 +e14d5112c2fe        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8081->80/tcp   strange_bassi 
 +e503dd98f889        mysql               "docker-entrypoint.s…"   18 minutes ago       Up 7 minutes        3306/tcp, 33060/tcp    mysql 
 + 
 +root@manager:~/docker-bench-security# docker rm -f e14 
 +e14 
 + 
 +root@manager:~/docker-bench-security# docker run -d -p 8081:80 --memory="256m" nginx 
 +38e91e096c83f7cbe78089617a4d70110bd273f53339f8fed8df2503d3cd65ca 
 + 
 +root@manager:~/docker-bench-security# docker stats 
 +CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS 
 +38e91e096c83        sweet_vaughan       0.00%               2.223MiB / 256MiB     0.87%               2.16kB / 0B         0B / 0B             2 
 +e503dd98f889        mysql               0.49%               351.3MiB / 1.957GiB   17.53%              5.61kB / 0B         167MB / 118MB       37
 ^C ^C
 </code> </code>
Ligne 848: Ligne 1079:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**.
  
-====7.4 - [WARN] 5.11  - Ensure CPU priority is set appropriately on the container====+====[WARN] 5.11 - Ensure that CPU priority is set appropriately on containers (Automated)====
  
 Cet avertissement est du au fait que les conteneurs ont automatiquement accès à tous les CPU de l'hôte Docker. Pour limiter cet accès, plusieurs options sont possibles dont le plus couramment utilisée est **--cpu-shares**. Cet avertissement est du au fait que les conteneurs ont automatiquement accès à tous les CPU de l'hôte Docker. Pour limiter cet accès, plusieurs options sont possibles dont le plus couramment utilisée est **--cpu-shares**.
Ligne 856: Ligne 1087:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**.
  
-====7.5 - [WARN] 5.12  - Ensure the container's root filesystem is mounted as read only====+====[WARN] 5.12 - Ensure that the container's root filesystem is mounted as read only (Automated)====
  
 Afin de minimiser le risque de compromettre un conteneur par la présence de code malicieux, il est conseillé de démarrer les conteneurs en lecture seule, sauf pour les volumes qui nécessitent un accès en écriture/lecture. Afin de minimiser le risque de compromettre un conteneur par la présence de code malicieux, il est conseillé de démarrer les conteneurs en lecture seule, sauf pour les volumes qui nécessitent un accès en écriture/lecture.
Ligne 869: Ligne 1100:
  
 <code> <code>
-root@manager:~/docker-bench-security# docker container diff mysql +root@manager:~/docker-bench-security# docker diff mysql
-A /write_a_file+
 C /run C /run
 C /run/mysqld C /run/mysqld
 +A /run/mysqld/mysqld.pid
 A /run/mysqld/mysqld.sock A /run/mysqld/mysqld.sock
 A /run/mysqld/mysqld.sock.lock A /run/mysqld/mysqld.sock.lock
 A /run/mysqld/mysqlx.sock A /run/mysqld/mysqlx.sock
 A /run/mysqld/mysqlx.sock.lock A /run/mysqld/mysqlx.sock.lock
-A /run/mysqld/mysqld.pid+A /write_a_file
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que la sortie indique les changements apportés au conteneur. **Important** : Notez que la sortie indique les changements apportés au conteneur.
 </WRAP> </WRAP>
Ligne 887: Ligne 1118:
  
 <code> <code>
-root@manager:~/docker-bench-security# docker container stop mysql+root@manager:~/docker-bench-security# docker stop mysql
 mysql mysql
-root@manager:~/docker-bench-security# docker container rm mysql+ 
 +root@manager:~/docker-bench-security# docker rm  mysql
 mysql mysql
 </code> </code>
Ligne 896: Ligne 1128:
  
 <code> <code>
-root@manager:~/docker-bench-security# docker container run -d --name mysql --read-only -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql +root@manager:~/docker-bench-security# docker run -d --name mysql --read-only -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql 
-7788c67c3b692515f63f4659a8f40af397bfbde97485e2e40c500c16b158045b +711ab28bdfb41220c84246c1658bcde398681a78291bbbe7d3bbfd9bc317d41b
-root@manager:~/docker-bench-security# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES +
-7788c67c3b69        mysql               "docker-entrypoint.s…"   5 seconds ago       Up 5 seconds        3306/tcp, 33060/tcp   mysql+
 </code> </code>
  
Ligne 910: Ligne 1139:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez l'erreur **touch: cannot touch '/write_a_file': Read-only file system**. **Important** : Notez l'erreur **touch: cannot touch '/write_a_file': Read-only file system**.
 </WRAP> </WRAP>
Ligne 921: Ligne 1150:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que la commande ne retourne aucune sortie. En effet le conteneur étant en lecture seule, aucun changement ne peut intervenir. **Important** : Notez que la commande ne retourne aucune sortie. En effet le conteneur étant en lecture seule, aucun changement ne peut intervenir.
 </WRAP> </WRAP>
  
-====7.6 - [WARN] 5.14  - Ensure 'on-failure' container restart policy is set to '5'====+====[WARN] 5.14 - Ensure that the 'on-failure' container restart policy is set to '5' (Automated)====
  
 Cet avertissement concerne la politique de re-démarrage du conteneur. La politique **on-failure[:max-retries]** implique que le conteneur est re-démarré en cas d'arrêt du à une erreur qui se manifeste en tant que code de retour autre que zéro. La valeur de **max-retries** est le nombre de fois que Docker va essayer de re-démarrer le conteneur. Cette politique peut être mise en place au démarrage du conteneur, par exemple : Cet avertissement concerne la politique de re-démarrage du conteneur. La politique **on-failure[:max-retries]** implique que le conteneur est re-démarré en cas d'arrêt du à une erreur qui se manifeste en tant que code de retour autre que zéro. La valeur de **max-retries** est le nombre de fois que Docker va essayer de re-démarrer le conteneur. Cette politique peut être mise en place au démarrage du conteneur, par exemple :
Ligne 933: Ligne 1162:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/start-containers-automatically/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/start-containers-automatically/|page]]**.
  
-====7.7 - [WARN] 5.25  - Ensure the container is restricted from acquiring additional privileges==== +====[WARN] 5.26 - Ensure that container health is checked at runtime (Automated)====
- +
-Pour complémenter la configuration précédemment mise en place, il convient de lancer le conteneur en utilisant l'option **--security-opt** : +
- +
-  # docker container run -d --name mysql --read-only --restart on-failure:5 --security-opt="no-new-privileges:true" -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql +
- +
-Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/reference/run/|page]]**. +
- +
-====7.8 - [WARN] 5.26  - Ensure container health is checked at runtime====+
  
 Voir l'avertissement 4.6. Voir l'avertissement 4.6.
  
-====7.9 - [WARN] 5.28  - Ensure PIDs cgroup limit is used====+====[WARN] 5.28 - Ensure that the PIDs cgroup limit is used (Automated)====
  
 Sans l'utilisation de l'option **--pids-limit** un conteneur pourrait être victime d'une attaque de type **[[https://fr.wikipedia.org/wiki/Fork_bomb|Fork Bomb]]**, un type spécifique de dénie de service. Ce type d'attaque peut faire crasher l'hôte Docker et le seul remède est de re-démarrer l'hôte. Voici un exemple d'un Fork Bomb : Sans l'utilisation de l'option **--pids-limit** un conteneur pourrait être victime d'une attaque de type **[[https://fr.wikipedia.org/wiki/Fork_bomb|Fork Bomb]]**, un type spécifique de dénie de service. Ce type d'attaque peut faire crasher l'hôte Docker et le seul remède est de re-démarrer l'hôte. Voici un exemple d'un Fork Bomb :
Ligne 956: Ligne 1177:
  
 <code> <code>
-root@manager:~docker ps -+root@manager:~/docker-bench-security# docker run -u 1000 --pids-limit 100 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done" 
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                 NAMES +Unable to find image 'ubuntu:latest' locally 
-05b11e44e595        ubuntu              "bash -c ':() { : | …"   6 minutes ago       Exited (255) 3 minutes ago                         upbeat_turing +sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b: Pulling from library/ubuntu 
-... +a48641193673: Pull complete  
-root@manager:~# docker rm 05 +Digest: sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b 
-05 +Status: Downloaded newer image for ubuntu@sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b 
-root@manager:~# docker run -u 1000 --pids-limit 100 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"+Tagging ubuntu@sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b as ubuntu:latest 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable
 environment: fork: retry: Resource temporarily unavailable environment: fork: retry: Resource temporarily unavailable
 environment: fork: retry: Resource temporarily unavailable environment: fork: retry: Resource temporarily unavailable
Ligne 969: Ligne 1196:
 environment: fork: retry: Resource temporarily unavailable environment: fork: retry: Resource temporarily unavailable
 environment: fork: retry: Resource temporarily unavailable environment: fork: retry: Resource temporarily unavailable
-^C+^P^Q
 </code> </code>
  
Ligne 977: Ligne 1204:
  
 <code> <code>
-root@manager:~docker ps -+root@manager:~/docker-bench-security# docker rm -f `docker ps -aq` 
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                  NAMES +db5ae43c3e55 
-095472e5096a        nginx               "nginx -g 'daemon of…"   13 minutes ago      Up 13 minutes                 0.0.0.0:8081->80/tcp   affectionate_goldstine +f3b2528fbac0 
-5b31fe1e13bc        ubuntu              "bash -c ':() { : | …"   28 minutes ago      Exited (254) 28 minutes ago                          pensive_fermat +711ab28bdfb4 
-7788c67c3b69        mysql               "docker-entrypoint.s…"   About an hour ago   Exited (255) 33 minutes ago   3306/tcp, 33060/tcp    mysql + 
-root@manager:~# docker stop 095 +root@manager:~/docker-bench-security# docker ps -a 
-095 +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
-root@manager:~# docker rm `docker ps -aq` +
-5b31fe1e13bc +
-7788c67c3b69 +
-095472e5096a +
-root@manager:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES +
 </code> </code>
  
Ligne 995: Ligne 1216:
  
 <code> <code>
-root@manager:~# cd docker-bench-security/ +root@manager:~/docker-bench-security# docker run -d --name mysql --read-only --restart on-failure:5 --security-opt="no-new-privileges:true" --pids-limit 100 --memory="256m" --cpu-shares 512 -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql 
-root@manager:~/docker-bench-security# docker container run -d --name mysql --read-only --restart on-failure:5 --security-opt="no-new-privileges:true" --pids-limit 100 --memory="256m" --cpu-shares 512 -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql +f49d1ffdeae2e83435e8cc3a2e03fb2e0b33e5609d266e5a3403ff8859e5d122 
-df54974ebc11fe357f6e8e9b0f8499aee2658af435e32a45058a1e49fcd3dc24+
 root@manager:~/docker-bench-security# docker ps -a root@manager:~/docker-bench-security# docker ps -a
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
-df54974ebc11        mysql               "docker-entrypoint.s…"   seconds ago       Up seconds        3306/tcp, 33060/tcp   mysql+f49d1ffdeae2        mysql               "docker-entrypoint.s…"   16 seconds ago      Up 15 seconds       3306/tcp, 33060/tcp   mysql
 </code> </code>
  
Ligne 1008: Ligne 1229:
 root@manager:~/docker-bench-security# ./docker-bench-security.sh root@manager:~/docker-bench-security# ./docker-bench-security.sh
 ... ...
-[INFO] 5 - Container Runtime +[PASS] 5.2 - Ensure that, if applicable, SELinux security options are set (Automated) 
-[WARN] 5.1  - Ensure that, if applicable, an AppArmor Profile is enabled  +[PASS] 5.10 - Ensure that the memory usage for containers is limited (Automated) 
-[WARN]      * No AppArmorProfile Found: mysql +[PASS] 5.11 - Ensure that CPU priority is set appropriately on containers (Automated) 
-[PASS] 5.2  - Ensure that, if applicable, SELinux security options are set +[PASS] 5.12 - Ensure that the container's root filesystem is mounted as read only (Automated) 
-[PASS] 5.3  - Ensure Linux Kernel Capabilities are restricted within containers +[PASS] 5.14 - Ensure that the 'on-failure' container restart policy is set to '5' (Automated) 
-[PASS] 5.4  - Ensure that privileged containers are not used +[PASS] 5.28 - Ensure that the PIDs cgroup limit is used (Automated)
-[PASS] 5.5  - Ensure sensitive host system directories are not mounted on containers +
-[PASS] 5.6  - Ensure sshd is not run within containers +
-[PASS] 5.7  - Ensure privileged ports are not mapped within containers +
-[NOTE] 5.8  - Ensure that only needed ports are open on the container +
-[PASS] 5.9  - Ensure the host's network namespace is not shared +
-[PASS] 5.10  - Ensure that the memory usage for containers is limited +
-[PASS] 5.11  - Ensure CPU priority is set appropriately on the container +
-[PASS] 5.12  - Ensure that the container's root filesystem is mounted as read only +
-[PASS] 5.13  - Ensure that incoming container traffic is bound to a specific host interface +
-[PASS] 5.14  - Ensure that the 'on-failure' container restart policy is set to '5' +
-[PASS] 5.15  - Ensure the host's process namespace is not shared +
-[PASS] 5.16  - Ensure the host's IPC namespace is not shared +
-[PASS] 5.17  - Ensure that host devices are not directly exposed to containers +
-[INFO] 5.18  - Ensure that the default ulimit is overwritten at runtime if needed +
-[INFO]      * Container no default ulimit override: mysql +
-[PASS] 5.19  - Ensure mount propagation mode is not set to shared +
-[PASS] 5.20  - Ensure the host's UTS namespace is not shared +
-[PASS] 5.21  - Ensure the default seccomp profile is not Disabled +
-[NOTE] 5.22  - Ensure docker exec commands are not used with privileged option +
-[NOTE] 5.23  - Ensure that docker exec commands are not used with the user=root option +
-[PASS] 5.24  - Ensure that cgroup usage is confirmed +
-[PASS] 5.25  - Ensure that the container is restricted from acquiring additional privileges +
-[WARN] 5.26  - Ensure that container health is checked at runtime +
-[WARN]      * Health check not set: mysql +
-[INFO] 5.27  - Ensure that Docker commands always make use of the latest version of their image +
-[PASS] 5.28  - Ensure that the PIDs cgroup limit is used +
-[INFO] 5.29  - Ensure that Docker's default bridge 'docker0' is not used +
-[INFO]      * Container in docker0 network: mysql +
-[PASS] 5.30  - Ensure that the host's user namespaces are not shared +
-[PASS] 5.31  - Ensure that the Docker socket is not mounted inside any containers+
 ... ...
 </code> </code>
Ligne 1097: Ligne 1288:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez l'erreur **Error: remote trust data does not exist for docker.io/i2tch/docker ...**. En effet Docker Trust empêche l'utilisation des images non-signées. **Important** : Notez l'erreur **Error: remote trust data does not exist for docker.io/i2tch/docker ...**. En effet Docker Trust empêche l'utilisation des images non-signées.
 </WRAP> </WRAP>
Ligne 1271: Ligne 1462:
 <code> <code>
 root@manager:~# mkdir nottrusted root@manager:~# mkdir nottrusted
 +
 root@manager:~# cd nottrusted/ root@manager:~# cd nottrusted/
 +
 root@manager:~/nottrusted# vi Dockerfile root@manager:~/nottrusted# vi Dockerfile
 +
 root@manager:~/nottrusted# cat Dockerfile root@manager:~/nottrusted# cat Dockerfile
 FROM docker/trusttest:latest FROM docker/trusttest:latest
Ligne 1322: Ligne 1516:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez l'utilisation de la même root key que lors du push de l'image **<votre_compte>/docker:alpine** car il s'agit du même repositry.  **Important** : Notez l'utilisation de la même root key que lors du push de l'image **<votre_compte>/docker:alpine** car il s'agit du même repositry. 
 </WRAP> </WRAP>
Ligne 1332: Ligne 1526:
 <code> <code>
 root@manager:~/nottrusted# docker tag <votre_compte>/docker:nottrusted <votre_compte>/otherimage:latest root@manager:~/nottrusted# docker tag <votre_compte>/docker:nottrusted <votre_compte>/otherimage:latest
 +
 root@manager:~/nottrusted# docker images root@manager:~/nottrusted# docker images
 REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
Ligne 1357: Ligne 1552:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez la création d'une deuxième repositry key (ID 7b13d02 au lieu de ID 168c754) lors du push de l'image **<votre_compte>/otherimage:latest** car il s'agit d'un autre repositry.  **Important** : Notez la création d'une deuxième repositry key (ID 7b13d02 au lieu de ID 168c754) lors du push de l'image **<votre_compte>/otherimage:latest** car il s'agit d'un autre repositry. 
 </WRAP> </WRAP>
Ligne 1444: Ligne 1639:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que les clefs utilisées sont les mêmes pour les deux images.  **Important** : Notez que les clefs utilisées sont les mêmes pour les deux images. 
 </WRAP> </WRAP>
Ligne 1485: Ligne 1680:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que les clefs utilisées sont différentes.  **Important** : Notez que les clefs utilisées sont différentes. 
 </WRAP> </WRAP>
Ligne 1525: Ligne 1720:
 </code> </code>
  
-<WRAP center round important>+<WRAP center round important 50%>
 **Important** : Il existe un autre mécanisme de signatures cryptographiques qui permet de certifier le contenu des images mises à disposition sur une Registry. Appelé **Notary**, ce système a été développé par la communauté Docker et intègre une partie de la spécification de **[[https://theupdateframework.io/|The Update Framework]]** (TUF). Pour plus d'informations, consultez cet **[[https://blog.octo.com/la-signature-dimages-docker-sur-une-registry-avec-notary/#:~:text=Notary%20est%20un%20m%C3%A9canisme%20de,environnement%20de%20production%20par%20exemple|article]]**. **Important** : Il existe un autre mécanisme de signatures cryptographiques qui permet de certifier le contenu des images mises à disposition sur une Registry. Appelé **Notary**, ce système a été développé par la communauté Docker et intègre une partie de la spécification de **[[https://theupdateframework.io/|The Update Framework]]** (TUF). Pour plus d'informations, consultez cet **[[https://blog.octo.com/la-signature-dimages-docker-sur-une-registry-avec-notary/#:~:text=Notary%20est%20un%20m%C3%A9canisme%20de,environnement%20de%20production%20par%20exemple|article]]**.
 </WRAP> </WRAP>
Ligne 1644: Ligne 1839:
 </code> </code>
  
-Modifiez l'entrée pour l'adresse 10.0.2.61 dans le fichier **/etc/hosts** du manager :+Modifiez l'entrée pour l'adresse 10.0.2.45 dans le fichier **/etc/hosts** du manager :
  
 <code> <code>
Ligne 1650: Ligne 1845:
 root@manager:~# cat /etc/hosts root@manager:~# cat /etc/hosts
 127.0.0.1 localhost 127.0.0.1 localhost
-10.0.2.60 debian9.i2tch.loc debian9 +10.0.2.46 debian11.i2tch.loc debian11 
-10.0.2.61 myregistry.i2tch.loc    myregistry+10.0.2.45 myregistry.i2tch.loc    myregistry
 10.0.2.62 manager.i2tch.loc manager 10.0.2.62 manager.i2tch.loc manager
 10.0.2.63 worker1.i2tch.loc worker1 10.0.2.63 worker1.i2tch.loc worker1
Ligne 1808: Ligne 2003:
 ====9.5 - Configuration du Client==== ====9.5 - Configuration du Client====
  
-Transférez ensuite le certificat du CA ainsi que le certificat et la clef privée du client vers la VM **debian91** :+Transférez ensuite le certificat du CA ainsi que le certificat et la clef privée du client vers la VM **10.0.2.45** :
  
 <code> <code>
-root@manager:~# scp ca.pem key.pem cert.pem trainee@10.0.2.61:/home/trainee/ +root@manager:~# scp ca.pem key.pem cert.pem trainee@10.0.2.45:/home/trainee/ 
-The authenticity of host '10.0.2.61 (10.0.2.61)' can't be established.+The authenticity of host '10.0.2.45 (10.0.2.45)' can't be established.
 ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE.
 Are you sure you want to continue connecting (yes/no)? yes Are you sure you want to continue connecting (yes/no)? yes
-Warning: Permanently added '10.0.2.61' (ECDSA) to the list of known hosts. +Warning: Permanently added '10.0.2.45' (ECDSA) to the list of known hosts. 
-trainee@10.0.2.61's password: +trainee@10.0.2.45's password: trainee
 ca.pem                                                                                                                                 100% 2163   917.8KB/  00:00     ca.pem                                                                                                                                 100% 2163   917.8KB/  00:00    
 key.pem                                                                                                                                100% 3243     3.0MB/  00:00    key.pem                                                                                                                                100% 3243     3.0MB/  00:00   
Ligne 1822: Ligne 2017:
 </code> </code>
  
-Lancez la commande **docker version** sur la VM **debian91** :+Lancez la commande **docker version** sur la VM **10.0.2.45** :
  
 <code> <code>
Ligne 1877: Ligne 2072:
 </code> </code>
  
-Maintenant la connection est sécurisée par défaut :+Maintenant la connexion est sécurisée par défaut :
  
 <code> <code>
Ligne 1895: Ligne 2090:
 ----- -----
  
-Copyright © 2022 Hugh Norris.+Copyright © 2024 Hugh Norris.
Menu