Docker est devenu un outil indispensable dans les DevOps et le développement modernes. Il vous permet d’isoler l’encerclement, de simplifier la tenue et de mettre à l’échelle rapidement les applications. Cependant, par défaut, Docker a besoin d’une racine, ce qui crée une zone potentiellement dangereuse, qui est souvent ignorée dans les premiers stades.
Pourquoi Docker fonctionne-t-il à Root?
Docker utilise les capacités du Linux: CGroups, des espaces de noms, des iptables, du mont, de la mise en réseau et d’autres fonctions système. Ces opérations ne sont disponibles que pour le super utilisateur.
C’est pourquoi:
* Dockerd Demon commence à partir de la racine,
* Les commandes Docker sont transmises à ce démon.
Cela simplifie le travail et donne un contrôle total sur le système, mais en même temps, il ouvre des vulnérabilités potentielles.
Pourquoi est-il dangereux: Breakout de conteneurs, CVE, RCE
Breakout de conteneur
Avec une isolation faible, un attaquant peut utiliser Chroot ou Pivot_Root pour entrer l’hôte.
Exemples d’attaques réelles:
* CVE-2019-5736-Vulnérabilité à Runc, autorisé à réécrire l’application et à exécuter le code sur l’hôte.
* CVE-2021-3156-Vulnérabilité à Sudo, autorisé à obtenir une racine à l’intérieur du conteneur et à sortir.
RCE (exécution de code distant)
Si l’application dans le conteneur est vulnérable et commence à partir de root, RCE = contrôle complet sur l’hôte.

docker sans racine: solution du problème
Pour minimiser ces risques, le mode sans racine est apparu dans Docker. Dans ce mode, le démon et les conteneurs sont lancés au nom de l’utilisateur habituel, sans aucune privialité racine. Cela signifie que même si un attaquant reçoit le contrôle du conteneur, il ne pourra pas nuire au système hôte.
Il y a des restrictions: vous ne pouvez pas utiliser les ports inférieurs à 1024 (par exemple, 80 et 443), le mode priviled, ainsi que certains modes de réseau, n’est pas disponible. Cependant, dans la plupart des scénarios de développement et Docker sans racine CI / CD, il fait face à sa tâche et augmente considérablement le niveau de sécurité.
Historiquement, lancez à partir de Root – Antipattern
Dès le début, le principe des plus petits privilèges a été appliqué dans le monde Unix / Linux. Moins les droits du processus sont moins élevés, moins il peut faire de mal. Docker a initialement exigé un accès root, mais aujourd’hui, il est considéré comme une menace potentielle.
Sources
https://docs.docker.com/engine/security/rootless/
https://rootlesscontaine.rs/