Améliorez la sécurité de Docker, des Microservices et Conteneurs

sécurité de Docker

Par effet de mode, lobbying technologique ou besoin, les architectures logicielles évoluent. Ainsi, diverses architectures se sont succédé :

  • Monolithique.
  • Composant / Objet (DCOM/CORBA)
  • Service (SOA)
  • Micro-services

Chaque mutation apporte son lot d’avantages tout comme son lot de nouveaux défis. Dans cet article, nous allons parcourir les défis liés à la sécurité des Micro-Services et plus particulièrement la sécurité autour de Docker.
L’adoption des micro-services est née d’une volonté d’accroître la modularité et l’agilité des applications mais ils complexifient la sécurisation de nos systèmes d’informations.

Le challenge de la sécurisation des micro-services

Autrefois, il fallait assurer la sécurité d’une unique application. Aujourd’hui, il est nécessaire de protéger une multitude de services ainsi que leurs implémentations. Ils interagissent les uns avec les autres à travers différentes API et flux de données qui voient le jour aussi rapidement qu’ils disparaissent. Plus il y a des services, plus il y a d’éléments exposés aux cyber-attaques ainsi qu’aux mauvaises utilisations.

L’article, écrit par Graham Lea, fait office de référence et de livre blanc pour la sécurisation des micro-services car il établit une liste exhaustive des meilleures pratiques à mettre en oeuvre. Néanmoins, l’article ne décrit pas comment et quels outils utiliser pour appliquer ces règles.

 

Quelle politique de sécurité pour Docker ?

Pour répondre au développement des microservices, l’Industrie Informatique s’est tournée vers l’utilisation des conteneurs et notamment, vers son gestionnaire le plus médiatique : Docker.

Cependant, on ne peut pas auditer un conteneur docker comme un serveur classique :

  • par principe les conteneurs ne sont pas accessibles via ssh.
  • l’isolation des conteneurs ne les rende pas visible depuis le serveur docker.

Il est donc inutile d’utiliser un scanner SAST traditionnel car il est impossible de faire un inventaire des librairies ou même d’avoir accès aux fichiers de configuration des logiciels utilisés par le conteneur.

Néanmoins voici les principaux conseils de sécurité indispensables pour votre environnement docker :

 

La sécurité des images Docker

La mise en place de conteneurs Docker passe par l’utilisation d’images. C’est le premier maillon de la chaîne qu’il va falloir valider, avec une petite révolution : une partie des tests de sécurité qui étaient consacrés aux Ops ont pu être migrés dans la chaîne d’intégration continue des Devs. Ils sont menés lors des opérations de build ou de post- des images.

Ces tests peuvent être exécutés par des services comme ‘Docker scanning service’ de Docker.com, ‘Twistlock Trust’ développé par twistlock.com, ou en utilisant la solution opensource ‘Clair’ de Coreos.com.

Ces solutions d’inspection des conteneurs (Deep Container Inspection, DCI) ont pour but de s’assurer que les outils et logiciels embarqués dans les images utilisées par les conteneurs ne sont pas vulnérables. L’exploitation de vulnérabilités pourrait amener une personne mal intentionnée à prendre le contrôle du conteneur. Elle pourrait alors tenter d’obtenir les droits root (une élévation de privilège) sur l’hôte du conteneur, et/ou tenter de prendre la main sur les conteneurs voisins.

 

La sécurité des images dans Docker Hub

Par simplicité ou besoin de prototypage rapide, vous serez peut être amené à utiliser des images déjà existantes issues de registry.
Il est faut être vigilant car le ‘Docker Hub Registry’ propose une multitude d’images téléchargeables. Préférez toujours les images officielles proposées et validées par Docker. Elles sont mises à jour régulièrement, bien documentées et auditées par le service ‘Docker scanning service’.

Si votre choix doit se porter sur l’utilisation d’une image non officielle, assurez-vous qu’elle ait été suffisamment téléchargée au préalable. Il faut également, consulter les commentaires et vérifier le ‘Dockerfile’ sur github afin de s’assurer que l’image corresponde bien à ce qu’il est indiqué.

Si vous vous préparez à utiliser un registre tiers alors que l’image n’est pas disponible sur Docker Hub, vérifiez sa réputation en vous assurant que la communication établie avec ce nouveau registre se fera de manière sécurisée.

 

La sécurité du socle Docker Engine

Pour exécuter les conteneurs, il vous faut configurer correctement le socle ‘Docker Engine.’

security-dockerDes organismes comme Center for Internet Security (CIS) et Gotham Digital Science ont listé des recommandations à appliquer. Elles sont décrites dans les documents suivants :

Le projet open source ‘docker-bench-security‘ reprend les recommandations du CIS sous forme d’un script à exécuter. Il permet de s’assurer de l’application des bonnes pratiques de sécurité sur la machine hôte exécutant les conteneurs. On retrouve ici les règles du hardening appliquées à Docker, à sa configuration et à la bonne mise en place des security profile (apparmor, seccomp, selinux).

Attention, toutefois car les outils n’automatisent pas l’intégralité des recommandations. Certains tests ne peuvent être évalués que lors d’un audit en fonction de l’environnement déployé et des besoins à couvrir.

 

La sécurité du partage des données

Soyez également vigilant avec le partage des données entre vos conteneurs (Volume dans le langage docker), pour :
ne pas exposer plus d’informations que nécessaire car utiliser des containers c’est aussi pouvoir compartimenter les informations ;
éviter de perdre de l’espace sur le disque du serveur hôte, par exemple l’image elasticsearch qui partage le répertoire /usr/share/elasticsearch/data*

*Ces informations sont disponible au travers des commandes ‘docker volume ls’ et ‘docker volume inspect’.

 

La sécurité de l’écosystème Docker

Il ne faut pas non plus omettre la sécurisation de l’écosystème qui gravite autour de docker : swarm, kubernetes, mesos, nomad, traefik, flocker, etc. Cet écosystème grossit vite, (trop vite) mais heureusement la sécurité est devenue une priorité. A titre d’exemple, la version Docker 1.12 qui intégrait nativement swarm, embarque désormais le mécanisme de chiffrement des échanges en facilitant la génération et le déploiement des certificats entre les noeuds du cluster.
Ainsi, après chaque mise à jour de vos outils docker, faîtes attention au changelog, pour vérifier que de nouvelles fonctionnalités touchant à la sécurité n’ont pas été modifiées.

 

Améliorer la sécurité de Docker est possible

Décriée à ses débuts pour des failles de sécurité importantes (privilèges trop importants, faiblesse du cloisonnement), l’engagement pris par Salomon Hykes et son équipe commence à porter ses fruits.

“Au fur et à mesure que nous grandissons, nous allons poursuivre notre investissement pour renforcer notre équipe de sécurité à travers des contributions, des outils et des processus. Cet investissement fera de Docker un outil plus sûr, l’aidant à devenir un partenaire sûr et fiable pour nos utilisateurs”, DEC.2014

Nous venons de vous présenter les premiers outils et quelques conseils pour vous assurer de la sécurité des infrastructures microservices,
Nous avons rassemblés une partie de ces meilleures pratiques de sécurité dans Elastic Detector pour une automatisation et un déploiement rapides, faites le test et partagez vos commentaires.

 

Test gratuit ici

Ressources :
http://www.grahamlea.com/2015/07/microservices-security-questions/
https://docs.docker.com/docker-cloud/builds/image-scan/
https://www.twistlock.com/
https://github.com/coreos/clair
http://rhelblog.redhat.com/2015/09/03/what-is-deep-container-inspection-dci-and-why-is-it-important/
https://hub.docker.com/explore/
https://github.com/docker/docker-bench-security
https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.11.0_Benchmark_v1.0.0.pdf
https://github.com/GDSSecurity/Docker-Secure-Deployment-Guidelines
http://www.cyberciti.biz/tips/linux-security.html
https://d3oypxn00j2a10.cloudfront.net/assets/img/Docker%20Security/WP_Intro_to_container_security_03.20.2015.pdf

Leave a Reply