Remarque :

Installer Tetragon et configurer TracingPolicies sur Oracle Container Engine for Kubernetes

Introduction

Alors que les outils basés sur eBPF deviennent plus populaires pour les applications cloud natives, ce tutoriel explique comment exécuter Tetragon, un outil basé sur eBPF pour l'observabilité et l'application de la sécurité sur Oracle Cloud Infrastructure (OCI).

Un noyau de système d'exploitation est généralement le meilleur endroit pour observer et influencer un système car il y a très peu de barrières entre l'outil réalisant une fonction et les activités qu'il tente d'observer et d'influencer. L'exécution dans l'espace du noyau permet souvent à un programme d'avoir une surcharge très faible, mais au coût de la sécurité et de la maintenance.

eBPF fournit une méthode permettant d'introduire de nouvelles fonctionnalités pouvant s'exécuter dans un contexte restreint et privilégié sans modifier le code source du noyau ni charger un module de noyau. Il fonctionne essentiellement en créant un paradigme similaire à un langage de programmation basé sur une machine virtuelle. De manière similaire à la façon dont les programmes Java modernes sont compilés en byte-code que la JVM (Java Virtual Machine) compile en code natif à l'aide d'un compilateur JIT pour obtenir des performances natives, les programmes eBPF ont une représentation de code octet. BPF est profondément lié au noyau Linux et le compilateur JIT du noyau compile le code exécutable eBPF en code natif pouvant s'exécuter dans l'espace du noyau.

eBPF utilise un modèle basé sur les événements pour charger les programmes et les programmes eBPF sont écrits pour "hook" dans les événements réseau, les appels système, etc. Lorsqu'un événement auquel un programme eBPF s'accroche a été appelé, le programme eBPF est chargé dans le noyau après vérification et compilation JIT. L'étape de vérification garantit que le programme est exécuté en toute sécurité, dispose des privilèges appropriés et peut être exécuté jusqu'à la fin, tandis que la compilation JIT garantit des performances natives. Dans de nombreux cas, les programmes eBPF sont écrits dans des langues de niveau supérieur et compilés dans la représentation du code octet. Ceux-ci sont ensuite chargés dans un noyau en cours d'exécution après la compilation JIT en fonction des événements auxquels les programmes sont connectés.

Tetragon - Observabilité et application de la sécurité basée sur eBPF

Tetragon est un outil eBPF natif du cloud qui assure l'observabilité et l'application de la sécurité. C'est un élément du projet cilium. Grâce à eBPF, Tetragon peut filtrer et observer les événements et appliquer des stratégies en temps réel sans envoyer d'événements à un agent qui s'exécute en dehors du noyau. Tetragon peut traiter de nombreux cas d'utilisation de sécurité et d'observabilité en filtrant pour des événements tels qu'une charge de travail ouvrant une connexion réseau, accédant à un fichier ou même en démarrant un processus à l'intérieur d'un conteneur. Par exemple, un processus shell démarré dans un conteneur d'application peut être considéré comme un événement de sécurité. Il peut s'agir d'une personne qui tente de résoudre un problème ou d'une activité malveillante, de quelque manière que ce soit, ce qui devrait déclencher une vérification de sécurité pour exclure une attaque sur le système. Il en va de même pour les connexions réseau ouvertes ou la lecture de fichiers. Tetragon peut tracer et filtrer ces activités tout en introduisant peu ou pas de frais généraux et généralement au premier stade que ces événements peuvent être détectés dans le logiciel.

Tetragon convient parfaitement aux charges de travail Kubernetes et s'exécute en tant que daemonset dans chaque noeud du cluster. Tetragon peut alors extraire des métadonnées à partir du serveur d'API Kubernetes et corréler ces métadonnées avec les événements observés dans le noyau de chaque noeud. Tetragon facilite la mise en place de filtres en temps réel pour ces activités et plus encore en utilisant TracingPolicies. TracingPolicy est une ressource personnalisée créée par Tetragon qui permet aux administrateurs et à DevSecOps de créer et de déployer des filtres pour les événements de noyau en tant que ressources Kubernetes. Un élément TracingPolicy peut correspondre aux appels système, aux attributs de processus et aux arguments, et déclencher une action sur les correspondances.

Objectif

Prérequis

Prérequis pour Oracle Linux

OKE utilise Oracle Linux et Tetragon repose sur la prise en charge de BTF (BPF Type Format) dans le noyau. Les noyaux Oracle Linux récents incluent ces noyaux prêts à l'emploi. Par conséquent, les utilisateurs doivent utiliser un noyau 5.4.17-2136.305.3.el7uek ou plus récent. Tetragon ne fournit pas non plus de support pour l'architecture Arm (linux/arm64) et au moment de l'écriture ne fournit que le support x86 (linux/amd64). Si vous disposez de noeuds de bras dans votre cluster OKE, l'ensemble de démon conserve le statut Init:CrashLoopBackOff.

Remarque : les versions récentes des images de noeud OKE sont basées sur des noyaux qui incluent la prise en charge de BTF. Cette mise en garde pour la prise en charge de BTF s'applique uniquement aux clusters dans lesquels le système d'exploitation du noeud n'a pas été mis à jour depuis un certain temps, et non aux clusters nouvellement créés. Si vous n'êtes pas sûr, le meilleur moyen de vérifier si la prise en charge de BTF est de vous connecter via SSH au noeud et d'exécuter ls /sys/kernel/btf, vous devriez voir le noyau (vmlinux) ainsi que les modules répertoriés ici. Notez que les noeuds basés sur Oracle Linux 8 sont préférés pour ce déploiement.

Pour vérifier la version du noyau que vos noeuds sont en cours d'exécution, exécutez uname -a sur le noeud. Si vous exécutez une ancienne version du noyau, vous pouvez mettre à niveau la version sur la configuration du pool de noeuds. Toutefois, cela n'affecte que les noeuds nouvellement créés et les noeuds existants ne sont pas mis à niveau automatiquement pour garantir la continuité des charges de travail susceptibles d'être exécutées sur eux. Vous pouvez suivre le processus de mise à niveau du pool de noeuds pour placer vos noeuds existants dans les versions de noyau les plus récentes.

Le flux d'événements en tant que sortie JSON est détaillé et difficile à comprendre, mais les informations sont denses. Il existe plusieurs façons d'ingérer ces données JSON et d'en dériver des informations analytiques. L'outil CLI tetragon est évident. Isovalent, l'entreprise derrière Cilium et Tetragon propose également un produit commercial complet qui peut analyser et visualiser ces données pour le rendre plus exploitable et plus facile à assimiler.

Tâche 1 : installation de l'interface de ligne de commande tetra

Tâche 2 : configuration de TracingPolicies pour FileAccess et observation du réseau

TracingPolicies sont des ressources personnalisées qui facilitent la configuration de filtres en temps réel pour les événements de noyau. Un TracingPolicy met en correspondance et filtre les appels système pour l'observabilité et déclenche également une action sur ces correspondances. Tetragon propose quelques exemples qui présentent cette capacité et peuvent être utilisés comme point de départ pour configurer votre TracingPolicies.

Comme ces événements sont surveillés directement à partir du noyau, il ajoute très peu de temps système à l'acte de traçage de ces appels et très peu peut être brouillé ou masqué par un acteur malveillant.

Le principal inconvénient de cette approche est que les actions que vous pouvez prendre comme dire, tuer un processus qui lit un fichier est réactionnaire, en ce que nous savons sur l'événement tel qu'il se produit, et pas avant. Pourtant, il est extrêmement puissant de pouvoir disposer d'une solution à faible surcharge pour filtrer et mettre en correspondance les événements au niveau du noyau et de pouvoir créer des stratégies qui peuvent nous aider à les observer et à agir dessus.

Dépannage

Erreur : si vous voyez que les pods Tetragon sont dans un état CrashLoopBackOff, cela peut être dû à deux raisons.

Raison possible : la raison la plus probable est que cela se produit sur les noeuds basés sur Arm, si vous les avez dans votre cluster. Tetragon ne fonctionne pas encore sur Arm.

Résoudre les problèmes :

La deuxième raison peut être que vous avez un ancien noyau sur votre noeud et que la prise en charge de BTF n'est pas incluse. Pour vérifier s'il s'agit effectivement du problème, obtenez les journaux de conteneur pour le conteneur défaillant dans le pod comme décrit ci-dessus. Si l'absence de prise en charge de BTF dans le noyau est le problème, un message d'erreur semblable au suivant s'affiche :

aborting. kernel autodiscovery failed: Kernel version BTF search failed kernel is not included in supported list.
Use --btf option to specify BTF path and/or '--kernel' to specify kernel version

Cela est attendu sur les noeuds dont le système d'exploitation n'a pas été mis à jour récemment ou sur des versions antérieures du système d'exploitation. Pour résoudre ce problème, vous pouvez passer aux dernières images OKE ou de plate-forme basées sur Oracle Linux 8 pour vos noeuds de processus actif. La configuration du pool de noeuds doit être mise à jour avec ce choix et les noeuds mis à niveau après le processus de mise à niveau du pool de noeuds standard.

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation produit, consultez Oracle Help Center.