Google Chrome dans Docker : l'importance de bien sécuriser ses conteneurs

15 décembre 2022

Noéwen

Cybersécurité Sécurité

Les conteneurs sont de plus en plus utilisés pour empaqueter et déployer des applications. Chez Dawizz, nous utilisons Docker — l'une des solutions de conteneur les plus populaires — pour déployer le plus efficacement la plateforme MyDataCatalogue, que ce soit en SaaS ou On Premise.

Docker présente de nombreux avantages, tels qu'une utilisation plus efficace des ressources, une gestion plus simple des applications et une sécurité renforcée. Bien que Docker soit une technologie pratique, il est important de rester vigilant quant à sa configuration et à l'installation de modules dans les conteneurs.

Puppeteer

Il est parfois utile d'utiliser un navigateur Internet à l'intérieur d'un conteneur. C'est par exemple le cas avec Puppeteer, une bibliothèque très populaire pour contrôler et automatiser le navigateur Chrome. Elle est utilisée par de nombreux développeurs pour créer des scripts permettant d'interagir automatiquement avec les pages web, et souvent utilisée pour réaliser des automatiser des tests, générer des documents ou réaliser des captures d'écran (documentation, comptes rendus PDF, images, graphiques, etc.).

puppeteer logo

Vulnérabilités communes

Tous les systèmes et logiciels et notamment les navigateurs Internet présentent des vulnérabilités. Certaines de ces vulnérabilités peuvent permettre à des personnes malveillantes d'accéder aux fichiers de l'hôte ou d'exécuter des commandes à distance, d'où la nécessité de rester vigilant contre ces types de menaces.

La majorité des vulnérabilités découvertes sont disponibles sur Internet en accès libre sous forme de bases de données de "Common Vulnerabilities and Exposures" (CVE).

Elles contiennent des informations sur l'ensemble des vulnérabilités de sécurité connues et sont généralement utilisées par les professionnels de la sécurité pour identifier et suivre ces vulnérabilités.

Par conséquent, si Puppeteer utilise Chrome, il hérite donc de ses vulnérabilités, qui peuvent potentiellement donner un accès non désiré à votre base de données en réalisant par exemple une capture d'écran d'un site web malveillant.

Recommandations

Bonnes pratiques

Il est essentiel de suivre les bonnes pratiques de sécurité liées à Docker pour se protéger contre ces vulnérabilités. Cela inclut l'utilisation de la dernière version de Docker et la mise à jour régulière de vos images Docker (qui incluent des modules internes, comme Chrome, justement).

Nous vous recommandons vivement de suivre les recommandations de l'ANSSI en matière de bonnes pratiques pour le déploiement de conteneurs Docker. Résumées en 16 points, elles couvrent l'ensemble des aspects importants de la sécurité des conteneurs Docker. L'un des points cruciaux concerne le cloisonnement des conteneurs, en particulier pour votre base de données. Il est en effet important que vos services ne puissent pas interroger votre base de données ou échanger des données avec les autres conteneurs.

Bac à sable

Les navigateurs Internet ont par défaut un mode sandbox qui permet d'isoler les différents processus et composants (voir bande dessinée Google). Si un site est malveillant, il ne pourra pas communiquer avec l'extérieur de cette boîte "sandbox" et sera alors bloqué. Cependant, beaucoup d'applications utilisant Puppeteer désactivent ce paramètre de sécurité par souci de simplicité en utilisant le paramètre no-sandbox. Bien que cette méthode puisse éviter de démarrer le conteneur avec les permissions root (droits d'administrateur), elle désactive complètement le mécanisme de protection sandbox et est donc fortement déconseillée.

D'après les recherches de Jessie Frazelle, la meilleure façon d'utiliser Puppeteer de manière sécurisée avec Docker est d'utiliser l'option seccomp. Cette option permet de limiter les permissions du conteneur à celles nécessaires au bon fonctionnement de Chrome avec un utilisateur non-root (voir Running Puppeteer in Docker).

capture:
  image: capture
  security_opt:
    - seccomp:./chrome.json

Fichier JSON : dotfiles/chrome.json

Si possible, il vaut mieux empêcher l'utilisateur d'interagir avec un site web externe, et donc de n'autoriser que des captures de sites web liées à l'application courante.

Attention de bien vérifier le site capturé en sortie : un site web pourrait très bien disposer d'un paramètre de redirection (exemple : https://example.com?redirect=https://google.fr ou la possibilité par exemple d'afficher une IFrame.

Conclusion

Dans le contexte de MyDataCatalogue, nous veillons à maintenir nos images Docker à jour et avons intégré les règles édictées par l'ANSSI au sein de nos bonnes pratiques. Ces mises à jour sont cruciales pour garantir la sécurité et le bon fonctionnement de notre service.

Enfin, il est important de mettre à jour nos systèmes d'exploitation, téléphones, ordinateurs et navigateurs Internet pour garantir une sécurité optimale. Les mises à jour apportent souvent des correctifs de sécurité pour les vulnérabilités connues et peuvent aider à protéger votre appareil. Il est recommandé de configurer vos appareils pour qu'ils installent automatiquement les mises à jour dès qu'elles sont disponibles.

Nous recommandons également de configurer une tâche planifiée pour vérifier régulièrement si des mises à jour sont disponibles pour les images Docker que vous utilisez et de les installer lorsqu'elles sont disponibles.