👩‍🔬 En mars, soulignons le mois de l'histoire des femmes 🙋‍♀️

Potion Bottle Icon Manuel d'alchimie du code Potion Bottle Icon

Sécurité de Kubernetes

1,712 mots - Temps de lecture estimé: 10 minutes

Dans cet article, je vais te présenter plusieurs outils pour améliorer la sécurité de Kubernetes, au niveau de la grappe et des applications encapsulées.

Le 29 octobre 2022, j'ai assisté à une présentation sur la sécurité des installations Kubernetes (prononciation) au Hackfest de Québec, par Magno Logan, qui travaille pour l'entreprise de cybersécurité Trend Micro. Je vais ici te faire un résumé de la présentation accompagné de notes additionnelles. Je veux rendre le sujet le plus accessible possible si tu débutes comme moi !

J'ai commencé à utiliser Kubernetes, plus précisément OpenShift, dans le cadre de mon contrat de professionnel de recherche à l'Université Laval. Notre projet consiste à produire une plateforme d'imagerie médicale sous forme d'un lac de données structurées pour des applications en apprentissage automatique ou en simulation stochastique.

🌘 C'est quoi, justement, Kubernetes ?

Commençons par la base: le conteneur. Un conteneur est un système de fichiers qui représente une version allégie d'un système d'exploitation Linux, mais avec juste ce qu'il faut pour exécuter un seul logiciel. C'est un peu comme une archive Zip tout-en-un, mais pour un logiciel de serveur.

Pour créer et exécuter les conteneurs individuellement, on utilise généralement Docker. Pour en faire fonctionner plusieurs ensemble, on utilise Docker Compose, qui permet de créer un réseau informatique virtuel entre les différents conteneurs. Mais, lorsque vient le temps de mettre plusieurs de ces applications ensemble, ça devient assez complexe.

Imaginons maintenant des certaines d'applications à coordonner ! C'est là qu'intervient Kubernetes.

"Helm" by macieklew is licensed under CC BY-SA 2.0.

Kubernetes, c'est un peu le capitaine d'une flotte de navires. Chaque navire représente un noeud de calcul, ou un serveur. Dans chaque noeud, il y a des déploiements qui contiennent des capsules d'un ou plusieurs conteneurs et des réseaux pour les relier ensemble. Chaque capsule peut aussi avoir ses propres fichiers de configuration, des secrets tels que des clés d'API ou des mots de passe, ainsi que du stockage.

Représentation d'une grappe Kubernetes pour expliquer les différents principes de sécurité. Plan de contrôle, trois noeuds contenant chacun plusieurs capsules.

Tous les composantes d'un même projet sont sous un même espace de noms. Les espaces de noms peuvent être sur un ou plusieurs noeuds de calculs. Leur principale propriété est d'être isolés logiquement les uns des autres. C'est à dire que pour utiliser un service qui se trouve dans un autre espace de nom, il faut passer par le réseau Internet. On pourrait associer un espace de nom à un compte client dans un contexte d'hébergement partagé, par exemple.

Une dernière chose que permet Kubernetes, c'est le passage à l'échelle. Lorsqu'il y a des pics de demande, Kubernetes peut déployer de nouvelles copies d'images d'applications automatiquement.

🌘 L'API de Kubernetes

L'ensemble de Kubernetes est contrôlé de deux façons. La première, c'est au travers de fichiers de configuration YAML. La seconde, c'est par une interface de programmation (API). Cette interface est accessible via des utilitaires en ligne de commandes tels que kubectl, ou au travers de divers langages de programmation, tel que Python. Les détails se trouvent sur cette page: https://kubernetes.io/docs/concepts/overview/kubernetes-api/

Le plan de contrôle est essentiellement un serveur d'API entouré de différentes composantes:

Les capsules ont aussi des composantes:

L'ensemble de ces composantes permettent l'orchestration des différentes applications sur la grappe Kubernetes. Parmi celle-ci, il y a le serveur API et la base de données etcd qui vont être particulièrement ciblées par des attaques.

L'API contient plusieurs objets, qui permettent de manipuler les noeuds, les espaces de noms, les déploiements, les ensembles de réplication, les capsules et les conteneurs. Voici les noms utilisés à l'intérieur:

🌘 Analyser l'état de la sécurité de Kubernetes

Il existe plusieurs ressources pour évalier l'état de la sécurité de Kubernetes, incluant la grappe de calcul et les applications hébergées dans des capsules.

Voici deux ressources assez complète incluant de la documentation et du matériel de formation:

🌘 Vulnérabilités sur des capsules

Une des principaux moyens d'attaquer une grappe Kubernetes est d'entrer dans une capsule, puis de faire des mouvements latéraux vers d'autres capsules appartenant au même espace de noms. Cette tactique est notamment utilisée pour accéder à des ressources de calcul permettant de miner des cryptoactifs.

Un des moyens utilisés pour identifier des grappes potentiellement vulnérable, c'est le moteur de recherche Shodan. Cet outil spécialisé permet de savoir quels services sont installés et accessibles depuis Internet sur tout serveur qui y est connecté. Les identifiants recherchés sont:

Les types de vulnérabilités recherchées sont au niveau des applications web, ou encore de tableaux de bords exposés publiquement, comme c'est le cas chez les principaux fournisseurs infonuagiques Amazon (EKS), Google (GKS) et Azure (AKS). L'objectif est de réussir à obtenir un accès au terminal de la capsule (shell).

Voici quelques outils qui peuvent détecter ces vulnérabilités:

env | grep -i kube
/var/run/secrets/kubernetes.io/

🌘 Vulnérabilités sur la grappe Kubernetes

Il existe quelques outils pour détecter des vulnérabilités au niveau des grappes Kubernetes:

Il y a aussi plusieurs outils pour scanner les images de conteneurs au repos:

Les outils précédents ne pourront pas, par contre, détecter les vulnérabilités qui pourraient avoir été insérées après le déploiement de l'image. Nous avons donc aussi besoin d'outils de détection à l'exécution en temps réel:

🌘 Configuration pour améliorer la sécurité de Kubernetes

Je vais lister ici plusiers pistes à valider pour améliorer la sécurité de Kubernetes, autant au niveau des applications que de la grappe.

🌘 Applications

🌘 etcd

etcd, C'est la base de données utilisée par Kubernetes. Elle n'est pas chiffrée au repos et son contenu est accessible en format texte. On peut activer le chiffrement au repos, mais elle sera moins performante.

Pour protéger etcd, le meilleur moyen est d'appliquer des règles de réseautique pour restreindre au maximum son accès.

🌘 La réseautique de Kubernetes

On peut sécuriser les communications entre les différentes capsules en utilisant des politiques de réseau. Elles peuvent être configurées lors des déploiements.

Sans de bonnes politique réseau dans une grappe kubernetes, une seule application attaquée peut donner un accès complet au réseau à l'intérieur de la grappe, y compris au plan de contrôle.

Le service EKS d'Amazon ne permet pas de configurer des Network Policies. Cependant, il offre l'option de créer des groupes de sécurité pour les capsules. C'est aussi possible de configurer une surveillance accrue en utilisant CloudWatch.

🌘 Pour conclure: niaise pas avec la sécurité de Kubernetes

Voici quelques conseils de base pour conclure cet article:

Abonne-toi au flux RSS pour ne rien manquer.

Étiquettes